diff --git a/contract/.openzeppelin/unknown-31337.json b/contract/.openzeppelin/unknown-31337.json deleted file mode 100644 index f13bee7..0000000 --- a/contract/.openzeppelin/unknown-31337.json +++ /dev/null @@ -1,227 +0,0 @@ -{ - "manifestVersion": "3.2", - "admin": { - "address": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", - "txHash": "0x729886419dfd10d99553a524ef1de92612b2c05396e3cfbabc48930564924ded" - }, - "proxies": [ - { - "address": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0", - "txHash": "0xc8dd28d9ae65474cfbe45dcc55b99690d72a4eaf1b39ea6f5a8d7cd47043d85e", - "kind": "transparent" - } - ], - "impls": { - "5cfdc4f9e85f54112511068b444fcbd0d037a22cea98694d1e52b19ac963498b": { - "address": "0x5FbDB2315678afecb367f032d93F642f64180aa3", - "txHash": "0x839b50d1144d3939baf0ed2e2eb2731afc670d45a735271abc7e5a3e970d6e3f", - "layout": { - "solcVersion": "0.8.17", - "storage": [ - { - "label": "pubKeyToNodeMap", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_struct(NodeInfo)45_storage)", - "contract": "DStorageV1", - "src": "contracts/DStorageV1.sol:6" - }, - { - "label": "nsToShardToSNodeMap", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_string_memory_ptr,t_mapping(t_string_memory_ptr,t_array(t_string_storage)dyn_storage))", - "contract": "DStorageV1", - "src": "contracts/DStorageV1.sol:8" - }, - { - "label": "nsToShard", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_string_memory_ptr,t_array(t_string_storage)dyn_storage)", - "contract": "DStorageV1", - "src": "contracts/DStorageV1.sol:10" - }, - { - "label": "SNODE_COLLATERAL", - "offset": 0, - "slot": "3", - "type": "t_uint256", - "contract": "DStorageV1", - "src": "contracts/DStorageV1.sol:12" - }, - { - "label": "VNODE_COLLATERAL", - "offset": 0, - "slot": "4", - "type": "t_uint256", - "contract": "DStorageV1", - "src": "contracts/DStorageV1.sol:13" - }, - { - "label": "owner", - "offset": 0, - "slot": "5", - "type": "t_address", - "contract": "DStorageV1", - "src": "contracts/DStorageV1.sol:15" - }, - { - "label": "newOwner", - "offset": 0, - "slot": "6", - "type": "t_address", - "contract": "DStorageV1", - "src": "contracts/DStorageV1.sol:16" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_string_storage)dyn_storage": { - "label": "string[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Vote)55_storage)dyn_storage": { - "label": "struct DStorageV1.Vote[]", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_enum(NodeType)66": { - "label": "enum DStorageV1.NodeType", - "members": [ - "VNode", - "SNode", - "DNode" - ], - "numberOfBytes": "1" - }, - "t_enum(SlashResult)59": { - "label": "enum DStorageV1.SlashResult", - "members": [ - "OK", - "Slash", - "Ban" - ], - "numberOfBytes": "1" - }, - "t_enum(VoteAction)62": { - "label": "enum DStorageV1.VoteAction", - "members": [ - "Slash", - "Ban" - ], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_struct(NodeInfo)45_storage)": { - "label": "mapping(address => struct DStorageV1.NodeInfo)", - "numberOfBytes": "32" - }, - "t_mapping(t_string_memory_ptr,t_array(t_string_storage)dyn_storage)": { - "label": "mapping(string => string[])", - "numberOfBytes": "32" - }, - "t_mapping(t_string_memory_ptr,t_mapping(t_string_memory_ptr,t_array(t_string_storage)dyn_storage))": { - "label": "mapping(string => mapping(string => string[]))", - "numberOfBytes": "32" - }, - "t_string_memory_ptr": { - "label": "string", - "numberOfBytes": "32" - }, - "t_string_storage": { - "label": "string", - "numberOfBytes": "32" - }, - "t_struct(NodeInfo)45_storage": { - "label": "struct DStorageV1.NodeInfo", - "members": [ - { - "label": "pubKey", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "walletId", - "type": "t_address", - "offset": 0, - "slot": "1" - }, - { - "label": "nodeType", - "type": "t_enum(NodeType)66", - "offset": 20, - "slot": "1" - }, - { - "label": "pushTokensLocked", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "nodeApiBaseUrl", - "type": "t_string_storage", - "offset": 0, - "slot": "3" - }, - { - "label": "votes", - "type": "t_array(t_struct(Vote)55_storage)dyn_storage", - "offset": 0, - "slot": "4" - }, - { - "label": "slashResult", - "type": "t_enum(SlashResult)59", - "offset": 0, - "slot": "5" - } - ], - "numberOfBytes": "192" - }, - "t_struct(Vote)55_storage": { - "label": "struct DStorageV1.Vote", - "members": [ - { - "label": "ts", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "voter", - "type": "t_address", - "offset": 0, - "slot": "1" - }, - { - "label": "target", - "type": "t_address", - "offset": 0, - "slot": "2" - }, - { - "label": "voteAction", - "type": "t_enum(VoteAction)62", - "offset": 20, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - } - } - } - } - } -} diff --git a/contract/README.md b/contract/README.md deleted file mode 100644 index 7be82e5..0000000 --- a/contract/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Sample Hardhat Project - -This project demonstrates a basic Hardhat use case. It comes with a sample contract, a test for that contract, and a script that deploys that contract. - -Try running some of the following tasks: - -```shell -npx hardhat help -npx hardhat test -REPORT_GAS=true npx hardhat test -npx hardhat node -npx hardhat run scripts/deploy.ts -``` diff --git a/contract/contracts/ValidatorV1.sol b/contract/contracts/ValidatorV1.sol deleted file mode 100644 index b2a6562..0000000 --- a/contract/contracts/ValidatorV1.sol +++ /dev/null @@ -1,329 +0,0 @@ -//SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.17; - - -// a mock interface of a PUSH token; only bare minimum is needed -interface IPush { - // allow spender to spend rawAmount on behalf of the caller - function approve(address spender, uint rawAmount) external returns (bool); - // checks allowance limit set by approve - function allowance(address account, address spender) external view returns (uint); - // transfer allowed tokens (for src) - function transferFrom(address src, address dst, uint rawAmount) external returns (bool); - // transfer allowed tokens (for current contract) - function transfer(address dst, uint rawAmount) external returns (bool); -} - -contract Ownable { - address public owner; - address public newOwner; - - function transferOwnership(address _newOwner) external { - require(_newOwner != owner, "Cannot transfer ownership to the current owner."); - require(msg.sender == owner, "Only the owner can transfer ownership."); - require(_newOwner != address(0), "Cannot transfer ownership to address(0)"); - newOwner = _newOwner; - emit LogTransferOwnership(msg.sender, block.timestamp); - } - - function acceptOwnership() external { - require(msg.sender == newOwner, "Only the new owner can accept the ownership."); - owner = newOwner; - newOwner = address(0); - emit LogAcceptOwnership(msg.sender, block.timestamp); - } - - event LogTransferOwnership(address indexed oldOwner, uint256 timestamp); - event LogAcceptOwnership(address indexed newOwner, uint256 timestamp); - - modifier isOwner() { - require(owner == msg.sender, "Only the owner can call a method"); - _; - } -} - -library SigUtil { - - function getMessageHash(address _to, uint _amount, bytes memory _message, - uint _nonce) internal pure returns (bytes32) { - return keccak256(abi.encodePacked(_to, _amount, _message, _nonce)); - } - - function getEthSignedMessageHash(bytes32 _messageHash) internal pure returns (bytes32) { - /* - Signature is produced by signing a keccak256 hash with the following format: - "\x19Ethereum Signed Message\n" + len(msg) + msg - */ - return - keccak256( - abi.encodePacked("\x19Ethereum Signed Message:\n32", _messageHash) - ); - } - - function recoverSigner( - bytes32 _ethSignedMessageHash, - bytes memory _signature) internal pure returns (address) { - (bytes32 r, bytes32 s, uint8 v) = splitSignature(_signature); - - return ecrecover(_ethSignedMessageHash, v, r, s); - } - - function splitSignature(bytes memory sig) internal pure returns (bytes32 r, bytes32 s, uint8 v) { - require(sig.length == 65, "invalid signature length"); - - assembly { - /* - First 32 bytes stores the length of the signature - - add(sig, 32) = pointer of sig + 32 - effectively, skips first 32 bytes of signature - - mload(p) loads next 32 bytes starting at the memory address p into memory - */ - - // first 32 bytes, after the length prefix - r := mload(add(sig, 32)) - // second 32 bytes - s := mload(add(sig, 64)) - // final byte (first byte of the next 32 bytes) - v := byte(0, mload(add(sig, 96))) - } - - // implicitly return (r, s, v) - } - - // todo remove nonce, remove amount - function verify(address _signer, address _to, uint _amount, bytes memory _message, - uint _nonce, bytes memory signature) internal pure returns (bool) { - bytes32 messageHash = getMessageHash(_to, _amount, _message, _nonce); - bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash); - return recoverSigner(ethSignedMessageHash, signature) == _signer; - } -} - - -contract ValidatorV1 is Ownable { - - uint256 public VNODE_COLLATERAL_IN_PUSH = 100; // todo check the amount - - // X REPORTS -> SLASH , PUNISH $SLASH_COLL_PERCENTAGE - // X SLASHES -> BAN, PUNISH $BAN_COLL_PERCENTAGE - uint32 public REPORT_COUNT_TO_SLASH = 2; - uint32 public SLASH_COLL_PERCENTAGE = 1; - - uint32 public SLASH_COUNT_TO_BAN = 2; - uint32 public BAN_COLL_PERCENTAGE = 10; - - uint32 public MIN_NODES_FOR_REPORT = 2; // todo update this on node join; should be 51% - - - // token storages - IPush pushToken; - - // node colleciton - address[] nodes; - mapping(address => NodeInfo) pubKeyToNodeMap; - uint256 totalStaked; // push tokens owned by this contract; which have an owner - uint256 totalPenalties; // push tokens owned by this contract; comes from penalties - - struct NodeInfo { - address ownerWallet; - address nodeWallet; // eth wallet - NodeType nodeType; - uint256 pushTokensLocked; - string nodeApiBaseUrl; // rest api url for invocation - NodeCounters counters; - NodeStatus status; - } - - struct NodeCounters { - uint16 reportCounter; - uint16 slashCounter; - uint16 banCounter; - } - - struct Vote { - uint256 ts; - address[] voters; // this is not the node which decided to vote, this is the one who reported - // a message, signed by X other nodes - address target; - VoteAction voteAction; - } - - enum NodeStatus { - OK, // this node operates just fine (DEFAULT VALUE) - Reported, // he have a few malicious reports - Slashed, // we already slashed this node at least once (normally we will take -2% of collateral tokens) - Banned // we banned the node and unstaked it's tokens (normally we will take -10% of collateral tokens) - } - - enum VoteAction { - Report - // Slash, - // Ban - } - - enum NodeType { - VNode, // validator - SNode, // storage - DNode // delivery - } - - event NodeAdded(address indexed ownerWallet, address indexed nodeWallet, NodeType nodeType, uint256 pushTokensLocked, string nodeApiBaseUrl); - event NodeStatusChanged(address indexed nodeWallet, NodeStatus nodeStatus, uint256 pushTokensLocked); - - struct VoteMessage { - VoteAction vote; - address target; - } - - /* METHODS */ - - function decodeVoteMessage(bytes memory data) private pure returns (VoteMessage memory) { - (VoteAction vote, address target) = abi.decode(data, (VoteAction, address)); - VoteMessage memory result; - result.vote = vote; - result.target = target; - return result; - } - - constructor(address _pushToken) { - require(_pushToken != address(0)); - owner = msg.sender; - pushToken = IPush(_pushToken); - } - - // Registers a new validator node - // Locks PUSH tokens ($_token) with $_collateral amount. - // A node will run from a _nodeWallet - function registerNodeAndStake(uint256 _pushTokensLocked, - NodeType _nodeType, string memory _nodeApiBaseUrl, address _nodeWallet) public { - uint256 coll = _pushTokensLocked; - if (_nodeType == NodeType.VNode) { - require(coll >= VNODE_COLLATERAL_IN_PUSH, "Insufficient collateral for VNODE"); - } else { - revert("unsupported nodeType "); - } - NodeInfo storage old = pubKeyToNodeMap[_nodeWallet]; - if (old.ownerWallet != address(0)) { - revert("a node with pubKey is already defined"); - } - // check that collateral is allowed to spend - uint256 allowed = pushToken.allowance(msg.sender, address(this)); - require(allowed >= _pushTokensLocked, "_pushTokensLocked cannot be transferred, check allowance"); - // new mapping - NodeInfo memory n; - n.ownerWallet = msg.sender; - n.nodeWallet = _nodeWallet; - n.nodeType = _nodeType; - n.pushTokensLocked = coll; - n.nodeApiBaseUrl = _nodeApiBaseUrl; - nodes.push(_nodeWallet); - pubKeyToNodeMap[_nodeWallet] = n; - // take collateral - pushToken.transferFrom(msg.sender, address(this), coll); - totalStaked += coll; - // post actions - MIN_NODES_FOR_REPORT = (uint32)(1 + (nodes.length / 2)); - emit NodeAdded(msg.sender, _nodeWallet, _nodeType, coll, _nodeApiBaseUrl); - } - - - - // N attesters can request to report malicious activity for a specific node - // lifecycle: report x 2 -> slash x 2 -> ban - // if all prerequisites match - the contract will execute - function reportNode(address[] memory _nodeIdsReported, bytes memory _signedMessageByAllNodes, - bytes[] memory _signatures, address _target) external { - for (uint i = 0; i < _signatures.length; i++) { - bool valid = SigUtil.verify(_nodeIdsReported[i], address(0), 0, _signedMessageByAllNodes, 0, _signatures[i]); - require(valid, "invalid signature"); - } - require(_signatures.length >= MIN_NODES_FOR_REPORT, "not enough signatures for a message"); - VoteMessage memory vm = decodeVoteMessage(_signedMessageByAllNodes); - doReportNode(_nodeIdsReported, vm); - } - - // Complain on an existing node; also slashes if the # of complains meet the required threshold - function doReportNode(address[] memory _nodeIdsReported, VoteMessage memory _vm) private { - NodeInfo storage voterNode = pubKeyToNodeMap[msg.sender]; - if (voterNode.nodeWallet == address(0)) { - revert("a node with _voterPubKey does not exists"); - } - NodeInfo storage targetNode = pubKeyToNodeMap[_vm.target]; - if (targetNode.nodeWallet == address(0)) { - revert("a node with _targetPubKey does not exists"); - } - NodeCounters memory counters = targetNode.counters; - NodeStatus ns = targetNode.status; - // 2 check count - if (_vm.vote == VoteAction.Report) { - targetNode.counters.reportCounter = ++counters.reportCounter; - } else { - revert("unsupported"); - } - if (ns == NodeStatus.OK) { - if (counters.reportCounter > REPORT_COUNT_TO_SLASH) { - // do Slash - targetNode.status = NodeStatus.Slashed; - targetNode.counters.reportCounter = 0; - doSlash(targetNode); - } - } else if (ns == NodeStatus.Slashed) { - if (counters.slashCounter > SLASH_COUNT_TO_BAN) { - // do Ban - targetNode.status = NodeStatus.Banned; - targetNode.counters.slashCounter = 0; - doBan(targetNode); - } - } else if (ns == NodeStatus.Banned) { - // do nothing; terminal state - } - } - - /* - Returns remaining collateral - */ - function reduceCollateral(address _nodeWallet, uint32 _percentage) private returns (uint256) { - require(_nodeWallet != address(0)); - require(_percentage >= 0 && _percentage <= 100, "percentage should be in [0, 100]"); - // reduce only pushTokensLocked; we do not transfer any tokens; it will affect only 'unstake' - NodeInfo storage node = pubKeyToNodeMap[_nodeWallet]; - uint256 currentAmount = node.pushTokensLocked; - uint256 newAmount = (currentAmount * (100 - _percentage)) / 100; - uint256 delta = currentAmount - newAmount; - node.pushTokensLocked = newAmount; - totalStaked -= delta; - totalPenalties += delta; - return newAmount; - } - - /* - Returns unstaked amount - */ - function unstake(address _nodeWallet) private returns (uint256){ - require(_nodeWallet != address(0)); - NodeInfo storage node = pubKeyToNodeMap[_nodeWallet]; - uint256 delta = node.pushTokensLocked; - pushToken.transfer(node.ownerWallet, delta); - node.pushTokensLocked = 0; - totalStaked -= delta; - return delta; - } - - function getNodeInfo(address _nodeWallet) public view returns (NodeInfo memory) { - return pubKeyToNodeMap[_nodeWallet]; - } - - function doSlash(NodeInfo storage targetNode) private { - uint256 coll = reduceCollateral(targetNode.nodeWallet, SLASH_COLL_PERCENTAGE); - emit NodeStatusChanged(targetNode.nodeWallet, NodeStatus.Slashed, coll); - } - - function doBan(NodeInfo storage targetNode) private { - reduceCollateral(targetNode.nodeWallet, BAN_COLL_PERCENTAGE); - uint256 delta = unstake(targetNode.nodeWallet); - emit NodeStatusChanged(targetNode.nodeWallet, NodeStatus.Banned, delta); - } - -} \ No newline at end of file diff --git a/contract/hardhat.config.ts b/contract/hardhat.config.ts deleted file mode 100644 index c242e4a..0000000 --- a/contract/hardhat.config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { HardhatUserConfig } from "hardhat/config"; -require('@openzeppelin/hardhat-upgrades'); -require('@nomiclabs/hardhat-etherscan') -import "@nomicfoundation/hardhat-toolbox"; -require("dotenv").config(); - -const config: HardhatUserConfig = { - solidity: "0.8.17", - networks: { - goerli: { - url: `https://eth-goerli.alchemyapi.io/v2/${process.env.ALCHEMY_API_KEY}`, - accounts: [process.env.PRIVATE_KEY || ""] - } - }, - etherscan: { - apiKey: process.env.ETHERSCAN_API_KEY - } -}; - -export default config; diff --git a/contract/scripts/deploy.ts b/contract/scripts/deploy.ts deleted file mode 100644 index 6764a27..0000000 --- a/contract/scripts/deploy.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { ethers } from "hardhat"; - -async function main() { - - require("dotenv").config(); - - const PushToken = await ethers.getContractFactory("PushToken"); - const pushToken = await PushToken.deploy(); - - await pushToken.deployed(); - - const TokenAddress = process.env.TOKEN_ADDRESS; - const DStorageV1 = await ethers.getContractFactory("DStorageV1"); - const dstoragev1 = await DStorageV1.deploy( pushToken?.address || TokenAddress || "0x0"); - - await dstoragev1.deployed(); - - console.log("PushToken contract is deployed to:", pushToken.address); - console.log(`DStorageV1 contract is deployed to ${dstoragev1.address}`); -} - -// 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/contract/test/DStorageTest.ts b/contract/test/DStorageTest.ts deleted file mode 100644 index e9189a2..0000000 --- a/contract/test/DStorageTest.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { time, loadFixture } from "@nomicfoundation/hardhat-network-helpers"; -import { anyValue } from "@nomicfoundation/hardhat-chai-matchers/withArgs"; -import "@nomicfoundation/hardhat-chai-matchers"; -import "@nomiclabs/hardhat-ethers"; -import { expect } from "chai"; -import { ethers } from "hardhat"; - -describe("DSTorageV1", function () { - // We define a fixture to reuse the same setup in every test. - // We use loadFixture to run this setup once, snapshot that state, - // and reset Hardhat Network to that snapshot in every test. - async function deployDStorageandToken() { - // Contracts are deployed using the first signer/account by default - const [owner, otherAccount, thirdAccount] = await ethers.getSigners(); - - const PushToken = await ethers.getContractFactory("PushToken"); - const pushToken = await PushToken.deploy(); - - const DStorageV1 = await ethers.getContractFactory("DStorageV1"); - const dstoragev1 = await DStorageV1.deploy(pushToken.address); - - await pushToken.mint(owner.address, ethers.utils.parseEther("100")); - await pushToken.approve(dstoragev1.address, ethers.utils.parseEther("1000000000000000")); - - return { pushToken, dstoragev1 , owner, otherAccount, thirdAccount }; - } - - describe("Deployment", function () { - it("Should deploy DSTorageV1 and PushToken", async function () { - const { pushToken, dstoragev1 } = await loadFixture(deployDStorageandToken); - - // Check that the DSTorageV1 contract was deployed - expect(dstoragev1.address).to.be.properAddress; - - // Check that the PushToken contract was deployed - expect(pushToken.address).to.be.properAddress; - }); - - it("Should mint Push tokens to address", async function(){ - const { pushToken, dstoragev1, owner } = await loadFixture(deployDStorageandToken); - - //mint 100 tokens to owner - await pushToken.mint(owner.address, ethers.utils.parseEther("100")); - - // Check that the owner has 100 Push tokens - expect(await pushToken.balanceOf(owner.address)).greaterThan(ethers.utils.parseEther("0")); - }); - }); - - describe("Registering SNodes", function () { - it("User should be able to register SNode if collateral is sufficient",async function(){ - const { pushToken, dstoragev1, owner } = await loadFixture(deployDStorageandToken); - expect(await dstoragev1.registerNode(owner?.address,1,"http://snode1:3000",60)).to.emit(dstoragev1, "NodeAdded").withArgs(owner?.address,'SNode',"http://snode1:3000"); - }) - - it("User should be not able to register SNode if collateral is not sufficient",async function(){ - const { pushToken, dstoragev1, owner } = await loadFixture(deployDStorageandToken); - await expect(dstoragev1.registerNode(owner?.address,1,"http://snode1:3000",50)).to.be.revertedWith('Insufficient collateral for SNODE'); - }) - it("Registering Snodes not possible with same pubkey", async function(){ - const { pushToken, dstoragev1, owner } = await loadFixture(deployDStorageandToken); - console.log("Deploying a SNode from : ",owner?.address); - expect(await dstoragev1.registerNode(owner?.address,1,"http://snode1:3000",60)).to.emit(dstoragev1, "NodeAdded").withArgs(owner?.address,'SNode',"http://snode1:3000"); - console.log("Trying to deploy another SNode from : ",owner?.address); - await expect(dstoragev1.registerNode(owner?.address,1,"http://snode1:3000",60)).to.emit(dstoragev1, "NodeAdded").to.be.revertedWith('a node with pubKey is already defined'); - }) - }); - - describe("Registering VNodes", function () { - - it("User should be able to register VNode",async function(){ - const { pushToken, dstoragev1, owner } = await loadFixture(deployDStorageandToken); - expect(await dstoragev1.registerNode(owner?.address,0,"http://vnode1:4000",100)).to.emit(dstoragev1, "NodeAdded").withArgs(owner?.address,0,"http://vnode1:4000"); - }) - - it("User should not be able to register VNode if collateral is insufficient",async function(){ - const { pushToken, dstoragev1, owner } = await loadFixture(deployDStorageandToken); - await expect(dstoragev1.registerNode(owner?.address,0,"http://vnode1:4000",60)).to.emit(dstoragev1, "NodeAdded").to.be.revertedWith('Insufficient collateral for VNODE'); - }) - - it("Registering Vnodes not possible with same pubkey", async function(){ - const { pushToken, dstoragev1, owner } = await loadFixture(deployDStorageandToken); - console.log("Deploying a SNode from : ",owner?.address); - expect(await dstoragev1.registerNode(owner?.address,0,"http://vnode1:4000",100)).to.emit(dstoragev1, "NodeAdded").withArgs(owner?.address,'VNode',"http://vnode1:4000"); - console.log("Trying to deploy another SNode from : ",owner?.address); - await expect(dstoragev1.registerNode(owner?.address,0,"http://vnode1:4000",100)).to.emit(dstoragev1, "NodeAdded").to.be.revertedWith('a node with pubKey is already defined'); - - }); - }); - - describe("Transfer contract ownership", function (){ - it("Transfer ownership if the new owner is different", async function (){ - const { pushToken, dstoragev1, owner, otherAccount } = await loadFixture(deployDStorageandToken); - console.log("Old Owner : ",await dstoragev1.owner()); - await expect(dstoragev1.transferOwnership(otherAccount.address)).to.emit(dstoragev1, "LogTransferOwnership"); - console.log("Ownership to be transferred to : ",await dstoragev1.newOwner()); - }); - - it("Transfer ownership is not possible if the new owner is same as old owner", async function (){ - const { pushToken, dstoragev1, owner, otherAccount } = await loadFixture(deployDStorageandToken); - await expect(dstoragev1.transferOwnership(owner.address)).to.be.revertedWith('Cannot transfer ownership to the current owner.'); - }); - - it("Transfer ownership is not possible if the new owner is zero address", async function (){ - const { pushToken, dstoragev1, owner, otherAccount } = await loadFixture(deployDStorageandToken); - await expect(dstoragev1.transferOwnership(ethers.constants.AddressZero)).to.be.revertedWith('Cannot transfer ownership to address(0)'); - }) - - it("Transfer is only possible by the owner", async function (){ - const { pushToken, dstoragev1, owner, otherAccount } = await loadFixture(deployDStorageandToken); - await expect(dstoragev1.connect(otherAccount).transferOwnership(otherAccount.address)).to.be.revertedWith('Only the owner can transfer ownership.'); - }); - }); - - describe("Accepting ownership", function (){ - it("Accepting ownership is only possible by the new owner", async function (){ - const { pushToken, dstoragev1, owner, otherAccount } = await loadFixture(deployDStorageandToken); - await expect(dstoragev1.transferOwnership(otherAccount.address)).to.emit(dstoragev1, "LogTransferOwnership"); - await expect(dstoragev1.connect(otherAccount).acceptOwnership()).to.emit(dstoragev1, "LogAcceptOwnership"); - }); - - it("Accepting ownership is not possible by any other address", async function (){ - const { pushToken, dstoragev1, owner, otherAccount, thirdAccount } = await loadFixture(deployDStorageandToken); - await expect(dstoragev1.transferOwnership(otherAccount.address)).to.emit(dstoragev1, "LogTransferOwnership"); - await expect(dstoragev1.connect(thirdAccount).acceptOwnership()).to.be.revertedWith('Only the new owner can accept the ownership.'); - }); - }); - -}); \ No newline at end of file diff --git a/contract/test/ValidatorContractTest.ts b/contract/test/ValidatorContractTest.ts deleted file mode 100644 index 382cb4b..0000000 --- a/contract/test/ValidatorContractTest.ts +++ /dev/null @@ -1,39 +0,0 @@ -import {time, loadFixture} from "@nomicfoundation/hardhat-network-helpers"; -import {anyValue} from "@nomicfoundation/hardhat-chai-matchers/withArgs"; -import "@nomicfoundation/hardhat-chai-matchers"; -import "@nomiclabs/hardhat-ethers"; -import {expect} from "chai"; -import {ethers} from "hardhat"; -import {PushToken, ValidatorV1} from "../typechain-types"; -import {SignerWithAddress} from "@nomiclabs/hardhat-ethers/signers"; - - - -async function chain1():Promise<{ pushContract:PushToken, valContract:ValidatorV1, owner:SignerWithAddress }> { - // Contracts are deployed using the first signer/account by default - const [owner, otherAccount, thirdAccount] = await ethers.getSigners(); - - const ptFactory = await ethers.getContractFactory("PushToken"); - const pushC = await ptFactory.deploy(); - - const valFactory = await ethers.getContractFactory("ValidatorV1"); - const valC = await valFactory.deploy(pushC.address); - - await pushC.mint(owner.address, ethers.utils.parseEther("100")); - await pushC.approve(valC.address, ethers.utils.parseEther("1000000000000000")); - - return {pushContract: pushC, valContract: valC, owner}; -} - -describe("ValidatorTest", function () { - it("Should deploy DSTorageV1 and PushToken", test1) -}); - -async function test1() { - console.log("ValidatorTest"); - let state = await loadFixture(chain1); - expect(state.pushContract.address).to.be.properAddress; - expect(state.valContract.address).to.be.properAddress; - console.log(`push contract at `, state.pushContract.address); - console.log(`validator contract at `, state.valContract.address); -} \ No newline at end of file diff --git a/dstorage-common/package-lock.json b/dstorage-common/package-lock.json index 8c86f32..1cd8d1b 100644 --- a/dstorage-common/package-lock.json +++ b/dstorage-common/package-lock.json @@ -5,6 +5,7 @@ "requires": true, "packages": { "": { + "name": "dstorage-common", "version": "1.0.0", "license": "ISC", "dependencies": { diff --git a/dstorage-common/src/util/envLoader.ts b/dstorage-common/src/util/envLoader.ts deleted file mode 100644 index 36da4e8..0000000 --- a/dstorage-common/src/util/envLoader.ts +++ /dev/null @@ -1,22 +0,0 @@ -import dotenv from 'dotenv'; -import StrUtil from "./strUtil"; - -export default class EnvLoader { - - public static loadEnvOrFail() { - // TODO figure out why this crashes , and why it works without .config() call - // const envFound = dotenv.config(); - // if (envFound.error) { - // // This error should crash whole process - // throw new Error("⚠️ Couldn't find .env file ⚠️"); - // } - } - - public static getPropertyOrFail(propName:string):string { - let val = process.env[propName]; - if(StrUtil.isEmpty(val)) { - throw new Error(`process.env.${propName} is empty`); - } - return val; - } -} \ No newline at end of file diff --git a/contract/.env.example b/smart-contracts/.env.example similarity index 100% rename from contract/.env.example rename to smart-contracts/.env.example diff --git a/contract/.gitignore b/smart-contracts/.gitignore similarity index 100% rename from contract/.gitignore rename to smart-contracts/.gitignore diff --git a/contract/.keepfolderalive b/smart-contracts/.keepfolderalive similarity index 100% rename from contract/.keepfolderalive rename to smart-contracts/.keepfolderalive diff --git a/contract/.openzeppelin/goerli.json b/smart-contracts/.openzeppelin/goerli.json similarity index 100% rename from contract/.openzeppelin/goerli.json rename to smart-contracts/.openzeppelin/goerli.json diff --git a/smart-contracts/README.md b/smart-contracts/README.md new file mode 100644 index 0000000..994551e --- /dev/null +++ b/smart-contracts/README.md @@ -0,0 +1,60 @@ +# Validator contract + +## 1 How to run tests (uses embedded EVM, it resets for every test case) +all tests +```shell +npx hardhat test +``` + +Storage.sol tests +```shell +# for normal tests +npx hardhat test --grep StorageTestAutoRf +npx hardhat test --grep StorageTestNoAutoRf +# for fuzzy tests (takes 5-15min) +StorageTestBig=true npx hardhat test --grep StorageTestBig +``` + +## 2 How to set up the local env + +Run an empty local hardhat EVM as a DEDICATED SEPARATE PROCESS +```shell +export PRIVATE_KEY=[YOUR KEY] +npx hardhat node +``` + +Deploy Push contract and validator contract + +```shell +# compile everything +npx hardhat compile +# deploy a test PUSH token an put the result address into a variable +npx hardhat --network localhost v:deployTestPushTokenCt +export PUSH_CT=0x5FbDB2315678afecb367f032d93F642f64180aa3 // example address +# deploy Validator and puth the result (proxy) address into a variable +npx hardhat --network localhost v:deployValidatorCt $PUSH_CT +export VAL_CT=0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9 // example address + +# for contract updates only (using proxy!) +npx hardhat --network localhost v:updateValidatorCt $VAL_CT + +# to register 3 validator nodes +npx hardhat --network localhost v:registerValidator --validator-proxy-ct $VAL_CT --push-ct $PUSH_CT 8e12de12c35eabf35b56b04e53c4e468e46727e8 "http://localhost:4001" 101 +npx hardhat --network localhost v:registerValidator --validator-proxy-ct $VAL_CT --push-ct $PUSH_CT fdaeaf7afcfbb4e4d16dc66bd2039fd6004cfce8 "http://localhost:4002" 102 +npx hardhat --network localhost v:registerValidator --validator-proxy-ct $VAL_CT --push-ct $PUSH_CT 98f9d910aef9b3b9a45137af1ca7675ed90a5355 "http://localhost:4003" 103 + +# to register 1 delivery node +npx hardhat --network localhost v:registerDelivery --validator-proxy-ct $VAL_CT --push-ct $PUSH_CT 816adec240b4744a1e1e112d0411cafb8f256183 200 + + +# check what has been registered +npx hardhat --network localhost v:listNodes --validator-proxy-ct $VAL_CT +``` + +Info commands +```shell +# show balance in PUSH tokens for Validator contract +npx hardhat --network localhost push:balanceOf --push-ct $PUSH_CT $VAL_CT +# show registered validator nodes +npx hardhat --network localhost v:listNodes --validator-proxy-ct $VAL_CT +``` diff --git a/contract/contracts/PushToken.sol b/smart-contracts/contracts/PushToken.sol similarity index 100% rename from contract/contracts/PushToken.sol rename to smart-contracts/contracts/PushToken.sol diff --git a/smart-contracts/contracts/SigUtil.sol b/smart-contracts/contracts/SigUtil.sol new file mode 100644 index 0000000..5e26e2a --- /dev/null +++ b/smart-contracts/contracts/SigUtil.sol @@ -0,0 +1,61 @@ +//SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.17; + +// a lib that abstracts privKey signature and pubKey+signature checks +library SigUtil { + + function getMessageHash(bytes memory _message) internal pure returns (bytes32) { + return keccak256(abi.encodePacked(_message)); + } + + function getEthSignedMessageHash(bytes32 _messageHash) internal pure returns (bytes32) { + /* + Signature is produced by signing a keccak256 hash with the following format: + "\x19Ethereum Signed Message\n" + len(msg) + msg + */ + return + keccak256( + abi.encodePacked("\x19Ethereum Signed Message:\n32", _messageHash) + ); + } + + function recoverSigner( + bytes32 _ethSignedMessageHash, + bytes memory _signature) internal pure returns (address) { + (bytes32 r, bytes32 s, uint8 v) = splitSignature(_signature); + + return ecrecover(_ethSignedMessageHash, v, r, s); + } + + function splitSignature(bytes memory sig) internal pure returns (bytes32 r, bytes32 s, uint8 v) { + require(sig.length == 65, "invalid signature length"); + + assembly { + /* + First 32 bytes stores the length of the signature + + add(sig, 32) = pointer of sig + 32 + effectively, skips first 32 bytes of signature + + mload(p) loads next 32 bytes starting at the memory address p into memory + */ + + // first 32 bytes, after the length prefix + r := mload(add(sig, 32)) + // second 32 bytes + s := mload(add(sig, 64)) + // final byte (first byte of the next 32 bytes) + v := byte(0, mload(add(sig, 96))) + } + + // implicitly return (r, s, v) + } + + function recoverSignerEx(bytes memory _message, bytes memory _signature + ) external pure returns (address) { + bytes32 messageHash = getMessageHash(_message); + bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash); + return recoverSigner(ethSignedMessageHash, _signature); + } + +} \ No newline at end of file diff --git a/smart-contracts/contracts/SignatureTest.sol b/smart-contracts/contracts/SignatureTest.sol new file mode 100644 index 0000000..e0b2b8f --- /dev/null +++ b/smart-contracts/contracts/SignatureTest.sol @@ -0,0 +1,144 @@ +//SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.17; + + +// a purified signature test +contract SignatureTest { +/* + function verifyString(string memory message, uint8 v, bytes32 r, bytes32 s + ) public pure returns (address signer) { + + // The message header; we will fill in the length next + string memory header = "\x19Ethereum Signed Message:\n000000"; + + uint256 lengthOffset; + uint256 length; + assembly { + // The first word of a string is its length + length := mload(message) + // The beginning of the base-10 message length in the prefix + lengthOffset := add(header, 57) + } + + // Maximum length we support + require(length <= 999999); + + // The length of the message's length in base-10 + uint256 lengthLength = 0; + + // The divisor to get the next left-most message length digit + uint256 divisor = 100000; + + // Move one digit of the message length to the right at a time + while (divisor != 0) { + + // The place value at the divisor + uint256 digit = length / divisor; + if (digit == 0) { + // Skip leading zeros + if (lengthLength == 0) { + divisor /= 10; + continue; + } + } + + // Found a non-zero digit or non-leading zero digit + lengthLength++; + + // Remove this digit from the message length's current value + length -= digit * divisor; + + // Shift our base-10 divisor over + divisor /= 10; + + // Convert the digit to its ASCII representation (man ascii) + digit += 0x30; + // Move to the next character and write the digit + lengthOffset++; + + assembly { + mstore8(lengthOffset, digit) + } + } + + // The null string requires exactly 1 zero (unskip 1 leading 0) + if (lengthLength == 0) { + lengthLength = 1 + 0x19 + 1; + } else { + lengthLength += 1 + 0x19; + } + + // Truncate the tailing zeros from the header + assembly { + mstore(header, lengthLength) + } + + // Perform the elliptic curve recover operation + bytes32 check = keccak256(abi.encodePacked(header, message)); + + return ecrecover(check, v, r, s); + }*/ + + // this is the only method for testing + // our _message is signed by _signers[] with their private keys, + // and the signatures are stored in _signatures[] + // should return true if 1 signature is valid (for testing only 1 is ok) + function testVerify(bytes memory _message, address[] memory _signers, + bytes[] memory _signatures) external pure returns (bool) { + return verify(_message, _signers[0], _signatures[0]); + } + + function getMessageHash(bytes memory _message) public pure returns (bytes32) { + return keccak256(abi.encodePacked(_message)); + } + + function getEthSignedMessageHash(bytes32 _messageHash) public pure returns (bytes32) { + /* + Signature is produced by signing a keccak256 hash with the following format: + "\x19Ethereum Signed Message\n" + len(msg) + msg + */ + return + keccak256( + abi.encodePacked("\x19Ethereum Signed Message:\n32", _messageHash) + ); + } + + function recoverSigner( + bytes32 _ethSignedMessageHash, + bytes memory _signature) public pure returns (address) { + (bytes32 r, bytes32 s, uint8 v) = splitSignature(_signature); + + return ecrecover(_ethSignedMessageHash, v, r, s); + } + + function splitSignature(bytes memory sig) internal pure returns (bytes32 r, bytes32 s, uint8 v) { + require(sig.length == 65, "invalid signature length"); + + assembly { + /* + First 32 bytes stores the length of the signature + + add(sig, 32) = pointer of sig + 32 + effectively, skips first 32 bytes of signature + + mload(p) loads next 32 bytes starting at the memory address p into memory + */ + + // first 32 bytes, after the length prefix + r := mload(add(sig, 32)) + // second 32 bytes + s := mload(add(sig, 64)) + // final byte (first byte of the next 32 bytes) + v := byte(0, mload(add(sig, 96))) + } + + // implicitly return (r, s, v) + } + + function verify(bytes memory _message, address _signer, bytes memory signature) public pure returns (bool) { + bytes32 messageHash = getMessageHash(_message); + bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash); + address signer = recoverSigner(ethSignedMessageHash, signature); + return signer == _signer; + } +} \ No newline at end of file diff --git a/smart-contracts/contracts/Storage.sol b/smart-contracts/contracts/Storage.sol new file mode 100644 index 0000000..7acab54 --- /dev/null +++ b/smart-contracts/contracts/Storage.sol @@ -0,0 +1,626 @@ +//SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.17; + +import "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; + +/* + + +Goal: +support workflows like this + +a node n1 joins a cluster, where every node is responsible for X vshards of data +we have M amount of vshards at the start (a predefined value) + +the algorithm should ensure that +- a network maintains exactly [replication factor] amount of chunks in total on all nodes +- if a node joins/leaves the data is re-distributed (the goal is to minimize gas gosts here) +- replication factor can change - it goes up (no more than # of nodes in total) and goes down to 1 +- re-distribution should affect the least amount of nodes possible (optional goal) +- re-distribution should favor grabbing fresh shards instead of old ones (optional goal) +- difference between node with most vshards and least vshards should stay as close to ±1 as possible +- registration of first N nodes will raise replication factor to rfTarget; +- an event is emitted stating which nodes have been modified + + +Example: +maxshards = 6 , shard is a data range hosted by a node in the db, +rf = 1, replication factor - how many copies should be there on different nodes, +nodes = 1, node count + + +shuffle() ---> shardCount=10 rf=1 nodeCount=1 +map after: Map(1) { 1 => Set(10) { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 } } + +shuffle() ---> shardCount=10 rf=1 nodeCount=2 +map after: Map(2) { + 1 => Set(5) { 1, 2, 3, 4, 5 }, + 2 => Set(5) { 10, 9, 8, 7, 6 } +} + +shuffle() ---> shardCount=10 rf=2 nodeCount=3 +map after: Map(3) { + 1 => Set(7) { 1, 2, 3, 4, 5, 6, 8 }, + 2 => Set(6) { 10, 9, 8, 7, 6, 5 }, + 3 => Set(7) { 1, 2, 3, 4, 7, 9, 10 } +} + +todo getNodeShardsByAddr return an array instead of bitmap? +*/ +contract StorageV1 is Ownable2StepUpgradeable, UUPSUpgradeable { + // number of shards; + // this value should not change after deploy + // also this should match data type in mapNodeToShards (uint32/64/128/256) + uint8 public constant SHARD_COUNT = 32; + + uint8 public constant NULL_SHARD = 255; // shard id that does not exists + uint8 public constant MAX_NODE_ID = 254; // max node + uint8 public constant NULL_NODE = 0; + + // ----------------------------- STATE -------------------------------------------------- + // replication factor - how many copies of the same shard should be served by the network + // dynamic, + // ex: 1....20 + uint8 public rf; + bool public rfChangedByAdmin; // only for admin calling shuffle manually + // if 5 nodes join, we will set rf to 5 and then it won't grow + uint8 public rfTarget; // 0 to turn off + + // active nodeIds + // nodeIds are 1-based + // ex: [1,2,3] + // NULL_NODE = EMPTY + uint8[] public nodeIdList; + + // NULL_NODE = EMPTY + mapping(uint8 => address) public mapNodeIdToAddr; + + // nodeId -> shards + // shards are 0-based + // ex: 1 -> 0,1,2 + mapping(uint8 => uint32) public mapNodeToShards; + + // NODE DATA + // node address -> nodeId (short address) + // ex: 0xAAAAAAAAA -> 1 + mapping(address => uint8) public mapAddrToNodeId; + + // next free value of nodeId + uint8 private unusedNodeId; + // other free values of nodeId (added after delete operation) + uint8[] private unusedNodeIdList; + + // this is a security check that only validator contract calls our methods + address public validatorContract; + + uint16 public protocolVersion; + + // ----------------------------- EVENTS -------------------------------------------------- + + event SNodeMappingChanged(address[] nodeList); + + // ----------------------------- UPGRADABLE -------------------------------------------------- + + // an empty constructor; constructor is replaced with initialize() + constructor() { + } + + // called only once when a proxy gets deployed; for updates use reinitializer + function initialize( + uint16 protocolVersion_, + address validatorContract_, + uint8 rfTarget_ + ) initializer public { + // init libraries + __UUPSUpgradeable_init(); + __Ownable_init_unchained(); + + unusedNodeId = 1; + rf = 0; + protocolVersion = protocolVersion_; + rfTarget = rfTarget_; + validatorContract = validatorContract_; + } + + function _authorizeUpgrade(address) internal override onlyOwner {} + + // ----------------------------- ADMIN FUNCTIONS -------------------------------------------------- + + // allows to set replication factor manually; however this is limited by node count; + // call shuffle after this to take effect + function overrideRf(uint8 rf_) public onlyOwner { + require(rf_ <= nodeIdList.length, 'rf is limited by node count'); + rf = rf_; + rfChangedByAdmin = true; + rfTarget = 0; + } + + // revert back to automated replication factor (rf grows up to rfTarget when possible) + // call shuffle after this to take effect + function setRfTarget(uint8 rfTarget_) public onlyOwner { + rfTarget = rfTarget_; + uint rf_ = rfTarget_; + if (rf_ > nodeIdList.length) { + rf_ = nodeIdList.length; + } + rf = uint8(rf_); + rfChangedByAdmin = true; + } + + // allows to set + function setNodeShardsByAddr(address nodeAddress_, uint32 bitmap_) public onlyOwner { + uint8 node = mapAddrToNodeId[nodeAddress_]; + require(node > 0, 'node address is not registered'); + mapNodeToShards[node] = bitmap_; + } + + function shuffle() public onlyOwner returns (uint) { + uint result = _shuffle(rfChangedByAdmin, false, 0); + rfChangedByAdmin = false; + return result; + } + + function getAllNodeShards(address[] memory nodeAddr_) public view returns (uint32[] memory) { + uint32[] memory nodeMasks = new uint32[](nodeAddr_.length); + for (uint i = 0; i < nodeAddr_.length; i++) { + uint8 nodeId = mapAddrToNodeId[nodeAddr_[i]]; + uint32 shardmask = mapNodeToShards[nodeId]; + nodeMasks[i] = shardmask; + } + return nodeMasks; + } + + function setValidatorContract(address addr_) public onlyOwner { + validatorContract = addr_; + } + + // ----------------------------- VALIDATOR FUNCTIONS -------------------------------------------------- + + modifier onlyV() { + require(validatorContract == _msgSender() || owner() == _msgSender(), + "Ownable: caller is not the owner"); + _; + } + + function addNode(address nodeAddress_) public onlyV returns (uint8) { + require(nodeAddress_ != address(0), 'address is 0'); + require(mapAddrToNodeId[nodeAddress_] == 0, 'address is already registered'); + require(unusedNodeId > 0 && unusedNodeId < MAX_NODE_ID, 'nodeId > 0 && nodeId < max'); + uint8 newNodeId; + uint unusedLenth = unusedNodeIdList.length; + if (unusedLenth > 0) { + newNodeId = unusedNodeIdList[unusedLenth - 1]; + unusedNodeIdList.pop(); + } else { + newNodeId = unusedNodeId++; + } + nodeIdList.push(newNodeId); + mapNodeIdToAddr[newNodeId] = nodeAddress_; + mapAddrToNodeId[nodeAddress_] = newNodeId; + mapNodeToShards[newNodeId] = 0; // for safety only + // add more copies of the data if the network can handle it, unless we get enough + bool rfChanged_ = adjustRf(1); + _shuffle(rfChanged_, false, 0); + return unusedNodeId; + } + + function removeNode(address nodeAddress_) public onlyV { + uint8 nodeId_ = mapAddrToNodeId[nodeAddress_]; + unusedNodeIdList.push(nodeId_); + require(nodeId_ != NULL_NODE, 'no address found'); + if (nodeIdList.length == 0) { + // mapping exists, but node has no short id + delete mapAddrToNodeId[nodeAddress_]; + revert('no node id found'); + } + // valid nodeId ; + + // cleanup shards + uint32 nodeShardMask_ = mapNodeToShards[nodeId_]; + delete mapNodeToShards[nodeId_]; + + // cleanup ids + uint nodeIdLen_ = nodeIdList.length; + for (uint i = 0; i < nodeIdLen_; i++) { + if (nodeIdList[i] == nodeId_) { + // shrink array + if (i != nodeIdLen_ - 1) { + nodeIdList[i] = nodeIdList[nodeIdLen_ - 1]; + } + nodeIdList.pop(); + break; + } + } + + // cleanup addresses + delete mapNodeIdToAddr[nodeId_]; + bool rfChanged_ = adjustRf(- 1); + address[] memory _arr = new address[](1); + _arr[0] = nodeAddress_; + emit SNodeMappingChanged(_arr); + _shuffle(rfChanged_, true, nodeShardMask_); + } + + // ----------------------------- IMPL -------------------------------------------------- + + function getNodeShardsByAddr(address nodeAddress_) public view returns (uint32) { + uint8 nodeId_ = mapAddrToNodeId[nodeAddress_]; + require(nodeId_ > 0, 'no such node'); + return mapNodeToShards[nodeId_]; + } + + function nodeCount() public view returns (uint8) { + return uint8(nodeIdList.length); + } + + function getNodeAddresses() public view returns (address[] memory) { + uint size = nodeIdList.length; + address[] memory nodeAddrArr = new address[](size); + for (uint i = 0; i < size; i++) { + uint8 nodeId = nodeIdList[i]; + nodeAddrArr[i] = mapNodeIdToAddr[nodeId]; + } + return nodeAddrArr; + } + + function getBit(uint32 self_, uint8 index_) private pure returns (uint8) { + return uint8(self_ >> index_ & 1); + } + + function setBit(uint32 self_, uint8 index_) private pure returns (uint32) { + return self_ | uint32(1) << index_; + } + + function clearBit(uint32 self_, uint8 index_) private pure returns (uint32) { + return self_ & ~(uint32(1) << index_); + } + + function adjustRf(int adjust_) private returns (bool){ + bool rfChanged_ = rfChangedByAdmin; // if admin changed rf = we need full recalculation + if (rfChanged_) { + rfChangedByAdmin = false; // clear flag + } + int rf_ = int(uint(rf)); + int rfNew_ = rf_ + adjust_; + if (rfTarget != 0 && rfNew_ >= 0 && rfNew_ <= int(uint(rfTarget)) && rfNew_ <= int(nodeIdList.length)) { + rf = uint8(uint(rfNew_)); + rfChanged_ = true; + } + return rfChanged_; + } + + function calculateAvgPerNode(uint8[] memory nodeList_, uint8[] memory countersMap_ + ) public view returns (uint avgPerNode_, uint demand_) { + uint _nodeCount = uint8(nodeList_.length); + uint _total = uint(SHARD_COUNT) * rf; + uint _avgPerNode = _nodeCount == 0 ? 0 : _total / _nodeCount; + // Math.ceil + if (_total % _nodeCount > 0) { + _avgPerNode = _avgPerNode + 1; + } + uint _demand = 0; + for (uint i = 0; i < nodeList_.length; i++) { + uint8 nodeId = nodeList_[i]; + uint8 shardCount = countersMap_[nodeId]; + if (shardCount < _avgPerNode) { + _demand += _avgPerNode - shardCount; + } + } + return (_avgPerNode, _demand); + } + + function _shuffle(bool rfChanged_, bool nodeRemoved_, uint32 removedNodeShardmask_) private returns (uint8) { + uint8[] memory nodeList_ = nodeIdList; + uint rf_ = rf; + require(rf_ >= 0 && rf_ <= MAX_NODE_ID, "bad rf"); + require(nodeList_.length >= 0 && nodeList_.length < NULL_SHARD, "bad node count"); + + uint8 maxNode_ = 0; + for (uint i = 0; i < nodeList_.length; i++) { + uint8 nodeId = nodeList_[i]; + if (nodeId > maxNode_) { + maxNode_ = nodeId; + } + } + require(maxNode_ < MAX_NODE_ID, "bad maxnode"); + + // copy storage to memory + // nodeShardsSet[i]: bit(J) = 1, if nodeI has shard J + uint8[] memory nodeModifiedSet_ = new uint8[](maxNode_ + 1); + uint32[] memory nodeShardsBitmap_ = new uint32[](maxNode_ + 1); + for (uint i = 0; i < nodeList_.length; i++) { + uint8 nodeId = nodeList_[i]; + // this is intentionally left to check the node list for bad values at least once + require(nodeId >= 1, 'nodes are 1 based'); + nodeShardsBitmap_[nodeId] = mapNodeToShards[nodeId]; + } + // 0 find all shards that are not yet assigned to every node + // also if a node owns shards that no longer exists (rf decreased) - grab them + uint8[] memory unusedArr_ = buildUnused(nodeList_, nodeShardsBitmap_, nodeModifiedSet_, + rf_, rfChanged_, nodeRemoved_, removedNodeShardmask_); + + if (nodeIdList.length > 0) { + // 1 take unused and share + uint8[] memory countersMap_ = buildCounters(nodeList_, maxNode_, nodeShardsBitmap_); + distributeUnused(unusedArr_, nodeList_, countersMap_, nodeShardsBitmap_, nodeModifiedSet_, 0); + uint avgPerNode_; + uint demand_; + (avgPerNode_, demand_) = calculateAvgPerNode(nodeList_, countersMap_); + // 2 take from rich and share, until the demand kpi is reached + while (demand_ > 0) { + uint movedCount_ = distributeFromRightToLeft(nodeList_, countersMap_, + nodeShardsBitmap_, nodeModifiedSet_); + if (movedCount_ > 0) { + demand_ -= movedCount_; + } else { + break; + } + } + } + + // 4 save to storage , only modified nodes + uint8 modifiedNodes_ = 0; + { + for (uint8 node = 1; node < nodeModifiedSet_.length; node++) { + if (nodeModifiedSet_[node] > 0) { + uint32 bitmap = nodeShardsBitmap_[node]; + mapNodeToShards[node] = bitmap; + modifiedNodes_++; + } + } + } + // 5 send events + { + address[] memory modifiedAddrArr_ = new address[](modifiedNodes_); + uint pos = 0; + for (uint8 nodeId = 1; nodeId < nodeModifiedSet_.length; nodeId++) { + if (nodeModifiedSet_[nodeId] > 0) { + modifiedAddrArr_[pos++] = mapNodeIdToAddr[nodeId]; + } + } + emit SNodeMappingChanged(modifiedAddrArr_); + } + return modifiedNodes_; + } + + function buildUnused(uint8[] memory nodeList_, uint32[] memory nodeShardsBitmap_, uint8[] memory nodeModifiedSet_, + uint _rf, bool rfChanged_, bool nodeRemoved_, uint32 removedNodeShardmask_) private pure returns (uint8[] memory){ + uint8[] memory unusedArr_; + if (!rfChanged_ && !nodeRemoved_) { + // do nothing - number of unused doesn't change + unusedArr_ = new uint8[](0); + return unusedArr_; + } + if (nodeRemoved_) { + // only 1 node added to unused + unusedArr_ = new uint8[](SHARD_COUNT); + for (uint8 shard = 0; shard < SHARD_COUNT; shard++) { + unusedArr_[shard] = getBit(removedNodeShardmask_, shard) == 1 ? shard : NULL_SHARD; + } + return unusedArr_; + } + // rf changed - full recalculation O(SHARDCOUNT * RF * NODE_COUNT) + // calculate all possible shards x replication factor; + // a collection of shardIds + // unusedArr = [5, -1, 0, 1]; + // results in: 5,0,1 are in a set, -1 = nothing here + unusedArr_ = new uint8[](_rf * SHARD_COUNT); + uint cnt = 0; + for (uint i = 0; i < _rf; i++) { + for (uint8 shard = 0; shard < SHARD_COUNT; shard++) { + unusedArr_[cnt++] = shard; + } + } + // check unused, and no-longer assigned + for (uint i = 0; i < nodeList_.length; i++) { + uint nodeId_ = nodeList_[i]; + uint32 shardmask_ = nodeShardsBitmap_[nodeId_]; + for (uint8 shard = 0; shard < SHARD_COUNT; shard++) { + // search this shard + if (getBit(shardmask_, shard) == 0) { + continue; + } + int unusedPos_ = - 1; + for (uint j = 0; j < unusedArr_.length; j++) { + if (unusedArr_[j] == shard) { + unusedPos_ = int(j); + break; + } + } + // decide + if (unusedPos_ == - 1) { + // over-assigned - this food is no longer available + shardmask_ = clearBit(shardmask_, shard); + nodeModifiedSet_[nodeId_]++; + } else { + // this food is used + unusedArr_[uint(unusedPos_)] = NULL_SHARD; + } + } + nodeShardsBitmap_[nodeId_] = shardmask_; + } + // cleanup unused from empty slots (-1); normally most of them would be empty; + { + uint emptyCnt_ = 0; + for (uint j = 0; j < unusedArr_.length; j++) { + if (unusedArr_[j] == NULL_SHARD) { + emptyCnt_++; + } + } + uint8[] memory tmp_ = new uint8[](unusedArr_.length - emptyCnt_); + uint dst_ = 0; + for (uint i = 0; i < unusedArr_.length; i++) { + if (unusedArr_[i] != NULL_SHARD) { + tmp_[dst_] = unusedArr_[i]; + dst_++; + } + } + unusedArr_ = tmp_; + } + return unusedArr_; + } + + function sortCounters(uint8[] memory _nodesList, uint8[] memory _countersMap, int _left, int _right) private { + int i = _left; + int j = _right; + if (i == j) return; + uint8 pivotCount = _countersMap[uint(_nodesList[uint(_left + (_right - _left) / 2)])]; + while (i <= j) { + while (_countersMap[_nodesList[uint(i)]] < pivotCount) i++; + while (pivotCount < _countersMap[_nodesList[uint(j)]]) j--; + if (i <= j) { + (_nodesList[uint(i)], _nodesList[uint(j)]) = (_nodesList[uint(j)], _nodesList[uint(i)]); + i++; + j--; + } + } + if (_left < j) sortCounters(_nodesList, _countersMap, _left, j); + if (i < _right) sortCounters(_nodesList, _countersMap, i, _right); + } + + function sortCounters(uint8[] memory nodesList_, uint8[] memory countersMap_) private { + if (nodesList_.length == 0) { + return; + } + sortCounters(nodesList_, countersMap_, 0, int(nodesList_.length - 1)); + } + + function resortCountersRow(uint8[] memory nodeList_, uint8[] memory countersMap_, uint pos_, bool increment_) private pure { + int cur = int(pos_); + if (increment_) { + while ((cur + 1) >= 0 && (cur + 1) <= int(nodeList_.length - 1) + && countersMap_[nodeList_[pos_]] > countersMap_[nodeList_[uint(cur + 1)]]) { + cur++; + } + } else { + while ((cur - 1) >= 0 && (cur - 1) <= int(nodeList_.length - 1) + && countersMap_[nodeList_[pos_]] < countersMap_[nodeList_[uint(cur - 1)]]) { + cur--; + } + } + if (cur != int(pos_)) { + uint8 tmp = nodeList_[uint(cur)]; + nodeList_[uint(cur)] = nodeList_[pos_]; + nodeList_[pos_] = tmp; + } + } + + function buildCounters( + uint8[] memory nodeList_, + uint8 maxNode_, + uint32[] memory nodeShardsBitmap_ + ) private pure returns (uint8[] memory) { + uint8[] memory _countersMap = new uint8[](maxNode_ + 1); + // init nodeArr + for (uint i = 0; i < nodeList_.length; i++) { + uint8 nodeId = nodeList_[i]; + uint32 shardmask = nodeShardsBitmap_[nodeId]; + uint8 count = 0; + for (uint8 shard = 0; shard < SHARD_COUNT; shard++) { + if (getBit(shardmask, shard) == 1) { + count++; + } + } + _countersMap[nodeId] = count; + } + return _countersMap; + } + + function distributeUnused(uint8[] memory unusedArr_, + uint8[] memory nodeList_, + uint8[] memory countersMap_, + uint32[] memory nodeShardsBitmap_, + uint8[] memory nodeModifiedSet_, + uint8 nodeThreshold_ + ) private returns (uint){ + if (unusedArr_.length == 0) { + return 0; + } + sortCounters(nodeList_, countersMap_); + // _nodeList is sorted asc + uint assignedCounter_ = 0; + // with every unused shard + for (uint i = 0; i < unusedArr_.length; i++) { + uint8 shard = unusedArr_[i]; + if (shard == NULL_SHARD) { + continue; + } + + // give it to someone (from poor to rich) and stop (and resort) + for (uint8 j = 0; j < nodeList_.length; j++) { + uint8 nodeId_ = nodeList_[j]; + if (nodeThreshold_ > 0 && countersMap_[nodeId_] >= nodeThreshold_) { + continue; + } + uint32 shardmask_ = nodeShardsBitmap_[nodeId_]; + uint8 nodeHasShard_ = getBit(shardmask_, shard); + if (nodeHasShard_ == 0) { + unusedArr_[i] = NULL_SHARD; + + nodeShardsBitmap_[nodeId_] = setBit(shardmask_, shard); + countersMap_[nodeId_]++; + nodeModifiedSet_[nodeId_]++; + resortCountersRow(nodeList_, countersMap_, j, true); + assignedCounter_++; + break; + } + } + } + return assignedCounter_; + } + + // convers bit shard mask (ex: 0b1101) to shard numbers (ex: [0,2,3]) and gets a random one (ex: 2) + function bitMaskToRandomShard(uint32 shardmask_, uint8[SHARD_COUNT] memory shardList_) private view returns (uint8) { + uint8 pos_ = 0; + uint8 shard_ = 0; + while (shardmask_ != 0) { + if (shardmask_ & 1 == 1) { + shardList_[pos_++] = shard_; + } + shardmask_ >>= 1; + shard_++; + } + uint8 rnd = uint8(uint256(keccak256(abi.encodePacked(block.timestamp, shard_, shardmask_, pos_))) % pos_); + return shardList_[rnd]; + } + + function distributeFromRightToLeft( + uint8[] memory nodeList_, + uint8[] memory countersMap_, + uint32[] memory nodeShardsBitmap_, + uint8[] memory nodeModifiedSet_ + ) private returns (uint){ + if (nodeList_.length == 0) { + return 0; + } + sortCounters(nodeList_, countersMap_); + uint i = 0; + uint j = nodeList_.length - 1; + uint8[SHARD_COUNT] memory tmp; + while (i < j) { + uint8 leftNode_ = nodeList_[i]; + uint8 rightNode_ = nodeList_[j]; + uint32 transfer_ = (nodeShardsBitmap_[leftNode_] ^ nodeShardsBitmap_[rightNode_]) + & (~nodeShardsBitmap_[leftNode_]); + if (transfer_ != 0) { + // give + uint8 shard = bitMaskToRandomShard(transfer_, tmp); + nodeShardsBitmap_[rightNode_] = clearBit(nodeShardsBitmap_[rightNode_], shard); + countersMap_[rightNode_]--; + nodeModifiedSet_[rightNode_]++; + + nodeShardsBitmap_[leftNode_] = setBit(nodeShardsBitmap_[leftNode_], shard); + countersMap_[leftNode_]++; + nodeModifiedSet_[leftNode_]++; + + resortCountersRow(nodeList_, countersMap_, i, true); + resortCountersRow(nodeList_, countersMap_, j, false); + return 1; + } + i++; + j--; + } + return 0; + } +} diff --git a/smart-contracts/contracts/Validator.sol b/smart-contracts/contracts/Validator.sol new file mode 100644 index 0000000..ae4c392 --- /dev/null +++ b/smart-contracts/contracts/Validator.sol @@ -0,0 +1,798 @@ +//SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.17; + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import "./Storage.sol"; +import "./SigUtil.sol"; + +/* +Validator smart contract + +# Enables a network of Validator (V), Storage (S), Delivery (D) nodes +- V performs a multi-sig on a message block within a specified group + stakes tokens; + Lifecycle: new - reported - slashed - banned + +- S unpacks message block (a threshold amount of sigs required), +and indexes every single message: the message gets copied to every person's inbox +So that later V can query a group of storage nodes responsible for some data range +and show that inbox to the UI. + stakes tokens ; + Lifecycle: new - reported - slashed - banned (TBD) + + +- D unpacks message block (a threshold amount of sigs required), +and for every single message: delivers it to the end-users + stakes tokens + Lifecycle: none (TBD) + + +# Contracts +All the stacking, node management, slashing is done in this contrect Validator.sol +S has it's own Storage.sol contract, which manages only S shard assignments. + +*/ +contract ValidatorV1 is Ownable2StepUpgradeable, UUPSUpgradeable { + + // ----------------------------- STATE -------------------------------------------------- + + string public constant VERSION = "0.0.2"; + uint16 public protocolVersion; + + /* staking params (effectively constant ) */ + + // number of push tokens (18 digits) to stake as Validator (V) + uint256 public minStakeV; + // number of push tokens (18 digits) to stake as Storage (S) + uint256 public minStakeS; + // number of push tokens (18 digits) to stake as Delivery (D) + uint256 public minStakeD; + + /* validator slashing params (effectively constant) + + report = bad behaviour, + we accept a VoteData signed by this amout of nodes: REPORT_THRESHOLD_PER_BLOCK + we perform a slash after this amount of reports: REPORTS_BEFORE_SLASH_V|S + + A slash reward is distributed among all the nodes which submitted the reports. + */ + uint16 public REPORT_THRESHOLD_PER_BLOCK; // i.e. 66 = 66% = 2/3 + uint16 public REPORTS_BEFORE_SLASH_V; + uint16 public REPORTS_BEFORE_SLASH_S; + + /* + slash = reduces node collateral for SLASH_PERCENT % + + after SLASH_BEFORE_BAN_V|S iterations, the node would get a ban + ban = reduces node collateral for BAN_PERCENT, node address is banned forever + + A ban reward is distributed to this contract. + */ + uint16 public SLASH_PERCENT; + uint16 public SLASHES_BEFORE_BAN_V; + uint16 public SLASHES_BEFORE_BAN_S; + + uint16 public BAN_PERCENT; + + /* validator validation params (effectively constant only for V backend) + these parameters control how nodejs processes communicate + for the contract these a simply constants; all the logic is in JS + */ + + /* + how many signatures is needed for a block + + A block gets signed by a 1 validator + N attesters = valPerBlockTarget + + if REPORT_PERCENT is 66% ( 2/3 of signers should agree on a block) + 3 * 67 / 100 = 201 / 100 = 2 + if we have at least 2 valid signatures out of 3 - that's a good block + + valPerBlock would grow as more nodes join the network; + up to valPerBlockTarget + */ + uint16 public valPerBlock; + + // maximum amount of validator signatures per block + // we will grow or shrink valPerBlock up to this number + uint16 public valPerBlockTarget; + + + // how many networkRandom objects are required to compute a random value + uint16 public nodeRandomMinCount; + // how many nodes should see the emitter of that networkRandom ; so that we could count on this network random + uint16 public nodeRandomPingCount; + + // ----------------------------- CONTRACT STATE -------------------------------------------------- + + /* registered nodes params */ + + // push token used for staking/slashing etc + IERC20 pushToken; + + // storage contract manages storage node state + address public storageContract; + + // vnode colleciton; banned/unstaked nodes are removed + address[] public vnodes; + // vnode colleciton; banned/unstaked nodes are removed + address[] public snodes; + // vnode colleciton; banned/unstaked nodes are removed + address[] public dnodes; + // node details + mapping(address => NodeInfo) public nodeMap; + + // push tokens owned by this contract; which have an owner + uint public totalStaked; + + // push tokens owned by this contract; + uint public totalFees; + + // ----------------------------- EVENTS -------------------------------------------------- + event NodeAdded(address indexed ownerWallet, address indexed nodeWallet, NodeType nodeType, uint256 nodeTokens, string nodeApiBaseUrl); + event NodeStatusChanged(address indexed nodeWallet, NodeStatus nodeStatus, uint256 nodeTokens); + event NodeReported(address nodeWallet, address reporterWallet, address[] voters, VoteAction voteAction); + + event BlockParamsUpdated(uint16 valPerBlock, uint16 valPerBlockTarget); + event RandomParamsUpdated(uint16 nodeRandomMinCount, uint16 nodeRandomPingCount); + + // ----------------------------- TYPES -------------------------------------------------- + + struct NodeInfo { + // the owner of the node; + // the one who provides PUSH tokens for the node staking + // also this address is used for unstake + address ownerWallet; + // node eth wallet, which is used mostly for private key signatures for node communication + address nodeWallet; + // node type; currently we support only 3 types (V,S,D) + NodeType nodeType; + // 'staked' PUSH tokens for this node (18 digits) + uint256 nodeTokens; + // rest api url for invocation + string nodeApiBaseUrl; + // counters for report, slash, ban + NodeCounters counters; + // worst case status, at least 1 report or slash leads to status reported or slashed + // lifecycle: OK -> reported -> slashed -> banned|unstaked + NodeStatus status; + } + + struct NodeCounters { + // S, V nodes ----- + + // how many times this node was reported + // cleaned on SLASH + uint16 reportCounter; + // how many times this node was slashed + uint16 slashCounter; + + // block numbers where this node was reported (cleaned on BAN) + // we prevent new reports that match any existing block in this list + // cleaned on BAN, unstake + uint128[] reportedInBlocks; + + // addresses who did the reports, they will receive SLASH rewards + // cleaned on SLASH, BAN, unstake + address[] reportedBy; + + // S nodes ------- + + // keys missing (for storage nodes only) + // we prevent new reports that match any existing key in this list + uint128[] reportedKeys; + } + + struct ActiveValidator { + address nodeWallet; + string nodeApiBaseUrl; + } + + enum NodeStatus { + OK, // this node operates just fine (DEFAULT VALUE) + Reported, // he have a few malicious reports + Slashed, // we already slashed this node at least once (normally we will take -2% of collateral tokens) + BannedAndUnstaked, // we banned the node and unstaked it's tokens (normally we will take -10% of collateral tokens) + Unstaked + } + + enum VoteAction { + None, // 0 + ReportV, // 1 + ReportS // 2 + } + + enum NodeType { + VNode, // validator 0 + SNode, // storage 1 + DNode // delivery 2 + } + + struct VoteMessage { + // block which was the reason to apply sanctions (i.e. bad conversion) + uint128 blockId; + // node to punish + address targetNode; + // action + uint8 voteAction; + } + + // ----------------------------- UPGRADABLE -------------------------------------------------- + + // an empty constructor; constructor is replaced with initialize() + constructor() { + } + + // called only once when a proxy gets deployed; for updates use reinitializer + function initialize( + uint16 protocolVersion_, + address pushToken_, + uint16 valPerBlockTarget_, + uint16 nodeRandomMinCount_, + uint16 nodeRandomPingCount_, + uint16 REPORTS_BEFORE_SLASH_V_, + uint16 REPORTS_BEFORE_SLASH_S_, + uint16 SLASHES_BEFORE_BAN_V_, + uint16 SLASHES_BEFORE_BAN_S_, + uint16 SLASH_PERCENT_, + uint16 BAN_PERCENT_ + ) initializer public { + // init libraries + __UUPSUpgradeable_init(); + __Ownable_init_unchained(); + // init state + protocolVersion = protocolVersion_; + require(pushToken_ != address(0), "push token is empty"); + require(valPerBlockTarget_ > 0, "invalid valPerBlockTarget_ amount"); + require(nodeRandomMinCount_ > 0, "invalid nodeRandomMinCount amount"); + require(nodeRandomPingCount_ > 0, "invalid nodeRandomFilterPingsRequired amount"); + pushToken = IERC20(pushToken_); + valPerBlockTarget = valPerBlockTarget_; + nodeRandomMinCount = nodeRandomMinCount_; + nodeRandomPingCount = nodeRandomPingCount_; + + minStakeV = 100; + minStakeS = 100; + minStakeD = 100; + REPORTS_BEFORE_SLASH_V = REPORTS_BEFORE_SLASH_V_; + REPORTS_BEFORE_SLASH_S = REPORTS_BEFORE_SLASH_S_; + SLASH_PERCENT = SLASH_PERCENT_; + SLASHES_BEFORE_BAN_V = SLASHES_BEFORE_BAN_V_; + SLASHES_BEFORE_BAN_S = SLASHES_BEFORE_BAN_S_; + BAN_PERCENT = BAN_PERCENT_; + + + REPORT_THRESHOLD_PER_BLOCK = 66; + valPerBlock = 0; + } + + // DO NOT EDIT THIS FUNCTION; THIS MAY LEAD TO THE LOSS OF THE CONTRACT !!! + function _authorizeUpgrade(address) internal override onlyOwner {} + + // ----------------------------- ADMIN FUNCTIONS -------------------------------------------------- + + function setStorageContract(address addr_) public onlyOwner { + require(addr_ != address(0), 'empty addr'); + storageContract = addr_; + } + + function updateBlockParams(uint16 valPerBlockTarget_) public onlyOwner { + require(valPerBlockTarget_ <= vnodes.length, 'incorrect valPerBlockTarget_'); + valPerBlockTarget = valPerBlockTarget_; + emit BlockParamsUpdated(valPerBlock, valPerBlockTarget_); + } + + function updateRandomParams(uint16 nodeRandomMinCount_, uint16 nodeRandomPingCount_) public onlyOwner { + require(nodeRandomMinCount_ < vnodes.length, "bad nodeRandomMinCount"); + require(nodeRandomPingCount_ < vnodes.length, "bad nodeRandomPingCount_"); + nodeRandomMinCount = nodeRandomMinCount_; + nodeRandomPingCount = nodeRandomPingCount_; + emit RandomParamsUpdated(nodeRandomMinCount_, nodeRandomPingCount_); + } + + +/* + an admin method to redistribute staked tokens manually between parties + no ERC20 transactions performed, we only set new token ownership + + redistributeStaked(0xAA, 0, 100) - staked tokens will move to the contract (unstaked) + redistributeStaked(0, 0xAA, 100) - unstaked tokens will move from the contract to some node as staked + redistributeStaked(0xAA,0xBB, 100) - staked tokens will move from 0xAA to 0xBB + */ + + function redistributeStaked(address from_, address to_, uint256 amount_) public onlyOwner returns (bool) { + require(amount_ > 0, 'amount should be positive'); + require(from_ != to_, 'cannot transfer between same addresses'); + if (to_ != address(0) && from_ == address(0)) { + // transfer contract tokens -> staked for a specific node + require(totalFees >= amount_, 'from node should have enough collateral'); + NodeInfo storage toNode_ = nodeMap[to_]; + require(toNode_.ownerWallet != address(0), 'missing to node'); + + totalFees -= amount_; + totalStaked += amount_; + toNode_.nodeTokens += amount_; + } else if (from_ != address(0) && to_ == address(0)) { + // transfer staked for a specific node -> contract tokens + NodeInfo storage fromNode_ = nodeMap[from_]; + require(fromNode_.ownerWallet != address(0), 'missing from node'); + require(fromNode_.nodeTokens >= amount_, 'from node should have enough collateral'); + + fromNode_.nodeTokens -= amount_; + totalStaked -= amount_; + totalFees += amount_; + } else { + // transfer staked for a specific node A -> specific node B + NodeInfo storage fromNode_ = nodeMap[from_]; + require(fromNode_.ownerWallet != address(0), 'missing from node'); + require(fromNode_.nodeTokens >= amount_, 'from node should have enough collateral'); + NodeInfo storage toNode_ = nodeMap[to_]; + require(toNode_.ownerWallet != address(0), 'missing to node'); + + fromNode_.nodeTokens -= amount_; + toNode_.nodeTokens += amount_; + } + return true; + } + +/** + Unstakes IERC20 tokens from this contract (totalFees) + to any arbitrary address. + */ + + function unstakeFees(address to_, uint256 amount_) public onlyOwner returns (bool) { + require(to_ != address(0), 'invalid to address'); + require(amount_ > 0, 'invalid amount'); + require(amount_ <= totalFees && amount_ <= pushToken.balanceOf(address(this)), "insufficient balance"); + require(pushToken.transfer(to_, amount_), 'failed to transfer'); + totalFees -= amount_; + return true; + } + + + + // ----------------------------- NODE PUBLIC FUNCTIONS -------------------------------------------------- + + /* + Registers a new V, S, D node + Locks PUSH tokens (nodeTokens_) with $_collateral amount. + A node will run from a nodeWallet_ + ACCESS: Anyone can call this (dApp frontend functiton) + */ + function registerNodeAndStake(uint256 nodeTokens_, + NodeType nodeType_, string memory nodeApiBaseUrl_, address nodeWallet_) public { + if (nodeWallet_ == address(0)) { + revert("empty node address"); + } + NodeInfo storage old = nodeMap[nodeWallet_]; + if (old.ownerWallet != address(0)) { + revert("a node with pubKey is already defined"); + } + // pre-actions + if (nodeType_ == NodeType.VNode) { + require(nodeTokens_ >= minStakeV, "Insufficient collateral for VNODE"); + vnodes.push(nodeWallet_); + } else if (nodeType_ == NodeType.SNode) { + require(nodeTokens_ >= minStakeS, "Insufficient collateral for SNODE"); + snodes.push(nodeWallet_); + } else if (nodeType_ == NodeType.DNode) { + require(nodeTokens_ >= minStakeD, "Insufficient collateral for DNODE"); + dnodes.push(nodeWallet_); + } else { + revert("unsupported nodeType "); + } + + + // check that collateral is allowed to spend + if (nodeTokens_ > 0) { + uint256 allowed = pushToken.allowance(msg.sender, address(this)); + require(allowed >= nodeTokens_, "_nodeTokens cannot be transferred, check allowance"); + } + // new mapping + NodeInfo memory n; + n.ownerWallet = msg.sender; + n.nodeWallet = nodeWallet_; + n.nodeType = nodeType_; + n.nodeTokens = nodeTokens_; + n.nodeApiBaseUrl = nodeApiBaseUrl_; + nodeMap[nodeWallet_] = n; + // take collateral + if (nodeTokens_ > 0) { + require(pushToken.transferFrom(msg.sender, address(this), nodeTokens_), "failed to transfer tokens to contract"); + } + totalStaked += nodeTokens_; + + // post actions + if (nodeType_ == NodeType.VNode) { + recalcualteValPerBlock(); + } else if (nodeType_ == NodeType.SNode) { + // try to register this node for shard mappings + require(storageContract != address(0), 'no storage contract defined'); + StorageV1 s = StorageV1(storageContract); + s.addNode(nodeWallet_); + } + emit NodeAdded(msg.sender, nodeWallet_, nodeType_, nodeTokens_, nodeApiBaseUrl_); + } + + // raise the number of required signatures per block + // from 1 up to valPerBlockTarget + // or down to 1 + function recalcualteValPerBlock() private { + uint16 activeValidators_ = 0; + uint len = vnodes.length; + for (uint i = 0; i < len; i++) { + address nodeAddr_ = vnodes[i]; + NodeInfo storage nodeInfo_ = nodeMap[nodeAddr_]; + if (isActiveValidator(nodeInfo_.status)) { + activeValidators_++; + } + } + uint16 valPerBlock_ = activeValidators_; + uint16 valPerBlockTarget_ = valPerBlockTarget; + if (valPerBlock_ > valPerBlockTarget_) { + valPerBlock_ = valPerBlockTarget_; + } + require(valPerBlock <= valPerBlockTarget_); + if (valPerBlock_ != valPerBlock) { + valPerBlock = valPerBlock_; + emit BlockParamsUpdated(valPerBlock_, valPerBlockTarget_); + } + } + + function isActiveValidator(NodeStatus status) private pure returns (bool) { + return !(status == NodeStatus.Unstaked || status == NodeStatus.BannedAndUnstaked); + } + + /* + Remove node (if you are the node owner) + ACCESS: Any node owner can call this + */ + function unstakeNode(address nodeWallet_) public { + NodeInfo storage node = nodeMap[nodeWallet_]; + require(node.nodeWallet != address(0), "node does not exists"); + require(node.ownerWallet == msg.sender || owner() == msg.sender, "only owner can unstake a node"); + _unstakeNode(node); + node.status = NodeStatus.Unstaked; + emit NodeStatusChanged(node.nodeWallet, NodeStatus.Unstaked, 0); + } + + /* Complain on an existing node; + N attesters can request to report malicious activity for a specific node + also slashes if the # of complains meet the required threshold + example lifecycle: report x 2 -> slash x 2 -> ban + if all prerequisites match - the contract will execute + + Returns 1 (number of affected nodes) or 0 (if nothing happened) + */ + // ACCESS: Any node can call this + function reportNode(NodeType targetNodeType_, bytes memory voteBlob_, bytes[] memory signatures_) public { + NodeInfo storage reporterNode_ = nodeMap[msg.sender]; + if (reporterNode_.nodeWallet == address(0)) { + revert('invalid reporter'); + } + + uint uniqVotersSize_ = 0; + address[] memory uniqVoters_ = new address[](signatures_.length); + for (uint i = 0; i < signatures_.length; i++) { + address voterWallet = SigUtil.recoverSignerEx(voteBlob_, signatures_[i]); + NodeInfo storage voterNode = nodeMap[voterWallet]; + if (voterNode.nodeWallet == address(0)) { + continue; + } + // this is not very efficient, but there is no in-memory set support + bool foundDuplicate_ = false; + for (uint j = 0; j < uniqVotersSize_; j++) { + if (uniqVoters_[j] == voterWallet) { + foundDuplicate_ = true; + break; + } + } + if (foundDuplicate_) { + continue; + } + uniqVoters_[uniqVotersSize_++] = voterWallet; + } + // compactify + if (uniqVotersSize_ < signatures_.length) { + address[] memory tmp = new address[](uniqVotersSize_); + for (uint i = 0; i < uniqVotersSize_; i++) { + tmp[i] = uniqVoters_[i]; + } + uniqVoters_ = tmp; + } + + if (targetNodeType_ == NodeType.VNode) { + // unpack and verify + uint8 cmd_; + uint128 blockId_; + address targetNodeAddr_; + (cmd_, blockId_, targetNodeAddr_) = abi.decode(voteBlob_, (uint8, uint128, address)); + + require(cmd_ == uint8(VoteAction.ReportV), 'report action only supported'); + NodeInfo storage targetNode_ = nodeMap[targetNodeAddr_]; + require(targetNode_.nodeWallet != address(0), "target node wallet does not exists"); + require(targetNode_.nodeType == NodeType.VNode, "report only for VNodes"); + + _reportVNode(VoteAction(cmd_), reporterNode_, uniqVoters_, targetNode_, blockId_); + } else if (targetNodeType_ == NodeType.SNode) { + uint8 cmd_; + uint128 blockId_; + address targetNodeAddr_; + uint128 skey_; + (cmd_, blockId_, targetNodeAddr_, skey_) = abi.decode(voteBlob_, (uint8, uint128, address, uint128)); + + require(cmd_ == uint8(VoteAction.ReportS), 'report action only supported'); + NodeInfo storage targetNode_ = nodeMap[targetNodeAddr_]; + require(targetNode_.nodeWallet != address(0), "target node wallet does not exists"); + require(targetNode_.nodeType == NodeType.SNode, "report only for SNodes"); + _reportSNode(VoteAction(cmd_), reporterNode_, uniqVoters_, targetNode_, blockId_, skey_); + } + + } + + // returns only active validators, for SDK to select the right url to call + function getActiveVNodes() public view returns (ActiveValidator[] memory) { + uint activeValidators_ = 0; + uint len_ = vnodes.length; + for (uint i = 0; i < len_; i++) { + address nodeAddr_ = vnodes[i]; + NodeInfo storage nodeInfo = nodeMap[nodeAddr_]; + if (isActiveValidator(nodeInfo.status)) { + activeValidators_++; + } + } + ActiveValidator[] memory result = new ActiveValidator[](activeValidators_); + uint j = 0; + for (uint i = 0; i < len_; i++) { + address nodeAddr_ = vnodes[i]; + NodeInfo storage nodeInfo = nodeMap[nodeAddr_]; + if (!isActiveValidator(nodeInfo.status)) { + continue; + } + result[j++] = ActiveValidator(nodeInfo.nodeWallet, nodeInfo.nodeApiBaseUrl); + } + return result; + } + + function getVNodesLength() public view returns (uint) { + return vnodes.length; + } + + function getVNodes() public view returns (address[] memory) { + return vnodes; + } + + function getSNodesLength() public view returns (uint) { + return snodes.length; + } + + function getSNodes() public view returns (address[] memory) { + return snodes; + } + + function getDNodesLength() public view returns (uint) { + return dnodes.length; + } + + function getDNodes() public view returns (address[] memory) { + return dnodes; + } + + // ----------------------------- IMPL -------------------------------------------------- + + + // note: reading storage value multiple times which is sub-optimal, but the code looks much simpler + function _reportVNode(VoteAction voteAction_, NodeInfo storage reporterNode, + address[] memory uniqVoters_, NodeInfo storage targetNode, uint128 blockId_ + ) private returns (uint8) { + require(targetNode.nodeType == NodeType.VNode, "report only for VNodes"); + if (uniqVoters_.length < valPerBlock * REPORT_THRESHOLD_PER_BLOCK / 100) { + revert('sig count is too low'); + } + NodeStatus ns_ = targetNode.status; + if (ns_ == NodeStatus.Unstaked || ns_ == NodeStatus.BannedAndUnstaked) { + // this is a terminal state + return 0; + } + + reportIfNew(voteAction_, reporterNode, targetNode, uniqVoters_, blockId_, 0); + + if (targetNode.counters.reportCounter >= REPORTS_BEFORE_SLASH_V) { + slash(reporterNode, targetNode); + } + if (targetNode.counters.slashCounter >= SLASHES_BEFORE_BAN_V) { + ban(targetNode); + } + return 0; + } + + function _reportSNode(VoteAction voteAction_, NodeInfo storage reporterNode, address[] memory uniqVoters_, + NodeInfo storage targetNode, uint128 blockId_, uint128 storageKey_) private returns (uint8) { + require(targetNode.nodeType == NodeType.SNode, "report only for SNodes"); + if (uniqVoters_.length < valPerBlock * REPORT_THRESHOLD_PER_BLOCK / 100) { + revert('sig count is too low'); + } + NodeStatus ns_ = targetNode.status; + if (ns_ == NodeStatus.Unstaked || ns_ == NodeStatus.BannedAndUnstaked) { + // this is a terminal state + return 0; + } + + reportIfNew(voteAction_, reporterNode, targetNode, uniqVoters_, blockId_, storageKey_); + + if (targetNode.counters.reportCounter >= REPORTS_BEFORE_SLASH_S) { + slash(reporterNode, targetNode); + } + if (targetNode.counters.slashCounter >= SLASHES_BEFORE_BAN_S) { + ban(targetNode); + } + return 0; + } + + /* + Returns remaining collateral + */ + function reduceCollateral(NodeInfo storage slashedNode, uint32 percentage_ + ) private returns (uint256 newAmount_, uint256 delta_) { + require(percentage_ <= 100, "percentage should be in [0, 100]"); + // reduce only nodeTokens; we do not transfer any tokens; it will affect only 'unstake' + uint256 currentAmount_ = slashedNode.nodeTokens; + newAmount_ = (currentAmount_ * (100 - percentage_)) / 100; + delta_ = currentAmount_ - newAmount_; + slashedNode.nodeTokens = newAmount_; + return (newAmount_, delta_); + } + + // remove value from nodes array, preserving space + function findAndRemove(address[] storage addrArray, address addrToRemove) private returns (bool) { + uint len_ = addrArray.length; + for (uint i = 0; i < len_; i++) { + if (addrArray[i] == addrToRemove) { + if (i != len_ - 1) { + addrArray[i] = addrArray[len_ - 1]; + } + addrArray.pop(); + return true; + } + } + return false; + } + + /* + Returns unstaked amount + */ + function _unstakeNode(NodeInfo storage targetNode) private returns (uint256) { + uint256 delta_ = targetNode.nodeTokens; + require(pushToken.transfer(targetNode.ownerWallet, delta_), "failed to trasfer funds back to owner"); + targetNode.nodeTokens = 0; + totalStaked -= delta_; + if (targetNode.nodeType == NodeType.VNode) { + delete targetNode.counters.reportedInBlocks; + delete targetNode.counters.reportedBy; + findAndRemove(vnodes, targetNode.nodeWallet); + recalcualteValPerBlock(); // only after vnodes got shrinked + } else if (targetNode.nodeType == NodeType.SNode) { + require(storageContract != address(0), 'no storage contract defined'); + StorageV1 s = StorageV1(storageContract); + s.removeNode(targetNode.nodeWallet); + delete targetNode.counters.reportedInBlocks; + delete targetNode.counters.reportedBy; + delete targetNode.counters.reportedKeys; + findAndRemove(snodes, targetNode.nodeWallet); + } + return delta_; + } + + function getNodeInfo(address _nodeWallet) public view returns (NodeInfo memory) { + return nodeMap[_nodeWallet]; + } + + /* + A reporterNode reports on targetNode, targetNode can be V or S node + newVoters_ - who voted (set) + blockId_ - blockId which is used to do this report + storageKey_ - only for storage nodes ( that's a report that a node has no key) + */ + function reportIfNew(VoteAction voteAction_, + NodeInfo storage reporterNode, + NodeInfo storage targetNode, + address[] memory newVoters_, + uint128 blockId_, + uint128 storageKey_ + ) private { + // check that we encounter this report X this block only for the first time + uint128[] memory reportedInBlocks_ = targetNode.counters.reportedInBlocks; + uint ribLen_ = reportedInBlocks_.length; + for (uint i = 0; i < ribLen_; i++) { + if (blockId_ == reportedInBlocks_[i]) { + revert('block is not new'); + } + } + + if (targetNode.nodeType == NodeType.SNode) { + require(storageKey_ != 0, 'storage key is required'); + uint128[] memory reportedKeys_ = targetNode.counters.reportedKeys; + uint rkLen_ = reportedKeys_.length; + for (uint i = 0; i < rkLen_; i++) { + if (storageKey_ == reportedKeys_[i]) { + revert('storage key is not new'); + } + } + targetNode.counters.reportedKeys.push(storageKey_); + } + + + targetNode.counters.reportCounter++; + targetNode.counters.reportedInBlocks.push(blockId_); + + // calculate new voters; they will collectively split payments on slash + address[] memory reportedBy_ = targetNode.counters.reportedBy; + uint rbLen_ = reportedBy_.length; + for (uint n = 0; n < newVoters_.length; n++) { + for (uint k = 0; k < rbLen_; k++) { + if (newVoters_[n] == reportedBy_[k] && newVoters_[n] != address(0)) { + newVoters_[n] = address(0); + break; + } + } + } + for (uint n = 0; n < newVoters_.length; n++) { + address voter_ = newVoters_[n]; + if (voter_ != address(0)) { + targetNode.counters.reportedBy.push(newVoters_[n]); + } + } + + if (targetNode.status == NodeStatus.OK) { + targetNode.status = NodeStatus.Reported; + } + emit NodeReported(targetNode.nodeWallet, reporterNode.nodeWallet, newVoters_, voteAction_); // todo do we need this ? + emit NodeStatusChanged(targetNode.nodeWallet, targetNode.status, targetNode.nodeTokens); + } + + function slash(NodeInfo storage reporterNode, NodeInfo storage targetNode) private { + // targetNode gets slashed by SLASH_PERCENT, this deducts delta_ tokens + uint256 coll_; + uint256 delta_; + (coll_, delta_) = reduceCollateral(targetNode, SLASH_PERCENT); + + // every pre-exising-signed-reporter will get a slice of the bonus + address[] memory reportedBy_ = targetNode.counters.reportedBy; + uint256 reporterBonus_; + if (delta_ > 0 && reportedBy_.length > 0) { + reporterBonus_ = delta_ / reportedBy_.length; + for (uint i = 0; i < reportedBy_.length; i++) { + NodeInfo storage ni = nodeMap[reportedBy_[i]]; + if (ni.ownerWallet == address(0)) { + continue; + } + ni.nodeTokens += reporterBonus_; + delta_ -= reporterBonus_; + } + } + // reporter will get the remaing points (less that reporterBonus) + reporterNode.nodeTokens += delta_; + + + delete targetNode.counters.reportedBy; + if (targetNode.status == NodeStatus.OK || targetNode.status == NodeStatus.Reported) { + targetNode.status = NodeStatus.Slashed; + } + targetNode.counters.reportCounter = 0; + targetNode.counters.slashCounter++; + emit NodeStatusChanged(targetNode.nodeWallet, NodeStatus.Slashed, coll_); + } + + function ban(NodeInfo storage targetNode) private { + uint256 coll_; + uint256 delta_; + (coll_, delta_) = reduceCollateral(targetNode, BAN_PERCENT); + _unstakeNode(targetNode); + targetNode.counters.slashCounter = 0; + targetNode.status = NodeStatus.BannedAndUnstaked; + emit NodeStatusChanged(targetNode.nodeWallet, NodeStatus.BannedAndUnstaked, 0); + } + +} diff --git a/smart-contracts/hardhat.config.ts b/smart-contracts/hardhat.config.ts new file mode 100644 index 0000000..fc13cc6 --- /dev/null +++ b/smart-contracts/hardhat.config.ts @@ -0,0 +1,45 @@ +// noinspection SpellCheckingInspection + +import {HardhatUserConfig, task} from "hardhat/config"; + +require('@openzeppelin/hardhat-upgrades'); +require('@nomiclabs/hardhat-etherscan') +import "@nomicfoundation/hardhat-toolbox"; +import {HardhatRuntimeEnvironment} from "hardhat/types"; +import {SignerWithAddress} from "@nomiclabs/hardhat-ethers/signers"; + +require("dotenv").config(); + +const config: HardhatUserConfig = { + solidity: { + version: "0.8.17", + settings: { + optimizer: { + enabled: true, + runs: 1000, + }, + }, + }, + // defaultNetwork: "polygon_mumbai", + + networks: { + hardhat: { + gas: 30000000 + }, + sepolia : { + url: process.env.SEPOLIA_TEST_RPC_URL, + accounts: [process.env.SEPOLIA_TEST_PRIVATE_KEY] + }, + }, + + etherscan: { + apiKey: process.env.ETHERSCAN_API_KEY + } +}; + +export default config; + +/* TASKS */ +import "./tasks/deployTasks" +import "./tasks/keyTasks" +import "./tasks/registerTasks" \ No newline at end of file diff --git a/contract/package.json b/smart-contracts/package.json similarity index 60% rename from contract/package.json rename to smart-contracts/package.json index 818a037..f0282bc 100644 --- a/contract/package.json +++ b/smart-contracts/package.json @@ -3,12 +3,13 @@ "devDependencies": { "@nomicfoundation/hardhat-chai-matchers": "^1.0.5", "@nomicfoundation/hardhat-toolbox": "^2.0.1", - "hardhat": "^2.12.7" + "hardhat": "^2.17.2" }, "dependencies": { "@nomiclabs/hardhat-etherscan": "^3.1.5", - "@openzeppelin/contracts": "^4.8.1", - "@openzeppelin/hardhat-upgrades": "^1.22.1", + "@openzeppelin/contracts": "^4.8.3", + "@openzeppelin/contracts-upgradeable": "^4.8.3", + "@openzeppelin/hardhat-upgrades": "^1.28.0", "dotenv": "^16.0.3" } } diff --git a/smart-contracts/scripts/deploy.ts b/smart-contracts/scripts/deploy.ts new file mode 100644 index 0000000..a6697cd --- /dev/null +++ b/smart-contracts/scripts/deploy.ts @@ -0,0 +1,34 @@ +import {ethers} from "hardhat"; +import {config as loadEnvVariables} from "dotenv"; +import {task} from "hardhat/config"; + +let info = console.log; + +async function main() { + loadEnvVariables(); + + // deploy token + const [owner] = await ethers.getSigners(); + const pushTokenFactory = await ethers.getContractFactory("PushToken"); + const pushToken = await pushTokenFactory.deploy(); + await pushToken.deployed(); + + info("VALIDATOR_PUSH_TOKEN_ADDRESS=", pushToken.address); + + // deploy + const pushTokenAddr = process.env.PUSH_TOKEN_ADDRESS ?? pushToken?.address; + const validatorV1Factory = await ethers.getContractFactory("ValidatorV1"); + const validator = await validatorV1Factory.deploy(pushTokenAddr); + await validator.deployed(); + info("VALIDATOR_CONTRACT_ADDRESS=", validator.address); + + // give 10k to owner + await pushToken.mint(owner.address, ethers.utils.parseEther("10000")); + info("owner ", owner.address); + info("owner balance ", await pushToken.balanceOf(owner.address)); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/contract/scripts/proxydeploy.ts b/smart-contracts/scripts/proxydeploy.ts similarity index 100% rename from contract/scripts/proxydeploy.ts rename to smart-contracts/scripts/proxydeploy.ts diff --git a/smart-contracts/scripts/registerTestNodes.ts b/smart-contracts/scripts/registerTestNodes.ts new file mode 100644 index 0000000..07a63ce --- /dev/null +++ b/smart-contracts/scripts/registerTestNodes.ts @@ -0,0 +1,52 @@ +import {ethers} from "hardhat"; +import {config as loadEnvVariables} from "dotenv"; +import {SignerWithAddress} from "@nomiclabs/hardhat-ethers/signers"; + +let info = console.log; + + + +async function main() { + loadEnvVariables(); + + const [owner, node1, node2, node3] = await ethers.getSigners(); + const pushAddr = process.env.VALIDATOR_PUSH_TOKEN_ADDRESS ?? process.exit(1); + const validatorAddr = process.env.VALIDATOR_CONTRACT_ADDRESS ?? process.exit(1); + info("pushAddr is ", pushAddr); + info("validatorAddr is ", validatorAddr); + + await registerNode(pushAddr, validatorAddr, owner, node1.address,100, "http://localhost:4001"); + await registerNode(pushAddr, validatorAddr, owner, node2.address,200, "http://localhost:4002"); + await registerNode(pushAddr, validatorAddr, owner, node3.address, 300, "http://localhost:4003"); +} + +main().catch((error) => { + info(error); + process.exitCode = 1; +}); + + +/** + * + * @param pushAddr push smart contract (deployed) + * @param validatorAddr validator smart contract (deployed) + * @param nodeOwner the wallet which pays for the node registration + * @param nodeAddr the wallet which is being used for the node operation (it does not contain tokens) + * @param amount amount of push tokens + * @param nodeUrl node api url endpoint + */ +async function registerNode(pushAddr: string, validatorAddr: string, + nodeOwner: SignerWithAddress, + nodeAddr: string, amount: number, nodeUrl:string) { + const pushCt = await ethers.getContractAt("IERC20", pushAddr, nodeOwner); + let tx1 = await pushCt.connect(nodeOwner).approve(validatorAddr, amount); + await tx1.wait(); + info("node ", nodeAddr); + + const validatorCt = await ethers.getContractAt("ValidatorV1", validatorAddr, nodeOwner); + let tx2 = await validatorCt.connect(nodeOwner).registerNodeAndStake(amount, 0, + nodeUrl, nodeAddr); + await tx2.wait(); + let res = await validatorCt.getNodeInfo(nodeAddr); + info("getNodeInfo:", res); +} \ No newline at end of file diff --git a/smart-contracts/src/DeployerUtil.ts b/smart-contracts/src/DeployerUtil.ts new file mode 100644 index 0000000..1adeb10 --- /dev/null +++ b/smart-contracts/src/DeployerUtil.ts @@ -0,0 +1,87 @@ +import {PushToken, StorageV1, ValidatorV1} from "../typechain-types"; +import {HardhatRuntimeEnvironment} from "hardhat/types"; + +let log = console.log; + + +export namespace DeployerUtil { + + export async function deployPushTokenFake(hre: HardhatRuntimeEnvironment): Promise<PushToken> { + log('deploying PushToken'); + const ptFactory = await hre.ethers.getContractFactory("PushToken"); + const pushContract = <PushToken>await ptFactory.deploy(); + log(`deployed impl: ${pushContract.address}`); + log('done'); + return pushContract; + } + + export async function deployValidatorContract(hre: HardhatRuntimeEnvironment, pushCt: string): Promise<ValidatorV1> { + log('deploying SigUtil library'); + const suFactory = await hre.ethers.getContractFactory("SigUtil"); + const suLibrary = await suFactory.deploy(); + await suLibrary.deployed(); + log('deployed SigUtil at ', suLibrary.address) + + log('deploying ValidatorV1'); + const validatorV1Factory = await hre.ethers.getContractFactory("ValidatorV1", + {libraries: {SigUtil: suLibrary.address}}); + const protocolVersion = 1; + const valPerBlockTarget = 5; + const nodeRandomMinCount = 1; + const nodeRandomPingCount = 1; + const REPORTS_BEFORE_SLASH_V = 2; // 10 for prod + const REPORTS_BEFORE_SLASH_S = 2; // 50 for prod + const SLASHES_BEFORE_BAN_V = 2; + const SLASHES_BEFORE_BAN_S = 2; + const SLASH_PERCENT = 10; + const BAN_PERCENT = 10; + + const validatorV1Proxy = await upgrades.deployProxy(validatorV1Factory, + [protocolVersion, pushCt, valPerBlockTarget, nodeRandomMinCount, nodeRandomPingCount, + REPORTS_BEFORE_SLASH_V, REPORTS_BEFORE_SLASH_S, SLASHES_BEFORE_BAN_V, SLASHES_BEFORE_BAN_S, + SLASH_PERCENT, BAN_PERCENT], + { + kind: "uups", + unsafeAllowLinkedLibraries: true + }); + await validatorV1Proxy.deployed(); + log(`deployed proxy: ${validatorV1Proxy.address}`); + + let validatorV1Impl = await upgrades.erc1967.getImplementationAddress(validatorV1Proxy.address); + log(`deployed impl: ${validatorV1Impl}`); + log('done'); + return validatorV1Proxy; + } + + export async function updateValidatorContract(hre: HardhatRuntimeEnvironment, validatorProxyCt: string) { + const ethers = hre.ethers; + const [owner] = await hre.ethers.getSigners(); + log(`owner is ${owner.address}`); + log(`proxy is ${validatorProxyCt}`); + const validatorV1Factory = await ethers.getContractFactory("ValidatorV1"); + const abi = await upgrades.upgradeProxy(validatorProxyCt, validatorV1Factory, {kind: 'uups'}); + log(`updated proxy at address: ${abi.address}`); + } + + export async function deployStorageContract(hre: HardhatRuntimeEnvironment, valCt: string): Promise<StorageV1> { + log('deploying StorageV1') + let protocolVersion = 1; + let rfTarget = 5; + const factory = await hre.ethers.getContractFactory("StorageV1"); + const proxyCt = await upgrades.deployProxy(factory, + [protocolVersion, valCt, rfTarget], + {kind: "uups"}); + await proxyCt.deployed(); + log(`deployed proxy: ${proxyCt.address}`); + let implCt = await upgrades.erc1967.getImplementationAddress(proxyCt.address); + log(`deployed impl: ${implCt}`); + log('done'); + return proxyCt; + } +} + +export enum NodeType { + VNode = 0, // validator 0 + SNode = 1, // storage 1 + DNode = 2 // delivery 2 +} \ No newline at end of file diff --git a/smart-contracts/src/RegisterUtil.ts b/smart-contracts/src/RegisterUtil.ts new file mode 100644 index 0000000..ef520c7 --- /dev/null +++ b/smart-contracts/src/RegisterUtil.ts @@ -0,0 +1,33 @@ +import {SignerWithAddress} from "@nomiclabs/hardhat-ethers/signers"; +import {HardhatRuntimeEnvironment} from "hardhat/types"; + +let info = console.log; + +export class RegisterUtil { + /** + * + * @param pushAddr push smart contract (deployed) + * @param validatorAddr validator smart contract (deployed) + * @param nodeOwner the wallet which pays for the node registration + * @param nodeAddr the wallet which is being used for the node operation (it does not contain tokens) + * @param amount amount of push tokens + * @param nodeUrl node api url endpoint + */ + public static async registerNode(hre:HardhatRuntimeEnvironment, + pushAddr: string, validatorAddr: string, + nodeOwner: SignerWithAddress, + nodeAddr: string, amount: number, nodeUrl: string, nodeType:number) { + info("registerNode()"); + const ethers = hre.ethers; + const pushCt = await ethers.getContractAt("IERC20", pushAddr, nodeOwner); + let tx1 = await pushCt.connect(nodeOwner).approve(validatorAddr, amount); + await tx1.wait(); + info("node ", nodeAddr); + const validatorCt = await ethers.getContractAt("ValidatorV1", validatorAddr, nodeOwner); + let tx2 = await validatorCt.connect(nodeOwner).registerNodeAndStake(amount, nodeType, + nodeUrl, nodeAddr); + await tx2.wait(); + let res = await validatorCt.getNodeInfo(nodeAddr); + info("getNodeInfo:", res); + } +} diff --git a/smart-contracts/tasks/deployTasks.ts b/smart-contracts/tasks/deployTasks.ts new file mode 100644 index 0000000..2ae81d2 --- /dev/null +++ b/smart-contracts/tasks/deployTasks.ts @@ -0,0 +1,62 @@ +import {subtask, task, types} from "hardhat/config" +import {PushToken, StorageV1, ValidatorV1} from "../typechain-types"; +import {ethers} from "hardhat"; +import {DeployerUtil} from "../src/DeployerUtil"; + +let log = console.log; + +task("v:deployTestPushTokenCt", "register a test push token; owner emits 10k for himself") + .setAction(async (taskArgs, hre) => { + const ethers = hre.ethers; + const [owner] = await hre.ethers.getSigners(); + log(`owner is ${owner.address}`); + + const pushToken = await DeployerUtil.deployPushTokenFake(hre); + log(`pushToken deployed`); + + const mintAmount = "100000"; + const amount = ethers.utils.parseEther(mintAmount); + await pushToken.mint(owner.address, amount); + let finalBalance = await pushToken.balanceOf(owner.address); + log(`minted ${mintAmount} for owner ${owner.address}, balance is ${finalBalance}`); + log(`pushToken address: ${pushToken.address}`); + }); + + +task("v:deployValidatorCt", "deploys validatorCt") + .addPositionalParam("pushCt", "push token contract") + .setAction(async (taskArgs, hre) => { + const ethers = hre.ethers; + const [owner] = await hre.ethers.getSigners(); + const pushCt = taskArgs.pushCt; + log(`owner is ${owner.address}`); + log(`pushcontract is ${pushCt}`); + + const validatorCt = await DeployerUtil.deployValidatorContract(hre, pushCt); + }); + + +task("v:updateValidatorCt", "redeploys a new validatorCt") + .addPositionalParam("validatorProxyCt", "validatorCt proxy address") + .setAction(async (taskArgs, hre) => { + await DeployerUtil.updateValidatorContract(hre, taskArgs.validatorProxyCt); + }); + + +task("v:deployStorageCt", "deploys validatorCt and registers it into validator contract") + .addPositionalParam("validatorContract", "validator contract") + .setAction(async (taskArgs, hre) => { + const ethers = hre.ethers; + const [owner] = await hre.ethers.getSigners(); + log(`owner is ${owner.address}`); + const pushCt = taskArgs.pushCt; + const valCtAddr: string = taskArgs.validatorContract; + log('deploying storage contract') + const storeCt = await DeployerUtil.deployStorageContract(hre, valCtAddr); + log(`deployed`); + + log(`registering storage contract ${storeCt.address} into validator at ${valCtAddr}`) + const valCt = await ethers.getContractAt("ValidatorV1", valCtAddr, owner); + await valCt.setStorageContract(storeCt.address); + log(`validatorContract successfully registered new address: `, await valCt.storageContract()); + }); diff --git a/smart-contracts/tasks/keyTasks.ts b/smart-contracts/tasks/keyTasks.ts new file mode 100644 index 0000000..06a87a4 --- /dev/null +++ b/smart-contracts/tasks/keyTasks.ts @@ -0,0 +1,59 @@ +import crypto from "crypto"; +import {Wallet} from "ethers"; +import {task} from "hardhat/config"; + +let info = console.log; + +task("key:generateTestEthKeys", "shows a pre defined set of keys used for tests") + .setAction(async (taskArgs, hre) => { + // keys for validator node tests + await printPrivateKeyDetails('0x33fb23f822c5dba0f3cb2796b90d56bb553ebd215726398c93374440b34e510b', 'test'); + await printPrivateKeyDetails('0x16c90855a0dfc9884adf2625a4bffcdbfe760d5ff6756a766d2bbc0bc82318f0', 'test'); + await printPrivateKeyDetails('0xb6c538bac86eb0964b16b7ff6a1ac7d5f0736dcbd0f00bd142ae433dad27f685', 'test'); + await printPrivateKeyDetails('0x445ab25af345ce4096ca1e46f6846a4e8617cc1d513440671647f5f137c9c684', 'test'); + // keys for delivery node tests + await printPrivateKeyDetails('0xaceda8e33da25891123d3f425233f57832d8a139649f660fb2c63571ea777921', 'test'); + // keys for storage node tests + await printPrivateKeyDetails('0xac3a2f1b2eedbf02ef33fc22b438d8e7021c1b72141623d38feebf031fdcb5c9', 'test'); + }); + +task("key:generateEthKeyFromEthers", "generates secure keys") + .addPositionalParam("passwordForJsonKeyFile") + .setAction(async (args, hre) => { + const wallet = hre.ethers.Wallet.createRandom(); + const privKey = wallet.privateKey; + const address = wallet.address; + info(`generated address=${address}, privKey=${privKey}`); + await printPrivateKeyDetails(privKey, args.passwordForJsonKeyFile); + }); + +task("key:generateEthKeyFromRandom", "generates secure keys") + .addPositionalParam("passwordForJsonKeyFile") + .setAction(async (args, hre) => { + const privKey = generateRandomEthPrivateKey(); + info(`generated privKey=${privKey}`); + await printPrivateKeyDetails(privKey, args.passwordForJsonKeyFile); + }); + + +function generateRandomEthPrivateKey() { + return "0x" + crypto.randomBytes(32).toString("hex"); +} + +async function generateKeys() { + +} + +async function printPrivateKeyDetails(privKey: string, pass: string) { + const wallet1 = new Wallet(privKey); + const wallet1Address = await wallet1.getAddress(); + const encryptedJsonWallet = await wallet1.encrypt(pass); + + info("-".repeat(20)); + info("address ", wallet1Address); + info("privKey", privKey); + info("pubKey", wallet1.publicKey); + info("encrypted json pass:", pass); + info("encrypted json:", encryptedJsonWallet); + info("=".repeat(20)); +} \ No newline at end of file diff --git a/smart-contracts/tasks/registerTasks.ts b/smart-contracts/tasks/registerTasks.ts new file mode 100644 index 0000000..d24bc39 --- /dev/null +++ b/smart-contracts/tasks/registerTasks.ts @@ -0,0 +1,101 @@ +import {task} from "hardhat/config"; +import {RegisterUtil} from "../src/RegisterUtil"; +import {HardhatRuntimeEnvironment} from "hardhat/types"; +import {NodeType} from "../src/DeployerUtil"; + +let info = console.log; + +task("v:registerValidator", "adds a new validator node") + .addParam("validatorProxyCt", "validatorCt proxy address") + .addParam("pushCt", "push token contract") + .addPositionalParam("nodeAddress", "") + .addPositionalParam("nodeUrl", "") + .addPositionalParam("nodeAmount", "") + .setAction(async (args, hre) => { + const validatorProxyCt = args.validatorProxyCt; + info(`validatorProxyCt is ${validatorProxyCt}`); + const pushCt = args.pushCt; + info(`pushCt is ${pushCt}`); + const [nodeOwner] = await hre.ethers.getSigners(); + info(`nodeOwner is ${nodeOwner.address}`); + + const nodeAddress = args.nodeAddress; + const nodeUrl = args.nodeUrl; + const nodeAmount = args.nodeAmount; + info(`nodeAddress=${nodeAddress}, nodeUrl=${nodeUrl}, nodeAmount=${nodeAmount}`); + await RegisterUtil.registerNode(hre, pushCt, validatorProxyCt, nodeOwner, nodeAddress, nodeAmount, nodeUrl, 0); + info(`success`); + }); + +task("v:registerDelivery", "adds a new delivery node") + .addParam("validatorProxyCt", "validatorCt proxy address") + .addParam("pushCt", "push token contract") + .addPositionalParam("nodeAddress", "") + .addPositionalParam("nodeAmount", "") + .setAction(async (args, hre) => { + const validatorProxyCt = args.validatorProxyCt; + info(`validatorProxyCt is ${validatorProxyCt}`); + const pushCt = args.pushCt; + info(`pushCt is ${pushCt}`); + const [nodeOwner] = await hre.ethers.getSigners(); + info(`nodeOwner is ${nodeOwner.address}`); + + const nodeAddress = args.nodeAddress; + const nodeUrl = ''; + const nodeAmount = args.nodeAmount; + info(`nodeAddress=${nodeAddress}, nodeUrl=${nodeUrl}, nodeAmount=${nodeAmount}`); + await RegisterUtil.registerNode(hre, pushCt, validatorProxyCt, nodeOwner, nodeAddress, nodeAmount, nodeUrl, 2); + info(`success`); + }); + +task("v:registerStorage", "adds a new storage node") + .addParam("validatorProxyCt", "validatorCt proxy address") + .addParam("pushCt", "push token contract") + .addPositionalParam("nodeAddress", "") + .addPositionalParam("nodeUrl", "") + .addPositionalParam("nodeAmount", "") + .setAction(async (args, hre) => { + const validatorProxyCt = args.validatorProxyCt; + info(`validatorProxyCt is ${validatorProxyCt}`); + const pushCt = args.pushCt; + info(`pushCt is ${pushCt}`); + const [nodeOwner] = await hre.ethers.getSigners(); + info(`nodeOwner is ${nodeOwner.address}`); + + const nodeAddress = args.nodeAddress; + const nodeUrl = args.nodeUrl; + const nodeAmount = args.nodeAmount; + info(`nodeAddress=${nodeAddress}, nodeUrl=${nodeUrl}, nodeAmount=${nodeAmount}`); + await RegisterUtil.registerNode(hre, pushCt, validatorProxyCt, nodeOwner, nodeAddress, nodeAmount, nodeUrl, NodeType.SNode); + info(`success`); + }); + + +task("push:balanceOf", "prints account balance @ PUSH token") + .addParam("pushCt", "push token contract") + .addPositionalParam("address") + .setAction(async (args, hre) => { + await printBalance(hre, args.pushCt, args.address); + }); + + +task("v:listNodes", "shows validator nodes registered") + .addParam("validatorProxyCt", "validatorCt proxy address") + .setAction(async (args, hre) => { + const validator = await hre.ethers.getContractAt("ValidatorV1", args.validatorProxyCt); + info(`showing validator nodes registered in ${args.validatorProxyCt}`); + info(await validator.getVNodes()); + info(`showing storage nodes registered in ${args.validatorProxyCt}`); + info(await validator.getSNodes()); + info(`showing delivery nodes registered in ${args.validatorProxyCt}`); + info(await validator.getDNodes()); + info(`registered storage contract is`); + info(await validator.storageContract()) + }); + + +async function printBalance(hre: HardhatRuntimeEnvironment, pushCt: string, balanceAddr: string) { + const push = await hre.ethers.getContractAt("IERC20", pushCt); + info(`checking balance of ${balanceAddr} in IERC20 ${pushCt}`); + info(await push.balanceOf(balanceAddr)); +} \ No newline at end of file diff --git a/smart-contracts/test/Signature.test.ts b/smart-contracts/test/Signature.test.ts new file mode 100644 index 0000000..5975e70 --- /dev/null +++ b/smart-contracts/test/Signature.test.ts @@ -0,0 +1,85 @@ +// noinspection JSUnusedGlobalSymbols + +import {loadFixture} from "@nomicfoundation/hardhat-network-helpers"; +import "@nomicfoundation/hardhat-chai-matchers"; +import "@nomiclabs/hardhat-ethers"; +import {expect, assert} from "chai"; +import {ethers} from "hardhat"; +import {PushToken, ValidatorV1} from "../typechain-types"; +import {SignerWithAddress} from "@nomiclabs/hardhat-ethers/signers"; + +const utils = ethers.utils; + +function mergeUInt8Arrays(a1: Uint8Array, a2: Uint8Array): Uint8Array { + // sum of individual array lengths + let mergedArray = new Uint8Array(a1.length + a2.length); + mergedArray.set(a1); + mergedArray.set(a2, a1.length); + return mergedArray; +} + +function getMessageHashJS(message: string) { + return utils.keccak256(utils.arrayify(message)); +} + +// doesn't work correctly as the code in the contract +function getEthSignedMessageHashJS(messageHash:string) { + const prefix = "\x19Ethereum Signed Message:\n32"; + let arr1 = utils.toUtf8Bytes(prefix); + let arr2 = utils.toUtf8Bytes(messageHash); + const ethSignedMessage = mergeUInt8Arrays(arr1, arr2); + return utils.keccak256(ethSignedMessage); + // return utils.solidityKeccak256(['string', 'string'], [prefix, messageHash]); +} + +/** + * Signing + * https://docs.ethers.org/v4/cookbook-signing.html + * + * Signing + * https://solidity-by-example.org/signature/ + * https://github.com/t4sk/hello-erc20-permit/blob/main/test/verify-signature.js + */ +describe("SignatureTest", function () { + + it("tc1", async function () { + console.log('started') + // signers + const [owner, node1Wallet] = await ethers.getSigners(); + // deploy contract + const contractFactory = await ethers.getContractFactory("SignatureTest"); + const contract = await contractFactory.deploy(); + + // sign the message + let message = "0xAA"; + + console.log(`signingAddress: ${node1Wallet.address}`); + const hashCalculatedByContract = await contract.getMessageHash(message); + const sig = await node1Wallet.signMessage(ethers.utils.arrayify(hashCalculatedByContract)); + const ethHash = await contract.getEthSignedMessageHash(hashCalculatedByContract); + + const hashCalculatedByJs = getMessageHashJS(message); + assert.equal(hashCalculatedByJs, hashCalculatedByContract); + + + console.log("signer ", node1Wallet.address) + console.log("recovered signer", await contract.recoverSigner(ethHash, sig)); + + // Correct signature and message returns true + expect( + await contract.verify(message, node1Wallet.address, sig) + ).to.equal(true) + + // Incorrect message returns false + expect( + await contract.verify(message + "01", node1Wallet.address, sig) + ).to.equal(false) + }) +}); + + +async function checkSignature(message: string, signatureHex: string) { + let sigDetails = ethers.utils.splitSignature(signatureHex); + let signingAddress: string = ethers.utils.verifyMessage(message, sigDetails); + console.log(`checkSignature() message: ${message} signature: ${signatureHex} signingAddress: ${signingAddress} \n`); +} \ No newline at end of file diff --git a/smart-contracts/test/StorageContract.test.ts b/smart-contracts/test/StorageContract.test.ts new file mode 100644 index 0000000..573f237 --- /dev/null +++ b/smart-contracts/test/StorageContract.test.ts @@ -0,0 +1,594 @@ +import {time, loadFixture} from "@nomicfoundation/hardhat-network-helpers"; +import {anyValue} from "@nomicfoundation/hardhat-chai-matchers/withArgs"; +import "@nomicfoundation/hardhat-chai-matchers"; +import "@nomiclabs/hardhat-ethers"; +import {expect} from "chai"; +import {assert} from "chai"; +import hre, {ethers} from "hardhat"; +import {Contract, ContractTransaction} from "ethers"; +import {SignerWithAddress} from "@nomiclabs/hardhat-ethers/signers"; +import {BitUtil} from "./uitlz/bitUtil"; +import {TestHelper as t} from "./uitlz/TestHelper"; +import {CollectionUtil} from "./uitlz/collectionUtil"; +import {NodeStatus} from "./ValidatorHelper"; +import {DeployerUtil} from "../src/DeployerUtil"; +import {StorageV1} from "../typechain-types"; + +let debug = console.log; +let ct: StorageV1; +let ctAsOwner: StorageV1; + +let nodes = [null]; +for (let i = 1; i <= 254; i++) { + nodes.push('0x' + i.toString().padStart(40, '0')); +} + + +interface StorageContract { + + nodeAddrList(pos: number): Promise<string>; + + mapNodeIdToAddr(nodeId: number): Promise<string>; + + nodeIdList(pos: number): Promise<number>; + + rf(): Promise<number>; + + getNodeShardsByAddr(addr: string): Promise<number>; + + nodeCount(): Promise<number>; + + addNode(addr: string): Promise<ContractTransaction>; + + removeNode(addr: string): Promise<ContractTransaction>; + + SHARD_COUNT(): Promise<number>; + + // admin functions + + overrideRf(number): Promise<ContractTransaction>; + + shuffle(): Promise<ContractTransaction>; + +} + +type TypedStorageContract = StorageV1 & Contract; + +class DeployInfo { + storageCt: TypedStorageContract; + owner: SignerWithAddress; +} + +async function state1(): Promise<DeployInfo> { + debug('building snapshot'); + // Contracts are deployed using the first signer/account by default + const [owner, otherAccount, thirdAccount] = await ethers.getSigners(); + + let protocolVersion = 1; + let validatorContract = '0x' + '0'.repeat(40); + let rfTarget = 5; + let storageCt = await DeployerUtil.deployStorageContract(hre, validatorContract); + + + // const storageCtFactory = await ethers.getContractFactory("StorageV1"); + // const storageCt = await storageCtFactory.deploy(); + return {storageCt, owner}; +} + + +// read everything from the contract state to ease the testing +class State { + rf: number; + nodeList = new Set<string>(); + map: Map<string, Set<number>> = new Map(); + shardCount: number; + + public static async readFromEvm(): Promise<State> { + let s = new State(); + s.rf = await ct.rf(); + s.shardCount = await ct.SHARD_COUNT(); + let nodeCount = await ct.nodeCount(); + for (let i = 0; i < nodeCount; i++) { + let nodeId = await ct.nodeIdList(i); + let addr = await ct.mapNodeIdToAddr(nodeId); + let shardsBitSet = await ct.getNodeShardsByAddr(addr); + let shardsIntArr = BitUtil.bitsToPositions(shardsBitSet); + let shardsIntSet = CollectionUtil.arrayToSet(shardsIntArr); + s.map.set(addr, shardsIntSet); + s.nodeList.add(addr); + const nodeIdFixed = (nodeId + '').padStart(3, ' '); + console.log(`node`, nodeIdFixed, addr, CollectionUtil.setToArray(shardsIntSet)); + } + return s; + } + + checkRf(e: number) { + console.log('assert rf', e); + assert.equal(this.rf, e); + } + + checkNodeCount(e: number) { + console.log('assert nodeCount', e); + assert.equal(this.nodeList.size, e); + } + + assertMapping(addr: string, shardsAssigned: number[]) { + assert.deepEqual(CollectionUtil.setToArray(this.map.get(addr)), shardsAssigned); + console.log(`assert ${addr} has good mapping`); + } + + checkDistribution(expectedRf: number = -1) { + let minSize = 100000000000; + let maxSize = 0; + for (const [node, shards] of this.map) { + minSize = Math.min(minSize, shards.size); + maxSize = Math.max(maxSize, shards.size); + } + const delta = maxSize - minSize; + console.log('assert maxdistance', delta) + assert.isTrue(delta <= 1, `maxdistance > 1`); + this.assertCorrectReplicationFactor(expectedRf); + } + + assertCorrectReplicationFactor(expectedRf: number = -1) { + console.log('assert rf', expectedRf); + let shardToCnt = new Map<number, number>; + for (const [nodeId, shards] of this.map) { + for (const sh of shards) { + let counter = shardToCnt.get(sh); + counter = counter == null ? 1 : ++counter; + shardToCnt.set(sh, counter); + } + } + if (this.nodeList.size == 0) { + return; + } + if (expectedRf == -1) { + expectedRf = this.rf; + } + for (let sh = 0; sh < this.shardCount; sh++) { + const actualCnt = shardToCnt.get(sh); + if (actualCnt != expectedRf) { + throw new Error(`incorrect number of shards for shard: ${sh} , ` + + `got ${actualCnt} expected ${this.rf}`); + } + } + } +} + +async function assertRf(e: number) { + const actualRf = await ct.rf(); + console.log('assert actual rf', e); + assert.equal(actualRf, e); +} + +async function assertNodeListLength(e: number) { + const nodeListLength = await ct.nodeCount(); + console.log('assert actual nodeListLength', nodeListLength); + assert.equal(nodeListLength, e); +} + +async function beforeEachInit() { + const state = await loadFixture(state1); + ct = state.storageCt; + ctAsOwner = ct.connect(state.owner); + expect(ct.address).to.be.properAddress; +} + +describe("StorageTestAutoRf", function () { + + beforeEach(beforeEachInit) + + it('test0', async () => { + let s = await State.readFromEvm(); + s.checkRf(0); + assert.equal(await ct.nodeCount(), 0); + assert.equal(await ct.SHARD_COUNT(), 32); + }) + + it("test1", async function () { + console.log(nodes[1]); + let tx = await ct.addNode(nodes[1]); + await expect(tx).to.emit(ct, "SNodeMappingChanged").withArgs([nodes[1]]); + let s = await State.readFromEvm(); + s.checkNodeCount(1); + s.checkRf(1); + s.assertMapping(nodes[1], + [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31]); + }); + + + it('test2', async () => { + { + let t1 = await ct.addNode(nodes[1]); + await expect(t1).to.emit(ct, "SNodeMappingChanged").withArgs([nodes[1]]); + let s = await State.readFromEvm(); + s.checkRf(1); + s.checkNodeCount(1); + s.assertMapping(nodes[1], + [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31]); + } + { + let t1 = await ct.addNode(nodes[2]); + await expect(t1).to.emit(ct, "SNodeMappingChanged").withArgs([nodes[2]]); + let s = await State.readFromEvm(); + s.checkRf(2); + s.checkNodeCount(2); + s.assertMapping(nodes[2], + [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31]); + } + }); + + it('test_5to6', async () => { + let nodeCount = 0; + for (let nodeId = 1; nodeId <= 6; nodeId++) { + if (nodeId === 6) { + console.log('\n'.repeat(5) + '='.repeat(15)) + } + let tx = await ct.addNode(nodes[nodeId]); + await t.confirmTransaction(tx); + nodeCount++; + } + let s = await State.readFromEvm(); + s.checkRf(5); + s.checkNodeCount(6); + s.checkDistribution(); + + }); + + it('test_1to5_6to10', async () => { + let s = await State.readFromEvm(); + s.checkRf(0); + s.checkNodeCount(0); + s.checkDistribution(); + + let nodeCount = 0; + // add 5 nodes , every should get the same shards + // because replication factor increments also to 5 + for (let nodeId = 1; nodeId <= 5; nodeId++) { + // add 1 node + const addr = nodes[nodeId]; + console.log('test adds ', addr); + let t1 = await ct.addNode(addr); + await expect(t1).to.emit(ct, "SNodeMappingChanged").withArgs([addr]); + nodeCount++; + // check that replication count incremented + // check that event affected only this one node + // check that all nodes up to this one have the same mapping to all shards + let s = await State.readFromEvm(); + s.checkRf(nodeCount); + s.checkNodeCount(nodeCount); + s.checkDistribution(); + for (let i = 1; i <= nodeId; i++) { + s.assertMapping(nodes[i], + [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31]); + } + } + + // we have 5 nodes + let s1 = await State.readFromEvm(); + s1.checkRf(5); + s1.checkNodeCount(5); + + // add 6 to 10 + for (let nodeId = 6; nodeId <= 10; nodeId++) { + { + let t1 = await ct.addNode(nodes[nodeId]); + await t.confirmTransaction(t1); + nodeCount++; + let s = await State.readFromEvm(); + s.checkRf(5); + s.checkNodeCount(nodeCount); + s.checkDistribution(); + } + } + // END TEST + }); + + it('test_add2_remove2', async () => { + let nodeCount = 0; + for (let nodeId = 1; nodeId <= 2; nodeId++) { + const addr = nodes[nodeId]; + console.log('test adds ', addr); + let t1 = await ct.addNode(addr); + await expect(t1).to.emit(ct, "SNodeMappingChanged").withArgs([nodes[nodeId]]); + nodeCount++; + let s = await State.readFromEvm(); + s.checkRf(nodeCount); + s.checkNodeCount(nodeCount); + s.checkDistribution(); + } + { + let t1 = ct.removeNode(nodes[1]); + nodeCount--; + await expect(t1).to.emit(ct, "SNodeMappingChanged").withArgs([nodes[1]]); // raised by delete + let s = await State.readFromEvm(); + s.checkRf(nodeCount); + s.checkNodeCount(nodeCount); + s.checkDistribution(); + } + { + let t1 = ct.removeNode(nodes[2]); + nodeCount--; + await expect(t1).to.emit(ct, "SNodeMappingChanged").withArgs([nodes[2]]); // raised by delete + let s = await State.readFromEvm(); + s.checkRf(nodeCount); + s.checkNodeCount(nodeCount); + s.checkDistribution(); + } + }) + +}); + + +describe("StorageTestNoAutoRf", function () { + + beforeEach(beforeEachInit) + + it('rf2_test_add2_remove2', async () => { + let nodeCount = 0; + { + let nodeId = 1; + const addr = nodes[nodeId]; + console.log('test adds ', addr); + let t1 = await ct.addNode(addr); + nodeCount++; + await expect(t1).to.emit(ct, "SNodeMappingChanged").withArgs([addr]); + await ctAsOwner.overrideRf(1); // manually set RF + let s = await State.readFromEvm(); + s.checkRf(1); + s.checkNodeCount(1); + s.checkDistribution(); + } + { + let nodeId = 2; + const addr = nodes[nodeId]; + console.log('test adds ', addr); + let t1 = await ct.addNode(addr); // rf is 1 + nodeCount++; + await expect(t1).to.emit(ct, "SNodeMappingChanged").withArgs([nodes[1], nodes[2]]); + await ctAsOwner.overrideRf(2); // manually set RF + await ctAsOwner.shuffle(); + // await t.confirmTransaction(t1); + let s = await State.readFromEvm(); + s.checkRf(2); + s.checkNodeCount(2); + s.checkDistribution(); + } + + { + let t1 = ct.removeNode(nodes[1]); + nodeCount--; + await expect(t1).to.emit(ct, "SNodeMappingChanged").withArgs([nodes[1]]); // raised by delete + let s = await State.readFromEvm(); + s.checkRf(2); // RF doesn't decrement since it's manual + s.checkNodeCount(nodeCount); + s.checkDistribution(1); + } + { + let t1 = ct.removeNode(nodes[2]); + nodeCount--; + await expect(t1).to.emit(ct, "SNodeMappingChanged").withArgs([nodes[2]]); // raised by delete + let s = await State.readFromEvm(); + s.checkRf(2); // RF doesn't decrement since it's manual + s.checkNodeCount(nodeCount); + s.checkDistribution(0); + } + }); + + + it('rf2_test20nodes_2join_1leave', async () => { + let nodeCount = 0; + for (let nodeId = 1; nodeId <= 3; nodeId++) { + const addr = nodes[nodeId]; + let t1 = await ct.addNode(addr); + if (nodeId == 2) { + await ctAsOwner.overrideRf(2); // manually set RF + await ctAsOwner.shuffle(); + } + nodeCount++; + await t.confirmTransaction(t1); + let s = await State.readFromEvm(); + s.checkNodeCount(nodeCount); + if (nodeId >= 2) { + s.checkDistribution(); + } + } + let s = await State.readFromEvm(); + s.checkRf(2); + s.checkNodeCount(nodeCount); + s.checkDistribution(2); + for (let nodeId = 4; nodeId <= 20; nodeId++) { + console.log('-'.repeat(20), 'adding', nodeId); + if (nodeId % 3 === 0) { + { + const addr = nodes[nodeId]; + let t1 = await ct.addNode(addr); + nodeCount++; + await t.confirmTransaction(t1); + } + { + let t1 = await ct.removeNode(nodes[nodeId - 1]); + nodeCount--; + await t.confirmTransaction(t1); + } + } else { + { + const addr = nodes[nodeId]; + let t1 = await ct.addNode(addr); + nodeCount++; + await t.confirmTransaction(t1); + } + } + let s = await State.readFromEvm(); + s.checkRf(2); + s.checkNodeCount(nodeCount); + s.checkDistribution(2); + } + }) + + + it('test_admin_lowers_rf_2to1', async () => { + let t1 = await ct.addNode(nodes[1]); + await expect(t1).to.emit(ct, "SNodeMappingChanged").withArgs([nodes[1]]); + let t2 = await ct.addNode(nodes[2]); + await expect(t2).to.emit(ct, "SNodeMappingChanged").withArgs([nodes[2]]); + assert.equal(2, await ct.rf()); + debug('------ admin sets a fixed rf of 1; so we need to grab a lot at unassigned check stage'); + let t3 = await ct.overrideRf(1); + await t.confirmTransaction(t3); + assert.equal(1, await ct.rf()); + assert.equal(0, await ct.rfTarget()); + + let t4 = await ct.shuffle(); + await expect(t4).to.emit(ct, "SNodeMappingChanged").withArgs([nodes[1], nodes[2]]); + assert.equal(1, await ct.rf()); + assert.equal(0, await ct.rfTarget()); + + }); + + + it('test_admin_lowers_rf_5_to_0', async () => { + // add nodes from 1 to 20 + let nodeCount = 0; + for (let nodeId = 1; nodeId <= 25; nodeId++) { + const addr = nodes[nodeId]; + debug('adding nodeId: %s with address: %s', nodeId, addr); + let t1 = await ct.addNode(addr); + await t.confirmTransaction(t1); + nodeCount++; + } + debug('---- added nodes, lowering rf') + // lower rf from 5 to 0 manually + for (let rf = 5; rf >= 1; rf--) { + debug('---- rf set to ', rf); + let t1 = await ct.overrideRf(rf); + await t.confirmTransaction(t1); + + assert.equal(rf, await ct.rf()); + assert.equal(0, await ct.rfTarget()); + + let t2 = await ct.shuffle(); + await t.confirmTransaction(t2); + + let s = await State.readFromEvm(); + s.checkRf(rf); + s.checkNodeCount(nodeCount); + s.checkDistribution(); + } + }).timeout(600000) +}); + + +describe('StorageTestBig', function () { + + // runs only when ENV is set because it takes time + if (process.env.StorageTestBig !== 'true') { + return; + } + + beforeEach(beforeEachInit); + + let nodeCount = 0; + + async function addNode(nodeId: number) { + { + const addr = nodes[nodeId]; + assert.isTrue(addr != null); + let t1 = await ct.addNode(addr); + nodeCount++; + await t.confirmTransaction(t1); + } + } + + async function removeNode(nodeId: number) { + const addr = nodes[nodeId]; + assert.isTrue(addr != null); + let t1 = await ct.removeNode(addr); + nodeCount--; + await t.confirmTransaction(t1); + } + + async function setRfAndShuffle(rf: number) { + await ctAsOwner.overrideRf(rf); + await ctAsOwner.shuffle(); + } + + it('test_rfAuto_n1to50', async () => { + for (let nodeCount = 1; nodeCount <= 50; nodeCount++) { + await addNode(nodeCount); + let s = await State.readFromEvm(); + s.checkNodeCount(nodeCount); + s.checkDistribution(Math.min(nodeCount, 5)); + } + }).timeout(600000); + + it('test_rfManual_n1to50', async () => { + for (let nodeCount = 1; nodeCount <= 50; nodeCount++) { + await addNode(nodeCount); + if (nodeCount == 5) { + await setRfAndShuffle(5); // stop auto rf grow on 5 + } + let s = await State.readFromEvm(); + s.checkNodeCount(nodeCount); + s.checkDistribution(Math.min(nodeCount, 5)); + } + }).timeout(600000); + + it('test_rfAll_nAll', async () => { + // await ctAsOwner.overrideRf(2); // now replication factor never changes + + const NODES_TO_TRY = 10; + const RF_TO_TRY = 10; + + for (let shardCount of [32]) { // always 32 in the contract + console.log('%s testing shardcount: %d', '-'.repeat(30), shardCount); + + // nodes = 1..40 , rf = 1..10 10..1 + for (let nodeCount = 1; nodeCount <= NODES_TO_TRY; nodeCount++) { + await addNode(nodeCount); + for (let rf = 1; rf <= Math.min(nodeCount, RF_TO_TRY); rf++) { + console.log('%s testing shardcount: %d nodecount: %d rf: %d', '-'.repeat(30), shardCount, nodeCount, rf); + if (nodeCount >= rf) { + await setRfAndShuffle(rf); + } + } + for (let rf = Math.min(nodeCount, RF_TO_TRY); rf >= 1; rf--) { + console.log('%s testing shardcount: %d nodecount: %d rf: %d', '-'.repeat(30), shardCount, nodeCount, rf); + if (nodeCount >= rf) { + await setRfAndShuffle(rf); + } + } + } + + // nodes = 40..1 , rf = 1..10 10..1 + for (let nodeCount = NODES_TO_TRY; nodeCount >= 1; nodeCount--) { + for (let rf = 1; rf <= Math.min(nodeCount, RF_TO_TRY); rf++) { + console.log('%s testing shardcount: %d nodecount: %d rf: %d', '-'.repeat(30), shardCount, nodeCount, rf); + if (nodeCount >= rf) { + await setRfAndShuffle(rf); + } + } + for (let rf = Math.min(nodeCount, RF_TO_TRY); rf >= 1; rf--) { + console.log('%s testing shardcount: %d nodecount: %d rf: %d', '-'.repeat(30), shardCount, nodeCount, rf); + if (nodeCount >= rf) { + await setRfAndShuffle(rf); + } + } + await removeNode(nodeCount); + } + } + }).timeout(600000); +}); \ No newline at end of file diff --git a/smart-contracts/test/TestHelper.test.ts b/smart-contracts/test/TestHelper.test.ts new file mode 100644 index 0000000..910937f --- /dev/null +++ b/smart-contracts/test/TestHelper.test.ts @@ -0,0 +1,63 @@ +import {expect} from "chai"; +import {TestHelper as t} from "./uitlz/TestHelper"; + +describe("Tests for TestHelper", function () { + it("testhasfields", async function () { + const object1 = { + field1: 'value1', + field2: 'value2', + field3: 'value3', + }; + + const object2 = { + field1: 'value1', + field2: 'value2', + }; + + expect(t.hasAllFields( + { + field1: 'value1', + field2: 'value2', + field3: 'value3', + }, + { + field1: 'value1', + field2: 'value2', + }, false)).to.be.true; + + expect(() => { + t.hasAllFields({ + field1: 'value1', + field2: 'value2', + field3: 'value3', + }, { + field1: 'value_', + field2: 'value2', + }, true) + }).to.throw; + + expect(t.hasAllFields( + { + field1: 'value1', + field2: 'value2', + }, + { + field1: 'value1', + field2: 'value2', + field3: 'value3', + }, + true)).to.be.false; + + expect(t.hasAllFields( + { + field1: 'value1', + field2: 'value2', + }, + { + field1: 'value1', + field2: 'value2', + field3: 'value3', + }, + false)).to.be.false; + }); +}); diff --git a/smart-contracts/test/ValidatorContract.test.ts b/smart-contracts/test/ValidatorContract.test.ts new file mode 100644 index 0000000..84e7ef6 --- /dev/null +++ b/smart-contracts/test/ValidatorContract.test.ts @@ -0,0 +1,706 @@ +// noinspection JSUnusedGlobalSymbols + +import {loadFixture} from "@nomicfoundation/hardhat-network-helpers"; +import "@nomicfoundation/hardhat-chai-matchers"; +import "@nomiclabs/hardhat-ethers"; +import {assert, expect} from "chai"; +import hre, {ethers} from "hardhat"; +import {PushToken, StorageV1, ValidatorV1} from "../typechain-types"; +import {SignerWithAddress} from "@nomiclabs/hardhat-ethers/signers"; +import {TestHelper as TH} from "./uitlz/TestHelper"; +import {EthSig2, NodeStatus, VoteDataS, VoteDataV} from "./ValidatorHelper"; +import {BitUtil} from "./uitlz/bitUtil"; +import {DeployerUtil, NodeType} from "../src/DeployerUtil"; +import {BigNumber} from "ethers"; + +let log = console.log; + + +// VARIABLES FOR TESTS +let valCt: ValidatorV1; +let pushCt: PushToken; +let storeCt: StorageV1; +let owner: SignerWithAddress; +let vnodes: SignerWithAddress[]; +let snodes: SignerWithAddress[]; +let acc1: SignerWithAddress; +let acc2: SignerWithAddress; +let vnode1: SignerWithAddress; +let vnode2: SignerWithAddress; +let snode1: SignerWithAddress; +let snode2: SignerWithAddress; + +class DeployInfo { + pushCt: PushToken; + valCt: ValidatorV1; + storeCt: StorageV1; + signers: SignerWithAddress[]; +} + +async function initBlockchain(): Promise<DeployInfo> { + log('building snapshot'); + + // Contracts are deployed using the first signer/account by default + const signers = await ethers.getSigners(); + const [owner_] = signers; + + const pushCt = await DeployerUtil.deployPushTokenFake(hre); +// todo SLASH_PERCENT 10 for tests, and 1 for PROD + const valCt = await DeployerUtil.deployValidatorContract(hre, pushCt.address); + + const storeCt = await DeployerUtil.deployStorageContract(hre, valCt.address); + await valCt.setStorageContract(storeCt.address); + + for (let s of signers) { + await pushCt.mint(s.address, ethers.utils.parseEther("100")); + await pushCt + .connect(s) + .approve(valCt.address, ethers.utils.parseEther("100"));//1000000000000000 + } + return {pushCt, valCt, storeCt, signers}; +} + +async function beforeEachInit() { + const di = await loadFixture(initBlockchain); + pushCt = di.pushCt; + valCt = di.valCt; + storeCt = di.storeCt; + owner = di.signers[0]; + + vnodes = di.signers.slice(3, 11); + vnode1 = vnodes[0]; + vnode2 = vnodes[1]; + + snodes = di.signers.slice(11, 16); + snode1 = snodes[0]; + snode2 = snodes[1]; + + let accs = di.signers.slice(16, 21); + acc1 = accs[0]; + acc2 = accs[1]; + +} + + +describe("Valdator - ownership tests / vot", function () { + + beforeEach(beforeEachInit); + + it('transfer to a different owner / tdi', async function () { + const oldOwner = await valCt.owner(); + assert.notEqual(oldOwner, acc1.address); + + const transferTx = valCt.transferOwnership(acc1.address); + await expect(transferTx).to.emit(valCt, "OwnershipTransferStarted"); + + const acceptTx = valCt.connect(acc1).acceptOwnership(); + await expect(acceptTx).to.emit(valCt, 'OwnershipTransferred'); + const newOwner = await valCt.owner(); + + assert.equal(newOwner, acc1.address); + }); + + it("tbno tranfer by a non-owner", async function () { + const transferTx = valCt.connect(acc1).transferOwnership(acc1.address); + await expect(transferTx).to.be.reverted; + }); + + it("ta3 transfer accepted by 3rd party", async function () { + const transferTx = valCt.transferOwnership(acc1.address); + await expect(transferTx).to.emit(valCt, "OwnershipTransferStarted"); + + const acceptTx = valCt.connect(acc2).acceptOwnership(); + await expect(acceptTx).to.be.reverted; + }); +}); + +describe("Validator - register nodes tests / vrn", function () { + + beforeEach(beforeEachInit); + + it("Deploy Validator contract and Push Contract", async function () { + expect(pushCt.address).to.be.properAddress; + expect(valCt.address).to.be.properAddress; + log(`push contract at `, pushCt.address); + log(`validator contract at `, valCt.address); + }); + + it("Register 1 Node, insufficient collateral", async function () { + await expect(valCt.registerNodeAndStake(50, 0, + "http://snode1:3000", vnode1.address)) + .to.be.revertedWith('Insufficient collateral for VNODE'); + }) + + it("Register 1 Node, but not a duplicate public key", async function () { + { + let t1 = valCt.registerNodeAndStake(100, 0, + "http://snode1:3000", vnode1.address); + await expect(t1).to.emit(valCt, "NodeAdded") + .withArgs(owner.address, vnode1.address, 0, 100, "http://snode1:3000"); + let nodeInfo = await valCt.getNodeInfo(vnode1.address); + expect(nodeInfo.status).to.be.equal(0); + log('nodeInfo:', nodeInfo); + } + { + let t1 = valCt.registerNodeAndStake(100, 0, + "http://snode1:3000", vnode1.address); + await expect(t1).to.be.revertedWith("a node with pubKey is already defined"); + } + }) + + it("Register 2 Nodes", async function () { + { + let t1 = valCt.registerNodeAndStake(100, 0, + "http://snode1:3000", vnode1.address); + await expect(t1).to.emit(valCt, "NodeAdded") + .withArgs(owner.address, vnode1.address, 0, 100, "http://snode1:3000"); + let nodeInfo = await valCt.getNodeInfo(vnode1.address); + expect(nodeInfo.status).to.be.equal(0); + } + expect(await pushCt.balanceOf(valCt.address)).to.be.equal(100); + { + let t1 = valCt.registerNodeAndStake(200, 0, + "http://snode2:3000", vnode2.address); + await expect(t1).to.emit(valCt, "NodeAdded") + .withArgs(owner.address, vnode2.address, 0, 200, "http://snode2:3000"); + let nodeInfo = await valCt.getNodeInfo(vnode1.address); + expect(nodeInfo.status).to.be.equal(0); + } + expect(await pushCt.balanceOf(valCt.address)).to.be.equal(300); + assert.equal((await valCt.getVNodesLength()).toNumber(), 2); + }) +}); + + +describe("Storage", function () { + + beforeEach(beforeEachInit); + + it("add storage node to both Validator and Storage contracts / asn1", async function () { + // register node1, node2 + const allShards = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31]; + { + // add snode1 with owner acc1 + log('valCt: ', valCt.address); + log('valCt owner: ', owner.address); + log('snode1 owner1: ', acc1.address); + log('snode1: ', snode1.address); + let t1 = await valCt.connect(acc1) + .registerNodeAndStake(100, NodeType.SNode, "", snode1.address); + await expect(t1).to.emit(valCt, "NodeAdded") + .withArgs(acc1.address, snode1.address, NodeType.SNode, 100, ""); + + let nodeInfo = await valCt.getNodeInfo(snode1.address); + expect(nodeInfo.status).to.be.equal(0); + + const bitmask = await storeCt.getNodeShardsByAddr(snode1.address); + assert.deepEqual(BitUtil.bitsToPositions(bitmask), allShards); + } + + { + // add snode2 with owner acc2 + log('valCt: ', valCt.address); + log('valCt owner: ', owner.address); + log('snode1 owner2: ', acc2.address); + log('snode2: ', snode2.address); + let t1 = await valCt.connect(acc2) + .registerNodeAndStake(200, NodeType.SNode, "", snode2.address); + await expect(t1).to.emit(valCt, "NodeAdded") + .withArgs(acc2.address, snode2.address, NodeType.SNode, 200, ""); + + let nodeInfo = await valCt.getNodeInfo(snode2.address); + expect(nodeInfo.status).to.be.equal(0); + + const bitmask = await storeCt.getNodeShardsByAddr(snode2.address); + assert.deepEqual(BitUtil.bitsToPositions(bitmask), allShards); + } + // total funds locked = sum of both nodes stakes, + // all nodes are visible in all contracts + expect(await pushCt.balanceOf(valCt.address)).to.be.equal(300); + assert.deepEqual(await valCt.getSNodes(), [snode1.address, snode2.address]) + assert.deepEqual(await storeCt.getNodeAddresses(), [snode1.address, snode2.address]) + + + { + // remove node1 + const t1 = await valCt.connect(acc1).unstakeNode(snode1.address); + await TH.confirmTransaction(t1); + const t2 = await valCt.connect(acc1).unstakeNode(snode1.address); // try unstake 2nd time + expect(t2).to.be.reverted; + const t3 = valCt.connect(acc2).unstakeNode(snode1.address); // try unstake: not a node owner + expect(t3).to.be.reverted; + } + { + // remove node2 + const t1 = await valCt.connect(acc2).unstakeNode(snode2.address); + await TH.confirmTransaction(t1); + const t2 = valCt.connect(acc2).unstakeNode(snode2.address); // try unstake 2nd time + expect(t2).to.be.reverted; + const t3 = valCt.connect(acc1).unstakeNode(snode2.address); // try unstake: not a node owner + expect(t3).to.be.reverted; + } + + }); + + + describe("Validator - Test unstake / vtu", function () { + + beforeEach(beforeEachInit); + + it("register 1 node / unstake to bad address / unstake to owner address | unstake-test-1", async function () { + // register 1 node (+ check all amounts before and after) + { + let ownerBalanceBefore = await pushCt.balanceOf(owner.address); + let valContractBalanceBefore = await pushCt.balanceOf(valCt.address); + let valContractAllowanceForOwner = await pushCt.allowance(owner.address, valCt.address); + log(`before registerNodeAndStake: owner=${ownerBalanceBefore}, valContract=${valContractBalanceBefore}, valContractAllowanceForOwner=${valContractAllowanceForOwner}`); + expect(valContractAllowanceForOwner).to.be.greaterThan(100); + + let tx = await valCt + .connect(owner) + .registerNodeAndStake(100, 0, + "http://snode1:3000", vnode1.address); + await TH.confirmTransaction(tx); + + let ownerBalanceAfter = await pushCt.balanceOf(owner.address); + let valContractBalanceAfter = await pushCt.balanceOf(valCt.address); + log(`after registerNodeAndStake: owner=${ownerBalanceAfter}, valContract=${valContractBalanceAfter}`); + expect((valContractBalanceAfter.sub(valContractBalanceBefore))).to.be.equal(100); + expect((ownerBalanceAfter.sub(ownerBalanceBefore))).to.be.equal(-100); + + await expect(tx) + .to.emit(valCt, "NodeAdded") + .withArgs(owner.address, vnode1.address, 0, 100, "http://snode1:3000"); + let nodeInfo = await valCt.getNodeInfo(vnode1.address); + expect(nodeInfo.status).to.be.equal(0); + } + expect(await pushCt.balanceOf(valCt.address)).to.be.equal(100); + // non-owner calls unstake + { + let tx = valCt + .connect(vnode2) + .unstakeNode(vnode1.address); + await expect(tx).revertedWith('only owner can unstake a node'); + } + // owner calls unstake + { + let ni1 = await valCt.getNodeInfo(vnode1.address); + expect(ni1.status).to.be.equal(0); + expect(ni1.nodeTokens).to.be.equal(100); + + + let ownerBalanceBefore = await pushCt.balanceOf(owner.address); + let valContractBalanceBefore = await pushCt.balanceOf(valCt.address); + log(`before unstake: owner=${ownerBalanceBefore}, valContract=${valContractBalanceBefore}`); + + let tx = await valCt + .connect(owner) + .unstakeNode(vnode1.address); + await TH.confirmTransaction(tx); + + let nodeInfo = await valCt.getNodeInfo(vnode1.address); + expect(nodeInfo.status).to.be.equal(NodeStatus.Unstaked); + expect(nodeInfo.nodeTokens).to.be.equal(0); + + let ownerBalanceAfter = await pushCt.balanceOf(owner.address); + let valContractBalanceAfter = await pushCt.balanceOf(valCt.address); // todo !!!! + log(`after unstake: owner=${ownerBalanceAfter}, valContract=${valContractBalanceAfter}`); + expect((valContractBalanceAfter.sub(valContractBalanceBefore))).to.be.equal(-100); + expect((ownerBalanceAfter.sub(ownerBalanceBefore))).to.be.equal(+100); + + await expect(tx) + .to.emit(valCt, "NodeStatusChanged") + .withArgs(vnode1.address, NodeStatus.Unstaked, 0); + } + + }) + }); + +}); + + +describe("Validator - node reports on other node / vnro", function () { + + beforeEach(beforeEachInit); + + it("Check smart contract signatures - cscs", async function () { + let vd = new VoteDataV(1, '1111', '0x' + "AA".repeat(20)); + const packed = VoteDataV.encode(vd); + console.log('vote data packed: ', packed); + + const sig1 = await EthSig2.signOffline(vnode1, packed); + console.log('signer is', vnode1.address); + console.log('signature: ', sig1); + const valid = await EthSig2.checkOffline(packed, sig1, vnode1.address); + console.log('signature is valid: ', valid); + expect(valid).to.be.true; + }); + + it("Register 1 validator node and check events - val-reg-1", async function () { + assert.equal(await valCt.valPerBlock(), 0); + assert.equal(await valCt.valPerBlockTarget(), 5); + { + let t1 = await valCt.registerNodeAndStake(100, 0, + "http://snode1:3000", vnode1.address); + await expect(t1).to.emit(valCt, "NodeAdded") + .withArgs(owner.address, vnode1.address, 0, 100, "http://snode1:3000"); + await expect(t1).to.emit(valCt, "BlockParamsUpdated") + .withArgs(1, 5); + assert.equal(await valCt.valPerBlock(), 1); + let nodeInfo = await valCt.getNodeInfo(vnode1.address); + assert.equal(nodeInfo.status, 0); + } + + }); + + it("Register 6 storage nodes and unstake them :: reg-6s", async function () { + let nodeType = NodeType.SNode; + let nodeTokens = 100; + // register nodes + assert.equal(await valCt.valPerBlock(), 0); + assert.equal(await valCt.valPerBlockTarget(), 5); + for (let i = 0; i < 6; i++) { + let t1 = await valCt.registerNodeAndStake(nodeTokens, nodeType, + `http://snode${i}:3000`, vnodes[i].address); + await TH.confirmTransaction(t1); + } + assert.equal((await valCt.getSNodesLength()).toNumber(), 6); + assert.equal((await pushCt.balanceOf(valCt.address)).toNumber(), 6 * nodeTokens); + + // unstake nodes + for (let i = 0; i < 6; i++) { + let t1 = await valCt.unstakeNode(vnodes[i].address); + await TH.confirmTransaction(t1); + } + assert.equal((await valCt.getSNodesLength()).toNumber(), 0); + assert.equal((await pushCt.balanceOf(valCt.address)).toNumber(), 0); + }); + + + it("Regster 6 validator nodes and unstake them :: reg-6v-unreg", async function () { + let nodeType = NodeType.VNode; + let nodeTokens = 100; + // register nodes + assert.equal(await valCt.valPerBlock(), 0); + assert.equal(await valCt.valPerBlockTarget(), 5); + for (let i = 0; i < 6; i++) { + let t1 = await valCt.registerNodeAndStake(nodeTokens, nodeType, + `http://vnode${i}:3000`, vnodes[i].address); + await TH.confirmTransaction(t1); + } + assert.equal((await valCt.getVNodesLength()).toNumber(), 6); + assert.equal(await valCt.valPerBlock(), 5); // peaks at 5, even for 6 nodes + assert.equal(await valCt.valPerBlockTarget(), 5); + assert.equal((await pushCt.balanceOf(valCt.address)).toNumber(), 6 * nodeTokens); + + // unstake nodes + for (let i = 0; i < 6; i++) { + let t1 = await valCt.unstakeNode(vnodes[i].address); + await TH.confirmTransaction(t1); + } + assert.equal((await valCt.getVNodesLength()).toNumber(), 0); + assert.equal(await valCt.valPerBlock(), 0); + assert.equal(await valCt.valPerBlockTarget(), 5); + assert.equal((await pushCt.balanceOf(valCt.address)).toNumber(), 0); + }); + + + it("Regster 3 validator nodes - 2 report on 1 :: v-reports-on-v", async function () { + let nodeType = NodeType.VNode; + let nodeTokens = 100; + const v0 = vnodes[0]; + const v1 = vnodes[1]; + const v2 = vnodes[2]; + // register 3 nodes + assert.equal(await valCt.valPerBlock(), 0); + assert.equal(await valCt.valPerBlockTarget(), 5); + for (let i = 0; i < 3; i++) { + let t1 = await valCt.registerNodeAndStake(nodeTokens, nodeType, + `http://vnode${i}:3000`, vnodes[i].address); + await TH.confirmTransaction(t1); + } + // check that we have 3 active vnodes + const activeVNodesBeforeBan = await valCt.getActiveVNodes(); + assert.equal(3, activeVNodesBeforeBan.length); + assert.deepEqual([ + [vnodes[0].address, "http://vnode0:3000"], + [vnodes[1].address, "http://vnode1:3000"], + [vnodes[2].address, "http://vnode2:3000"] + ], activeVNodesBeforeBan); + + { + // v0,v1 report on v2 ; v0 calls reportNode + const vote = VoteDataV.encode(new VoteDataV(1, '0x1111', v2.address)); + const sig0 = await EthSig2.signOffline(v0, vote); + const sig1 = await EthSig2.signOffline(v1, vote); + // 1st report + let tx1 = await valCt.connect(v0).reportNode(NodeType.VNode, vote, [sig0, sig1]); + + const ni = await valCt.getNodeInfo(v2.address); + + assert.equal(ni.nodeTokens.toNumber(), 100); + assert.equal(ni.status, NodeStatus.Reported); + assert.equal(ni.counters.slashCounter, 0); + assert.equal(ni.counters.reportCounter, 1); + assert.deepEqual(ni.counters.reportedBy, [v0.address, v1.address]); + assert.deepEqual(ni.counters.reportedKeys, []); + + await expect(tx1).to.emit(valCt, "NodeStatusChanged") + .withArgs(v2.address, NodeStatus.Reported, BigNumber.from(100)); + + console.log('vote', vote); + console.log('signature ', sig1); + console.log('voter wallet is', vnode1.address); + + //duplicate report + //same block id = reject + let tx2 = valCt.connect(v0).reportNode(NodeType.VNode, vote, [sig0, sig1]); + await TH.expectReject(tx2); + } + + //2nd report (2 reports lead to slash; both n0,n1 get +5 tokens) + { + const vote = VoteDataV.encode(new VoteDataV(1, '0x2222', v2.address)); + const sig0 = await EthSig2.signOffline(v0, vote); + const sig1 = await EthSig2.signOffline(v1, vote); + let tx = await valCt.connect(v0).reportNode(NodeType.VNode, vote, [sig0, sig1]); + // await th.printEvents(tx); + await expect(tx).to.emit(valCt, "NodeStatusChanged") + .withArgs(v2.address, NodeStatus.Slashed, BigNumber.from(90)); // 10% slash occured + + const ni2 = await valCt.getNodeInfo(v2.address); + assert.equal(ni2.nodeTokens.toNumber(), 90); + assert.equal(ni2.status, NodeStatus.Slashed); + assert.equal(ni2.counters.slashCounter, 1); + assert.equal(ni2.counters.reportCounter, 0); + assert.deepEqual(ni2.counters.reportedBy, []); + assert.deepEqual(ni2.counters.reportedKeys, []); + + const ni0 = await valCt.getNodeInfo(v0.address); + assert.equal(ni0.nodeTokens.toNumber(), 105); + + const ni1 = await valCt.getNodeInfo(v1.address); + assert.equal(ni1.nodeTokens.toNumber(), 105); + } + + console.log('3rd report') + { + const vote = VoteDataV.encode(new VoteDataV(1, '0x3333', v2.address)); + const sig0 = await EthSig2.signOffline(v0, vote); + const sig1 = await EthSig2.signOffline(v1, vote); + let tx = await valCt.connect(v0).reportNode(NodeType.VNode, vote, [sig0, sig1]); + await expect(tx).to.emit(valCt, "NodeReported"); + await expect(tx).to.emit(valCt, "NodeStatusChanged") + .withArgs(v2.address, NodeStatus.Slashed, BigNumber.from(90)); + } + console.log('4th report (2nd slash -> ban)'); + { + const vote = VoteDataV.encode(new VoteDataV(1, '0x4444', v2.address)); + const sig0 = await EthSig2.signOffline(v0, vote); + const sig1 = await EthSig2.signOffline(v1, vote); + let tx = await valCt.connect(v0).reportNode(NodeType.VNode, vote, [sig0, sig1]); + const ni2 = await valCt.getNodeInfo(v2.address); + assert.equal(ni2.nodeTokens.toNumber(), 0); + assert.equal(ni2.status, NodeStatus.BannedAndUnstaked); + assert.equal(ni2.counters.slashCounter, 0); + assert.equal(ni2.counters.reportCounter, 0); + assert.deepEqual(ni2.counters.reportedBy, []); + assert.deepEqual(ni2.counters.reportedKeys, []); + } + + console.log('check that we have 2 active vnodes'); + const activeVNodesPostBan = await valCt.getActiveVNodes(); + assert.equal(2, activeVNodesPostBan.length); + assert.deepEqual([ + [vnodes[0].address, "http://vnode0:3000"], + [vnodes[1].address, "http://vnode1:3000"], + ], activeVNodesPostBan); + }); + + + it("2v report on 1s - v-reports-on-s", async function () { + let nodeTokens = 100; + const v0 = vnodes[0]; + const v1 = vnodes[1]; + const s0 = snodes[0]; + + // register 3 validator nodes and 1 storage node + for (let i = 0; i < 3; i++) { + let t1 = await valCt.registerNodeAndStake(nodeTokens, NodeType.VNode, + `http://snode${i}:3000`, vnodes[i].address); + await TH.confirmTransaction(t1); + } + { + let t1 = await valCt.registerNodeAndStake(nodeTokens, NodeType.SNode, + `http://snode${0}:3000`, snodes[0].address); + await TH.confirmTransaction(t1); + const allShards = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31]; + const bitmask = await storeCt.getNodeShardsByAddr(s0.address); + assert.deepEqual(BitUtil.bitsToPositions(bitmask), allShards); + } + + // v0,v1 report on s0 ; v0 calls reportNode + { + const vote = VoteDataS.encode(new VoteDataS(2, '0x1111', s0.address, '0x9999')); + const sig0 = await EthSig2.signOffline(v0, vote); + const sig1 = await EthSig2.signOffline(v1, vote); + // 1st report + let tx1 = await valCt.connect(v0).reportNode(NodeType.SNode, vote, [sig0, sig1]); + + const ni = await valCt.getNodeInfo(s0.address); + assert.equal(ni.nodeTokens.toNumber(), 100); + assert.equal(ni.status, NodeStatus.Reported); + assert.equal(ni.counters.reportCounter, 1); + assert.equal(ni.counters.slashCounter, 0); + assert.deepEqual(ni.counters.reportedBy, [v0.address, v1.address]); + assert.deepEqual(ni.counters.reportedKeys, [BigNumber.from('0x9999')]); + + await expect(tx1).to.emit(valCt, "NodeStatusChanged") + .withArgs(s0.address, NodeStatus.Reported, BigNumber.from(100)); + + console.log('vote', vote); + console.log('signature ', sig1); + console.log('voter wallet is', vnode1.address); + + //duplicate report + + //same block id = reject + let tx2 = valCt.connect(v0).reportNode(NodeType.VNode, vote, [sig0, sig1]); + await TH.expectReject(tx2); + + //different block, same skey = reject + { + const vote = VoteDataS.encode(new VoteDataS(2, '0x2222', s0.address, '0x9999')); + const sig0 = await EthSig2.signOffline(v0, vote); + const sig1 = await EthSig2.signOffline(v1, vote); + let tx3 = valCt.connect(v0).reportNode(NodeType.VNode, vote, [sig0, sig1]); + await TH.expectReject(tx3); + } + + //2nd report (2 reports lead to slash; both n0,n1 get +5 tokens) + { + const vote = VoteDataS.encode(new VoteDataS(2, '0x2222', s0.address, '0x7777')); + const sig0 = await EthSig2.signOffline(v0, vote); + const sig1 = await EthSig2.signOffline(v1, vote); + let tx = await valCt.connect(v0).reportNode(NodeType.SNode, vote, [sig0, sig1]); + + await expect(tx).to.emit(valCt, "NodeStatusChanged") + .withArgs(s0.address, NodeStatus.Slashed, BigNumber.from(90)); // 10% slash occured + + const s0Info = await valCt.getNodeInfo(s0.address); + assert.equal(s0Info.nodeTokens.toNumber(), 90); + assert.equal(s0Info.status, NodeStatus.Slashed); + assert.equal(s0Info.counters.slashCounter, 1); + assert.equal(s0Info.counters.reportCounter, 0); + assert.deepEqual(s0Info.counters.reportedBy, []); + assert.deepEqual(s0Info.counters.reportedKeys, + [BigNumber.from('0x9999'), BigNumber.from('0x7777')]); + + const ni0 = await valCt.getNodeInfo(v0.address); + assert.equal(ni0.nodeTokens.toNumber(), 105); + + const ni1 = await valCt.getNodeInfo(v1.address); + assert.equal(ni1.nodeTokens.toNumber(), 105); + } + } + + }); + +}); + + +describe("Validator - staked tokens management :: sttmgmnt", function () { + + beforeEach(beforeEachInit); + + it("test redistributeStaked", async function () { + const v0 = vnodes[0]; + const ZERO = '0x'+'00'.repeat(20); + let t1 = await valCt.registerNodeAndStake(100, NodeType.VNode, `http://vnode${0}:3000`, v0.address); + await TH.confirmTransaction(t1); + + const v1 = vnodes[1]; + let t2 = await valCt.registerNodeAndStake(100, NodeType.VNode, `http://vnode${0}:3000`, v1.address); + await TH.confirmTransaction(t2); + + // v0 -> v1 -------------- + assert.equal((await valCt.getNodeInfo(v0.address)).nodeTokens.toNumber(), 100); + assert.equal((await valCt.getNodeInfo(v1.address)).nodeTokens.toNumber(), 100); + assert.equal((await valCt.totalStaked()).toNumber(), 200); + assert.equal((await valCt.totalFees()).toNumber(), 0); + + await valCt.redistributeStaked(v0.address, v1.address, 50); + + assert.equal((await valCt.getNodeInfo(v0.address)).nodeTokens.toNumber(), 50); + assert.equal((await valCt.getNodeInfo(v1.address)).nodeTokens.toNumber(), 150); + assert.equal((await valCt.totalStaked()).toNumber(), 200); + assert.equal((await valCt.totalFees()).toNumber(), 0); + + // transfer fails if not enough node tokens ------------ + // another node + let t3 = valCt.redistributeStaked(v0.address, v1.address, 51); + await TH.expectReject(t3); + // to contract + let t4 = valCt.redistributeStaked(v0.address, ZERO, 51); + await TH.expectReject(t4); + + // v0 -> contract ------------ + assert.equal((await valCt.totalStaked()).toNumber(), 200); + assert.equal((await valCt.totalFees()).toNumber(), 0); + + await valCt.redistributeStaked(v0.address, ZERO, 50); + + assert.equal((await valCt.getNodeInfo(v0.address)).nodeTokens.toNumber(), 0); + assert.equal((await valCt.totalFees()).toNumber(), 50); + assert.equal((await valCt.totalStaked()).toNumber(), 150); + + // contract -> v1 ------------- + assert.equal((await valCt.totalFees()).toNumber(), 50); + assert.equal((await valCt.totalStaked()).toNumber(), 150); + + await valCt.redistributeStaked(ZERO, v1.address, 20); + + assert.equal((await valCt.getNodeInfo(v1.address)).nodeTokens.toNumber(), 170); + assert.equal((await valCt.totalFees()).toNumber(), 30); + assert.equal((await valCt.totalStaked()).toNumber(), 170); + }); + + it("test unstakeFees", async function () { + const v0 = vnodes[0]; + const ZERO = '0x'+'00'.repeat(20); + const DECIMALS = BigNumber.from('1000000000000000000'); + let t1 = await valCt.registerNodeAndStake(100, NodeType.VNode, `http://vnode${0}:3000`, v0.address); + await TH.confirmTransaction(t1); + + // v0 -> contract + await valCt.redistributeStaked(v0.address, ZERO, 40); + + // contract fees -> custom address + const accBalanceBefore = await pushCt.balanceOf(acc1.address); + console.log(accBalanceBefore); + assert.equal((await valCt.totalFees()).toNumber(), 40); + assert.equal((await valCt.totalStaked()).toNumber(), 60); + + await valCt.unstakeFees(acc1.address, 30); + + const accBalanceAfter = await pushCt.balanceOf(acc1.address); + console.log(accBalanceAfter); + assert.equal(accBalanceAfter.sub(accBalanceBefore).toNumber(), 30); + assert.equal((await valCt.totalFees()).toNumber(), 10); + assert.equal((await valCt.totalStaked()).toNumber(), 60); + + // no tokens = reject + let t2 = valCt.unstakeFees(acc1.address, 20); + await TH.expectReject(t2); + + // empty address = reject + let t3 = valCt.unstakeFees(ZERO, 20); + await TH.expectReject(t3); + }); +}); diff --git a/smart-contracts/test/ValidatorHelper.ts b/smart-contracts/test/ValidatorHelper.ts new file mode 100644 index 0000000..4e51c9a --- /dev/null +++ b/smart-contracts/test/ValidatorHelper.ts @@ -0,0 +1,103 @@ +import {ethers} from "hardhat"; +import {SignerWithAddress} from "@nomiclabs/hardhat-ethers/signers"; +import {verifyMessage} from "ethers/lib/utils"; +import {BytesLike, DataOptions, Hexable} from "@ethersproject/bytes/src.ts"; + +export class EthSig2 { + static utils = ethers.utils; + + static getMessageHashAsInContract(message: string): string { + return ethers.utils.keccak256(ethers.utils.arrayify(message)); + } + + static toBytes(value: BytesLike | Hexable | number): Uint8Array { + return ethers.utils.arrayify(value); + } + + // simple sign with a private key + static async sign(wallet: SignerWithAddress, message: string): Promise<string> { + return await wallet.signMessage(this.toBytes(message)); + } + + // simple check signature's public key (via address) + public static async check(message: string, sig: string, targetWallet: string): Promise<boolean> { + const verificationAddress = verifyMessage(this.toBytes(message), sig); + console.log('verification address:', verificationAddress); + if (targetWallet !== verificationAddress) { + return false; + } + return true; + } + + // https://ethereum.org/es/developers/tutorials/eip-1271-smart-contract-signatures/ + static async signOffline(wallet: SignerWithAddress, message: string): Promise<string> { + const hash = this.getMessageHashAsInContract(message); + return await wallet.signMessage(this.toBytes(hash)); + } + + public static async checkOffline(message: string, sig: string, targetWallet: string): Promise<boolean> { + const hash = this.getMessageHashAsInContract(message); + const verificationAddress = verifyMessage(ethers.utils.arrayify(hash), sig); + console.log('verification address:', verificationAddress); + if (targetWallet !== verificationAddress) { + return false; + } + return true; + } + +} + +export enum NodeStatus { + OK, // this node operates just fine (DEFAULT VALUE) + Reported, // he have a few malicious reports + Slashed, // we already slashed this node at least once (normally we will take -2% of collateral tokens) + BannedAndUnstaked, // we banned the node and unstaked it's tokens (normally we will take -10% of collateral tokens) + Unstaked +} + +export class VoteDataV { + // the vote action, right now it is 1 + cmd: number; + // the block where vote should be placed + blockId: string; + // the node wallet, we do a complaint about + targetNode: string; + + + constructor(cmd: number, blockId: string, targetNode: string) { + this.cmd = cmd; + this.blockId = blockId; + this.targetNode = targetNode; + } + + public static encode(vt: VoteDataV): string { + let abi = ethers.utils.defaultAbiCoder; + return abi.encode(["uint8", "uint128", "address", ], + [1, vt.blockId, vt.targetNode]); + } +} + +export class VoteDataS { + // the vote action, right now it is 1 + cmd: number; + // the block where vote should be placed + blockId: string; + // the node wallet, we do a complaint about + targetNode: string; + // storage key for k-v for storage node + skey:string; + + + constructor(cmd: number, blockId: string, targetNode: string, skey:string) { + this.cmd = cmd; + this.blockId = blockId; + this.targetNode = targetNode; + this.skey = skey; + } + + public static encode(vt: VoteDataS): string { + let abi = ethers.utils.defaultAbiCoder; + return abi.encode(["uint8", "uint128", "address", "uint128"], + [2, vt.blockId, vt.targetNode, vt.skey]); + } +} \ No newline at end of file diff --git a/smart-contracts/test/uitlz/TestHelper.ts b/smart-contracts/test/uitlz/TestHelper.ts new file mode 100644 index 0000000..23e07b9 --- /dev/null +++ b/smart-contracts/test/uitlz/TestHelper.ts @@ -0,0 +1,98 @@ +import {BigNumber, ContractTransaction} from "ethers"; +import {expect, assert} from "chai"; +import {ValidatorV1} from "../../typechain-types"; +import {Event} from "@ethersproject/contracts/src.ts"; + +export class TestHelper { + + static hasAllFields(obj: any, sampleObj: any, + checkValues: boolean, + throwEx: boolean = false): boolean { + for (const key in sampleObj) { + if (sampleObj.hasOwnProperty(key)) { + if (!obj.hasOwnProperty(key)) { + if (throwEx) { + throw Error(`missing field ${key}`); + } else { + return false; + } + + } + let val = obj[key]; + let expectedVal = sampleObj[key]; + // console.log('val is ', val); + // console.log('expectedval is ', expectedVal); + // if(val instanceof BigNumber) { + // val = val.toString(); + // expectedVal = expectedVal.toString(); + // } + if (checkValues/*val != expectedVal*/) { + console.log('comparing', val, expectedVal); + if(val!=expectedVal) { + throw Error(`invalid field ${key} with value ${val}, expected ${expectedVal}`); + } + // assert.deepEqual(val, expectedVal, + // `assert failed: invalid field ${key} with value ${val}, expected ${expectedVal}`); + return false; + /*if (throwEx) { + console.log(`${val.constructor.name} ${expectedVal.constructor.name}`) + throw Error(`invalid field ${key} with value ${val}, expected ${expectedVal}`); + } else { + return false; + }*/ + } + } + } + return true; + } + + static async confirmTransaction(tx: ContractTransaction) { + const receipt = await tx.wait(1); + expect(receipt.status).to.be.equal(1); + // console.log('tx logs', receipt.logs); + } + + static async logEvents(tx: ContractTransaction) { + const receipt = await tx.wait(); + console.log(receipt.events); + } + + static async filterEventsFromTransaction(contract: ValidatorV1, tx: ContractTransaction, + eventName: string): Promise<Event[]> { + const receipt = await tx.wait(); + return receipt.events.filter((event) => event.event === eventName && event.address === contract.address); + } + + /** + * Expects that contract transaction (tx) contains a specified event (sample) at specified index (index) + */ + static async expectEvent(tx: ContractTransaction, index: number, sample: any) { + return TestHelper.expectEventEx(tx, "NodeStatusChanged", index, sample); + } + + static async expectReject(tx: ContractTransaction | Promise<ContractTransaction>) { + await expect(tx).to.be.rejected; + } + + static async expectEventFirst(tx: ContractTransaction, sample: any) { + return TestHelper.expectEventEx(tx, "NodeStatusChanged", 0, sample); + } + + static async printEvents(tx: ContractTransaction) { + const receipt = await tx.wait(); + console.log(receipt.events); + } + + static async expectEventEx(tx: ContractTransaction, eventName: string, index: number, sample: any) { + await TestHelper.confirmTransaction(tx); + const receipt = await tx.wait(); + let fileteredEvents = receipt.events.filter((event) => event.event === eventName /*&& event.address === contract.address*/); + for (let i = 0; i < fileteredEvents.length; i++) { + console.log(`event[${i}] -> ${fileteredEvents[i].args}`); + } + const obj = fileteredEvents[index].args; + console.log(`trying to check object: ${JSON.stringify(obj)} vs sample: ${JSON.stringify(sample)}`); + TestHelper.hasAllFields(obj, sample, true, true); + } + +} \ No newline at end of file diff --git a/smart-contracts/test/uitlz/bitUtil.ts b/smart-contracts/test/uitlz/bitUtil.ts new file mode 100644 index 0000000..cf9db74 --- /dev/null +++ b/smart-contracts/test/uitlz/bitUtil.ts @@ -0,0 +1,61 @@ +import {CollectionUtil} from "./collectionUtil"; + +export class BitUtil { + /** + * XORs 2 buffers, byte by byte: src = src XOR add + * 1 modifies src + * 2 returns srs || src's resized copy in case there is no room for add bytes + * + * @param src + * @param add + */ + public static xor(src: Buffer, add: Buffer): Buffer { + if (src == null && add == null) { + return Buffer.alloc(0) + } else if (add == null) { + return src + } else if (src == null) { + src = new Buffer(add.length) + add.copy(src, 0, 0, add.length) + return src + } + let target = src + if (add.length > src.length) { + target = new Buffer(add.length) + src.copy(target, 0, 0, src.length) + } + var length = Math.min(target.length, add.length) + for (var i = 0; i < length; ++i) { + target[i] = target[i] ^ add[i] + } + return target + } + + public static strToBase64(value: string): string { + return Buffer.from(value).toString('base64') + } + + public static base64ToStr(value: string): string { + return Buffer.from(value, 'base64').toString('utf8') + } + + + public static getBit(number:number, bitOffset:number) { + return (number & (1 << bitOffset)) === 0 ? 0 : 1; + } + + public static bitsToPositions(number: number): number[] { + // return null; + const result: number[] = []; + let position = 0; + while (number !== 0) { + if ((number & 1) === 1) { + result.push(position); + } + number = number >>> 1; + position++; + } + CollectionUtil.sortNumbersAsc(result); + return result; + } +} diff --git a/smart-contracts/test/uitlz/collectionUtil.ts b/smart-contracts/test/uitlz/collectionUtil.ts new file mode 100644 index 0000000..7101ee4 --- /dev/null +++ b/smart-contracts/test/uitlz/collectionUtil.ts @@ -0,0 +1,41 @@ +export class CollectionUtil { + public static arrayToMap<K extends keyof V, V>(arr: V[], keyField: K): Map<V[K], V> { + if (arr == null || arr.length == 0) { + return new Map() + } + return new Map<V[K], V>(arr.map((value) => [value[keyField], value])) + } + + public static arrayToSet<V>(arr: V[]): Set<V> { + return new Set<V>(arr) + } + + public static arrayToFields<K extends keyof V, V>(arr: V[], keyField: K): Set<V[K]> { + const arrayOfFields = arr.map((obj) => obj[keyField]) + return new Set(arrayOfFields) + } + + public static findIndex<V>(arr: V[], filter: (item: V) => boolean): number { + if (arr == null) { + return -1 + } + return arr.findIndex(filter) + } + + public static setToArray<V>(set: Set<V>): V[] { + return Array.from(set.keys()) + } + + public static intersectSets<T>(set1: Set<T>, set2: Set<T>): Set<T> { + return new Set([...set1].filter(x => set2.has(x))); + } + + public static sortNumbersAsc(array:number[]) { + if(array==null || array.length==0) { + return; + } + array.sort((a, b) => { + return a - b; + }) + } +} diff --git a/contract/contracts/DStorageV1.sol b/smart-contracts/tmp/DStorageV1.sol.tmp similarity index 99% rename from contract/contracts/DStorageV1.sol rename to smart-contracts/tmp/DStorageV1.sol.tmp index e9cbebf..3fce39c 100644 --- a/contract/contracts/DStorageV1.sol +++ b/smart-contracts/tmp/DStorageV1.sol.tmp @@ -11,6 +11,9 @@ contract DStorageV1 { // storage layout: 'feeds' -> ['0x25','0x26'] mapping(string => string[]) nsToShard; // todo not used yet + + + IERC20 public token; uint public constant TIME_1_DAY = 1 days; diff --git a/contract/tsconfig.json b/smart-contracts/tsconfig.json similarity index 89% rename from contract/tsconfig.json rename to smart-contracts/tsconfig.json index e5f1a64..8441a0e 100644 --- a/contract/tsconfig.json +++ b/smart-contracts/tsconfig.json @@ -4,7 +4,7 @@ "module": "commonjs", "esModuleInterop": true, "forceConsistentCasingInFileNames": true, - "strict": true, + "strict": false, "skipLibCheck": true } } diff --git a/snode/Dockerfile b/snode/Dockerfile index ba47d84..4fc57d9 100644 --- a/snode/Dockerfile +++ b/snode/Dockerfile @@ -1,16 +1,7 @@ -FROM node:latest -WORKDIR /usr/src/app -RUN mkdir dstorage-common -COPY ./dstorage-common ./dstorage-common -WORKDIR ./dstorage-common -RUN npm install -RUN npm run build -WORKDIR ../ -RUN mkdir snode -COPY snode/package*.json snode/.env ./snode/ -WORKDIR ./snode -RUN npm install -COPY ./snode . -RUN npm link ../dstorage-common -EXPOSE 4001 -CMD ["npm", "start"] \ No newline at end of file +FROM node:16.20.2 +WORKDIR /app +COPY . . +RUN yarn install +EXPOSE 3001 +EXPOSE 3002 +CMD ["yarn", "start"] \ No newline at end of file diff --git a/snode/docker-compose-s01.yml b/snode/docker-compose-s01.yml new file mode 100644 index 0000000..63e8183 --- /dev/null +++ b/snode/docker-compose-s01.yml @@ -0,0 +1,87 @@ +version: '3' +services: + redis-s01: + image: 'redis:latest' + container_name: redis-s01 + restart: always + networks: + - push-shared-network + volumes: + - ./external/redis-s01:/data + + mysql-s01: + image: mysql:5.7.13 + container_name: mysql-s01 + platform: linux/amd64 + command: --default-authentication-plugin=mysql_native_password + restart: always + environment: + MYSQL_ROOT_PASSWORD: 'pass' + MYSQL_DATABASE: snode1 + MYSQL_USER: 2roor + MYSQL_PASSWORD: s1mpl3 + # Change this to your local path + volumes: + - ./external/mysql-s01:/var/lib/mysql/ + networks: + - push-shared-network + + phpmyadmin-s01: + image: phpmyadmin/phpmyadmin + container_name: phpmyadmin-s01 + depends_on: + - mysql-s01 + environment: + PMA_HOST: mysql-s01 + PMA_PORT: 3306 + PMA_ARBITRARY: 1 + UPLOAD_LIMIT: 300M + ports: + - 8283:80 + restart: always + networks: + - push-shared-network + + ipfs-s01: + container_name: ipfs-s01 + image: ipfs/go-ipfs:latest + volumes: + - ./external/ipfs-s01:/data + networks: + - push-shared-network + + app-s01: + build: . + container_name: app-s01 + depends_on: + - mysql-s01 + - postgres-s01 + - redis-s01 + - ipfs-s01 + ports: + - 3001:3001 + environment: + - CONFIG_DIR=/app/config + - LOG_DIR=/app/config/log + volumes: + - /root/config/s01:/app/config + networks: + - push-shared-network + + postgres-s01: + container_name: postgres-s01 + image: postgres:15.1 + restart: always + environment: + - POSTGRES_DB=snode1 + - POSTGRES_USER=postgres + - POSTGRES_PASSWORD=postgres + networks: + - push-shared-network + volumes: + - ./external/postgresql-s01:/var/lib/postgresql/data +# - db:/var/lib/postgresql/data + +networks: + push-shared-network: + external: true \ No newline at end of file diff --git a/snode/docker-compose-s02.yml b/snode/docker-compose-s02.yml new file mode 100644 index 0000000..5e4e647 --- /dev/null +++ b/snode/docker-compose-s02.yml @@ -0,0 +1,87 @@ +version: '3' +services: + redis-s02: + image: 'redis:latest' + container_name: redis-s02 + restart: always + networks: + - push-shared-network + volumes: + - ./external/redis-s02:/data + + mysql-s02: + image: mysql:5.7.13 + container_name: mysql-s02 + platform: linux/amd64 + command: --default-authentication-plugin=mysql_native_password + restart: always + environment: + MYSQL_ROOT_PASSWORD: 'pass' + MYSQL_DATABASE: snode2 + MYSQL_USER: 2roor + MYSQL_PASSWORD: s1mpl3 + # Change this to your local path + volumes: + - ./external/mysql-s02:/var/lib/mysql/ + networks: + - push-shared-network + + phpmyadmin-s02: + image: phpmyadmin/phpmyadmin + container_name: phpmyadmin-s02 + depends_on: + - mysql-s02 + environment: + PMA_HOST: mysql-s02 + PMA_PORT: 3306 + PMA_ARBITRARY: 1 + UPLOAD_LIMIT: 300M + ports: + - 8284:80 + restart: always + networks: + - push-shared-network + + ipfs-s02: + container_name: ipfs-s02 + image: ipfs/go-ipfs:latest + volumes: + - ./external/ipfs-s02:/data + networks: + - push-shared-network + + app-s02: + build: . + container_name: app-s02 + depends_on: + - mysql-s02 + - postgres-s02 + - redis-s02 + - ipfs-s02 + ports: + - 3002:3002 + environment: + - CONFIG_DIR=/app/config + - LOG_DIR=/app/config/log + volumes: + - /root/config/s02:/app/config + networks: + - push-shared-network + + postgres-s02: + container_name: postgres-s02 + image: postgres:15.1 + restart: always + environment: + - POSTGRES_DB=snode2 + - POSTGRES_USER=postgres + - POSTGRES_PASSWORD=postgres + networks: + - push-shared-network + volumes: + - ./external/postgresql-s02:/var/lib/postgresql/data +# - db:/var/lib/postgresql/data + +networks: + push-shared-network: + external: true \ No newline at end of file diff --git a/snode/migrations/mysql/V1__init.sql b/snode/migrations/mysql/V1__init.sql new file mode 100644 index 0000000..6f4d11a --- /dev/null +++ b/snode/migrations/mysql/V1__init.sql @@ -0,0 +1,45 @@ +DROP TABLE IF EXISTS blocks; +CREATE TABLE IF NOT EXISTS blocks +( + object_hash VARCHAR(255) NOT NULL COMMENT 'optional: a uniq field to fight duplicates', + object MEDIUMTEXT NOT NULL, + object_shards JSON NOT NULL COMMENT 'message block shards', + PRIMARY KEY (object_hash) + ) ENGINE = InnoDB + DEFAULT CHARSET = utf8; + +DROP TABLE IF EXISTS dset_queue_mblock; +CREATE TABLE IF NOT EXISTS dset_queue_mblock +( + id BIGINT NOT NULL AUTO_INCREMENT, + ts timestamp default CURRENT_TIMESTAMP() COMMENT 'timestamp is used for querying the queu', + object_hash VARCHAR(255) NOT NULL, + object_shard INT NOT NULL COMMENT 'message block shard', + PRIMARY KEY (id), + UNIQUE KEY uniq_mblock_object_hash (object_hash, object_shard), + FOREIGN KEY (object_hash) REFERENCES blocks(object_hash) + ) ENGINE = InnoDB + DEFAULT CHARSET = utf8; + +DROP TABLE IF EXISTS dset_client; +CREATE TABLE IF NOT EXISTS dset_client +( + id INT NOT NULL AUTO_INCREMENT, + queue_name varchar(32) NOT NULL COMMENT 'target node queue name', + target_node_id varchar(128) NOT NULL COMMENT 'target node eth address', + target_node_url varchar(128) NOT NULL COMMENT 'target node url, filled from the contract', + target_offset bigint(20) NOT NULL DEFAULT 0 COMMENT 'initial offset to fetch target queue', + state tinyint(1) NOT NULL DEFAULT 1 COMMENT '1 = enabled, 0 = disabled', + PRIMARY KEY (id), + UNIQUE KEY uniq_dset_name_and_target (queue_name, target_node_id) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8; + +DROP TABLE IF EXISTS contract_shards; +CREATE TABLE IF NOT EXISTS contract_shards +( + ts timestamp default CURRENT_TIMESTAMP() COMMENT 'update timestamp', + shards_assigned json NOT NULL COMMENT 'optional: a uniq field to fight duplicates', + PRIMARY KEY (ts) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8; \ No newline at end of file diff --git a/snode/migrations/V1__init.sql b/snode/migrations/pg/V1__init.sql similarity index 76% rename from snode/migrations/V1__init.sql rename to snode/migrations/pg/V1__init.sql index ef599e5..3cbd051 100755 --- a/snode/migrations/V1__init.sql +++ b/snode/migrations/pg/V1__init.sql @@ -14,8 +14,8 @@ CREATE TABLE IF NOT EXISTS network_storage_layout ( id SERIAL PRIMARY KEY NOT NULL, namespace VARCHAR(20) NOT NULL, - namespace_shard_id VARCHAR(20) NOT NULL, - node_id VARCHAR(20) NOT NULL + namespace_shard_id VARCHAR(64) NOT NULL, + node_id VARCHAR(64) NOT NULL ); ALTER TABLE network_storage_layout DROP CONSTRAINT IF EXISTS network_storage_layout_uniq; @@ -45,13 +45,10 @@ DROP TABLE IF EXISTS node_storage_layout; CREATE TABLE IF NOT EXISTS node_storage_layout ( namespace VARCHAR(20) NOT NULL, - namespace_shard_id VARCHAR(20) NOT NULL, + namespace_shard_id VARCHAR(64) NOT NULL, ts_start TIMESTAMP NOT NULL default NOW(), ts_end TIMESTAMP NOT NULL default NOW(), - table_name VARCHAR(64) NOT NULL + table_name VARCHAR(64) NOT NULL, + PRIMARY KEY(namespace, namespace_shard_id, ts_start, ts_end) ); -DROP INDEX IF EXISTS shard_map_ts_index; -CREATE INDEX shard_map_ts_index ON node_storage_layout USING btree (namespace ASC, namespace_shard_id ASC, ts_start ASC, ts_end ASC); -ALTER TABLE node_storage_layout DROP CONSTRAINT IF EXISTS node_storage_layout_uniq; -ALTER TABLE node_storage_layout ADD CONSTRAINT node_storage_layout_uniq UNIQUE (namespace, namespace_shard_id, ts_start, ts_end); diff --git a/snode/migrations/V2___sampleData.sql b/snode/migrations/pg/V2___sampleData.sql similarity index 98% rename from snode/migrations/V2___sampleData.sql rename to snode/migrations/pg/V2___sampleData.sql index 2c012ef..aeb565b 100644 --- a/snode/migrations/V2___sampleData.sql +++ b/snode/migrations/pg/V2___sampleData.sql @@ -1127,3 +1127,39 @@ INSERT INTO network_storage_layout (id, namespace, namespace_shard_id, node_id) INSERT INTO network_storage_layout (id, namespace, namespace_shard_id, node_id) VALUES (6142, 'feeds', '255', '1'); INSERT INTO network_storage_layout (id, namespace, namespace_shard_id, node_id) VALUES (6143, 'feeds', '255', '2'); INSERT INTO network_storage_layout (id, namespace, namespace_shard_id, node_id) VALUES (6144, 'feeds', '255', '3'); + + +INSERT INTO network_storage_layout (namespace, namespace_shard_id, node_id) +VALUES + ( 'inbox', '0', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '1', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '2', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '3', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '4', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '5', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '6', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '7', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '8', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '9', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '10', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '11', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '12', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '13', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '14', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '15', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '16', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '17', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '18', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '19', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '20', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '21', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '22', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '23', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '24', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '25', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '26', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '27', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '28', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '29', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '30', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'), + ( 'inbox', '31', '0x3563C89b05e4dcD0edEeE0F3e93e396C128C06E2'); diff --git a/snode/package-lock.json b/snode/package-lock.json index 5c26459..41c62be 100644 --- a/snode/package-lock.json +++ b/snode/package-lock.json @@ -5,6 +5,7 @@ "requires": true, "packages": { "": { + "name": "snode", "version": "0.1", "license": "UNLICENSED", "dependencies": { @@ -31,7 +32,7 @@ "ethereum-blockies-base64": "^1.0.2", "ethereum-blockies-png": "^0.1.3", "ethereum-public-key-to-address": "0.0.2", - "ethers": "5.0.18", + "ethers": "^5.7.2", "event-dispatch": "^0.4.1", "eventemitter3": "^3.1.0", "express": "^4.16.2", @@ -54,7 +55,9 @@ "multer": "^1.4.5-lts.1", "mysql": "2.18.1", "nano-ipfs-store": "0.1.3", + "node-docker-api": "^1.1.22", "node-schedule": "1.3.2", + "object-hash": "^3.0.0", "openpgp": "^5.3.1", "pg-promise": "^10.12.0", "promise.allsettled": "^1.0.6", @@ -63,6 +66,7 @@ "request-promise": "^4.2.6", "secp256k1-v4": "https://github.com/HarshRajat/secp256k1-node", "socket.io": "^4.4.1", + "socket.io-client": "^4.5.3", "ts-luxon": "^4.0.1", "typedi": "^0.8.0", "typescript": "^4.5.4", @@ -85,7 +89,6 @@ "@typescript-eslint/eslint-plugin": "^1.7.0", "@typescript-eslint/parser": "^1.7.0", "aws-sdk": "2.770.0", - "eslint": "^5.16.0", "eslint-config-prettier": "^4.2.0", "eslint-plugin-prettier": "^3.0.1", "jest": "^24.1.0", @@ -93,1743 +96,1558 @@ "nodemon": "^2.0.1", "prettier": "^1.17.0", "ts-jest": "^24.0.0", - "ts-node": "^7.0.1", - "ts-node-dev": "^2.0.0", + "ts-node": "^10.4.0", + "ts-node-dev": "1.0.0-pre.44", "tsconfig-paths": "^4.0.0", "tslint": "^5.11.0", - "typescript": "^3.1.3" + "typescript": "^4.5.4" } }, "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" } }, - "node_modules/@aws-crypto/ie11-detection": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz", - "integrity": "sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==", + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dev": true, - "optional": true, "dependencies": { - "tslib": "^1.11.1" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@aws-crypto/sha256-browser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz", - "integrity": "sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==", + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "optional": true, "dependencies": { - "@aws-crypto/ie11-detection": "^2.0.0", - "@aws-crypto/sha256-js": "^2.0.0", - "@aws-crypto/supports-web-crypto": "^2.0.0", - "@aws-crypto/util": "^2.0.0", - "@aws-sdk/types": "^3.1.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@aws-crypto/sha256-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz", - "integrity": "sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==", + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "optional": true, "dependencies": { - "@aws-crypto/util": "^2.0.0", - "@aws-sdk/types": "^3.1.0", - "tslib": "^1.11.1" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@aws-crypto/supports-web-crypto": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.2.tgz", - "integrity": "sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==", + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "optional": true, "dependencies": { - "tslib": "^1.11.1" + "color-name": "1.1.3" } }, - "node_modules/@aws-crypto/util": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.2.tgz", - "integrity": "sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==", - "dev": true, - "optional": true, - "dependencies": { - "@aws-sdk/types": "^3.110.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, - "node_modules/@aws-sdk/abort-controller": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.200.0.tgz", - "integrity": "sha512-YflVl9JEFjy0cco+40FAocQfFGZ7fR2tnYhQPqXtfCJ9ywikB2PnzN3G6TtvNCFaSG1tLwnI0LZphVbk89sDtw==", + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "optional": true, - "dependencies": { - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, "engines": { - "node": ">= 12.0.0" + "node": ">=4" } }, - "node_modules/@aws-sdk/abort-controller/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.200.0.tgz", - "integrity": "sha512-9WdOjdayhzL+k5PQibj3l4/luAGs+NJKC5OjIDKEKL54SC9QwsgwTv6Mb+oqm0sQa9FCNieXyZhSHb2aeR60sQ==", - "dev": true, - "optional": true, - "dependencies": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/client-sts": "3.200.0", - "@aws-sdk/config-resolver": "3.200.0", - "@aws-sdk/credential-provider-node": "3.200.0", - "@aws-sdk/fetch-http-handler": "3.200.0", - "@aws-sdk/hash-node": "3.200.0", - "@aws-sdk/invalid-dependency": "3.200.0", - "@aws-sdk/middleware-content-length": "3.200.0", - "@aws-sdk/middleware-endpoint": "3.200.0", - "@aws-sdk/middleware-host-header": "3.200.0", - "@aws-sdk/middleware-logger": "3.200.0", - "@aws-sdk/middleware-recursion-detection": "3.200.0", - "@aws-sdk/middleware-retry": "3.200.0", - "@aws-sdk/middleware-serde": "3.200.0", - "@aws-sdk/middleware-signing": "3.200.0", - "@aws-sdk/middleware-stack": "3.200.0", - "@aws-sdk/middleware-user-agent": "3.200.0", - "@aws-sdk/node-config-provider": "3.200.0", - "@aws-sdk/node-http-handler": "3.200.0", - "@aws-sdk/protocol-http": "3.200.0", - "@aws-sdk/smithy-client": "3.200.0", - "@aws-sdk/types": "3.200.0", - "@aws-sdk/url-parser": "3.200.0", - "@aws-sdk/util-base64-browser": "3.188.0", - "@aws-sdk/util-base64-node": "3.188.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.188.0", - "@aws-sdk/util-defaults-mode-browser": "3.200.0", - "@aws-sdk/util-defaults-mode-node": "3.200.0", - "@aws-sdk/util-endpoints": "3.200.0", - "@aws-sdk/util-user-agent-browser": "3.200.0", - "@aws-sdk/util-user-agent-node": "3.200.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.199.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.200.0.tgz", - "integrity": "sha512-EyOSl3hlkrTE9i0bgIvtdvMpCMplmZcLlkMy2mx2LdPKO+AWFOjUN7i5RgpFa7YdZq/csHkcakooJi48OOgSVA==", - "dev": true, - "optional": true, - "dependencies": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/config-resolver": "3.200.0", - "@aws-sdk/fetch-http-handler": "3.200.0", - "@aws-sdk/hash-node": "3.200.0", - "@aws-sdk/invalid-dependency": "3.200.0", - "@aws-sdk/middleware-content-length": "3.200.0", - "@aws-sdk/middleware-endpoint": "3.200.0", - "@aws-sdk/middleware-host-header": "3.200.0", - "@aws-sdk/middleware-logger": "3.200.0", - "@aws-sdk/middleware-recursion-detection": "3.200.0", - "@aws-sdk/middleware-retry": "3.200.0", - "@aws-sdk/middleware-serde": "3.200.0", - "@aws-sdk/middleware-stack": "3.200.0", - "@aws-sdk/middleware-user-agent": "3.200.0", - "@aws-sdk/node-config-provider": "3.200.0", - "@aws-sdk/node-http-handler": "3.200.0", - "@aws-sdk/protocol-http": "3.200.0", - "@aws-sdk/smithy-client": "3.200.0", - "@aws-sdk/types": "3.200.0", - "@aws-sdk/url-parser": "3.200.0", - "@aws-sdk/util-base64-browser": "3.188.0", - "@aws-sdk/util-base64-node": "3.188.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.188.0", - "@aws-sdk/util-defaults-mode-browser": "3.200.0", - "@aws-sdk/util-defaults-mode-node": "3.200.0", - "@aws-sdk/util-endpoints": "3.200.0", - "@aws-sdk/util-user-agent-browser": "3.200.0", - "@aws-sdk/util-user-agent-node": "3.200.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.199.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.200.0.tgz", - "integrity": "sha512-9k3NlHDyaEdv5aUnt6V1wBugIl5fIL7AsKbvIH8+vCDaAknc9+9vLbxkBsskiOAh5rEWFeso60hjNJC+2ky5xQ==", - "dev": true, - "optional": true, - "dependencies": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/config-resolver": "3.200.0", - "@aws-sdk/credential-provider-node": "3.200.0", - "@aws-sdk/fetch-http-handler": "3.200.0", - "@aws-sdk/hash-node": "3.200.0", - "@aws-sdk/invalid-dependency": "3.200.0", - "@aws-sdk/middleware-content-length": "3.200.0", - "@aws-sdk/middleware-endpoint": "3.200.0", - "@aws-sdk/middleware-host-header": "3.200.0", - "@aws-sdk/middleware-logger": "3.200.0", - "@aws-sdk/middleware-recursion-detection": "3.200.0", - "@aws-sdk/middleware-retry": "3.200.0", - "@aws-sdk/middleware-sdk-sts": "3.200.0", - "@aws-sdk/middleware-serde": "3.200.0", - "@aws-sdk/middleware-signing": "3.200.0", - "@aws-sdk/middleware-stack": "3.200.0", - "@aws-sdk/middleware-user-agent": "3.200.0", - "@aws-sdk/node-config-provider": "3.200.0", - "@aws-sdk/node-http-handler": "3.200.0", - "@aws-sdk/protocol-http": "3.200.0", - "@aws-sdk/smithy-client": "3.200.0", - "@aws-sdk/types": "3.200.0", - "@aws-sdk/url-parser": "3.200.0", - "@aws-sdk/util-base64-browser": "3.188.0", - "@aws-sdk/util-base64-node": "3.188.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.188.0", - "@aws-sdk/util-defaults-mode-browser": "3.200.0", - "@aws-sdk/util-defaults-mode-node": "3.200.0", - "@aws-sdk/util-endpoints": "3.200.0", - "@aws-sdk/util-user-agent-browser": "3.200.0", - "@aws-sdk/util-user-agent-node": "3.200.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.199.0", - "fast-xml-parser": "4.0.11", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/config-resolver": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.200.0.tgz", - "integrity": "sha512-eq03XA4sPNJ6C3WbMLR5NPYQmS/S+TdFlNY044rG1ne0Mh+yrNPjIPggu42F4Xr5KtURB97et7bxSx1w7gvDeQ==", + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "optional": true, "dependencies": { - "@aws-sdk/signature-v4": "3.200.0", - "@aws-sdk/types": "3.200.0", - "@aws-sdk/util-config-provider": "3.188.0", - "@aws-sdk/util-middleware": "3.200.0", - "tslib": "^2.3.1" + "has-flag": "^3.0.0" }, "engines": { - "node": ">= 12.0.0" + "node": ">=4" } }, - "node_modules/@aws-sdk/config-resolver/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "node_modules/@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", "dev": true, - "optional": true + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.200.0.tgz", - "integrity": "sha512-DrZbo4eGkKvzDEbFSA44iwQjzQSsMZKfU7fnBdA/Qs28TmNZ6oBgO9ljUuEHxhaWgDYxAE70KtJwEqD05IZVuw==", - "dev": true, - "optional": true, - "dependencies": { - "@aws-sdk/client-cognito-identity": "3.200.0", - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" + "node_modules/@babel/core": { + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.17.tgz", + "integrity": "sha512-2EENLmhpwplDux5PSsZnSbnSkB3tZ6QTksgO25xwEL7pIDcNOMhF5v/s6RzwjMZzZzw9Ofc30gHv5ChCC8pifQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.22.17", + "@babel/helpers": "^7.22.15", + "@babel/parser": "^7.22.16", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.22.17", + "@babel/types": "^7.22.17", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { - "node": ">= 12.0.0" + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.200.0.tgz", - "integrity": "sha512-I2hlRxEqcwsmr0C44RD083QYJ3nDIZE3K8WBQjNetFi5qTzXlI1usrOlCMfaIbee6k3BBB+cXIX1Vp8RUNkNQQ==", + "node_modules/@babel/core/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, - "optional": true, "dependencies": { - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" + "ms": "2.1.2" }, "engines": { - "node": ">= 12.0.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@aws-sdk/credential-provider-env/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "optional": true + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/@aws-sdk/credential-provider-imds": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.200.0.tgz", - "integrity": "sha512-qvUeUuK2DSQ0eVKijzh1ccOj1xNojVCTf+ENDa2EhXPVQmpERbhQiamTeSkLcKYOtDKxyEK7YBlkczIt/BL2UQ==", + "node_modules/@babel/generator": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz", + "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", "dev": true, - "optional": true, "dependencies": { - "@aws-sdk/node-config-provider": "3.200.0", - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/types": "3.200.0", - "@aws-sdk/url-parser": "3.200.0", - "tslib": "^2.3.1" + "@babel/types": "^7.22.15", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" }, "engines": { - "node": ">= 12.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/credential-provider-imds/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.200.0.tgz", - "integrity": "sha512-6b8CbfxAw7UiWJ2GWSP/RhA2qxgo9iLZOunMqCqOlI627JEZb+oFKTzXwcORrrjpTKbfb/Q6/3ev5yGPonewHw==", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dev": true, - "optional": true, "dependencies": { - "@aws-sdk/credential-provider-env": "3.200.0", - "@aws-sdk/credential-provider-imds": "3.200.0", - "@aws-sdk/credential-provider-sso": "3.200.0", - "@aws-sdk/credential-provider-web-identity": "3.200.0", - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/shared-ini-file-loader": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" }, "engines": { - "node": ">= 12.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "optional": true + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.200.0.tgz", - "integrity": "sha512-HpBiMJt+xvHBTf2BjJJwnH+gXf6JapX4cGk3nZlJxE8Uu6P0bIVeFnwD20+yQ5N6Pm0vsJuoA8MNz9vOiPjImg==", + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", "dev": true, - "optional": true, - "dependencies": { - "@aws-sdk/credential-provider-env": "3.200.0", - "@aws-sdk/credential-provider-imds": "3.200.0", - "@aws-sdk/credential-provider-ini": "3.200.0", - "@aws-sdk/credential-provider-process": "3.200.0", - "@aws-sdk/credential-provider-sso": "3.200.0", - "@aws-sdk/credential-provider-web-identity": "3.200.0", - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/shared-ini-file-loader": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, "engines": { - "node": ">=12.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/credential-provider-node/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.200.0.tgz", - "integrity": "sha512-Juio3viiz/ywrb88viwNxfauaxG+MrD2gMbnCfGEtZgdvix6XBYc6bRd+F94yY23EYWiU1s1tfdlScCIVeYfqA==", + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", "dev": true, - "optional": true, "dependencies": { - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/shared-ini-file-loader": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { - "node": ">= 12.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/credential-provider-process/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.200.0.tgz", - "integrity": "sha512-62ktkTAcr51GYshZiQdJcukps1O9QZGwJrVrmY+VdpKwdfSoJygpXmpFGWWlMs+hDkXLcNl3oLOPa3T+fxqN9Q==", + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, - "optional": true, "dependencies": { - "@aws-sdk/client-sso": "3.200.0", - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/shared-ini-file-loader": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" + "@babel/types": "^7.22.5" }, "engines": { - "node": ">= 12.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/credential-provider-sso/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.200.0.tgz", - "integrity": "sha512-++C1vRu/9SJo3MJuC6ARMYfwNKkR2ioq0KDL2b4NQAIyQLgyw0hoOzPlfUgpfvyx0CnPecAoQIY8jGNWfdDSBA==", + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dev": true, - "optional": true, "dependencies": { - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" + "@babel/types": "^7.22.15" }, "engines": { - "node": ">= 12.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/credential-providers": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.200.0.tgz", - "integrity": "sha512-YpxALYacNhmcYznlcmNUbXJ3w7Tt49iXgsmx+tQRzMx3m/99E4XWCGCz/4GRAncu7GV2oJYLL5Iyj5HQqR+jVA==", + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.17.tgz", + "integrity": "sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ==", "dev": true, - "optional": true, "dependencies": { - "@aws-sdk/client-cognito-identity": "3.200.0", - "@aws-sdk/client-sso": "3.200.0", - "@aws-sdk/client-sts": "3.200.0", - "@aws-sdk/credential-provider-cognito-identity": "3.200.0", - "@aws-sdk/credential-provider-env": "3.200.0", - "@aws-sdk/credential-provider-imds": "3.200.0", - "@aws-sdk/credential-provider-ini": "3.200.0", - "@aws-sdk/credential-provider-node": "3.200.0", - "@aws-sdk/credential-provider-process": "3.200.0", - "@aws-sdk/credential-provider-sso": "3.200.0", - "@aws-sdk/credential-provider-web-identity": "3.200.0", - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/shared-ini-file-loader": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" + "@babel/helper-environment-visitor": "^7.22.5", + "@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.15" }, "engines": { - "node": ">= 12.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/fetch-http-handler": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.200.0.tgz", - "integrity": "sha512-sqYUn3sjEWy6Yx/mJXjGQcMxfJ1YsxqPGrE0qmMCa6EP6ENl1BWrX0eutQmwdCq85UiziYqxRpkflJ7nN2Abag==", + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true, - "optional": true, - "dependencies": { - "@aws-sdk/protocol-http": "3.200.0", - "@aws-sdk/querystring-builder": "3.200.0", - "@aws-sdk/types": "3.200.0", - "@aws-sdk/util-base64-browser": "3.188.0", - "tslib": "^2.3.1" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/fetch-http-handler/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/hash-node": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.200.0.tgz", - "integrity": "sha512-iQ0K85BteaiSq7V5LTsMbOSa9RckraOQ3eLtUaJ7u98ywByb7v6H96jfaFdAOAYE0SZ7n2Qp87d+zkHs3kxS5w==", + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, - "optional": true, "dependencies": { - "@aws-sdk/types": "3.200.0", - "@aws-sdk/util-buffer-from": "3.188.0", - "tslib": "^2.3.1" + "@babel/types": "^7.22.5" }, "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/@aws-sdk/hash-node/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/invalid-dependency": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.200.0.tgz", - "integrity": "sha512-M3g8U1Nahj9ef2Tqn26j03FIwHwQuIVps39i5P+dWEyFAfFJsdwMtrDI/neXmf7BPcbPFUH9MMcrOJpq/MxYBQ==", - "dev": true, - "optional": true, - "dependencies": { - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/invalid-dependency/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/is-array-buffer": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.188.0.tgz", - "integrity": "sha512-n69N4zJZCNd87Rf4NzufPzhactUeM877Y0Tp/F3KiHqGeTnVjYUa4Lv1vLBjqtfjYb2HWT3NKlYn5yzrhaEwiQ==", + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, - "optional": true, "dependencies": { - "tslib": "^2.3.1" + "@babel/types": "^7.22.5" }, "engines": { - "node": ">= 12.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/is-array-buffer/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "dev": true, - "optional": true + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@aws-sdk/middleware-content-length": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.200.0.tgz", - "integrity": "sha512-GOvtCgP0Q+dYvzWfn06DawaZbDkn+yz8p6R0UaoYMOWvpINFuR6kYu/tz9qjGhZsrjuDqVH+6mj6uuC87fupQQ==", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz", + "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==", "dev": true, - "optional": true, - "dependencies": { - "@aws-sdk/protocol-http": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, "engines": { - "node": ">= 12.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/middleware-content-length/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "node_modules/@babel/helper-validator-option": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", "dev": true, - "optional": true + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@aws-sdk/middleware-endpoint": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.200.0.tgz", - "integrity": "sha512-r0OkdhjYqdv/iYM3KXj6LubQFZbM848FhAVuEiJEUNBFpUvhS6pCkmjhkd5QIUT+bhiD0gUj1OFzIHhQaHwyWA==", + "node_modules/@babel/helpers": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz", + "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==", "dev": true, - "optional": true, "dependencies": { - "@aws-sdk/middleware-serde": "3.200.0", - "@aws-sdk/protocol-http": "3.200.0", - "@aws-sdk/signature-v4": "3.200.0", - "@aws-sdk/types": "3.200.0", - "@aws-sdk/url-parser": "3.200.0", - "@aws-sdk/util-config-provider": "3.188.0", - "@aws-sdk/util-middleware": "3.200.0", - "tslib": "^2.3.1" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { - "node": ">= 12.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/middleware-endpoint/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.200.0.tgz", - "integrity": "sha512-oFRSUBXGBw6+QiOXgzu3cTPqAN97y+Lc3z2mDS3wJRqA4/Wmdzx/oTWhB5G0IsYSJHTevhZhfQPBLbhK5Ffehw==", + "node_modules/@babel/highlight": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", + "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", "dev": true, - "optional": true, "dependencies": { - "@aws-sdk/protocol-http": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" }, "engines": { - "node": ">= 12.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/middleware-host-header/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.200.0.tgz", - "integrity": "sha512-uTtu1bCDqKQNLoZ0MkEsn102T4itNC5o7U+FDNSRHKYHPY6o1MbS9nbcOKywMDBqhEit5nNKCw9vOoz49N6zpw==", + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "optional": true, "dependencies": { - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" + "color-convert": "^1.9.0" }, "engines": { - "node": ">= 12.0.0" + "node": ">=4" } }, - "node_modules/@aws-sdk/middleware-logger/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.200.0.tgz", - "integrity": "sha512-3Y5UaBBuBs3EE1NgYexhnOdFfozyxHvz4f/452b1K55IigJvovTl3TI46tFEkXiqhRs9bJZ/DiuakbsGfiKMFQ==", + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "optional": true, "dependencies": { - "@aws-sdk/protocol-http": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">= 12.0.0" + "node": ">=4" } }, - "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/middleware-retry": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.200.0.tgz", - "integrity": "sha512-9YVofOwxocbNDfTcNQfWJsOA9MVdZIu0T6or0fr54cn1q0WJ69IoFeHVUmCiOXy9HRTop3GC6Fyc5pQmjaRRcQ==", + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "optional": true, "dependencies": { - "@aws-sdk/protocol-http": "3.200.0", - "@aws-sdk/service-error-classification": "3.200.0", - "@aws-sdk/types": "3.200.0", - "@aws-sdk/util-middleware": "3.200.0", - "tslib": "^2.3.1", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">= 12.0.0" + "color-name": "1.1.3" } }, - "node_modules/@aws-sdk/middleware-retry/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, - "node_modules/@aws-sdk/middleware-retry/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "optional": true, - "bin": { - "uuid": "dist/bin/uuid" + "engines": { + "node": ">=4" } }, - "node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.200.0.tgz", - "integrity": "sha512-1kZVgK+hk5F4oFMbzjzvv5qZ4DXJfpXOrHRu7dpmOeV8KL+NKYqYq7BeToDMjTTTq8atTHlDyQ4YrlgaOHyVCQ==", + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "optional": true, "dependencies": { - "@aws-sdk/middleware-signing": "3.200.0", - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/protocol-http": "3.200.0", - "@aws-sdk/signature-v4": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" + "has-flag": "^3.0.0" }, "engines": { - "node": ">= 12.0.0" + "node": ">=4" } }, - "node_modules/@aws-sdk/middleware-sdk-sts/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/middleware-serde": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.200.0.tgz", - "integrity": "sha512-NDYLVC7UxIDvu906itssEJE5yobPdVhMuE3Ef3MEMk3UTawd8f7lmo40kzFDBS3cW/c4jluGiTsN8r+8fPc3oA==", + "node_modules/@babel/parser": { + "version": "7.22.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", + "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", "dev": true, - "optional": true, - "dependencies": { - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" + "bin": { + "parser": "bin/babel-parser.js" }, "engines": { - "node": ">= 12.0.0" + "node": ">=6.0.0" } }, - "node_modules/@aws-sdk/middleware-serde/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/middleware-signing": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.200.0.tgz", - "integrity": "sha512-Guztdq7i/ZNWR68InHUJpSYpg668rNt+2N5z14SlWrZ8cup6ZHy3bRgzqClAPiXuHPKx9r9ysvczT6jCCyy+Xg==", + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, - "optional": true, "dependencies": { - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/protocol-http": "3.200.0", - "@aws-sdk/signature-v4": "3.200.0", - "@aws-sdk/types": "3.200.0", - "@aws-sdk/util-middleware": "3.200.0", - "tslib": "^2.3.1" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">= 12.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@aws-sdk/middleware-signing/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/middleware-stack": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.200.0.tgz", - "integrity": "sha512-j2uSX4Bv347/14zXz7v/PKcTvE/AXQbXu+BQ1IQgqji7e3AT9QYJMsUD4TMK0SLYvCfBEtpfDXkA6WitT/ZPSA==", + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, - "optional": true, "dependencies": { - "tslib": "^2.3.1" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { - "node": ">= 12.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/middleware-stack/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.200.0.tgz", - "integrity": "sha512-RZ3cfaIIC3+xjm+raEb1xfOB/kJsH99mHHcVkOeGuKGzzYAG8wG1N6EYOZgqO2SaNsr87sx9fxCAd8A4X0wgRA==", - "dev": true, - "optional": true, - "dependencies": { - "@aws-sdk/protocol-http": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" + "node_modules/@babel/traverse": { + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.17.tgz", + "integrity": "sha512-xK4Uwm0JnAMvxYZxOVecss85WxTEIbTa7bnGyf/+EgCL5Zt3U7htUpEOWv9detPlamGKuRzCqw74xVglDWpPdg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.16", + "@babel/types": "^7.22.17", + "debug": "^4.1.0", + "globals": "^11.1.0" }, "engines": { - "node": ">= 12.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/middleware-user-agent/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/node-config-provider": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.200.0.tgz", - "integrity": "sha512-TUZB/7JZfFQ6Ra4AhFCt64JvScosSkNZmhBE3a5Wdbh1uQlhVoczMumWPs1Gsl9awmYGipsDhZybTeI9r0b66w==", + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, - "optional": true, "dependencies": { - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/shared-ini-file-loader": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" + "ms": "2.1.2" }, "engines": { - "node": ">= 12.0.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@aws-sdk/node-config-provider/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/node-http-handler": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.200.0.tgz", - "integrity": "sha512-foqNf0qsHTdClogmtlzJgPk8/s/kEOjAnkMVwJwBPEjVTxTN8i5oC4rXUsPIZ7LOYBTz2QQGkl3vY6BBFMmVGw==", + "node_modules/@babel/types": { + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.17.tgz", + "integrity": "sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==", "dev": true, - "optional": true, "dependencies": { - "@aws-sdk/abort-controller": "3.200.0", - "@aws-sdk/protocol-http": "3.200.0", - "@aws-sdk/querystring-builder": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.15", + "to-fast-properties": "^2.0.0" }, "engines": { - "node": ">= 12.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/node-http-handler/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/property-provider": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.200.0.tgz", - "integrity": "sha512-KABh7LSkcWXCkilBa/WY2PvyR5vRMn1nwa2HYu9s1UToHbPCxIG0/ybtQfWNwVR4x5AtNODQYZBqxpBYUwau8w==", + "node_modules/@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", "dev": true, - "optional": true, "dependencies": { - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + }, + "bin": { + "watch": "cli.js" }, "engines": { - "node": ">= 12.0.0" + "node": ">=0.1.95" } }, - "node_modules/@aws-sdk/property-provider/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/protocol-http": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.200.0.tgz", - "integrity": "sha512-P61hkZtXXaTTk/ap+WCOxX/IIRCH1lTap6Yy8RigcDmblh/BE+vDRqqRiTebIq/pWgOzQ67OjFJLxDkkS/OMKQ==", - "dev": true, - "optional": true, - "dependencies": { - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "engines": { - "node": ">= 12.0.0" + "node": ">=0.1.90" } }, - "node_modules/@aws-sdk/protocol-http/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/querystring-builder": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.200.0.tgz", - "integrity": "sha512-r4q7oUkcYsnxeVaIUEPGEPPobyn1CpAn7NmeuK8c3Lq4MrcfTx11aQMEtklmW+hvzavNPFxgYyUNiDuIyiVd6A==", + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, - "optional": true, "dependencies": { - "@aws-sdk/types": "3.200.0", - "@aws-sdk/util-uri-escape": "3.188.0", - "tslib": "^2.3.1" + "@jridgewell/trace-mapping": "0.3.9" }, "engines": { - "node": ">= 12.0.0" + "node": ">=12" } }, - "node_modules/@aws-sdk/querystring-builder/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/querystring-parser": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.200.0.tgz", - "integrity": "sha512-9C6c+fas2hMqvuCK8m7vwMqLb5W/x1Wib9yYJnBx40bOSdnOADRoRQitxCE07Iuq8aeHjPZYn1IhLhE9i9EmOg==", + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, - "optional": true, "dependencies": { - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 12.0.0" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@aws-sdk/querystring-parser/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/service-error-classification": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.200.0.tgz", - "integrity": "sha512-MFaMIJ/3v3C0XDerJDEfNYEquQXysnKtvuJJJWqPOPXMxCls4u8utyeXv0E6wO8ast6UW5xJKtzqEFRQ3t/+7w==", - "dev": true, - "optional": true, - "engines": { - "node": ">= 12.0.0" + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" } }, - "node_modules/@aws-sdk/shared-ini-file-loader": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.200.0.tgz", - "integrity": "sha512-K7PxcJSsZ3ExdVsa6HP0l9f2kzsEeIfBn1bTBYsaacKmLeb1eUom+egSf5zr6cNmuyhPvKv0W7SbqYNC9MWTXg==", - "dev": true, - "optional": true, + "node_modules/@ethereumjs/common": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", + "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", "dependencies": { - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 12.0.0" + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.5" } }, - "node_modules/@aws-sdk/shared-ini-file-loader/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/signature-v4": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.200.0.tgz", - "integrity": "sha512-2xMRWwfHTIthwV97/ubWFnXwzh4lMEXcAzPTpuqGljAaG5mtExUTkAQqoNuJqt4wLconkN6QBbhN5fREtkUlRQ==", - "dev": true, - "optional": true, + "node_modules/@ethereumjs/common/node_modules/@types/bn.js": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", + "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", "dependencies": { - "@aws-sdk/is-array-buffer": "3.188.0", - "@aws-sdk/types": "3.200.0", - "@aws-sdk/util-hex-encoding": "3.188.0", - "@aws-sdk/util-middleware": "3.200.0", - "@aws-sdk/util-uri-escape": "3.188.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 12.0.0" + "@types/node": "*" } }, - "node_modules/@aws-sdk/signature-v4/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true + "node_modules/@ethereumjs/common/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, - "node_modules/@aws-sdk/smithy-client": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.200.0.tgz", - "integrity": "sha512-3tZHcvTHADz9H7su9w/fOJavOOAsC5olYfVVgeqteaHaSojFOaNm8fD4KvluSAIDpHyHZPVPLZIHwcEwuc7j9A==", - "dev": true, - "optional": true, + "node_modules/@ethereumjs/common/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", "dependencies": { - "@aws-sdk/middleware-stack": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" }, "engines": { - "node": ">= 12.0.0" + "node": ">=10.0.0" } }, - "node_modules/@aws-sdk/smithy-client/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/types": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.200.0.tgz", - "integrity": "sha512-4BfspYfvSwscstd5kUPAABu2rs6OfPZLKKq17frsNt6k3ax2WeHBsp3KIaOmqr0WDQnEBPjJginTB4uVsiSkdA==", - "dev": true, - "optional": true, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/@aws-sdk/url-parser": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.200.0.tgz", - "integrity": "sha512-scoAdYsBRBcg4gNKcwVUZrQ4C/ewYWo2JLRjWcaptcGfcdCWcl6905iTzcE/n1OhmaqWJsmUL6YL5ERr/4x8lA==", - "dev": true, - "optional": true, + "node_modules/@ethereumjs/tx": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", + "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", "dependencies": { - "@aws-sdk/querystring-parser": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" + "@ethereumjs/common": "^2.6.4", + "ethereumjs-util": "^7.1.5" } }, - "node_modules/@aws-sdk/url-parser/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/util-base64-browser": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.188.0.tgz", - "integrity": "sha512-qlH+5NZBLiyKziL335BEPedYxX6j+p7KFRWXvDQox9S+s+gLCayednpK+fteOhBenCcR9fUZOVuAPScy1I8qCg==", - "dev": true, - "optional": true, + "node_modules/@ethereumjs/tx/node_modules/@types/bn.js": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", + "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", "dependencies": { - "tslib": "^2.3.1" + "@types/node": "*" } }, - "node_modules/@aws-sdk/util-base64-browser/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true + "node_modules/@ethereumjs/tx/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, - "node_modules/@aws-sdk/util-base64-node": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.188.0.tgz", - "integrity": "sha512-r1dccRsRjKq+OhVRUfqFiW3sGgZBjHbMeHLbrAs9jrOjU2PTQ8PSzAXLvX/9lmp7YjmX17Qvlsg0NCr1tbB9OA==", - "dev": true, - "optional": true, + "node_modules/@ethereumjs/tx/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", "dependencies": { - "@aws-sdk/util-buffer-from": "3.188.0", - "tslib": "^2.3.1" + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" }, "engines": { - "node": ">= 12.0.0" + "node": ">=10.0.0" } }, - "node_modules/@aws-sdk/util-base64-node/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/util-body-length-browser": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.188.0.tgz", - "integrity": "sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg==", - "dev": true, - "optional": true, + "node_modules/@ethersproject/abi": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "tslib": "^2.3.1" + "@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" } }, - "node_modules/@aws-sdk/util-body-length-browser/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/util-body-length-node": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.188.0.tgz", - "integrity": "sha512-XwqP3vxk60MKp4YDdvDeCD6BPOiG2e+/Ou4AofZOy5/toB6NKz2pFNibQIUg2+jc7mPMnGnvOW3MQEgSJ+gu/Q==", - "dev": true, - "optional": true, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 12.0.0" + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" } }, - "node_modules/@aws-sdk/util-body-length-node/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/util-buffer-from": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.188.0.tgz", - "integrity": "sha512-NX1WXZ8TH20IZb4jPFT2CnLKSqZWddGxtfiWxD9M47YOtq/SSQeR82fhqqVjJn4P8w2F5E28f+Du4ntg/sGcxA==", - "dev": true, - "optional": true, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@aws-sdk/is-array-buffer": "3.188.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 12.0.0" + "@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" } }, - "node_modules/@aws-sdk/util-buffer-from/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/util-config-provider": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.188.0.tgz", - "integrity": "sha512-LBA7tLbi7v4uvbOJhSnjJrxbcRifKK/1ZVK94JTV2MNSCCyNkFotyEI5UWDl10YKriTIUyf7o5cakpiDZ3O4xg==", - "dev": true, - "optional": true, + "node_modules/@ethersproject/address": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 12.0.0" + "@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" } }, - "node_modules/@aws-sdk/util-config-provider/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/util-defaults-mode-browser": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.200.0.tgz", - "integrity": "sha512-WDFXifeo617AjCLd6ltddPDNvC7gsbCMQgUdXsuHt+paplyjqHF20jCU1+WXvFaTU5Ia1lN+SGDJb1nB1jawkw==", - "dev": true, - "optional": true, + "node_modules/@ethersproject/base64": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/types": "3.200.0", - "bowser": "^2.11.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 10.0.0" + "@ethersproject/bytes": "^5.7.0" } }, - "node_modules/@aws-sdk/util-defaults-mode-browser/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/util-defaults-mode-node": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.200.0.tgz", - "integrity": "sha512-1S/Y/KzKnK/aCqQiPR3JUlXv8NWjHiuuGUB1po3neeWnsld10Q4o2ScWWT/v+XCXFac7ublX6yjrCQ+1YBZNCw==", - "dev": true, - "optional": true, + "node_modules/@ethersproject/basex": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", + "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@aws-sdk/config-resolver": "3.200.0", - "@aws-sdk/credential-provider-imds": "3.200.0", - "@aws-sdk/node-config-provider": "3.200.0", - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 10.0.0" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/properties": "^5.7.0" } }, - "node_modules/@aws-sdk/util-defaults-mode-node/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.200.0.tgz", - "integrity": "sha512-qBPq/nVziDixIp8dLxL0Q+03JPy9HuJmL0sREHaE4sIHL1/g4gutXCQe5oYS4de82xSe4uNZo9qVBYW96h6m6A==", - "dev": true, - "optional": true, + "node_modules/@ethersproject/bignumber": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 12.0.0" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" } }, - "node_modules/@aws-sdk/util-endpoints/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true + "node_modules/@ethersproject/bignumber/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, - "node_modules/@aws-sdk/util-hex-encoding": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.188.0.tgz", - "integrity": "sha512-QyWovTtjQ2RYxqVM+STPh65owSqzuXURnfoof778spyX4iQ4z46wOge1YV2ZtwS8w5LWd9eeVvDrLu5POPYOnA==", - "dev": true, - "optional": true, + "node_modules/@ethersproject/bytes": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 12.0.0" + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@aws-sdk/util-hex-encoding/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.188.0.tgz", - "integrity": "sha512-SxobBVLZkkLSawTCfeQnhVX3Azm9O+C2dngZVe1+BqtF8+retUbVTs7OfYeWBlawVkULKF2e781lTzEHBBjCzw==", - "dev": true, - "optional": true, + "node_modules/@ethersproject/constants": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 12.0.0" + "@ethersproject/bignumber": "^5.7.0" } }, - "node_modules/@aws-sdk/util-locate-window/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/util-middleware": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.200.0.tgz", - "integrity": "sha512-yMC4pg9z31AxnvC9f2M+D7L1KCh6NgykPsNqQQxTz6fFIt/nXNc10eqYaVCJCn419bcSgQhtVDJ2RAudrCCabg==", - "dev": true, - "optional": true, + "node_modules/@ethersproject/contracts": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", + "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 12.0.0" + "@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" } }, - "node_modules/@aws-sdk/util-middleware/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/util-uri-escape": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.188.0.tgz", - "integrity": "sha512-4Y6AYZMT483Tiuq8dxz5WHIiPNdSFPGrl6tRTo2Oi2FcwypwmFhqgEGcqxeXDUJktvaCBxeA08DLr/AemVhPCg==", - "dev": true, - "optional": true, + "node_modules/@ethersproject/hash": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 12.0.0" + "@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" } }, - "node_modules/@aws-sdk/util-uri-escape/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.200.0.tgz", - "integrity": "sha512-985Qtcw813q3UanTakl17OJzdVRcw6p1lIl1Xww1CmuA9sW6X8+q6oQavnmXtACMd059sTUR/f+V4Yloya2Pmg==", - "dev": true, - "optional": true, + "node_modules/@ethersproject/hdnode": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", + "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@aws-sdk/types": "3.200.0", - "bowser": "^2.11.0", - "tslib": "^2.3.1" + "@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" } }, - "node_modules/@aws-sdk/util-user-agent-browser/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.200.0.tgz", - "integrity": "sha512-3dgMp31enW37VMg7GZDq5xhohEMo8mocwafQ1pKND/NDEjha9df3nk6Oy4F5Y2pG8GPdFvHnsTqJ6FJKwwYtxA==", - "dev": true, - "optional": true, - "dependencies": { - "@aws-sdk/node-config-provider": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true + "node_modules/@ethersproject/json-wallets": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", + "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } - } - }, - "node_modules/@aws-sdk/util-user-agent-node/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/util-utf8-browser": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.188.0.tgz", - "integrity": "sha512-jt627x0+jE+Ydr9NwkFstg3cUvgWh56qdaqAMDsqgRlKD21md/6G226z/Qxl7lb1VEW2LlmCx43ai/37Qwcj2Q==", - "dev": true, - "optional": true, + ], "dependencies": { - "tslib": "^2.3.1" + "@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" } }, - "node_modules/@aws-sdk/util-utf8-browser/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "node_modules/@aws-sdk/util-utf8-node": { - "version": "3.199.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.199.0.tgz", - "integrity": "sha512-Kk3qCdGbe5k0PUE8EBgMsRxNstvDCoWStYWjNwsHWuc/hJitSf44PColzXw6xxHqH1sY+6LcgIaMwJZ5C4bB6w==", - "dev": true, - "optional": true, + "node_modules/@ethersproject/keccak256": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@aws-sdk/util-buffer-from": "3.188.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 12.0.0" + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" } }, - "node_modules/@aws-sdk/util-utf8-node/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true + "node_modules/@ethersproject/logger": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ] }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, + "node_modules/@ethersproject/networks": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@babel/compat-data": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.0.tgz", - "integrity": "sha512-Gt9jszFJYq7qzXVK4slhc6NzJXnOVmRECWcVjF/T23rNXD9NtWQ0W3qxdg+p9wWIB+VQw3GYV/U2Ha9bRTfs4w==", - "dev": true, - "engines": { - "node": ">=6.9.0" + "node_modules/@ethersproject/pbkdf2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", + "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/sha2": "^5.7.0" } }, - "node_modules/@babel/core": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", - "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.6", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helpers": "^7.19.4", - "@babel/parser": "^7.19.6", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.6", - "@babel/types": "^7.19.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" + "node_modules/@ethersproject/properties": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true + "node_modules/@ethersproject/providers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", + "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } + ], + "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.0", + "@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.0", + "bech32": "1.1.4", + "ws": "7.4.6" } }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "node_modules/@ethersproject/random": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", + "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@babel/generator": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.0.tgz", - "integrity": "sha512-GUPcXxWibClgmYJuIwC2Bc2Lg+8b9VjaJ+HlNdACEVt+Wlr1eoU1OPZjZRm7Hzl0gaTsUZNQfeihvZJhG7oc3w==", - "dev": true, + "node_modules/@ethersproject/rlp": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@babel/types": "^7.20.0", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, + "node_modules/@ethersproject/sha2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", + "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "hash.js": "1.1.7" } }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", - "dev": true, + "node_modules/@ethersproject/signing-key": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "@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" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } + "node_modules/@ethersproject/signing-key/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true, - "engines": { - "node": ">=6.9.0" + "node_modules/@ethersproject/solidity": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", + "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "dev": true, + "node_modules/@ethersproject/strings": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, + "node_modules/@ethersproject/transactions": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@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" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, + "node_modules/@ethersproject/units": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", + "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", - "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", - "dev": true, + "node_modules/@ethersproject/wallet": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", + "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.19.4", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.6", - "@babel/types": "^7.19.4" - }, - "engines": { - "node": ">=6.9.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/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" } }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", - "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", - "dev": true, + "node_modules/@ethersproject/web": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@ethersproject/wordlists": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", + "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@firebase/app-types": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.0.tgz", + "integrity": "sha512-AeweANOIo0Mb8GiYm3xhTEBVCmPwTYAu9Hcd2qSkLuga/6+j9b1Jskl5bpiSQWy9eJ/j5pavxj6eYogmnuzm+Q==", + "peer": true + }, + "node_modules/@firebase/auth-interop-types": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.5.tgz", + "integrity": "sha512-88h74TMQ6wXChPA6h9Q3E1Jg6TkTHep2+k63OWg3s0ozyGVMeY+TTOti7PFPzq5RhszQPQOoCi59es4MaRvgCw==", + "peerDependencies": { + "@firebase/app-types": "0.x", + "@firebase/util": "0.x" + } + }, + "node_modules/@firebase/component": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.1.19.tgz", + "integrity": "sha512-L0S3g8eqaerg8y0zox3oOHSTwn/FE8RbcRHiurnbESvDViZtP5S5WnhuAPd7FnFxa8ElWK0z1Tr3ikzWDv1xdQ==", + "dependencies": { + "@firebase/util": "0.3.2", + "tslib": "^1.11.1" + } + }, + "node_modules/@firebase/database": { + "version": "0.6.13", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.6.13.tgz", + "integrity": "sha512-NommVkAPzU7CKd1gyehmi3lz0K78q0KOfiex7Nfy7MBMwknLm7oNqKovXSgQV1PCLvKXvvAplDSFhDhzIf9obA==", + "dependencies": { + "@firebase/auth-interop-types": "0.1.5", + "@firebase/component": "0.1.19", + "@firebase/database-types": "0.5.2", + "@firebase/logger": "0.2.6", + "@firebase/util": "0.3.2", + "faye-websocket": "0.11.3", + "tslib": "^1.11.1" + } + }, + "node_modules/@firebase/database-types": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.5.2.tgz", + "integrity": "sha512-ap2WQOS3LKmGuVFKUghFft7RxXTyZTDr0Xd8y2aqmWsbJVjgozi0huL/EUMgTjGFrATAjcf2A7aNs8AKKZ2a8g==", + "dependencies": { + "@firebase/app-types": "0.6.1" + } + }, + "node_modules/@firebase/database-types/node_modules/@firebase/app-types": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.6.1.tgz", + "integrity": "sha512-L/ZnJRAq7F++utfuoTKX4CLBG5YR7tFO3PLzG1/oXXKEezJ0kRL3CMRoueBEmTCzVb/6SIs2Qlaw++uDgi5Xyg==" + }, + "node_modules/@firebase/logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.2.6.tgz", + "integrity": "sha512-KIxcUvW/cRGWlzK9Vd2KB864HlUnCfdTH0taHE0sXW5Xl7+W68suaeau1oKNEqmc3l45azkd4NzXTCWZRZdXrw==" + }, + "node_modules/@firebase/util": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-0.3.2.tgz", + "integrity": "sha512-Dqs00++c8rwKky6KCKLLY2T1qYO4Q+X5t+lF7DInXDNF4ae1Oau35bkD+OpJ9u7l1pEv7KHowP6CUKuySCOc8g==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@google-cloud/common": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-2.4.0.tgz", + "integrity": "sha512-zWFjBS35eI9leAHhjfeOYlK5Plcuj/77EzstnrJIZbKgF/nkqjcQuGiMCpzCwOfPyUbz8ZaEOYgbHa759AKbjg==", + "optional": true, + "dependencies": { + "@google-cloud/projectify": "^1.0.0", + "@google-cloud/promisify": "^1.0.0", + "arrify": "^2.0.0", + "duplexify": "^3.6.0", + "ent": "^2.2.0", + "extend": "^3.0.2", + "google-auth-library": "^5.5.0", + "retry-request": "^4.0.0", + "teeny-request": "^6.0.0" + }, "engines": { - "node": ">=6.9.0" + "node": ">=8.10.0" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", - "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", - "dev": true, + "node_modules/@google-cloud/firestore": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-3.8.6.tgz", + "integrity": "sha512-ox80NbrM1MLJgvAAUd1quFLx/ie/nSjrk1PtscSicpoYDlKb9e6j7pHrVpbopBMyliyfNl3tLJWaDh+x+uCXqw==", + "optional": true, "dependencies": { - "@babel/types": "^7.19.4" + "deep-equal": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "google-gax": "^1.15.3", + "readable-stream": "^3.4.0", + "through2": "^3.0.0" }, "engines": { - "node": ">=6.9.0" + "node": "^8.13.0 || >=10.10.0" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, + "node_modules/@google-cloud/paginator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-2.0.3.tgz", + "integrity": "sha512-kp/pkb2p/p0d8/SKUu4mOq8+HGwF8NPzHWkj+VKrIPQPyMRw8deZtrO/OcSiy9C/7bpfU5Txah5ltUNfPkgEXg==", + "optional": true, "dependencies": { - "@babel/types": "^7.18.6" + "arrify": "^2.0.0", + "extend": "^3.0.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=8.10.0" } }, - "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true, + "node_modules/@google-cloud/projectify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-1.0.4.tgz", + "integrity": "sha512-ZdzQUN02eRsmTKfBj9FDL0KNDIFNjBn/d6tHQmA/+FImH5DO6ZV8E7FzxMgAUiVAUq41RFAkb25p1oHOZ8psfg==", + "optional": true, "engines": { - "node": ">=6.9.0" + "node": ">=8.10.0" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true, + "node_modules/@google-cloud/promisify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-1.0.4.tgz", + "integrity": "sha512-VccZDcOql77obTnFh0TbNED/6ZbbmHDf8UMNnzO1d5g9V0Htfm4k5cllY8P1tJsRKC3zWYGRLaViiupcgVjBoQ==", + "optional": true, "engines": { - "node": ">=6.9.0" + "node": ">=8.10.0" } }, - "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true, + "node_modules/@google-cloud/storage": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-4.7.2.tgz", + "integrity": "sha512-nlXYhJyC6ErFQX34tMLruknJ9fljN3JepgXEC9MZlQ64/2h9Ee8MJ7FCowdBnTiZ863IkbvctWtNZRrSxfyqSQ==", + "optional": true, + "dependencies": { + "@google-cloud/common": "^2.1.1", + "@google-cloud/paginator": "^2.0.0", + "@google-cloud/promisify": "^1.0.0", + "arrify": "^2.0.0", + "compressible": "^2.0.12", + "concat-stream": "^2.0.0", + "date-and-time": "^0.14.2", + "duplexify": "^3.5.0", + "extend": "^3.0.2", + "gaxios": "^3.0.0", + "gcs-resumable-upload": "^2.2.4", + "hash-stream-validation": "^0.2.2", + "mime": "^2.2.0", + "mime-types": "^2.0.8", + "onetime": "^5.1.0", + "p-limit": "^2.2.0", + "pumpify": "^2.0.0", + "readable-stream": "^3.4.0", + "snakeize": "^0.1.0", + "stream-events": "^1.0.1", + "through2": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, "engines": { - "node": ">=6.9.0" + "node": ">=8.10.0" } }, - "node_modules/@babel/helpers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.0.tgz", - "integrity": "sha512-aGMjYraN0zosCEthoGLdqot1oRsmxVTQRHadsUPz5QM44Zej2PYRz7XiDE7GqnkZnNtLbOuxqoZw42vkU7+XEQ==", - "dev": true, + "node_modules/@grpc/grpc-js": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.8.tgz", + "integrity": "sha512-4qJqqn+CU/nBydz9ePJP+oa8dz0U42Ut/GejlbyaQ1xTkynCc+ndNHHnISlNeHawDsv4MOAyP3mV/EnDNUw2zA==", + "optional": true, "dependencies": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.0", - "@babel/types": "^7.20.0" + "@types/node": ">=12.12.47" }, "engines": { - "node": ">=6.9.0" + "node": "^8.13.0 || >=10.10.0" } }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "node_modules/@grpc/grpc-js/node_modules/@types/node": { + "version": "20.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.0.tgz", + "integrity": "sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg==", + "optional": true + }, + "node_modules/@grpc/proto-loader": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.5.6.tgz", + "integrity": "sha512-DT14xgw3PSzPxwS13auTEwxhMMOoz33DPUKNtmYK/QYbBSpLXJy78FGGs5yVoxVobEqPm4iW9MOIoz0A3bLTRQ==", + "optional": true, + "dependencies": { + "lodash.camelcase": "^4.3.0", + "protobufjs": "^6.8.6" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@ipld/dag-cbor": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-7.0.3.tgz", + "integrity": "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==", + "dependencies": { + "cborg": "^1.6.0", + "multiformats": "^9.5.4" + } + }, + "node_modules/@ipld/dag-json": { + "version": "8.0.11", + "resolved": "https://registry.npmjs.org/@ipld/dag-json/-/dag-json-8.0.11.tgz", + "integrity": "sha512-Pea7JXeYHTWXRTIhBqBlhw7G53PJ7yta3G/sizGEZyzdeEwhZRr0od5IQ0r2ZxOt1Do+2czddjeEPp+YTxDwCA==", + "dependencies": { + "cborg": "^1.5.4", + "multiformats": "^9.5.4" + } + }, + "node_modules/@ipld/dag-pb": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/@ipld/dag-pb/-/dag-pb-2.1.18.tgz", + "integrity": "sha512-ZBnf2fuX9y3KccADURG5vb9FaOeMjFkCrNysB0PtftME/4iCTjxfaLoNq/IAh5fTqUOMXvryN6Jyka4ZGuMLIg==", + "dependencies": { + "multiformats": "^9.5.4" + } + }, + "node_modules/@jest/console": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@jest/source-map": "^24.9.0", + "chalk": "^2.0.1", + "slash": "^2.0.0" }, "engines": { - "node": ">=6.9.0" + "node": ">= 6" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { + "node_modules/@jest/console/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", @@ -1841,7 +1659,7 @@ "node": ">=4" } }, - "node_modules/@babel/highlight/node_modules/chalk": { + "node_modules/@jest/console/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", @@ -1855,7 +1673,7 @@ "node": ">=4" } }, - "node_modules/@babel/highlight/node_modules/color-convert": { + "node_modules/@jest/console/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", @@ -1864,13 +1682,13 @@ "color-name": "1.1.3" } }, - "node_modules/@babel/highlight/node_modules/color-name": { + "node_modules/@jest/console/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "node_modules/@babel/highlight/node_modules/has-flag": { + "node_modules/@jest/console/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", @@ -1879,7 +1697,7 @@ "node": ">=4" } }, - "node_modules/@babel/highlight/node_modules/supports-color": { + "node_modules/@jest/console/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", @@ -1891,1524 +1709,628 @@ "node": ">=4" } }, - "node_modules/@babel/parser": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.0.tgz", - "integrity": "sha512-G9VgAhEaICnz8iiJeGJQyVl6J2nTjbW0xeisva0PK6XcKsga7BIaqm4ZF8Rg1Wbaqmy6znspNqhPaPkyukujzg==", + "node_modules/@jest/core": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", + "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", "dev": true, - "bin": { - "parser": "bin/babel-parser.js" + "dependencies": { + "@jest/console": "^24.7.1", + "@jest/reporters": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-changed-files": "^24.9.0", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-resolve-dependencies": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "jest-watcher": "^24.9.0", + "micromatch": "^3.1.10", + "p-each-series": "^1.0.0", + "realpath-native": "^1.1.0", + "rimraf": "^2.5.4", + "slash": "^2.0.0", + "strip-ansi": "^5.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">= 6" } }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "color-convert": "^1.9.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=4" } }, - "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "node_modules/@jest/core/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=4" } }, - "node_modules/@babel/traverse": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.0.tgz", - "integrity": "sha512-5+cAXQNARgjRUK0JWu2UBwja4JLSO/rBMPJzpsKb+oBF5xlUuCfljQepS4XypBQoiigL0VQjTZy6WiONtUdScQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.0", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.0", - "@babel/types": "^7.20.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, + "node_modules/@jest/core/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@jest/core/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "engines": { - "node": ">=6.9.0" + "node": ">=4" } }, - "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/@jest/core/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" + "glob": "^7.1.3" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "bin": { + "rimraf": "bin.js" } }, - "node_modules/@babel/types": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.0.tgz", - "integrity": "sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg==", + "node_modules/@jest/core/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" + "ansi-regex": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=6" } }, - "node_modules/@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "node_modules/@jest/core/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "dependencies": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - }, - "bin": { - "watch": "cli.js" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=0.1.95" + "node": ">=4" } }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "node_modules/@jest/environment": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", + "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0" + }, "engines": { - "node": ">=0.1.90" + "node": ">= 6" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "node_modules/@jest/fake-timers": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", + "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" }, "engines": { - "node": ">=12" + "node": ">= 6" } }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "node_modules/@jest/reporters": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", + "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "istanbul-lib-coverage": "^2.0.2", + "istanbul-lib-instrument": "^3.0.1", + "istanbul-lib-report": "^2.0.4", + "istanbul-lib-source-maps": "^3.0.1", + "istanbul-reports": "^2.2.6", + "jest-haste-map": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.6.0", + "node-notifier": "^5.4.2", + "slash": "^2.0.0", + "source-map": "^0.6.0", + "string-length": "^2.0.0" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "node_modules/@ethereumjs/common/node_modules/@types/bn.js": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", - "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@ethereumjs/common/node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "node_modules/@ethereumjs/common/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=4" } }, - "node_modules/@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", + "node_modules/@jest/reporters/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" + "color-name": "1.1.3" } }, - "node_modules/@ethereumjs/tx/node_modules/@types/bn.js": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", - "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", - "dependencies": { - "@types/node": "*" - } + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, - "node_modules/@ethereumjs/tx/node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + "node_modules/@jest/reporters/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } }, - "node_modules/@ethereumjs/tx/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=4" } }, - "node_modules/@ethersproject/abi": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.7.tgz", - "integrity": "sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==", + "node_modules/@jest/source-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", + "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", + "dev": true, "dependencies": { - "@ethersproject/address": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/hash": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/strings": "^5.0.4" + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/@ethersproject/abstract-provider": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.0.5.tgz", - "integrity": "sha512-i/CjElAkzV7vQBAeoz+IpjGfcFYEP9eD7j3fzZ0fzTq03DO7PPnR+xkEZ1IoDXGwDS+55aLM1xvLDwB/Lx6IOQ==", - "dependencies": { - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/networks": "^5.0.3", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/transactions": "^5.0.5", - "@ethersproject/web": "^5.0.6" + "node_modules/@jest/source-map/node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" } }, - "node_modules/@ethersproject/abstract-signer": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.0.7.tgz", - "integrity": "sha512-8W8gy/QutEL60EoMEpvxZ8MFAEWs/JvH5nmZ6xeLXoZvmBCasGmxqHdYjo2cxg0nevkPkq9SeenSsBBZSCx+SQ==", + "node_modules/@jest/test-result": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", + "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", + "dev": true, "dependencies": { - "@ethersproject/abstract-provider": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3" + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/istanbul-lib-coverage": "^2.0.0" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/@ethersproject/address": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.0.5.tgz", - "integrity": "sha512-DpkQ6rwk9jTefrRsJzEm6nhRiJd9pvhn1xN0rw5N/jswXG5r7BLk/GVA0mMAVWAsYfvi2xSc5L41FMox43RYEA==", + "node_modules/@jest/test-sequencer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", + "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", + "dev": true, "dependencies": { - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/rlp": "^5.0.3", - "bn.js": "^4.4.0" + "@jest/test-result": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/@ethersproject/base64": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.0.4.tgz", - "integrity": "sha512-4KRykQ7BQMeOXfvio1YITwHjxwBzh92UoXIdzxDE1p53CK28bbHPdsPNYo0wl0El7lJAMpT2SOdL0hhbWRnyIA==", + "node_modules/@jest/transform": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", + "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", + "dev": true, "dependencies": { - "@ethersproject/bytes": "^5.0.4" + "@babel/core": "^7.1.0", + "@jest/types": "^24.9.0", + "babel-plugin-istanbul": "^5.1.0", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.15", + "jest-haste-map": "^24.9.0", + "jest-regex-util": "^24.9.0", + "jest-util": "^24.9.0", + "micromatch": "^3.1.10", + "pirates": "^4.0.1", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "2.4.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/@ethersproject/basex": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.0.4.tgz", - "integrity": "sha512-ixIr/kKiAoSzOnSc777AGIOAhKai5Ivqr4HO/Gz+YG+xkfv6kqD6AW4ga9vM20Wwb0QBhh3LoRWTu4V1K+x9Ew==", + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/properties": "^5.0.3" + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@ethersproject/bignumber": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.8.tgz", - "integrity": "sha512-KXFVAFKS1jdTXYN8BE5Oj+ZfPMh28iRdFeNGBVT6cUFdtiPVqeXqc0ggvBqA3A1VoFFGgM7oAeaagA393aORHA==", + "node_modules/@jest/transform/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "dependencies": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "bn.js": "^4.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@ethersproject/bytes": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz", - "integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==", + "node_modules/@jest/transform/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { - "@ethersproject/logger": "^5.0.5" + "color-name": "1.1.3" } }, - "node_modules/@ethersproject/constants": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.0.5.tgz", - "integrity": "sha512-foaQVmxp2+ik9FrLUCtVrLZCj4M3Ibgkqvh+Xw/vFRSerkjVSYePApaVE5essxhoSlF1U9oXfWY09QI2AXtgKA==", - "dependencies": { - "@ethersproject/bignumber": "^5.0.7" - } + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, - "node_modules/@ethersproject/contracts": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.0.5.tgz", - "integrity": "sha512-tFI255lFbmbqMkgnuyhDWHl3yWqttPlReplYuVvDCT/SuvBjLR4ad2uipBlh1fh5X1ipK9ettAoV4S0HKim4Kw==", - "dependencies": { - "@ethersproject/abi": "^5.0.5", - "@ethersproject/abstract-provider": "^5.0.4", - "@ethersproject/abstract-signer": "^5.0.4", - "@ethersproject/address": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3" + "node_modules/@jest/transform/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" } }, - "node_modules/@ethersproject/hash": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.0.6.tgz", - "integrity": "sha512-Gvh57v6BWhwnud6l7tMfQm32PRQ2DYx2WaAAQmAxAfYvmzUkpQCBstnGeNMXIL8/2wdkvcB2u+WZRWaZtsFuUQ==", + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "dependencies": { - "@ethersproject/abstract-signer": "^5.0.6", - "@ethersproject/address": "^5.0.5", - "@ethersproject/bignumber": "^5.0.8", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.4", - "@ethersproject/strings": "^5.0.4" + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@ethersproject/hdnode": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.0.5.tgz", - "integrity": "sha512-Ho4HZaK+KijE5adayvjAGusWMnT0mgwGa5hGMBofBOgX9nqiKf6Wxx68SXBGI1/L3rmKo6mlAjxUd8gefs0teQ==", + "node_modules/@jest/transform/node_modules/write-file-atomic": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", + "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", + "dev": true, "dependencies": { - "@ethersproject/abstract-signer": "^5.0.4", - "@ethersproject/basex": "^5.0.3", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/pbkdf2": "^5.0.3", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/sha2": "^5.0.3", - "@ethersproject/signing-key": "^5.0.4", - "@ethersproject/strings": "^5.0.4", - "@ethersproject/transactions": "^5.0.5", - "@ethersproject/wordlists": "^5.0.4" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" } }, - "node_modules/@ethersproject/json-wallets": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.0.7.tgz", - "integrity": "sha512-dgOn9JtGgjT28mDXs4LYY2rT4CzS6bG/rxoYuPq3TLHIf6nmvBcr33Fee6RrM/y8UAx4gyIkf6wb2cXsOctvQQ==", + "node_modules/@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dev": true, "dependencies": { - "@ethersproject/abstract-signer": "^5.0.4", - "@ethersproject/address": "^5.0.4", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/hdnode": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/pbkdf2": "^5.0.3", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/random": "^5.0.3", - "@ethersproject/strings": "^5.0.4", - "@ethersproject/transactions": "^5.0.5", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/@ethersproject/keccak256": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.0.4.tgz", - "integrity": "sha512-GNpiOUm9PGUxFNqOxYKDQBM0u68bG9XC9iOulEQ8I0tOx/4qUpgVzvgXL6ugxr0RY554Gz/NQsVqknqPzUcxpQ==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, "dependencies": { - "@ethersproject/bytes": "^5.0.4", - "js-sha3": "0.5.7" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@ethersproject/logger": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz", - "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==" - }, - "node_modules/@ethersproject/networks": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.0.4.tgz", - "integrity": "sha512-/wHDTRms5mpJ09BoDrbNdFWINzONe05wZRgohCXvEv39rrH/Gd/yAnct8wC0RsW3tmFOgjgQxuBvypIxuUynTw==", - "dependencies": { - "@ethersproject/logger": "^5.0.5" + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@ethersproject/pbkdf2": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.0.4.tgz", - "integrity": "sha512-9jVBjHXQKfr9+3bkCg01a8Cd1H9e+7Kw3ZMIvAxD0lZtuzrXsJxm1hVwY9KA+PRUvgS/9tTP4viXQYwLAax7zg==", - "dependencies": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/sha2": "^5.0.3" + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@ethersproject/properties": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.4.tgz", - "integrity": "sha512-UdyX3GqBxFt15B0uSESdDNmhvEbK3ACdDXl2soshoPcneXuTswHDeA0LoPlnaZzhbgk4p6jqb4GMms5C26Qu6A==", - "dependencies": { - "@ethersproject/logger": "^5.0.5" - } + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true }, - "node_modules/@ethersproject/providers": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.0.13.tgz", - "integrity": "sha512-5jsuk1FwXxmoQApGs8LSQyS43KP01pHA+6cQ1OPov5pT5Pcqe6ffh6UD1//BZ9Vjf+5e9AQqIk8w7FkGyROuCA==", + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, "dependencies": { - "@ethersproject/abstract-provider": "^5.0.4", - "@ethersproject/abstract-signer": "^5.0.4", - "@ethersproject/address": "^5.0.4", - "@ethersproject/basex": "^5.0.3", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/hash": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/networks": "^5.0.3", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/random": "^5.0.3", - "@ethersproject/rlp": "^5.0.3", - "@ethersproject/sha2": "^5.0.3", - "@ethersproject/strings": "^5.0.4", - "@ethersproject/transactions": "^5.0.5", - "@ethersproject/web": "^5.0.6", - "bech32": "1.1.4", - "ws": "7.2.3" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@ethersproject/random": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.0.4.tgz", - "integrity": "sha512-AIZJhqs6Ba4/+U3lOjt3QZbP6b/kuuGLJUYFUonAgWmkTHwqsCwYnFvnHKQSUuHbXHvErp7WFXFlztx+yMn3kQ==", + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", "dependencies": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5" + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" } }, - "node_modules/@ethersproject/rlp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.0.4.tgz", - "integrity": "sha512-5qrrZad7VTjofxSsm7Zg/7Dr4ZOln4S2CqiDdOuTv6MBKnXj0CiBojXyuDy52M8O3wxH0CyE924hXWTDV1PQWQ==", + "node_modules/@mapbox/node-pre-gyp/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dependencies": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@ethersproject/sha2": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.0.4.tgz", - "integrity": "sha512-0yFhf1mspxAfWdXXoPtK94adUeu1R7/FzAa+DfEiZTc76sz/vHXf0LSIazoR3znYKFny6haBxME+usbvvEcF3A==", + "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "hash.js": "1.1.3" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@ethersproject/sha2/node_modules/hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" - } + "node_modules/@mapbox/node-pre-gyp/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "node_modules/@ethersproject/signing-key": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.0.5.tgz", - "integrity": "sha512-Z1wY7JC1HVO4CvQWY2TyTTuAr8xK3bJijZw1a9G92JEmKdv1j255R/0YLBBcFTl2J65LUjtXynNJ2GbArPGi5g==", + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.0.tgz", + "integrity": "sha512-Xfijy7HvfzzqiOAhAepF4SGN5e9leLkMvg/OPOF97XemjfVCYN/oWa75wnkc6mltMSTwY+XlbhWgUOJmkFspSw==", + "dev": true, "dependencies": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "elliptic": "6.5.3" + "sparse-bitfield": "^3.0.3" } }, - "node_modules/@ethersproject/signing-key/node_modules/elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", - "dependencies": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "node_modules/@phc/format": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@phc/format/-/format-1.0.0.tgz", + "integrity": "sha512-m7X9U6BG2+J+R1lSOdCiITLLrxm+cWlNI3HUFA92oLO77ObGNzaKdh8pMLqdZcshtkKuV84olNNXDfMc4FezBQ==", + "engines": { + "node": ">=10" } }, - "node_modules/@ethersproject/solidity": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.0.5.tgz", - "integrity": "sha512-DMFQ0ouXmNVoKWbGEUFGi8Urli4SJip9jXafQyFHWPRr5oJUqDVkNfwcyC37k+mhBG93k7qrYXCH2xJnGEOxHg==", + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", "dependencies": { - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/sha2": "^5.0.3", - "@ethersproject/strings": "^5.0.4" + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" } }, - "node_modules/@ethersproject/strings": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.0.5.tgz", - "integrity": "sha512-JED6WaIV00xM/gvj8vSnd+0VWtDYdidTmavFRCTQakqfz+4tDo6Jz5LHgG+dd45h7ah7ykCHW0C7ZXWEDROCXQ==", + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "node_modules/@rodrigogs/mysql-events": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@rodrigogs/mysql-events/-/mysql-events-0.6.0.tgz", + "integrity": "sha512-bI4zECD76lprG050XIl9+ZY2COZ7rxwtT982uF+aV872j/zbQC0imYDZuYcQuktNC3GyLuo+wH/BoxrrfDQEag==", "dependencies": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/logger": "^5.0.5" + "@rodrigogs/zongji": "^0.4.14", + "debug": "^4.1.1", + "debuggler": "^1.0.0", + "mysql": "^2.17.1" + }, + "engines": { + "node": ">=7.6.0" } }, - "node_modules/@ethersproject/transactions": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.0.6.tgz", - "integrity": "sha512-htsFhOD+NMBxx676A8ehSuwVV49iqpSB+CkjPZ02tpNew0K6p8g0CZ46Z1ZP946gIHAU80xQ0NACHYrjIUaCFA==", + "node_modules/@rodrigogs/mysql-events/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "@ethersproject/address": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/rlp": "^5.0.3", - "@ethersproject/signing-key": "^5.0.4" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@ethersproject/units": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.0.6.tgz", - "integrity": "sha512-tsJuy4mipppdmooukRfhXt8fGx9nxvfvG6Xdy0RDm7LzHsjghjwQ69m2bCpId6SDSR1Uq1cQ9irPiUBSyWolUA==", + "node_modules/@rodrigogs/zongji": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@rodrigogs/zongji/-/zongji-0.4.14.tgz", + "integrity": "sha512-U2UUFzL/Lsc7AfRXAyo2OW4caGzf+teKOVA+D1Suq4f87Scn4frIGaiKOgZ/j50C1bXRT46wcy2AgWgZfr5fWQ==", "dependencies": { - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/logger": "^5.0.5" - } - }, - "node_modules/@ethersproject/wallet": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.0.6.tgz", - "integrity": "sha512-dRqx3+Degc5pvjaeeTHuk2EuTRM3b6ce/TiV0HRZhRXYnKyyjg0iYXEZo/b6p3rnV+Xhwxkc0+I/ISPkNpictA==", - "dependencies": { - "@ethersproject/abstract-provider": "^5.0.4", - "@ethersproject/abstract-signer": "^5.0.4", - "@ethersproject/address": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/hash": "^5.0.4", - "@ethersproject/hdnode": "^5.0.4", - "@ethersproject/json-wallets": "^5.0.6", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/random": "^5.0.3", - "@ethersproject/signing-key": "^5.0.4", - "@ethersproject/transactions": "^5.0.5", - "@ethersproject/wordlists": "^5.0.4" - } - }, - "node_modules/@ethersproject/web": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.0.9.tgz", - "integrity": "sha512-//QNlv1MSkOII1hv3+HQwWoiVFS+BMVGI0KYeUww4cyrEktnx1QIez5bTSab9s9fWTFaWKNmQNBwMbxAqPuYDw==", - "dependencies": { - "@ethersproject/base64": "^5.0.3", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/strings": "^5.0.4" - } - }, - "node_modules/@ethersproject/wordlists": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.0.5.tgz", - "integrity": "sha512-XA3ycFltVrCTQt04w5nHu3Xq5Z6HjqWsXaAYQHFdqtugyUsIumaO9S5MOwFFuUYTNkZUoT3jCRa/OBS+K4tLfA==", - "dependencies": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/hash": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/strings": "^5.0.4" - } - }, - "node_modules/@firebase/app-types": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.8.1.tgz", - "integrity": "sha512-p75Ow3QhB82kpMzmOntv866wH9eZ3b4+QbUY+8/DA5Zzdf1c8Nsk8B7kbFpzJt4wwHMdy5LTF5YUnoTc1JiWkw==", - "peer": true - }, - "node_modules/@firebase/auth-interop-types": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.5.tgz", - "integrity": "sha512-88h74TMQ6wXChPA6h9Q3E1Jg6TkTHep2+k63OWg3s0ozyGVMeY+TTOti7PFPzq5RhszQPQOoCi59es4MaRvgCw==", - "peerDependencies": { - "@firebase/app-types": "0.x", - "@firebase/util": "0.x" - } - }, - "node_modules/@firebase/component": { - "version": "0.1.19", - "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.1.19.tgz", - "integrity": "sha512-L0S3g8eqaerg8y0zox3oOHSTwn/FE8RbcRHiurnbESvDViZtP5S5WnhuAPd7FnFxa8ElWK0z1Tr3ikzWDv1xdQ==", - "dependencies": { - "@firebase/util": "0.3.2", - "tslib": "^1.11.1" - } - }, - "node_modules/@firebase/database": { - "version": "0.6.13", - "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.6.13.tgz", - "integrity": "sha512-NommVkAPzU7CKd1gyehmi3lz0K78q0KOfiex7Nfy7MBMwknLm7oNqKovXSgQV1PCLvKXvvAplDSFhDhzIf9obA==", - "dependencies": { - "@firebase/auth-interop-types": "0.1.5", - "@firebase/component": "0.1.19", - "@firebase/database-types": "0.5.2", - "@firebase/logger": "0.2.6", - "@firebase/util": "0.3.2", - "faye-websocket": "0.11.3", - "tslib": "^1.11.1" - } - }, - "node_modules/@firebase/database-types": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.5.2.tgz", - "integrity": "sha512-ap2WQOS3LKmGuVFKUghFft7RxXTyZTDr0Xd8y2aqmWsbJVjgozi0huL/EUMgTjGFrATAjcf2A7aNs8AKKZ2a8g==", - "dependencies": { - "@firebase/app-types": "0.6.1" - } - }, - "node_modules/@firebase/database-types/node_modules/@firebase/app-types": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.6.1.tgz", - "integrity": "sha512-L/ZnJRAq7F++utfuoTKX4CLBG5YR7tFO3PLzG1/oXXKEezJ0kRL3CMRoueBEmTCzVb/6SIs2Qlaw++uDgi5Xyg==" - }, - "node_modules/@firebase/logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.2.6.tgz", - "integrity": "sha512-KIxcUvW/cRGWlzK9Vd2KB864HlUnCfdTH0taHE0sXW5Xl7+W68suaeau1oKNEqmc3l45azkd4NzXTCWZRZdXrw==" - }, - "node_modules/@firebase/util": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@firebase/util/-/util-0.3.2.tgz", - "integrity": "sha512-Dqs00++c8rwKky6KCKLLY2T1qYO4Q+X5t+lF7DInXDNF4ae1Oau35bkD+OpJ9u7l1pEv7KHowP6CUKuySCOc8g==", - "dependencies": { - "tslib": "^1.11.1" - } - }, - "node_modules/@google-cloud/common": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-2.4.0.tgz", - "integrity": "sha512-zWFjBS35eI9leAHhjfeOYlK5Plcuj/77EzstnrJIZbKgF/nkqjcQuGiMCpzCwOfPyUbz8ZaEOYgbHa759AKbjg==", - "optional": true, - "dependencies": { - "@google-cloud/projectify": "^1.0.0", - "@google-cloud/promisify": "^1.0.0", - "arrify": "^2.0.0", - "duplexify": "^3.6.0", - "ent": "^2.2.0", - "extend": "^3.0.2", - "google-auth-library": "^5.5.0", - "retry-request": "^4.0.0", - "teeny-request": "^6.0.0" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/@google-cloud/firestore": { - "version": "3.8.6", - "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-3.8.6.tgz", - "integrity": "sha512-ox80NbrM1MLJgvAAUd1quFLx/ie/nSjrk1PtscSicpoYDlKb9e6j7pHrVpbopBMyliyfNl3tLJWaDh+x+uCXqw==", - "optional": true, - "dependencies": { - "deep-equal": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "google-gax": "^1.15.3", - "readable-stream": "^3.4.0", - "through2": "^3.0.0" - }, - "engines": { - "node": "^8.13.0 || >=10.10.0" - } - }, - "node_modules/@google-cloud/paginator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-2.0.3.tgz", - "integrity": "sha512-kp/pkb2p/p0d8/SKUu4mOq8+HGwF8NPzHWkj+VKrIPQPyMRw8deZtrO/OcSiy9C/7bpfU5Txah5ltUNfPkgEXg==", - "optional": true, - "dependencies": { - "arrify": "^2.0.0", - "extend": "^3.0.2" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/@google-cloud/projectify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-1.0.4.tgz", - "integrity": "sha512-ZdzQUN02eRsmTKfBj9FDL0KNDIFNjBn/d6tHQmA/+FImH5DO6ZV8E7FzxMgAUiVAUq41RFAkb25p1oHOZ8psfg==", - "optional": true, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/@google-cloud/promisify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-1.0.4.tgz", - "integrity": "sha512-VccZDcOql77obTnFh0TbNED/6ZbbmHDf8UMNnzO1d5g9V0Htfm4k5cllY8P1tJsRKC3zWYGRLaViiupcgVjBoQ==", - "optional": true, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/@google-cloud/storage": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-4.7.2.tgz", - "integrity": "sha512-nlXYhJyC6ErFQX34tMLruknJ9fljN3JepgXEC9MZlQ64/2h9Ee8MJ7FCowdBnTiZ863IkbvctWtNZRrSxfyqSQ==", - "optional": true, - "dependencies": { - "@google-cloud/common": "^2.1.1", - "@google-cloud/paginator": "^2.0.0", - "@google-cloud/promisify": "^1.0.0", - "arrify": "^2.0.0", - "compressible": "^2.0.12", - "concat-stream": "^2.0.0", - "date-and-time": "^0.14.2", - "duplexify": "^3.5.0", - "extend": "^3.0.2", - "gaxios": "^3.0.0", - "gcs-resumable-upload": "^2.2.4", - "hash-stream-validation": "^0.2.2", - "mime": "^2.2.0", - "mime-types": "^2.0.8", - "onetime": "^5.1.0", - "p-limit": "^2.2.0", - "pumpify": "^2.0.0", - "readable-stream": "^3.4.0", - "snakeize": "^0.1.0", - "stream-events": "^1.0.1", - "through2": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/@grpc/grpc-js": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.8.tgz", - "integrity": "sha512-4qJqqn+CU/nBydz9ePJP+oa8dz0U42Ut/GejlbyaQ1xTkynCc+ndNHHnISlNeHawDsv4MOAyP3mV/EnDNUw2zA==", - "optional": true, - "dependencies": { - "@types/node": ">=12.12.47" - }, - "engines": { - "node": "^8.13.0 || >=10.10.0" - } - }, - "node_modules/@grpc/grpc-js/node_modules/@types/node": { - "version": "18.11.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.8.tgz", - "integrity": "sha512-uGwPWlE0Hj972KkHtCDVwZ8O39GmyjfMane1Z3GUBGGnkZ2USDq7SxLpVIiIHpweY9DS0QTDH0Nw7RNBsAAZ5A==", - "optional": true - }, - "node_modules/@grpc/proto-loader": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.5.6.tgz", - "integrity": "sha512-DT14xgw3PSzPxwS13auTEwxhMMOoz33DPUKNtmYK/QYbBSpLXJy78FGGs5yVoxVobEqPm4iW9MOIoz0A3bLTRQ==", - "optional": true, - "dependencies": { - "lodash.camelcase": "^4.3.0", - "protobufjs": "^6.8.6" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@ipld/dag-cbor": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-7.0.3.tgz", - "integrity": "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==", - "dependencies": { - "cborg": "^1.6.0", - "multiformats": "^9.5.4" - } - }, - "node_modules/@ipld/dag-json": { - "version": "8.0.11", - "resolved": "https://registry.npmjs.org/@ipld/dag-json/-/dag-json-8.0.11.tgz", - "integrity": "sha512-Pea7JXeYHTWXRTIhBqBlhw7G53PJ7yta3G/sizGEZyzdeEwhZRr0od5IQ0r2ZxOt1Do+2czddjeEPp+YTxDwCA==", - "dependencies": { - "cborg": "^1.5.4", - "multiformats": "^9.5.4" - } - }, - "node_modules/@ipld/dag-pb": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/@ipld/dag-pb/-/dag-pb-2.1.18.tgz", - "integrity": "sha512-ZBnf2fuX9y3KccADURG5vb9FaOeMjFkCrNysB0PtftME/4iCTjxfaLoNq/IAh5fTqUOMXvryN6Jyka4ZGuMLIg==", - "dependencies": { - "multiformats": "^9.5.4" - } - }, - "node_modules/@jest/console": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", - "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", - "dev": true, - "dependencies": { - "@jest/source-map": "^24.9.0", - "chalk": "^2.0.1", - "slash": "^2.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/console/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@jest/console/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/core": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", - "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", - "dev": true, - "dependencies": { - "@jest/console": "^24.7.1", - "@jest/reporters": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.9.0", - "jest-config": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-resolve-dependencies": "^24.9.0", - "jest-runner": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "jest-watcher": "^24.9.0", - "micromatch": "^3.1.10", - "p-each-series": "^1.0.0", - "realpath-native": "^1.1.0", - "rimraf": "^2.5.4", - "slash": "^2.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/core/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@jest/core/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/core/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/@jest/core/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/environment": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", - "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@jest/fake-timers": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", - "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", - "dev": true, - "dependencies": { - "@jest/types": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@jest/reporters": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", - "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", - "dev": true, - "dependencies": { - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.2", - "istanbul-lib-coverage": "^2.0.2", - "istanbul-lib-instrument": "^3.0.1", - "istanbul-lib-report": "^2.0.4", - "istanbul-lib-source-maps": "^3.0.1", - "istanbul-reports": "^2.2.6", - "jest-haste-map": "^24.9.0", - "jest-resolve": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.6.0", - "node-notifier": "^5.4.2", - "slash": "^2.0.0", - "source-map": "^0.6.0", - "string-length": "^2.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/reporters/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@jest/reporters/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/source-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", - "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.1.15", - "source-map": "^0.6.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@jest/source-map/node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@jest/test-result": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", - "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", - "dev": true, - "dependencies": { - "@jest/console": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/istanbul-lib-coverage": "^2.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", - "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", - "dev": true, - "dependencies": { - "@jest/test-result": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-runner": "^24.9.0", - "jest-runtime": "^24.9.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@jest/transform": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", - "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^24.9.0", - "babel-plugin-istanbul": "^5.1.0", - "chalk": "^2.0.1", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.9.0", - "jest-regex-util": "^24.9.0", - "jest-util": "^24.9.0", - "micromatch": "^3.1.10", - "pirates": "^4.0.1", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "2.4.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/transform/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@jest/transform/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/transform/node_modules/write-file-atomic": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", - "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", - "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", - "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/@phc/format": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@phc/format/-/format-1.0.0.tgz", - "integrity": "sha512-m7X9U6BG2+J+R1lSOdCiITLLrxm+cWlNI3HUFA92oLO77ObGNzaKdh8pMLqdZcshtkKuV84olNNXDfMc4FezBQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, - "node_modules/@rodrigogs/mysql-events": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@rodrigogs/mysql-events/-/mysql-events-0.6.0.tgz", - "integrity": "sha512-bI4zECD76lprG050XIl9+ZY2COZ7rxwtT982uF+aV872j/zbQC0imYDZuYcQuktNC3GyLuo+wH/BoxrrfDQEag==", - "dependencies": { - "@rodrigogs/zongji": "^0.4.14", - "debug": "^4.1.1", - "debuggler": "^1.0.0", - "mysql": "^2.17.1" - }, - "engines": { - "node": ">=7.6.0" - } - }, - "node_modules/@rodrigogs/mysql-events/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@rodrigogs/zongji": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@rodrigogs/zongji/-/zongji-0.4.14.tgz", - "integrity": "sha512-U2UUFzL/Lsc7AfRXAyo2OW4caGzf+teKOVA+D1Suq4f87Scn4frIGaiKOgZ/j50C1bXRT46wcy2AgWgZfr5fWQ==", - "dependencies": { - "iconv-lite": "^0.4.24", - "mysql": "^2.16.0" - }, - "engines": { - "node": ">=6" + "iconv-lite": "^0.4.24", + "mysql": "^2.16.0" + }, + "engines": { + "node": ">=6" } }, "node_modules/@sindresorhus/is": { @@ -3466,9 +2388,9 @@ "dev": true }, "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "dev": true }, "node_modules/@types/agenda": { @@ -3482,13 +2404,13 @@ } }, "node_modules/@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", + "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", "dev": true, "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" @@ -3514,12 +2436,12 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz", - "integrity": "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", + "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", "dev": true, "dependencies": { - "@babel/types": "^7.3.0" + "@babel/types": "^7.20.7" } }, "node_modules/@types/bn.js": { @@ -3549,25 +2471,25 @@ } }, "node_modules/@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "dependencies": { "@types/http-cache-semantics": "*", - "@types/keyv": "*", + "@types/keyv": "^3.1.4", "@types/node": "*", - "@types/responselike": "*" + "@types/responselike": "^1.0.0" } }, "node_modules/@types/chai": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", - "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==" + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==" }, "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "version": "3.4.36", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", + "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", "dev": true, "dependencies": { "@types/node": "*" @@ -3584,9 +2506,12 @@ "integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==" }, "node_modules/@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" + "version": "2.8.14", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.14.tgz", + "integrity": "sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ==", + "dependencies": { + "@types/node": "*" + } }, "node_modules/@types/eslint-visitor-keys": { "version": "1.0.0", @@ -3595,26 +2520,27 @@ "dev": true }, "node_modules/@types/express": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", - "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", "dev": true, "dependencies": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", + "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "*" } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.31", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", - "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", + "version": "4.17.36", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.36.tgz", + "integrity": "sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q==", "dev": true, "dependencies": { "@types/node": "*", "@types/qs": "*", - "@types/range-parser": "*" + "@types/range-parser": "*", + "@types/send": "*" } }, "node_modules/@types/fs-extra": { @@ -3631,6 +2557,12 @@ "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" }, + "node_modules/@types/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==", + "dev": true + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -3663,24 +2595,23 @@ "dev": true }, "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", "dev": true }, "node_modules/@types/keyv": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-4.2.0.tgz", - "integrity": "sha512-xoBtGl5R9jeKUhc8ZqeYaRDx04qqJ10yhhXYGmJ4Jr8qKpvMsDQQrNUvF/wUJ4klOtmJeJM+p2Xo3zp9uaC3tw==", - "deprecated": "This is a stub types definition. keyv provides its own type definitions, so you do not need this installed.", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "dependencies": { - "keyv": "*" + "@types/node": "*" } }, "node_modules/@types/lodash": { - "version": "4.14.187", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.187.tgz", - "integrity": "sha512-MrO/xLXCaUgZy3y96C/iOsaIqZSeupyTImKClHunL5GrmaiII2VwvWmLBu2hwa0Kp0sV19CsyjtrTc/Fx8rg/A==", + "version": "4.14.198", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz", + "integrity": "sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg==", "dev": true }, "node_modules/@types/long": { @@ -3689,9 +2620,9 @@ "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, "node_modules/@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, "node_modules/@types/minimatch": { @@ -3748,9 +2679,9 @@ } }, "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "version": "6.9.8", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz", + "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==", "dev": true }, "node_modules/@types/range-parser": { @@ -3775,12 +2706,23 @@ "@types/node": "*" } }, + "node_modules/@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, "node_modules/@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", + "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", "dev": true, "dependencies": { + "@types/http-errors": "*", "@types/mime": "*", "@types/node": "*" } @@ -3804,14 +2746,19 @@ "dev": true }, "node_modules/@types/superagent": { - "version": "3.8.7", - "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-3.8.7.tgz", - "integrity": "sha512-9KhCkyXv268A2nZ1Wvu7rQWM+BmdYUVkycFeNnYrUL5Zwu7o8wPQ3wBfW59dDP+wuoxw0ww8YKgTNv8j/cgscA==", + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.13.tgz", + "integrity": "sha512-YIGelp3ZyMiH0/A09PMAORO0EBGlF5xIKfDpK74wdYvWUs2o96b5CItJcWPdH409b7SAXIIG6p8NdU/4U2Maww==", "dependencies": { "@types/cookiejar": "*", "@types/node": "*" } }, + "node_modules/@types/triple-beam": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.3.tgz", + "integrity": "sha512-6tOUG+nVHn0cJbVp25JFayS5UE6+xlbcNF9Lo9mU7U0zk3zeUShZied4YEQZjy1JBF043FSkdXw8YkUJuVtB5g==" + }, "node_modules/@types/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -3990,6 +2937,7 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "peer": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -4281,6 +3229,18 @@ "node": ">=0.10.0" } }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", @@ -4318,13 +3278,13 @@ } }, "node_modules/array.prototype.map": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.5.tgz", - "integrity": "sha512-gfaKntvwqYIuC7mLLyv2wzZIJqrRhn5PZ9EfFejSx6a78sV7iDsGpG9P+3oUPtm1Rerqm6nrKS4FYuTIvWfo3g==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.6.tgz", + "integrity": "sha512-nK1psgF2cXqP3wSyCSq0Hc7zwNq3sfljQqaG27r/7a7ooNUnn5nGq6yYWyks9jMO5EoFQ0ax80hSg6oXSRNXaw==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-array-method-boxes-properly": "^1.0.0", "is-string": "^1.0.7" }, @@ -4336,14 +3296,14 @@ } }, "node_modules/array.prototype.reduce": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz", - "integrity": "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz", + "integrity": "sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-array-method-boxes-properly": "^1.0.0", "is-string": "^1.0.7" }, @@ -4354,6 +3314,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/arrify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", @@ -4363,6 +3343,11 @@ "node": ">=8" } }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, "node_modules/asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", @@ -4383,11 +3368,11 @@ } }, "node_modules/assert-options": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/assert-options/-/assert-options-0.7.0.tgz", - "integrity": "sha512-7q9uNH/Dh8gFgpIIb9ja8PJEWA5AQy3xnBC8jtKs8K/gNVCr1K6kIvlm59HUyYgvM7oEDoLzGgPcGd9FqhtXEQ==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/assert-options/-/assert-options-0.8.0.tgz", + "integrity": "sha512-qSELrEaEz4sGwTs4Qh+swQkjiHAysC4rot21+jzXU86dJzNG+FDqBzyS3ohSoTRf4ZLA3FSwxQdiuNl5NXUtvA==", "engines": { - "node": ">=8.0.0" + "node": ">=10.0.0" } }, "node_modules/assert-plus": { @@ -4432,9 +3417,9 @@ } }, "node_modules/ast-types/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/astral-regex": { "version": "1.0.0", @@ -4515,33 +3500,20 @@ } }, "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" }, "node_modules/axios": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.0.tgz", - "integrity": "sha512-zT7wZyNYu3N5Bu0wuZ6QccIf93Qk1eV8LOewxgjOZFd2DenOs98cJ7+Y6703d0wkaXGY6/nZd4EweJaHz9uzQw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", + "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, - "node_modules/axios/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/babel-jest": { "version": "24.9.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", @@ -4792,9 +3764,9 @@ } }, "node_modules/bignumber.js": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz", - "integrity": "sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", "engines": { "node": "*" } @@ -4834,9 +3806,9 @@ } }, "node_modules/bl/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -4884,12 +3856,12 @@ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -4897,7 +3869,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -4938,13 +3910,6 @@ "hoek": "6.x.x" } }, - "node_modules/bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", - "dev": true, - "optional": true - }, "node_modules/boxen": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", @@ -5178,9 +4143,9 @@ "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", "dev": true, "funding": [ { @@ -5190,13 +4155,17 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.11" }, "bin": { "browserslist": "cli.js" @@ -5245,39 +4214,12 @@ } }, "node_modules/bson": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.0.tgz", - "integrity": "sha512-VrlEE4vuiO1WTpfof4VmaVolCVYkYTgB9iWgYNOrVlnifpME/06fhFRmONgBhClD5pFC1t9ZWqFUQEQAzY43bA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.0.0.tgz", + "integrity": "sha512-FoWvdELfF2wQaUo8S/a1Rh2BDwJEUancDDnzdTpYymJTZjmvRpLWoqRPelKn+XSeh5D4YddWDG66cLtEhGGvcg==", "dev": true, - "dependencies": { - "buffer": "^5.6.0" - }, "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/bson/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "node": ">=16.20.1" } }, "node_modules/buffer": { @@ -5393,9 +4335,9 @@ } }, "node_modules/cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -5504,9 +4446,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001429", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001429.tgz", - "integrity": "sha512-511ThLu1hF+5RRRt0zYCf2U2yRr9GPF6m5y90SBCWsvSoYoW7yAGlv/elyPaNfvGCkp6kj/KFZWU0BMA69Prsg==", + "version": "1.0.30001534", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001534.tgz", + "integrity": "sha512-vlPVrhsCS7XaSh2VvWluIQEzVhefrUQcEsQWSS5A5V+dM07uv1qHeQzAOTGIMy9i3e9bH15+muvI/UHojVgS/Q==", "dev": true, "funding": [ { @@ -5516,6 +4458,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ] }, @@ -5548,9 +4494,9 @@ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" }, "node_modules/cborg": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-1.9.5.tgz", - "integrity": "sha512-fLBv8wmqtlXqy1Yu+pHzevAIkW6k2K0ZtMujNzWphLsA34vzzg9BHn+5GmZqOJkSA9V7EMKsWrf6K976c1QMjQ==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-1.10.2.tgz", + "integrity": "sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==", "bin": { "cborg": "cli.js" } @@ -5568,13 +4514,13 @@ } }, "node_modules/chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz", + "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==", "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", - "deep-eql": "^3.0.1", + "deep-eql": "^4.1.2", "get-func-name": "^2.0.0", "loupe": "^2.3.1", "pathval": "^1.1.1", @@ -5585,20 +4531,35 @@ } }, "node_modules/chai-http": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/chai-http/-/chai-http-4.3.0.tgz", - "integrity": "sha512-zFTxlN7HLMv+7+SPXZdkd5wUlK+KxH6Q7bIEMiEx0FK3zuuMqL7cwICAQ0V1+yYRozBburYuxN1qZstgHpFZQg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/chai-http/-/chai-http-4.4.0.tgz", + "integrity": "sha512-uswN3rZpawlRaa5NiDUHcDZ3v2dw5QgLyAwnQ2tnVNuP7CwIsOFuYJ0xR1WiR7ymD4roBnJIzOUep7w9jQMFJA==", "dependencies": { "@types/chai": "4", - "@types/superagent": "^3.8.3", - "cookiejar": "^2.1.1", + "@types/superagent": "4.1.13", + "charset": "^1.0.1", + "cookiejar": "^2.1.4", "is-ip": "^2.0.0", "methods": "^1.1.2", - "qs": "^6.5.1", - "superagent": "^3.7.0" + "qs": "^6.11.2", + "superagent": "^8.0.9" }, "engines": { - "node": ">=4" + "node": ">=10" + } + }, + "node_modules/chai-http/node_modules/qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/chalk": { @@ -5620,7 +4581,16 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "dev": true, + "peer": true + }, + "node_modules/charset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/charset/-/charset-1.0.1.tgz", + "integrity": "sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==", + "engines": { + "node": ">=4.0.0" + } }, "node_modules/check-error": { "version": "1.0.2", @@ -5658,9 +4628,9 @@ } }, "node_modules/chokidar/node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", @@ -5695,9 +4665,9 @@ } }, "node_modules/chokidar/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, "optional": true, @@ -5932,6 +4902,7 @@ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", "dev": true, + "peer": true, "dependencies": { "restore-cursor": "^2.0.0" }, @@ -5966,7 +4937,8 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/cliui": { "version": "5.0.0", @@ -6238,9 +5210,9 @@ } }, "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "engines": { "node": ">= 0.6" } @@ -6265,9 +5237,9 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/cookiejar": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" }, "node_modules/copy-descriptor": { "version": "0.1.1", @@ -6385,11 +5357,11 @@ } }, "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", "dependencies": { - "node-fetch": "2.6.7" + "node-fetch": "^2.6.12" } }, "node_modules/cross-spawn": { @@ -6561,6 +5533,253 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/dateformat": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha512-5sFRfAAmbHdIts+eKjR9kYJoF0ViCMVX9yqLu5A7S/v+nd077KgCITOMiirmyCBiZpKLDXbBOkYm6tu7rX/TKg==", + "dev": true, + "dependencies": { + "get-stdin": "^4.0.1", + "meow": "^3.3.0" + }, + "bin": { + "dateformat": "bin/cli.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/dateformat/node_modules/camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dateformat/node_modules/camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", + "dev": true, + "dependencies": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dateformat/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dateformat/node_modules/get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dateformat/node_modules/indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", + "dev": true, + "dependencies": { + "repeating": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dateformat/node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dateformat/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dateformat/node_modules/meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", + "dev": true, + "dependencies": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dateformat/node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "dev": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dateformat/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dev": true, + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dateformat/node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dateformat/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dateformat/node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "dev": true, + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dateformat/node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "dev": true, + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dateformat/node_modules/redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", + "dev": true, + "dependencies": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dateformat/node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "dev": true, + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dateformat/node_modules/strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", + "dev": true, + "dependencies": { + "get-stdin": "^4.0.1" + }, + "bin": { + "strip-indent": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dateformat/node_modules/trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true + }, "node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", @@ -6616,9 +5835,9 @@ } }, "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "engines": { "node": ">=0.10" } @@ -6635,37 +5854,40 @@ } }, "node_modules/deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", "dependencies": { "type-detect": "^4.0.0" }, "engines": { - "node": ">=0.12" + "node": ">=6" } }, "node_modules/deep-equal": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.5.tgz", - "integrity": "sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz", + "integrity": "sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==", "optional": true, "dependencies": { - "call-bind": "^1.0.0", - "es-get-iterator": "^1.1.1", - "get-intrinsic": "^1.0.1", - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.2", - "is-regex": "^1.1.1", + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.1", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", "isarray": "^2.0.5", - "object-is": "^1.1.4", + "object-is": "^1.1.5", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.3.0", - "side-channel": "^1.0.3", - "which-boxed-primitive": "^1.0.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", "which-collection": "^1.0.1", - "which-typed-array": "^1.1.2" + "which-typed-array": "^1.1.9" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6709,11 +5931,25 @@ "node": ">=10" } }, + "node_modules/define-data-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.0.1.tgz", + "integrity": "sha512-22M+6zEspQHx10bfFQl2ET39IvfuQ7+rZIH7+ard8fCC4hPmkOSy+8JhKxBRLaWUziJ0O63NTYT97LR8zUfPTw==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -6773,10 +6009,9 @@ "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" }, "node_modules/denque": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", - "dev": true, + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", + "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", "engines": { "node": ">=0.10" } @@ -6790,9 +6025,9 @@ } }, "node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -6816,9 +6051,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", "engines": { "node": ">=8" } @@ -6832,6 +6067,15 @@ "node": ">=0.10.0" } }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "node_modules/dicer": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.1.tgz", @@ -6897,11 +6141,60 @@ } } }, + "node_modules/docker-modem": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-0.3.7.tgz", + "integrity": "sha512-4Xn4ZVtc/2DEFtxY04lOVeF7yvxwXGVo0sN8FKRBnLhBcwQ78Hb56j+Z5yAXXUhoweVhzGeBeGWahS+af0/mcg==", + "dependencies": { + "debug": "^2.6.0", + "JSONStream": "0.10.0", + "readable-stream": "~1.0.26-4", + "split-ca": "^1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/docker-modem/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/docker-modem/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "node_modules/docker-modem/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/docker-modem/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/docker-modem/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "peer": true, "dependencies": { "esutils": "^2.0.2" }, @@ -6974,9 +6267,9 @@ } }, "node_modules/duplexify/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "optional": true, "dependencies": { "core-util-is": "~1.0.0", @@ -7061,9 +6354,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "version": "1.4.519", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.519.tgz", + "integrity": "sha512-kqs9oGYL4UFVkLKhqCTgBCYZv+wZ374yABDMqlDda9HvlkQxvSr7kgf4hfWVjMieDbX+1MwPHFBsOGCMIBaFKg==", "dev": true }, "node_modules/elegant-spinner": { @@ -7135,9 +6428,9 @@ } }, "node_modules/engine.io": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz", - "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.2.tgz", + "integrity": "sha512-IXsMcGpw/xRfjra46sVZVHiSWo/nJ/3g1337q9KNXtS6YRzbW5yIzTCb9DjhrBe7r3GZQR0I4+nq+4ODk5g/cA==", "dependencies": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", @@ -7147,17 +6440,65 @@ "cookie": "~0.4.1", "cors": "~2.8.5", "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.2.3" + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-client": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.2.tgz", + "integrity": "sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0", + "xmlhttprequest-ssl": "~2.0.0" + } + }, + "node_modules/engine.io-client/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io-client/node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", "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 + } } }, "node_modules/engine.io-parser": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz", - "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", + "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==", "engines": { "node": ">=10.0.0" } @@ -7187,9 +6528,9 @@ } }, "node_modules/engine.io/node_modules/ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", "engines": { "node": ">=10.0.0" }, @@ -7252,34 +6593,49 @@ } }, "node_modules/es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", "has": "^1.0.3", "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", + "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" @@ -7294,18 +6650,19 @@ "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" }, "node_modules/es-get-iterator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", - "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.0", - "has-symbols": "^1.0.1", - "is-arguments": "^1.1.0", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", "is-map": "^2.0.2", "is-set": "^2.0.2", - "is-string": "^1.0.5", - "isarray": "^2.0.5" + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7316,6 +6673,19 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -7426,6 +6796,7 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", "dev": true, + "peer": true, "dependencies": { "@babel/code-frame": "^7.0.0", "ajv": "^6.9.1", @@ -7546,6 +6917,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "peer": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -7558,6 +6930,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -7572,6 +6945,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "peer": true, "dependencies": { "color-name": "1.1.3" } @@ -7580,13 +6954,15 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/eslint/node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, + "peer": true, "dependencies": { "ms": "2.1.2" }, @@ -7604,15 +6980,17 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "peer": true, "engines": { "node": ">=4" } }, "node_modules/eslint/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "peer": true, "bin": { "semver": "bin/semver" } @@ -7622,6 +7000,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "peer": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -7634,6 +7013,7 @@ "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", "dev": true, + "peer": true, "dependencies": { "acorn": "^6.0.7", "acorn-jsx": "^5.0.0", @@ -7648,6 +7028,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true, + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -7668,10 +7049,11 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, + "peer": true, "dependencies": { "estraverse": "^5.1.0" }, @@ -7684,6 +7066,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "peer": true, "engines": { "node": ">=4.0" } @@ -7847,6 +7230,11 @@ "minimalistic-assert": "^1.0.0" } }, + "node_modules/eth-crypto/node_modules/js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" + }, "node_modules/eth-crypto/node_modules/node-addon-api": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", @@ -7891,6 +7279,11 @@ "js-sha3": "^0.5.7" } }, + "node_modules/eth-ens-namehash/node_modules/js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" + }, "node_modules/eth-lib": { "version": "0.2.8", "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", @@ -7952,11 +7345,6 @@ "js-sha3": "^0.8.0" } }, - "node_modules/ethereum-bloom-filters/node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, "node_modules/ethereum-checksum-address": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/ethereum-checksum-address/-/ethereum-checksum-address-0.0.2.tgz", @@ -7992,9 +7380,9 @@ } }, "node_modules/ethereum-cryptography/node_modules/keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.3.tgz", + "integrity": "sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ==", "hasInstallScript": true, "dependencies": { "node-addon-api": "^2.0.0", @@ -8078,40 +7466,50 @@ } }, "node_modules/ethers": { - "version": "5.0.18", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.0.18.tgz", - "integrity": "sha512-WCiKGfAt09hBS1HZspu+JTgeunFcUCVRhCXO8X+VadBJGTRlG722XXib79Vz2oyBperz90CcjkBPdNly61Ah4A==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@ethersproject/abi": "5.0.7", - "@ethersproject/abstract-provider": "5.0.5", - "@ethersproject/abstract-signer": "5.0.7", - "@ethersproject/address": "5.0.5", - "@ethersproject/base64": "5.0.4", - "@ethersproject/basex": "5.0.4", - "@ethersproject/bignumber": "5.0.8", - "@ethersproject/bytes": "5.0.5", - "@ethersproject/constants": "5.0.5", - "@ethersproject/contracts": "5.0.5", - "@ethersproject/hash": "5.0.6", - "@ethersproject/hdnode": "5.0.5", - "@ethersproject/json-wallets": "5.0.7", - "@ethersproject/keccak256": "5.0.4", - "@ethersproject/logger": "5.0.6", - "@ethersproject/networks": "5.0.4", - "@ethersproject/pbkdf2": "5.0.4", - "@ethersproject/properties": "5.0.4", - "@ethersproject/providers": "5.0.13", - "@ethersproject/random": "5.0.4", - "@ethersproject/rlp": "5.0.4", - "@ethersproject/sha2": "5.0.4", - "@ethersproject/signing-key": "5.0.5", - "@ethersproject/solidity": "5.0.5", - "@ethersproject/strings": "5.0.5", - "@ethersproject/transactions": "5.0.6", - "@ethersproject/units": "5.0.6", - "@ethersproject/wallet": "5.0.6", - "@ethersproject/web": "5.0.9", - "@ethersproject/wordlists": "5.0.5" + "@ethersproject/abi": "5.7.0", + "@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/contracts": "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/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" } }, "node_modules/ethjs-unit": { @@ -8490,6 +7888,29 @@ "resolved": "https://registry.npmjs.org/express-unless/-/express-unless-0.3.1.tgz", "integrity": "sha512-MPF0KbUOTUMvTQ8/1+bewiYGdCbSL4FvkuVNe2ydjZ0HE/Uq2+NPfKLb1vA5DbcvVPrrAg6GB0ULURUALzzgqw==" }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -8503,6 +7924,20 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/ext": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", @@ -8539,6 +7974,7 @@ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, + "peer": true, "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -8625,15 +8061,15 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true }, "node_modules/fast-fifo": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.1.0.tgz", - "integrity": "sha512-Kl29QoNbNvn4nhDsLYjyIAaIqaJB6rBx5p3sL9VjaefJ+eMFBWVZiaoguaoZfzEKr5RhAti0UgM8703akGPJ6g==" + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", @@ -8645,29 +8081,17 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, "node_modules/fast-text-encoding": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==", "optional": true }, - "node_modules/fast-xml-parser": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.11.tgz", - "integrity": "sha512-4aUg3aNRR/WjQAcpceODG1C3x3lFANXRo8+1biqfieHmg9pyMt7qB4lQV/Ta6sJCTbA5vfD8fnA8S54JATiFUA==", - "dev": true, - "optional": true, - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - }, - "funding": { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - }, "node_modules/faye-websocket": { "version": "0.11.3", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", @@ -8698,6 +8122,7 @@ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", "dev": true, + "peer": true, "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -8710,6 +8135,7 @@ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", "dev": true, + "peer": true, "dependencies": { "flat-cache": "^2.0.1" }, @@ -8722,6 +8148,15 @@ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" }, + "node_modules/filewatcher": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/filewatcher/-/filewatcher-3.0.1.tgz", + "integrity": "sha512-Fro8py2B8EJupSP37Kyd4kjKZLr+5ksFq7Vbw8A392Z15Unq8016SPUDvO/AsDj5V6bbPk98PTAinpc5YhPbJw==", + "dev": true, + "dependencies": { + "debounce": "^1.0.0" + } + }, "node_modules/fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -8878,6 +8313,7 @@ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", "dev": true, + "peer": true, "dependencies": { "flatted": "^2.0.0", "rimraf": "2.6.3", @@ -8892,6 +8328,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, + "peer": true, "dependencies": { "glob": "^7.1.3" }, @@ -8903,7 +8340,8 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/fn.name": { "version": "1.1.0", @@ -8955,9 +8393,9 @@ } }, "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -8968,10 +8406,15 @@ } }, "node_modules/formidable": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", - "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", - "deprecated": "Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", + "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0", + "qs": "^6.11.0" + }, "funding": { "url": "https://ko-fi.com/tunnckoCore/commissions" } @@ -9030,6 +8473,22 @@ "node": ">= 8" } }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -9039,7 +8498,7 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", "dev": true, "hasInstallScript": true, "optional": true, @@ -9093,14 +8552,14 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -9204,38 +8663,42 @@ } }, "node_modules/gcp-metadata": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-3.5.0.tgz", - "integrity": "sha512-ZQf+DLZ5aKcRpLzYUyBS3yo3N0JSa82lNDO8rj3nMSlovLcz2riKFBsYgDzeXcv75oo5eqB2lx+B14UvPoCRnA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", + "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", + "dev": true, "optional": true, + "peer": true, "dependencies": { - "gaxios": "^2.1.0", - "json-bigint": "^0.3.0" + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" }, "engines": { - "node": ">=8.10.0" + "node": ">=12" } }, "node_modules/gcp-metadata/node_modules/gaxios": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.3.4.tgz", - "integrity": "sha512-US8UMj8C5pRnao3Zykc4AAVr+cffoNKRTg9Rsf2GiuZCW69vgJj38VK2PzlPuQU73FZ/nTk9/Av6/JGcE1N9vA==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz", + "integrity": "sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==", + "dev": true, "optional": true, + "peer": true, "dependencies": { - "abort-controller": "^3.0.0", "extend": "^3.0.2", "https-proxy-agent": "^5.0.0", "is-stream": "^2.0.0", - "node-fetch": "^2.3.0" + "node-fetch": "^2.6.9" }, "engines": { - "node": ">=8.10.0" + "node": ">=12" } }, "node_modules/gcs-resumable-upload": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-2.3.3.tgz", "integrity": "sha512-sf896I5CC/1AxeaGfSFg3vKMjUq/r+A3bscmVzZm10CElyRanN0XwPu/MxeIO4LSP+9uF6yKzXvNsaTsMXUG6Q==", + "deprecated": "gcs-resumable-upload is deprecated. Support will end on 11/01/2023", "optional": true, "dependencies": { "abort-controller": "^3.0.0", @@ -9295,12 +8758,13 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" }, "funding": { @@ -9374,9 +8838,9 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/get-uri/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -9477,6 +8941,20 @@ "node": ">=4" } }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/google-auth-library": { "version": "5.10.1", "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-5.10.1.tgz", @@ -9513,6 +8991,28 @@ "node": ">=8.10.0" } }, + "node_modules/google-auth-library/node_modules/gcp-metadata": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-3.5.0.tgz", + "integrity": "sha512-ZQf+DLZ5aKcRpLzYUyBS3yo3N0JSa82lNDO8rj3nMSlovLcz2riKFBsYgDzeXcv75oo5eqB2lx+B14UvPoCRnA==", + "optional": true, + "dependencies": { + "gaxios": "^2.1.0", + "json-bigint": "^0.3.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/google-auth-library/node_modules/json-bigint": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.3.1.tgz", + "integrity": "sha512-DGWnSzmusIreWlEupsUelHrhwmPPE+FiQvg+drKfk2p+bdEYa5mp4PJ8JsCWqae0M2jQNb0HPvnwvf1qOTThzQ==", + "optional": true, + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, "node_modules/google-gax": { "version": "1.15.4", "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-1.15.4.tgz", @@ -9543,9 +9043,9 @@ } }, "node_modules/google-gax/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "optional": true, "bin": { "semver": "bin/semver.js" @@ -9575,6 +9075,17 @@ "node": ">= 6.0.0" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/got": { "version": "6.7.1", "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", @@ -9613,14 +9124,14 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/graphql": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.6.0.tgz", - "integrity": "sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==", + "version": "16.8.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.0.tgz", + "integrity": "sha512-0oKGaR+y3qcS5mCu1vb7KG+a89vjn06C7Ihq/dDl3jA+A8B3TKomvi3CiEcVLJQGalbu8F52LxkOym7U5sSfbg==", "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } @@ -9638,6 +9149,19 @@ "graphql": "14 - 16" } }, + "node_modules/graphql-request/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", @@ -9721,6 +9245,18 @@ "resolved": "https://registry.npmjs.org/ammo/-/ammo-3.0.3.tgz", "integrity": "sha512-vo76VJ44MkUBZL/BzpGXaKzMfroF4ZR6+haRuw9p+eSWfoNaH2AxVc8xmiEPC08jhzJSeM6w7/iMUGet8b4oBQ==" }, + "node_modules/hapi/node_modules/b64": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/b64/-/b64-4.1.2.tgz", + "integrity": "sha512-+GUspBxlH3CJaxMUGUE1EBoWM6RKgWiYwUDal0qdf8m3ArnXNN1KzKVo5HOnE/FSq4HHyWf3TlHLsZI8PKQgrQ==", + "extraneous": true + }, + "node_modules/hapi/node_modules/big-time": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/big-time/-/big-time-2.0.1.tgz", + "integrity": "sha512-qtwYYoocwpiAxTXC5sIpB6nH5j6ckt+n/jhD7J5OEiFHnUZEFn0Xk8STUaE5s10LdazN/87bTDMe+fSihaW7Kg==", + "extraneous": true + }, "node_modules/hapi/node_modules/boom": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/boom/-/boom-7.2.2.tgz", @@ -9731,6 +9267,12 @@ "resolved": "https://registry.npmjs.org/bounce/-/bounce-1.2.2.tgz", "integrity": "sha512-1LPcXg3fkGVhjdA/P3DcR5cDktKEYtDpruJv9Nhmy36RoYaoxZfC82Zr2JmS3vysDJKqMtP0qJw3/P6iisTASg==" }, + "node_modules/hapi/node_modules/bourne": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bourne/-/bourne-1.1.1.tgz", + "integrity": "sha512-Ou0l3W8+n1FuTOoIfIrCk9oF9WVWc+9fKoAl67XQr9Ws0z7LgILRZ7qtc9xdT4BveSKtnYXfKPgn8pFAqeQRew==", + "extraneous": true + }, "node_modules/hapi/node_modules/call": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/call/-/call-5.0.3.tgz", @@ -9746,6 +9288,18 @@ "resolved": "https://registry.npmjs.org/catbox-memory/-/catbox-memory-3.1.4.tgz", "integrity": "sha512-1tDnll066au0HXBSDHS/YQ34MQ2omBsmnA9g/jseyq/M3m7UPrajVtPDZK/rXgikSC1dfjo9Pa+kQ1qcyG2d3g==" }, + "node_modules/hapi/node_modules/content": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/content/-/content-4.0.6.tgz", + "integrity": "sha512-lR9ND3dXiMdmsE84K6l02rMdgiBVmtYWu1Vr/gfSGHcIcznBj2QxmSdUgDuNFOA+G9yrb1IIWkZ7aKtB6hDGyA==", + "extraneous": true + }, + "node_modules/hapi/node_modules/cryptiles": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-4.1.3.tgz", + "integrity": "sha512-gT9nyTMSUC1JnziQpPbxKGBbUg8VL7Zn2NB4E1cJYvuXdElHrwxrV9bmltZGDzet45zSDGyYceueke1TjynGzw==", + "extraneous": true + }, "node_modules/hapi/node_modules/heavy": { "version": "6.1.2", "resolved": "https://registry.npmjs.org/heavy/-/heavy-6.1.2.tgz", @@ -9756,16 +9310,40 @@ "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.0.1.tgz", "integrity": "sha512-3PvUwBerLNVJiIVQdpkWF9F/M0ekgb2NPJWOhsE28RXSQPsY42YSnaJ8d1kZjcAz58TZ/Fk9Tw64xJsENFlJNw==" }, + "node_modules/hapi/node_modules/iron": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/iron/-/iron-5.0.6.tgz", + "integrity": "sha512-zYUMOSkEXGBdwlV/AXF9zJC0aLuTJUKHkGeYS5I2g225M5i6SrxQyGJGhPgOR8BK1omL6N5i6TcwfsXbP8/Exw==", + "extraneous": true + }, "node_modules/hapi/node_modules/joi": { "version": "14.0.4", "resolved": "https://registry.npmjs.org/joi/-/joi-14.0.4.tgz", "integrity": "sha512-KUXRcinDUMMbtlOk7YLGHQvG73dLyf8bmgE+6sBTkdJbZpeGVGAlPXEHLiQBV7KinD/VLD5OA0EUgoTTfbRAJQ==" }, + "node_modules/hapi/node_modules/mime-db": { + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", + "extraneous": true + }, "node_modules/hapi/node_modules/mimos": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/mimos/-/mimos-4.0.2.tgz", "integrity": "sha512-5XBsDqBqzSN88XPPH/TFpOalWOjHJM5Z2d3AMx/30iq+qXvYKd/8MPhqBwZDOLtoaIWInR3nLzMQcxfGK9djXA==" }, + "node_modules/hapi/node_modules/nigel": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/nigel/-/nigel-3.0.4.tgz", + "integrity": "sha512-3SZCCS/duVDGxFpTROHEieC+itDo4UqL9JNUyQJv3rljudQbK6aqus5B4470OxhESPJLN93Qqxg16rH7DUjbfQ==", + "extraneous": true + }, + "node_modules/hapi/node_modules/pez": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pez/-/pez-4.0.5.tgz", + "integrity": "sha512-HvL8uiFIlkXbx/qw4B8jKDCWzo7Pnnd65Uvanf9OOCtb20MRcb9gtTVBf9NCnhETif1/nzbDHIjAWC/sUp7LIQ==", + "extraneous": true + }, "node_modules/hapi/node_modules/podium": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/podium/-/podium-3.1.5.tgz", @@ -9801,6 +9379,18 @@ "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==" }, + "node_modules/hapi/node_modules/vise": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vise/-/vise-3.0.1.tgz", + "integrity": "sha512-7BJNjsv2o83+E6AHAFSnjQF324UTgypsR/Sw/iFmLvr7RgJrEXF1xNBvb5LJfi+1FvWQXjJK4X41WMuHMeunPQ==", + "extraneous": true + }, + "node_modules/hapi/node_modules/wreck": { + "version": "14.1.3", + "resolved": "https://registry.npmjs.org/wreck/-/wreck-14.1.3.tgz", + "integrity": "sha512-hb/BUtjX3ObbwO3slCOLCenQ4EP8e+n8j6FmTne3VhEFp5XV1faSJojiyxVSvw34vgdeTG5baLTl4NmjwokLlw==", + "extraneous": true + }, "node_modules/har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -9879,6 +9469,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -9985,6 +9586,14 @@ "he": "bin/he" } }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "engines": { + "node": ">=8" + } + }, "node_modules/hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -10022,9 +9631,9 @@ "dev": true }, "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, "node_modules/http-errors": { "version": "2.0.0", @@ -10197,6 +9806,7 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true, + "peer": true, "engines": { "node": ">= 4" } @@ -10226,6 +9836,7 @@ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "peer": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -10337,6 +9948,7 @@ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", "dev": true, + "peer": true, "dependencies": { "ansi-escapes": "^3.2.0", "chalk": "^2.4.2", @@ -10361,6 +9973,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "peer": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -10373,6 +9986,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -10387,6 +10001,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "peer": true, "dependencies": { "color-name": "1.1.3" } @@ -10395,13 +10010,15 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/inquirer/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "peer": true, "engines": { "node": ">=4" } @@ -10411,6 +10028,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, + "peer": true, "dependencies": { "ansi-regex": "^4.1.0" }, @@ -10423,6 +10041,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "peer": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -10446,11 +10065,11 @@ "integrity": "sha512-rScRlhDcz6k199EkHqT8NpM87ebN89ICOzILoBHgaG36/WX50N32BnU/kpZgCGPLhARRAWUUX5/cyaIjt7Kipg==" }, "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dependencies": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" }, @@ -10491,6 +10110,7 @@ "version": "0.10.3", "resolved": "https://registry.npmjs.org/ipfs-core-types/-/ipfs-core-types-0.10.3.tgz", "integrity": "sha512-GNid2lRBjR5qgScCglgk7w9Hk3TZAwPHQXxOLQx72wgyc0jF2U5NXRoKW0GRvX8NPbHmsrFszForIqxd23I1Gw==", + "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-pb": "^2.1.3", "interface-datastore": "^6.0.2", @@ -10503,6 +10123,7 @@ "version": "0.14.3", "resolved": "https://registry.npmjs.org/ipfs-core-utils/-/ipfs-core-utils-0.14.3.tgz", "integrity": "sha512-aBkewVhgAj3NWXPwu6imj0wADGiGVZmJzqKzODOJsibDjkx6FGdMv8kvvqtLnK8LS/dvSk9yk32IDtuDyYoV7Q==", + "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": "^3.0.0", "blob-to-it": "^1.0.1", @@ -10546,6 +10167,7 @@ "version": "56.0.3", "resolved": "https://registry.npmjs.org/ipfs-http-client/-/ipfs-http-client-56.0.3.tgz", "integrity": "sha512-E3L5ylVl6BjyRUsNehvfuRBYp1hj8vQ8in4zskVPMNzXs6JiCFUbif5a6BtcAlSK4xPQyJCeLNNAWLUeFQTLNA==", + "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.0", "@ipld/dag-json": "^8.0.1", @@ -10601,24 +10223,30 @@ } }, "node_modules/ipfs-utils": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-9.0.7.tgz", - "integrity": "sha512-Umvb0Zydy2zZiTmQBGLfLISr8vOmXX8cxEIP+N8zGHrtRShG/j32yl1xd/BtS+Hbg0FIbVm3opwvxB2gmta0YA==", + "version": "9.0.14", + "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-9.0.14.tgz", + "integrity": "sha512-zIaiEGX18QATxgaS0/EOQNoo33W0islREABAcxXE8n7y2MGAlB+hdsxXn4J0hGZge8IqVQhW8sWIb+oJz2yEvg==", "dependencies": { "any-signal": "^3.0.0", + "browser-readablestream-to-it": "^1.0.0", "buffer": "^6.0.1", "electron-fetch": "^1.7.2", "err-code": "^3.0.1", "is-electron": "^2.2.0", "iso-url": "^1.1.5", + "it-all": "^1.0.4", "it-glob": "^1.0.1", "it-to-stream": "^1.0.0", "merge-options": "^3.0.4", "nanoid": "^3.1.20", "native-fetch": "^3.0.0", - "node-fetch": "https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz", - "react-native-fetch-api": "^2.0.0", + "node-fetch": "^2.6.8", + "react-native-fetch-api": "^3.0.0", "stream-to-it": "^0.2.2" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, "node_modules/ipfs-utils/node_modules/buffer": { @@ -10663,16 +10291,6 @@ } ] }, - "node_modules/ipfs-utils/node_modules/node-fetch": { - "name": "@achingbrain/node-fetch", - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-iTASGs+HTFK5E4ZqcMsHmeJ4zodyq8L38lZV33jwqcBJYoUt3HjN4+ot+O9/0b+ke8ddE7UgOtVuZN/OkV19/g==", - "license": "MIT", - "engines": { - "node": "4.x || >=6.0.0" - } - }, "node_modules/is-absolute": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", @@ -10720,6 +10338,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -10793,9 +10424,9 @@ } }, "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dependencies": { "has": "^1.0.3" }, @@ -10844,9 +10475,9 @@ } }, "node_modules/is-electron": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.1.tgz", - "integrity": "sha512-r8EEQQsqT+Gn0aXFx7lTFygYQhILLCB+wn0WCDL5LZRINeLH/Rvw1j2oKodELLXYNImQ3CRlVsY8wW4cGOsyuw==" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz", + "integrity": "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==" }, "node_modules/is-extendable": { "version": "1.0.1", @@ -10869,6 +10500,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", @@ -11176,15 +10819,11 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", - "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -11221,6 +10860,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true + }, "node_modules/is-weakmap": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", @@ -11342,9 +10987,9 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -11396,9 +11041,9 @@ } }, "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -11484,9 +11129,9 @@ } }, "node_modules/istanbul-lib-source-maps/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -12329,9 +11974,9 @@ } }, "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, "engines": { "node": ">=6" @@ -12721,9 +12366,9 @@ } }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -13049,9 +12694,9 @@ } }, "node_modules/js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" }, "node_modules/js-tokens": { "version": "4.0.0", @@ -13150,10 +12795,12 @@ } }, "node_modules/json-bigint": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.3.1.tgz", - "integrity": "sha512-DGWnSzmusIreWlEupsUelHrhwmPPE+FiQvg+drKfk2p+bdEYa5mp4PJ8JsCWqae0M2jQNb0HPvnwvf1qOTThzQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dev": true, "optional": true, + "peer": true, "dependencies": { "bignumber.js": "^9.0.0" } @@ -13182,7 +12829,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/json-stringify-safe": { "version": "5.0.1", @@ -13190,9 +12838,9 @@ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" }, "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "bin": { "json5": "lib/cli.js" @@ -13209,6 +12857,29 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonparse": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz", + "integrity": "sha512-fw7Q/8gFR8iSekUi9I+HqWIap6mywuoe7hQIg3buTVjuZgALKj4HAmm0X6f+TaL4c9NJbvyFQdaI2ppr5p6dnQ==", + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/JSONStream": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.10.0.tgz", + "integrity": "sha512-8XbSFFd43EG+1thjLNFIzCBlwXti0yKa7L+ak/f0T/pkC+31b7G41DXL/JzYpAoYWZ2eCPiu4IIqzijM8N0a/w==", + "dependencies": { + "jsonparse": "0.0.5", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "index.js" + }, + "engines": { + "node": "*" + } + }, "node_modules/jsonwebtoken": { "version": "8.5.1", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", @@ -13250,9 +12921,9 @@ } }, "node_modules/jsonwebtoken/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } @@ -13402,9 +13073,9 @@ ] }, "node_modules/keccak256/node_modules/keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.3.tgz", + "integrity": "sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ==", "hasInstallScript": true, "dependencies": { "node-addon-api": "^2.0.0", @@ -13421,9 +13092,9 @@ "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" }, "node_modules/keyv": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.0.tgz", - "integrity": "sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA==", + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", "dependencies": { "json-buffer": "3.0.1" } @@ -13685,11 +13356,12 @@ } }, "node_modules/logform": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.2.tgz", - "integrity": "sha512-W4c9himeAwXEdZ05dQNerhFz2XG80P9Oj0loPUMV23VC2it0orMHQhJm4hdnnor3rd1HsGf6a2lPwBM1zeXHGw==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.5.1.tgz", + "integrity": "sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==", "dependencies": { "@colors/colors": "1.5.0", + "@types/triple-beam": "^1.3.2", "fecha": "^4.2.0", "ms": "^2.1.1", "safe-stable-stringify": "^2.3.1", @@ -13730,9 +13402,9 @@ } }, "node_modules/loupe": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", - "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", + "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", "dependencies": { "get-func-name": "^2.0.0" } @@ -13754,9 +13426,9 @@ } }, "node_modules/luxon": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.1.0.tgz", - "integrity": "sha512-7w6hmKC0/aoWnEsmPCu5Br54BmbmUp5GfcqBxQngRcXJ+q5fdfjEzn7dxmJh2YdDhgW8PccYtlWKSv4tQkrTQg==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.3.tgz", + "integrity": "sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg==", "engines": { "node": ">=12" } @@ -13833,9 +13505,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -13913,7 +13585,15 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "optional": true + "devOptional": true + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "engines": { + "node": ">= 0.10.0" + } }, "node_modules/meow": { "version": "5.0.0", @@ -14031,7 +13711,6 @@ "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "optional": true, "bin": { "mime": "cli.js" }, @@ -14105,9 +13784,9 @@ } }, "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -14141,21 +13820,13 @@ } }, "node_modules/minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", - "dependencies": { - "yallist": "^4.0.0" - }, + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "engines": { "node": ">=8" } }, - "node_modules/minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", @@ -14168,6 +13839,17 @@ "node": ">= 8" } }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/minizlib/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -14607,39 +14289,66 @@ } }, "node_modules/moment-timezone": { - "version": "0.5.38", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.38.tgz", - "integrity": "sha512-nMIrzGah4+oYZPflDvLZUgoVUO4fvAqHstvG3xAUnMolWncuAiLDWNnJZj6EwJGMGfb1ZcuTFE6GI3hNOVWI/Q==", + "version": "0.5.43", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.43.tgz", + "integrity": "sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ==", "dependencies": { - "moment": ">= 2.9.0" + "moment": "^2.29.4" }, "engines": { "node": "*" } }, "node_modules/mongodb": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.11.0.tgz", - "integrity": "sha512-9l9n4Nk2BYZzljW3vHah3Z0rfS5npKw6ktnkmFgTcnzaXH1DRm3pDl6VMHu84EVb1lzmSaJC4OzWZqTkB5i2wg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.0.0.tgz", + "integrity": "sha512-wUIYesF4DTyDccm0noE5TwGi9ISdXUAi9T2cQ4xPc+EUBZG44bfMVt2ecOG5Ypca7eCz3oRpJm6YI6c7jAnuNw==", "dev": true, "dependencies": { - "bson": "^4.7.0", - "denque": "^2.1.0", - "mongodb-connection-string-url": "^2.5.4", - "socks": "^2.7.1" + "@mongodb-js/saslprep": "^1.1.0", + "bson": "^6.0.0", + "mongodb-connection-string-url": "^2.6.0" }, "engines": { - "node": ">=12.9.0" + "node": ">=16.20.1" }, - "optionalDependencies": { - "@aws-sdk/credential-providers": "^3.186.0", - "saslprep": "^1.0.3" + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } } }, "node_modules/mongodb-connection-string-url": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.4.tgz", - "integrity": "sha512-SeAxuWs0ez3iI3vvmLk/j2y+zHwigTDKQhtdxTgt5ZCOQQS5+HW4g45/Xw5vzzbn7oQXCNQ24Z40AkJsizEy7w==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", "dev": true, "dependencies": { "@types/whatwg-url": "^8.2.1", @@ -14681,15 +14390,15 @@ } }, "node_modules/mongoose": { - "version": "5.13.15", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.15.tgz", - "integrity": "sha512-cxp1Gbb8yUWkaEbajdhspSaKzAvsIvOtRlYD87GN/P2QEUhpd6bIvebi36T6M0tIVAMauNaK9SPA055N3PwF8Q==", + "version": "5.13.20", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.20.tgz", + "integrity": "sha512-TjGFa/XnJYt+wLmn8y9ssjyO2OhBMeEBtOHb9iJM16EWu2Du6L1Q6zSiEK2ziyYQM8agb4tumNIQFzqbxId7MA==", "dependencies": { "@types/bson": "1.x || 4.0.x", "@types/mongodb": "^3.5.27", "bson": "^1.1.4", "kareem": "2.3.2", - "mongodb": "3.7.3", + "mongodb": "3.7.4", "mongoose-legacy-pluralize": "1.0.2", "mpath": "0.8.4", "mquery": "3.2.5", @@ -14733,18 +14442,10 @@ "node": ">=0.6.19" } }, - "node_modules/mongoose/node_modules/denque": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", - "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", - "engines": { - "node": ">=0.10" - } - }, "node_modules/mongoose/node_modules/mongodb": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.3.tgz", - "integrity": "sha512-Psm+g3/wHXhjBEktkxXsFMZvd3nemI0r3IPsE0bU+4//PnvNWKkzhZcEsbPcYiWqe8XqXJJEg4Tgtr7Raw67Yw==", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.4.tgz", + "integrity": "sha512-K5q8aBqEXMwWdVNh94UQTwZ6BejVbFhh1uB6c5FKtPE9eUMZPUO3sRZdgIEcHSrAWmxzpG/FeODDKL388sqRmw==", "dependencies": { "bl": "^2.2.1", "bson": "^1.1.4", @@ -14907,9 +14608,9 @@ } }, "node_modules/multer/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -14937,6 +14638,7 @@ "version": "10.0.1", "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-10.0.1.tgz", "integrity": "sha512-G5upNcGzEGuTHkzxezPrrD6CaIHR9uo+7MwqhNVcXTs33IInon4y7nMiGxl2CY5hG7chvYQUQhz5V52/Qe3cbg==", + "deprecated": "This module is deprecated, please upgrade to @multiformats/multiaddr", "dependencies": { "dns-over-http-resolver": "^1.2.3", "err-code": "^3.0.1", @@ -14950,6 +14652,7 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/multiaddr-to-uri/-/multiaddr-to-uri-8.0.0.tgz", "integrity": "sha512-dq4p/vsOOUdVEd1J1gl+R2GFrXJQH8yjLtz4hodqdVbieg39LvBOdMQRdQnfbg5LSM/q1BYNVf5CBbwZFFqBgA==", + "deprecated": "This module is deprecated, please upgrade to @multiformats/multiaddr-to-uri", "dependencies": { "multiaddr": "^10.0.0" } @@ -15077,7 +14780,8 @@ "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/mysql": { "version": "2.18.1", @@ -15153,9 +14857,15 @@ "integrity": "sha512-O84Y3Qx6UPRNGSApxHQ2xtp3xHOOhYK99JQaJ2phanHIA/JTIEJLvzV6bUwzVz2k3nFwEOfaqzgpUH8QME1BzA==" }, "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -15227,14 +14937,23 @@ "dev": true }, "node_modules/node-addon-api": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.0.0.tgz", - "integrity": "sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, + "node_modules/node-docker-api": { + "version": "1.1.22", + "resolved": "https://registry.npmjs.org/node-docker-api/-/node-docker-api-1.1.22.tgz", + "integrity": "sha512-8xfOiuLDJQw+l58i66lUNQhRhS5fAExqQbLolmyqMucrsDON7k7eLMIHphcBwwB7utwCHCQkcp73gSAmzSiAiw==", + "dependencies": { + "docker-modem": "^0.3.1", + "memorystream": "^0.3.1" + } }, "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -15278,9 +14997,9 @@ } }, "node_modules/node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", + "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -15307,9 +15026,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, "node_modules/node-schedule": { @@ -15323,9 +15042,9 @@ } }, "node_modules/nodemon": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", - "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", + "version": "2.0.22", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", + "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", "dev": true, "dependencies": { "chokidar": "^3.5.2", @@ -15360,9 +15079,9 @@ } }, "node_modules/nodemon/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -15406,11 +15125,11 @@ } }, "node_modules/normalize-package-data/node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -15485,9 +15204,9 @@ "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" }, "node_modules/nwsapi": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", - "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", "dev": true }, "node_modules/oauth-sign": { @@ -15591,10 +15310,18 @@ "node": ">=0.10.0" } }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -15653,15 +15380,16 @@ } }, "node_modules/object.getownpropertydescriptors": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", - "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz", + "integrity": "sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==", "dev": true, "dependencies": { - "array.prototype.reduce": "^1.0.4", + "array.prototype.reduce": "^1.0.6", "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.1" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "safe-array-concat": "^1.0.0" }, "engines": { "node": ">= 0.8" @@ -15740,9 +15468,9 @@ } }, "node_modules/openpgp": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/openpgp/-/openpgp-5.5.0.tgz", - "integrity": "sha512-SpwcJnxrK9Y0HRM6KxSFqkAEOSWEabCH/c8dII/+y2e5f6KvuDG5ZE7JXaPBaVJNE4VUZZeTphxXDoZD0KOHrw==", + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/openpgp/-/openpgp-5.10.1.tgz", + "integrity": "sha512-SR5Ft+ej51d0+p53ld5Ney0Yiz0y8Mh1YYLJrvpRMbTaNhvS1QcDX0Oq1rW9sjBnQXtgrpWw2Zve3rm7K5C/pw==", "dependencies": { "asn1.js": "^5.0.0" }, @@ -15779,6 +15507,7 @@ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -15971,6 +15700,7 @@ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "peer": true, "dependencies": { "callsites": "^3.0.0" }, @@ -15983,6 +15713,7 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "peer": true, "engines": { "node": ">=6" } @@ -16013,9 +15744,9 @@ "integrity": "sha512-RwBeO/B/vZR3dfKL1ye/vx8MHZ40ugzpyfeVG5GsiuGnrlMWe2o8wxBbLCpw9CsxV+wHuzYlCiWnybrIA0ling==" }, "node_modules/parse-duration": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-duration/-/parse-duration-1.0.2.tgz", - "integrity": "sha512-Dg27N6mfok+ow1a2rj/nRjtCfaKrHUZV2SJpEn/s8GaVUSlf4GGRCRP1c13Hj+wfPKVMrFDqLMLITkYKgKxyyg==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parse-duration/-/parse-duration-1.1.0.tgz", + "integrity": "sha512-z6t9dvSJYaPoQq7quMzdEagSFtpGu+utzHqqxmpVWNNZRIXnvqyCvn9XsTdh7c/w0Bqmdz3RB3YnRaKtpRtEXQ==" }, "node_modules/parse-headers": { "version": "2.0.5", @@ -16182,9 +15913,9 @@ } }, "node_modules/pg-connection-string": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", - "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", + "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==" }, "node_modules/pg-int8": { "version": "1.0.1", @@ -16203,19 +15934,19 @@ } }, "node_modules/pg-pool": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.2.tgz", - "integrity": "sha512-His3Fh17Z4eg7oANLob6ZvH8xIVen3phEZh2QuyrIl4dQSDVEabNducv6ysROKpDNPSD+12tONZVWfSgMvDD9w==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz", + "integrity": "sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==", "peerDependencies": { "pg": ">=8.0" } }, "node_modules/pg-promise": { - "version": "10.12.1", - "resolved": "https://registry.npmjs.org/pg-promise/-/pg-promise-10.12.1.tgz", - "integrity": "sha512-SiJkBUDGq7PNfJFJbWferodsSH+vLrhte0Q0kVgQbwlNYeKmp9Hhkr+357+5DWEuBGOHhSu1UQffSSf5HVqRtA==", + "version": "10.15.4", + "resolved": "https://registry.npmjs.org/pg-promise/-/pg-promise-10.15.4.tgz", + "integrity": "sha512-BKlHCMCdNUmF6gagVbehRWSEiVcZzPVltEx14OJExR9Iz9/1R6KETDWLLGv2l6yRqYFnEZZy1VDjRhArzeIGrw==", "dependencies": { - "assert-options": "0.7.0", + "assert-options": "0.8.0", "pg": "8.8.0", "pg-minify": "1.6.2", "spex": "3.2.0" @@ -16225,9 +15956,9 @@ } }, "node_modules/pg-protocol": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz", - "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz", + "integrity": "sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==" }, "node_modules/pg-types": { "version": "2.2.0", @@ -16278,10 +16009,31 @@ "node": ">=4" } }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true, "engines": { "node": ">= 6" @@ -16500,9 +16252,9 @@ } }, "node_modules/popsicle/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -16670,6 +16422,7 @@ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, + "peer": true, "engines": { "node": ">=0.4.0" } @@ -16680,15 +16433,15 @@ "integrity": "sha512-hsF8r05ZnypT00IZTC71Ejiu9A7kyyVfHpdl3faasOHNJX62sNPfE8vDAz6P27RJ31i2O5ruhc6JV5xWR6GElQ==" }, "node_modules/promise.allsettled": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.6.tgz", - "integrity": "sha512-22wJUOD3zswWFqgwjNHa1965LvqTX87WPu/lreY2KSd7SVcERfuZ4GfUaOnJNnvtoIv2yXT/W00YIGMetXtFXg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.7.tgz", + "integrity": "sha512-hezvKvQQmsFkOdrZfYxUxkyxl8mgFQeT259Ajj9PXdbg9VzBCWrItOev72JyWxkCD5VSSqAeHmlN3tWx4DlmsA==", "dependencies": { "array.prototype.map": "^1.0.5", "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "iterate-value": "^1.0.2" }, "engines": { @@ -16723,9 +16476,9 @@ } }, "node_modules/protobufjs": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", - "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", + "version": "6.11.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz", + "integrity": "sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==", "hasInstallScript": true, "dependencies": { "@protobufjs/aspromise": "^1.1.2", @@ -16748,9 +16501,9 @@ } }, "node_modules/protobufjs/node_modules/@types/node": { - "version": "18.11.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.8.tgz", - "integrity": "sha512-uGwPWlE0Hj972KkHtCDVwZ8O39GmyjfMane1Z3GUBGGnkZ2USDq7SxLpVIiIHpweY9DS0QTDH0Nw7RNBsAAZ5A==" + "version": "20.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.0.tgz", + "integrity": "sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg==" }, "node_modules/proxy-addr": { "version": "2.0.7", @@ -16896,9 +16649,9 @@ } }, "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "engines": { "node": ">=6" } @@ -16990,9 +16743,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -17024,9 +16777,9 @@ "dev": true }, "node_modules/react-native-fetch-api": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/react-native-fetch-api/-/react-native-fetch-api-2.0.0.tgz", - "integrity": "sha512-GOA8tc1EVYLnHvma/TU9VTgLOyralO7eATRuCDchQveXW9Fr9vXygyq9iwqmM7YRZ8qRJfEt9xOS7OYMdJvRFw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-native-fetch-api/-/react-native-fetch-api-3.0.0.tgz", + "integrity": "sha512-g2rtqPjdroaboDKTsJCTlcmtw54E25OjyaunUP0anOZn4Fuo2IKs8BVfe02zVggA/UysbmfSnRJIqtNkAgggNA==", "dependencies": { "p-defer": "^3.0.0" } @@ -17110,9 +16863,9 @@ } }, "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -17195,13 +16948,13 @@ "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" }, "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" }, "engines": { "node": ">= 0.4" @@ -17263,6 +17016,18 @@ "node": ">=0.10" } }, + "node_modules/repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", + "dev": true, + "dependencies": { + "is-finite": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -17442,6 +17207,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "peer": true, "engines": { "node": ">=4" } @@ -17477,6 +17243,7 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", "dev": true, + "peer": true, "dependencies": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" @@ -17490,6 +17257,7 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true, + "peer": true, "engines": { "node": ">=4" } @@ -17499,6 +17267,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", "dev": true, + "peer": true, "dependencies": { "mimic-fn": "^1.0.0" }, @@ -17603,6 +17372,7 @@ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, + "peer": true, "engines": { "node": ">=0.12.0" } @@ -17612,6 +17382,7 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, + "peer": true, "dependencies": { "tslib": "^1.9.0" }, @@ -17619,6 +17390,28 @@ "npm": ">=2.0.0" } }, + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -17661,9 +17454,9 @@ } }, "node_modules/safe-stable-stringify": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.1.tgz", - "integrity": "sha512-dVHE6bMtS/bnL2mwualjc6IxEv1F+OCUpA46pKUj6F8uDbUM0jCCulPqRNPSnWwGNKx5etqMjZYdXtrm5KJZGA==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", "engines": { "node": ">=10" } @@ -17878,6 +17671,18 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, + "node_modules/set-function-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.0.tgz", + "integrity": "sha512-WmS8UHojv5s1eSoRSmzO5zzgDq8PE1/X/ij0k+9fMYmINCc6+j+SF3Om8YyucKn2yjnK4ItNZOoQycNnHsZJTw==", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -18027,9 +17832,9 @@ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "node_modules/simple-update-notifier": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", - "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", + "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", "dev": true, "dependencies": { "semver": "~7.0.0" @@ -18067,6 +17872,7 @@ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^3.2.0", "astral-regex": "^1.0.0", @@ -18081,6 +17887,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "peer": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -18093,6 +17900,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "peer": true, "dependencies": { "color-name": "1.1.3" } @@ -18101,7 +17909,8 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/sliced": { "version": "1.0.1", @@ -18321,30 +18130,84 @@ } }, "node_modules/socket.io": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.3.tgz", - "integrity": "sha512-zdpnnKU+H6mOp7nYRXH4GNv1ux6HL6+lHL8g7Ds7Lj8CkdK1jJK/dlwsKDculbyOHifcJ0Pr/yeXnZQ5GeFrcg==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.2.tgz", + "integrity": "sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==", "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", + "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.2.0", - "socket.io-adapter": "~2.4.0", - "socket.io-parser": "~4.2.0" + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" }, "engines": { - "node": ">=10.0.0" + "node": ">=10.2.0" } }, "node_modules/socket.io-adapter": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", - "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==" + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "dependencies": { + "ws": "~8.11.0" + } + }, + "node_modules/socket.io-adapter/node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "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 + } + } + }, + "node_modules/socket.io-client": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.2.tgz", + "integrity": "sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-client/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } }, "node_modules/socket.io-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz", - "integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1" @@ -18386,16 +18249,15 @@ } }, "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", - "dev": true, + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", + "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" + "ip": "1.1.5", + "smart-buffer": "^4.1.0" }, "engines": { - "node": ">= 10.13.0", + "node": ">= 6.0.0", "npm": ">= 3.0.0" } }, @@ -18422,30 +18284,11 @@ "node": ">= 4.0.0" } }, - "node_modules/socks-proxy-agent/node_modules/ip": { + "node_modules/socks/node_modules/ip": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", "integrity": "sha512-rBtCAQAJm8A110nbwn6YdveUnuZH3WrC36IwkRXxDnq53JvXA2NVQvB7IHyKomxK1MJ4VDNw3UtFDdXQ+AvLYA==" }, - "node_modules/socks-proxy-agent/node_modules/socks": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", - "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", - "dependencies": { - "ip": "1.1.5", - "smart-buffer": "^4.1.0" - }, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks/node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - }, "node_modules/sort-keys": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", @@ -18514,15 +18357,15 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", - "optional": true, + "devOptional": true, "dependencies": { "memory-pager": "^1.0.2" } }, "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -18543,9 +18386,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==" + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==" }, "node_modules/spex": { "version": "3.2.0", @@ -18555,6 +18398,11 @@ "node": ">=4.5" } }, + "node_modules/split-ca": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", + "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==" + }, "node_modules/split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", @@ -18568,9 +18416,9 @@ } }, "node_modules/split2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", - "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", "engines": { "node": ">= 10.x" } @@ -18759,6 +18607,17 @@ "node": ">=0.10.0" } }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/stream-events": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", @@ -18836,27 +18695,43 @@ "node": ">=4" } }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -18925,13 +18800,6 @@ "node": ">=0.10.0" } }, - "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "dev": true, - "optional": true - }, "node_modules/stubs": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", @@ -18939,76 +18807,70 @@ "optional": true }, "node_modules/superagent": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", - "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", - "deprecated": "Please upgrade to v7.0.2+ of superagent. We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing. See the releases tab for more information at <https://github.com/visionmedia/superagent/releases>.", - "dependencies": { - "component-emitter": "^1.2.0", - "cookiejar": "^2.1.0", - "debug": "^3.1.0", - "extend": "^3.0.0", - "form-data": "^2.3.1", - "formidable": "^1.2.0", - "methods": "^1.1.1", - "mime": "^1.4.1", - "qs": "^6.5.1", - "readable-stream": "^2.3.5" + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", + "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.1.2", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0", + "semver": "^7.3.8" }, "engines": { - "node": ">= 4.0" + "node": ">=6.4.0 <13 || >=14" } }, - "node_modules/superagent/node_modules/form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "node_modules/superagent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "ms": "2.1.2" }, "engines": { - "node": ">= 0.12" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/superagent/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" + "node_modules/superagent/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/superagent/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/superagent/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/superagent/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/superagent/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } + "node_modules/superagent/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/supports-color": { "version": "7.2.0", @@ -19114,9 +18976,9 @@ } }, "node_modules/swarm-js/node_modules/got": { - "version": "11.8.5", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.5.tgz", - "integrity": "sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==", + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -19216,6 +19078,7 @@ "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", "dev": true, + "peer": true, "dependencies": { "ajv": "^6.10.2", "lodash": "^4.17.14", @@ -19231,6 +19094,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, + "peer": true, "dependencies": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -19245,6 +19109,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, + "peer": true, "dependencies": { "ansi-regex": "^4.1.0" }, @@ -19253,19 +19118,19 @@ } }, "node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", + "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" }, "engines": { - "node": ">= 10" + "node": ">=10" } }, "node_modules/tar/node_modules/mkdirp": { @@ -19400,922 +19265,389 @@ "yallist": "^2.1.2" } }, - "node_modules/term-size/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" - }, - "node_modules/test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", - "dev": true, - "dependencies": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/test-exclude/node_modules/read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/throat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", - "integrity": "sha512-wCVxLDcFxw7ujDxaeJC6nfl2XfHJNYs8yUYJnvMgtPEFlttP9tHSfRUv2vBe6C4hkVFPWoP1P6ZccbYjmSEkKA==", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", - "optional": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" - } - }, - "node_modules/thunkify": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz", - "integrity": "sha512-w9foI80XcGImrhMQ19pxunaEC5Rp2uzxZZg4XBAFRfiLOplk3F0l7wo+bO16vC2/nlQfR/mXZxcduo0MF2GWLg==" - }, - "node_modules/timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/timeout-abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/timeout-abort-controller/-/timeout-abort-controller-3.0.0.tgz", - "integrity": "sha512-O3e+2B8BKrQxU2YRyEjC/2yFdb33slI22WRdUaDx6rvysfi9anloNZyR2q0l6LnePo5qH7gSM7uZtvvwZbc2yA==", - "dependencies": { - "retimer": "^3.0.0" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/topo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", - "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", - "deprecated": "This module has moved and is now available at @hapi/topo. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues.", - "dependencies": { - "hoek": "6.x.x" - } - }, - "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/touch/node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/trim-newlines": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", - "integrity": "sha512-MTBWv3jhVjTU7XR3IQHllbiJs8sc75a80OEhB6or/q7pLTWgQ0bMGQXXYQSrSuXe6WiKWDZ5txXY5P59a/coVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" - }, - "node_modules/ts-jest": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.3.0.tgz", - "integrity": "sha512-Hb94C/+QRIgjVZlJyiWwouYUF+siNJHJHknyspaOcZ+OQAIdFG/UrdQVXw/0B8Z3No34xkUXZJpOTy9alOWdVQ==", - "dev": true, - "dependencies": { - "bs-logger": "0.x", - "buffer-from": "1.x", - "fast-json-stable-stringify": "2.x", - "json5": "2.x", - "lodash.memoize": "4.x", - "make-error": "1.x", - "mkdirp": "0.x", - "resolve": "1.x", - "semver": "^5.5", - "yargs-parser": "10.x" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "jest": ">=24 <25" - } - }, - "node_modules/ts-luxon": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/ts-luxon/-/ts-luxon-4.0.1.tgz", - "integrity": "sha512-y7wCmgQ1sIjDUheejmLIOz08XeJ8sQ75m4zKd2ppI4OgTbQIuW8e4ZfNyp75zgomSZGi0I/PIiaHSYdrHd+tiQ==", - "engines": { - "node": ">=13" - } - }, - "node_modules/ts-node": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", - "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", - "dev": true, - "dependencies": { - "arrify": "^1.0.0", - "buffer-from": "^1.1.0", - "diff": "^3.1.0", - "make-error": "^1.1.1", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "source-map-support": "^0.5.6", - "yn": "^2.0.0" - }, - "bin": { - "ts-node": "dist/bin.js" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/ts-node-dev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-2.0.0.tgz", - "integrity": "sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==", - "dev": true, - "dependencies": { - "chokidar": "^3.5.1", - "dynamic-dedupe": "^0.3.0", - "minimist": "^1.2.6", - "mkdirp": "^1.0.4", - "resolve": "^1.0.0", - "rimraf": "^2.6.1", - "source-map-support": "^0.5.12", - "tree-kill": "^1.2.2", - "ts-node": "^10.4.0", - "tsconfig": "^7.0.0" - }, - "bin": { - "ts-node-dev": "lib/bin.js", - "tsnd": "lib/bin.js" - }, - "engines": { - "node": ">=0.8.0" - }, - "peerDependencies": { - "node-notifier": "*", - "typescript": "*" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/ts-node-dev/node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ts-node-dev/node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ts-node-dev/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/ts-node-dev/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-node-dev/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/ts-node-dev/node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node-dev/node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ts-node/node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tsconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", - "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", - "dev": true, - "dependencies": { - "@types/strip-bom": "^3.0.0", - "@types/strip-json-comments": "0.0.30", - "strip-bom": "^3.0.0", - "strip-json-comments": "^2.0.0" - } - }, - "node_modules/tsconfig-paths": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.0.tgz", - "integrity": "sha512-AHx4Euop/dXFC+Vx589alFba8QItjF+8hf8LtmuiCwHyI4rHXQtOOENaM8kvYf5fR0dRChy3wzWIZ9WbB7FWow==", - "dev": true, - "dependencies": { - "json5": "^2.2.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/tslint": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", - "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.29.0" - }, - "bin": { - "tslint": "bin/tslint" - }, - "engines": { - "node": ">=4.8.0" - }, - "peerDependencies": { - "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev" - } - }, - "node_modules/tslint/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/term-size/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + }, + "node_modules/test-exclude": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/tslint/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/test-exclude/node_modules/read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/tslint/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true, + "peer": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "dependencies": { - "color-name": "1.1.3" + "any-promise": "^1.0.0" } }, - "node_modules/tslint/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "node_modules/throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha512-wCVxLDcFxw7ujDxaeJC6nfl2XfHJNYs8yUYJnvMgtPEFlttP9tHSfRUv2vBe6C4hkVFPWoP1P6ZccbYjmSEkKA==", "dev": true }, - "node_modules/tslint/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "optional": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + }, + "node_modules/thunkify": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz", + "integrity": "sha512-w9foI80XcGImrhMQ19pxunaEC5Rp2uzxZZg4XBAFRfiLOplk3F0l7wo+bO16vC2/nlQfR/mXZxcduo0MF2GWLg==" + }, + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", "engines": { - "node": ">=0.3.1" + "node": ">=0.10.0" } }, - "node_modules/tslint/node_modules/has-flag": { + "node_modules/timeout-abort-controller": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" + "resolved": "https://registry.npmjs.org/timeout-abort-controller/-/timeout-abort-controller-3.0.0.tgz", + "integrity": "sha512-O3e+2B8BKrQxU2YRyEjC/2yFdb33slI22WRdUaDx6rvysfi9anloNZyR2q0l6LnePo5qH7gSM7uZtvvwZbc2yA==", + "dependencies": { + "retimer": "^3.0.0" } }, - "node_modules/tslint/node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, + "peer": true, "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" + "os-tmpdir": "~1.0.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.6.0" } }, - "node_modules/tslint/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, "engines": { "node": ">=4" } }, - "node_modules/tslint/node_modules/tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", "dev": true, "dependencies": { - "tslib": "^1.8.1" + "kind-of": "^3.0.2" }, - "peerDependencies": { - "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" - } - }, - "node_modules/tsscmp": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", - "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", "engines": { - "node": ">=0.6.x" + "node": ">=0.10.0" } }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "dependencies": { - "tslib": "^1.8.1" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "node": ">=0.10.0" } }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dependencies": { - "safe-buffer": "^5.0.1" - }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", "engines": { - "node": "*" + "node": ">=6" } }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - }, - "node_modules/tweetnacl-util": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==" - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, "dependencies": { - "prelude-ls": "~1.1.2" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" }, "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" }, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" } }, - "node_modules/typedi": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/typedi/-/typedi-0.8.0.tgz", - "integrity": "sha512-/c7Bxnm6eh5kXx2I+mTuO+2OvoWni5+rXA3PhXwVWCtJRYmz3hMok5s1AKLzoDvNAZqj/Q/acGstN0ri5aQoOA==" - }, - "node_modules/typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" + "node_modules/topo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", + "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", + "deprecated": "This module has moved and is now available at @hapi/topo. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues.", + "dependencies": { + "hoek": "6.x.x" } }, - "node_modules/typings": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/typings/-/typings-2.1.1.tgz", - "integrity": "sha512-ABFg64N1Vb0qHSIyks4kq1P02bWuwRmvCoD6d03Gmha1B5tl4uuz4w/bCCITW1rzC0+IYRGZ5PI0e2G7kqXGfw==", - "deprecated": "Typings is deprecated in favor of NPM @types -- see README for more information", + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, "dependencies": { - "archy": "^1.0.0", - "bluebird": "^3.1.1", - "chalk": "^1.0.0", - "cli-truncate": "^1.0.0", - "columnify": "^1.5.2", - "elegant-spinner": "^1.0.1", - "has-unicode": "^2.0.1", - "listify": "^1.0.0", - "log-update": "^1.0.2", - "minimist": "^1.2.0", - "promise-finally": "^3.0.0", - "typings-core": "^2.3.3", - "update-notifier": "^2.0.0", - "wordwrap": "^1.0.0", - "xtend": "^4.0.1" + "nopt": "~1.0.10" }, "bin": { - "typings": "dist/bin.js" + "nodetouch": "bin/nodetouch.js" } }, - "node_modules/typings-core": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/typings-core/-/typings-core-2.3.3.tgz", - "integrity": "sha512-FI/cwKyu9t84BXf83aIhGYzitfhEdo02l09xZaqdwQo9Xj4RjWpS1m+m7vljz373zcx6rudgVuESuo/dY1N4cw==", + "node_modules/touch/node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, "dependencies": { - "array-uniq": "^1.0.2", - "configstore": "^3.0.0", - "debug": "^2.2.0", - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.2", - "has": "^1.0.1", - "invariant": "^2.2.0", - "is-absolute": "^0.2.3", - "jspm-config": "^0.3.0", - "listify": "^1.0.0", - "lockfile": "^1.0.1", - "make-error-cause": "^1.2.1", - "mkdirp": "^0.5.1", - "object.pick": "^1.1.1", - "parse-json": "^2.2.0", - "popsicle": "^9.0.0", - "popsicle-proxy-agent": "^3.0.0", - "popsicle-retry": "^3.2.0", - "popsicle-rewrite": "^1.0.0", - "popsicle-status": "^2.0.0", - "promise-finally": "^3.0.0", - "rc": "^1.1.5", - "rimraf": "^2.4.4", - "sort-keys": "^1.0.0", - "string-template": "^1.0.0", - "strip-bom": "^3.0.0", - "thenify": "^3.1.0", - "throat": "^3.0.0", - "touch": "^1.0.0", - "typescript": "^2.1.4", - "xtend": "^4.0.0", - "zip-object": "^0.1.0" + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" } }, - "node_modules/typings-core/node_modules/configstore": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.5.tgz", - "integrity": "sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==", + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dependencies": { - "dot-prop": "^4.2.1", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" + "psl": "^1.1.28", + "punycode": "^2.1.1" }, "engines": { - "node": ">=4" + "node": ">=0.8" } }, - "node_modules/typings-core/node_modules/crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==", - "engines": { - "node": ">=4" + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" } }, - "node_modules/typings-core/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" } }, - "node_modules/typings-core/node_modules/dot-prop": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", - "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", - "dependencies": { - "is-obj": "^1.0.0" - }, + "node_modules/trim-newlines": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", + "integrity": "sha512-MTBWv3jhVjTU7XR3IQHllbiJs8sc75a80OEhB6or/q7pLTWgQ0bMGQXXYQSrSuXe6WiKWDZ5txXY5P59a/coVA==", "engines": { "node": ">=4" } }, - "node_modules/typings-core/node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", "engines": { - "node": ">=0.10.0" + "node": ">= 14.0.0" } }, - "node_modules/typings-core/node_modules/make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "node_modules/ts-jest": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.3.0.tgz", + "integrity": "sha512-Hb94C/+QRIgjVZlJyiWwouYUF+siNJHJHknyspaOcZ+OQAIdFG/UrdQVXw/0B8Z3No34xkUXZJpOTy9alOWdVQ==", + "dev": true, "dependencies": { - "pify": "^3.0.0" + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "mkdirp": "0.x", + "resolve": "1.x", + "semver": "^5.5", + "yargs-parser": "10.x" + }, + "bin": { + "ts-jest": "cli.js" }, "engines": { - "node": ">=4" + "node": ">= 6" + }, + "peerDependencies": { + "jest": ">=24 <25" } }, - "node_modules/typings-core/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "node_modules/ts-luxon": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ts-luxon/-/ts-luxon-4.4.0.tgz", + "integrity": "sha512-da38ShNr8dHAXEMg2sBwecOmNus2Fd7Q4h/MAXUve00NVxaeEbR0DMbF2UECBCy22qKPN6F6fypfDdVUniLTEw==", + "engines": { + "node": ">=13" + } }, - "node_modules/typings-core/node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, "dependencies": { - "abbrev": "1" + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" }, "bin": { - "nopt": "bin/nopt.js" + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" }, - "engines": { - "node": "*" + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } } }, - "node_modules/typings-core/node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "node_modules/ts-node-dev": { + "version": "1.0.0-pre.44", + "resolved": "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-1.0.0-pre.44.tgz", + "integrity": "sha512-M5ZwvB6FU3jtc70i5lFth86/6Qj5XR5nMMBwVxZF4cZhpO7XcbWw6tbNiJo22Zx0KfjEj9py5DANhwLOkPPufw==", + "dev": true, "dependencies": { - "error-ex": "^1.2.0" + "dateformat": "~1.0.4-1.2.3", + "dynamic-dedupe": "^0.3.0", + "filewatcher": "~3.0.0", + "minimist": "^1.1.3", + "mkdirp": "^0.5.1", + "node-notifier": "^5.4.0", + "resolve": "^1.0.0", + "rimraf": "^2.6.1", + "source-map-support": "^0.5.12", + "tree-kill": "^1.2.1", + "ts-node": "*", + "tsconfig": "^7.0.0" + }, + "bin": { + "ts-node-dev": "bin/ts-node-dev", + "tsnd": "bin/ts-node-dev" }, "engines": { - "node": ">=0.10.0" + "node": ">=0.8.0" } }, - "node_modules/typings-core/node_modules/rimraf": { + "node_modules/ts-node-dev/node_modules/rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -20323,367 +19655,435 @@ "rimraf": "bin.js" } }, - "node_modules/typings-core/node_modules/throat": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-3.2.0.tgz", - "integrity": "sha512-/EY8VpvlqJ+sFtLPeOgc8Pl7kQVOWv0woD87KTXVHPIAE842FGT+rokxIhe8xIUP1cfgrkt0as0vDLjDiMtr8w==" - }, - "node_modules/typings-core/node_modules/touch": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-1.0.0.tgz", - "integrity": "sha512-7PLLVW4cfMVYXtMgX0ynJvyZDiupF2rzGzzf0yATTzgCgNK98DHjRSTm5zU1bFUtRjFdXNrEynn9+vhflVpC0A==", - "dependencies": { - "nopt": "~1.0.10" - }, + "node_modules/ts-node/node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, "bin": { - "touch": "bin/touch.js" + "acorn": "bin/acorn" }, "engines": { - "node": ">=0.6" + "node": ">=0.4.0" } }, - "node_modules/typings-core/node_modules/typescript": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", - "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, + "node_modules/ts-node/node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, "engines": { - "node": ">=4.2.0" + "node": ">=0.4.0" } }, - "node_modules/typings-core/node_modules/unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", - "dependencies": { - "crypto-random-string": "^1.0.0" - }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=0.3.1" } }, - "node_modules/typings-core/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "node_modules/tsconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", + "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", + "dev": true, "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" + "@types/strip-bom": "^3.0.0", + "@types/strip-json-comments": "0.0.30", + "strip-bom": "^3.0.0", + "strip-json-comments": "^2.0.0" } }, - "node_modules/typings-core/node_modules/xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==", + "node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/typings/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "engines": { - "node": ">=0.10.0" - } + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, - "node_modules/typings/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "node_modules/tslint": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", + "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^4.0.1", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.29.0" + }, + "bin": { + "tslint": "bin/tslint" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4.8.0" + }, + "peerDependencies": { + "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev" } }, - "node_modules/typings/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "node_modules/tslint/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/typings/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "node_modules/tslint/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "dependencies": { - "ansi-regex": "^2.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/typings/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "engines": { - "node": ">=0.8.0" + "node_modules/tslint/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" } }, - "node_modules/uint8arrays": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", - "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", - "dependencies": { - "multiformats": "^9.4.2" + "node_modules/tslint/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/tslint/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" } }, - "node_modules/ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + "node_modules/tslint/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "node_modules/tslint/node_modules/resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true - }, - "node_modules/underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "node_modules/tslint/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "node_modules/tslint/node_modules/tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "tslib": "^1.8.1" + }, + "peerDependencies": { + "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" } }, - "node_modules/unique-names-generator": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/unique-names-generator/-/unique-names-generator-4.7.1.tgz", - "integrity": "sha512-lMx9dX+KRmG8sq6gulYYpKWZc9RlGsgBR6aoO8Qsm3qvkSJ+3rAymr+TnV8EDMrIrwuFJ4kruzMWM/OpYzPoow==", + "node_modules/tsscmp": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", "engines": { - "node": ">=8" + "node": ">=0.6.x" } }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "optional": true, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, "dependencies": { - "crypto-random-string": "^2.0.0" + "tslib": "^1.8.1" }, "engines": { - "node": ">=8" + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, "engines": { - "node": ">= 4.0.0" + "node": "*" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dev": true, + "node_modules/tweetnacl-util": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==" + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" + "prelude-ls": "~1.1.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8.0" } }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dependencies": { - "isarray": "1.0.0" + "media-typer": "0.3.0", + "mime-types": "~2.1.24" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "dev": true, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw==", + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" }, - "bin": { - "browserslist-lint": "cli.js" + "engines": { + "node": ">= 0.4" }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", "dependencies": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/update-notifier/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dependencies": { - "color-convert": "^1.9.0" + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typedi": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/typedi/-/typedi-0.8.0.tgz", + "integrity": "sha512-/c7Bxnm6eh5kXx2I+mTuO+2OvoWni5+rXA3PhXwVWCtJRYmz3hMok5s1AKLzoDvNAZqj/Q/acGstN0ri5aQoOA==" + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4" + "node": ">=4.2.0" } }, - "node_modules/update-notifier/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/typings": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/typings/-/typings-2.1.1.tgz", + "integrity": "sha512-ABFg64N1Vb0qHSIyks4kq1P02bWuwRmvCoD6d03Gmha1B5tl4uuz4w/bCCITW1rzC0+IYRGZ5PI0e2G7kqXGfw==", + "deprecated": "Typings is deprecated in favor of NPM @types -- see README for more information", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "archy": "^1.0.0", + "bluebird": "^3.1.1", + "chalk": "^1.0.0", + "cli-truncate": "^1.0.0", + "columnify": "^1.5.2", + "elegant-spinner": "^1.0.1", + "has-unicode": "^2.0.1", + "listify": "^1.0.0", + "log-update": "^1.0.2", + "minimist": "^1.2.0", + "promise-finally": "^3.0.0", + "typings-core": "^2.3.3", + "update-notifier": "^2.0.0", + "wordwrap": "^1.0.0", + "xtend": "^4.0.1" }, - "engines": { - "node": ">=4" + "bin": { + "typings": "dist/bin.js" } }, - "node_modules/update-notifier/node_modules/ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" - }, - "node_modules/update-notifier/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/typings-core": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/typings-core/-/typings-core-2.3.3.tgz", + "integrity": "sha512-FI/cwKyu9t84BXf83aIhGYzitfhEdo02l09xZaqdwQo9Xj4RjWpS1m+m7vljz373zcx6rudgVuESuo/dY1N4cw==", "dependencies": { - "color-name": "1.1.3" + "array-uniq": "^1.0.2", + "configstore": "^3.0.0", + "debug": "^2.2.0", + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.2", + "has": "^1.0.1", + "invariant": "^2.2.0", + "is-absolute": "^0.2.3", + "jspm-config": "^0.3.0", + "listify": "^1.0.0", + "lockfile": "^1.0.1", + "make-error-cause": "^1.2.1", + "mkdirp": "^0.5.1", + "object.pick": "^1.1.1", + "parse-json": "^2.2.0", + "popsicle": "^9.0.0", + "popsicle-proxy-agent": "^3.0.0", + "popsicle-retry": "^3.2.0", + "popsicle-rewrite": "^1.0.0", + "popsicle-status": "^2.0.0", + "promise-finally": "^3.0.0", + "rc": "^1.1.5", + "rimraf": "^2.4.4", + "sort-keys": "^1.0.0", + "string-template": "^1.0.0", + "strip-bom": "^3.0.0", + "thenify": "^3.1.0", + "throat": "^3.0.0", + "touch": "^1.0.0", + "typescript": "^2.1.4", + "xtend": "^4.0.0", + "zip-object": "^0.1.0" } }, - "node_modules/update-notifier/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/update-notifier/node_modules/configstore": { + "node_modules/typings-core/node_modules/configstore": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.5.tgz", "integrity": "sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==", @@ -20699,7 +20099,7 @@ "node": ">=4" } }, - "node_modules/update-notifier/node_modules/crypto-random-string": { + "node_modules/typings-core/node_modules/crypto-random-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==", @@ -20707,7 +20107,15 @@ "node": ">=4" } }, - "node_modules/update-notifier/node_modules/dot-prop": { + "node_modules/typings-core/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/typings-core/node_modules/dot-prop": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", @@ -20718,26 +20126,7 @@ "node": ">=4" } }, - "node_modules/update-notifier/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/update-notifier/node_modules/is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dependencies": { - "ci-info": "^1.5.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/update-notifier/node_modules/is-obj": { + "node_modules/typings-core/node_modules/is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", @@ -20745,7 +20134,7 @@ "node": ">=0.10.0" } }, - "node_modules/update-notifier/node_modules/make-dir": { + "node_modules/typings-core/node_modules/make-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", @@ -20756,2817 +20145,1995 @@ "node": ">=4" } }, - "node_modules/update-notifier/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } + "node_modules/typings-core/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/update-notifier/node_modules/unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", + "node_modules/typings-core/node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", "dependencies": { - "crypto-random-string": "^1.0.0" + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" }, "engines": { - "node": ">=4" - } - }, - "node_modules/update-notifier/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/update-notifier/node_modules/xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, - "node_modules/url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", - "dev": true, - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "node": "*" } }, - "node_modules/url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", + "node_modules/typings-core/node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", "dependencies": { - "prepend-http": "^1.0.1" + "error-ex": "^1.2.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==" - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "hasInstallScript": true, + "node_modules/typings-core/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dependencies": { - "node-gyp-build": "^4.3.0" + "glob": "^7.1.3" }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" + "bin": { + "rimraf": "bin.js" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "node_modules/typings-core/node_modules/throat": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-3.2.0.tgz", + "integrity": "sha512-/EY8VpvlqJ+sFtLPeOgc8Pl7kQVOWv0woD87KTXVHPIAE842FGT+rokxIhe8xIUP1cfgrkt0as0vDLjDiMtr8w==" }, - "node_modules/util.promisify": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.1.1.tgz", - "integrity": "sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==", - "dev": true, + "node_modules/typings-core/node_modules/touch": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-1.0.0.tgz", + "integrity": "sha512-7PLLVW4cfMVYXtMgX0ynJvyZDiupF2rzGzzf0yATTzgCgNK98DHjRSTm5zU1bFUtRjFdXNrEynn9+vhflVpC0A==", "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "for-each": "^0.3.3", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.1" + "nopt": "~1.0.10" + }, + "bin": { + "touch": "bin/touch.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "engines": { - "node": ">= 0.4.0" + "node": ">=0.6" } }, - "node_modules/uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "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.", + "node_modules/typings-core/node_modules/typescript": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/varint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "node": ">=4.2.0" } }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "dev": true, + "node_modules/typings-core/node_modules/unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/walkdir": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.4.1.tgz", - "integrity": "sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==", - "optional": true, + "crypto-random-string": "^1.0.0" + }, "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dependencies": { - "defaults": "^1.0.3" + "node": ">=4" } }, - "node_modules/web3": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.6.0.tgz", - "integrity": "sha512-rWpXnO88MiVX5yTRqMBCVKASxc7QDkXZZUl1D48sKlbX4dt3BAV+nVMVUKCBKiluZ5Bp8pDrVCUdPx/jIYai5Q==", - "hasInstallScript": true, + "node_modules/typings-core/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dependencies": { - "web3-bzz": "1.6.0", - "web3-core": "1.6.0", - "web3-eth": "1.6.0", - "web3-eth-personal": "1.6.0", - "web3-net": "1.6.0", - "web3-shh": "1.6.0", - "web3-utils": "1.6.0" - }, - "engines": { - "node": ">=8.0.0" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" } }, - "node_modules/web3-bzz": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.6.0.tgz", - "integrity": "sha512-ugYV6BsinwhIi0CsLWINBz4mqN9wR9vNG0WmyEbdECjxcPyr6vkaWt4qi0zqlUxEnYAwGj4EJXNrbjPILntQTQ==", - "hasInstallScript": true, - "dependencies": { - "@types/node": "^12.12.6", - "got": "9.6.0", - "swarm-js": "^0.1.40" - }, + "node_modules/typings-core/node_modules/xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==", "engines": { - "node": ">=8.0.0" + "node": ">=4" } }, - "node_modules/web3-bzz/node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "node_modules/typings/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/web3-bzz/node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dependencies": { - "defer-to-connect": "^1.0.1" - }, + "node_modules/typings/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/web3-bzz/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - }, - "node_modules/web3-bzz/node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "node_modules/typings/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/web3-bzz/node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/typings/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dependencies": { - "pump": "^3.0.0" + "ansi-regex": "^2.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/web3-bzz/node_modules/cacheable-request/node_modules/lowercase-keys": { + "node_modules/typings/node_modules/supports-color": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "engines": { - "node": ">=8" + "node": ">=0.8.0" } }, - "node_modules/web3-bzz/node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - }, - "node_modules/web3-bzz/node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "node_modules/uint8arrays": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", + "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" + "multiformats": "^9.4.2" } }, - "node_modules/web3-bzz/node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" + "node_modules/ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" }, - "node_modules/web3-bzz/node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/web3-bzz/node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/web3-bzz/node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "engines": { - "node": ">=6" + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/web3-bzz/node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/web3-bzz/node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", - "dependencies": { - "lowercase-keys": "^1.0.0" - } + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true }, - "node_modules/web3-bzz/node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, "dependencies": { - "prepend-http": "^2.0.0" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/web3-core": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.6.0.tgz", - "integrity": "sha512-o0WsLrJ2yD+HAAc29lGMWJef/MutTyuzpJC0UzLJtIAQJqtpDalzWINEu4j8XYXGk34N/V6vudtzRPo23QEE6g==", - "dependencies": { - "@types/bn.js": "^4.11.5", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.6.0", - "web3-core-method": "1.6.0", - "web3-core-requestmanager": "1.6.0", - "web3-utils": "1.6.0" - }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, "engines": { - "node": ">=8.0.0" + "node": ">=0.10.0" } }, - "node_modules/web3-core-helpers": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz", - "integrity": "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==", - "dependencies": { - "web3-eth-iban": "1.6.0", - "web3-utils": "1.6.0" - }, + "node_modules/unique-names-generator": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/unique-names-generator/-/unique-names-generator-4.7.1.tgz", + "integrity": "sha512-lMx9dX+KRmG8sq6gulYYpKWZc9RlGsgBR6aoO8Qsm3qvkSJ+3rAymr+TnV8EDMrIrwuFJ4kruzMWM/OpYzPoow==", "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/web3-core-method": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.6.0.tgz", - "integrity": "sha512-cHekyEil4mtcCOk6Q1Zh4y+2o5pTwsLIxP6Bpt4BRtZgdsyPiadYJpkLAVT/quch5xN7Qs5ZwG5AvRCS3VwD2g==", + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "optional": true, "dependencies": { - "@ethereumjs/common": "^2.4.0", - "@ethersproject/transactions": "^5.0.0-beta.135", - "web3-core-helpers": "1.6.0", - "web3-core-promievent": "1.6.0", - "web3-core-subscriptions": "1.6.0", - "web3-utils": "1.6.0" + "crypto-random-string": "^2.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/web3-core-promievent": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.6.0.tgz", - "integrity": "sha512-ZzsevjMXWkhqW9dnVfTfb1OUcK7jKcKPvPIbQ4boJccNgvNZPZKlo8xB4pkAX38n4c59O5mC7Lt/z2QL/M5CeQ==", - "dependencies": { - "eventemitter3": "4.0.4" - }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "engines": { - "node": ">=8.0.0" + "node": ">= 4.0.0" } }, - "node_modules/web3-core-promievent/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "node_modules/web3-core-requestmanager": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.6.0.tgz", - "integrity": "sha512-CY5paPdiDXKTXPWaEUZekDfUXSuoE2vPxolwqzsvKwFWH5+H1NaXgrc+D5HpufgSvTXawTw0fy7IAicg8+PWqA==", - "dependencies": { - "util": "^0.12.0", - "web3-core-helpers": "1.6.0", - "web3-providers-http": "1.6.0", - "web3-providers-ipc": "1.6.0", - "web3-providers-ws": "1.6.0" - }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "engines": { - "node": ">=8.0.0" + "node": ">= 0.8" } }, - "node_modules/web3-core-subscriptions": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.6.0.tgz", - "integrity": "sha512-kY9WZUY/m1URSOv3uTLshoZD9ZDiFKReIzHuPUkxFpD5oYNmr1/aPQNPCrrMxKODR7UVX/D90FxWwCYqHhLaxQ==", + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dev": true, "dependencies": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.6.0" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=0.10.0" } }, - "node_modules/web3-core-subscriptions/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "node_modules/web3-core/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - }, - "node_modules/web3-eth": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.6.0.tgz", - "integrity": "sha512-qJMvai//r0be6I9ghU24/152f0zgJfYC23TMszN3Y6jse1JtjCBP2TlTibFcvkUN1RRdIUY5giqO7ZqAYAmp7w==", + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dev": true, "dependencies": { - "web3-core": "1.6.0", - "web3-core-helpers": "1.6.0", - "web3-core-method": "1.6.0", - "web3-core-subscriptions": "1.6.0", - "web3-eth-abi": "1.6.0", - "web3-eth-accounts": "1.6.0", - "web3-eth-contract": "1.6.0", - "web3-eth-ens": "1.6.0", - "web3-eth-iban": "1.6.0", - "web3-eth-personal": "1.6.0", - "web3-net": "1.6.0", - "web3-utils": "1.6.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=0.10.0" } }, - "node_modules/web3-eth-abi": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.6.0.tgz", - "integrity": "sha512-fImomGE9McuTMJLwK8Tp0lTUzXqCkWeMm00qPVIwpJ/h7lCw9UFYV9+4m29wSqW6FF+FIZKwc6UBEf9dlx3orA==", + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, "dependencies": { - "@ethersproject/abi": "5.0.7", - "web3-utils": "1.6.0" + "isarray": "1.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=0.10.0" } }, - "node_modules/web3-eth-accounts": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.6.0.tgz", - "integrity": "sha512-2f6HS4KIH4laAsNCOfbNX3dRiQosqSY2TRK86C8jtAA/QKGdx+5qlPfYzbI2RjG81iayb2+mVbHIaEaBGZ8sGw==", - "dependencies": { - "@ethereumjs/common": "^2.3.0", - "@ethereumjs/tx": "^3.2.1", - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.8", - "ethereumjs-util": "^7.0.10", - "scrypt-js": "^3.0.1", - "uuid": "3.3.2", - "web3-core": "1.6.0", - "web3-core-helpers": "1.6.0", - "web3-core-method": "1.6.0", - "web3-utils": "1.6.0" - }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "dev": true, "engines": { - "node": ">=8.0.0" + "node": ">=0.10.0" } }, - "node_modules/web3-eth-accounts/node_modules/@types/bn.js": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", - "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", - "dependencies": { - "@types/node": "*" + "node_modules/unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw==", + "engines": { + "node": ">=4" } }, - "node_modules/web3-eth-accounts/node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "node_modules/web3-eth-accounts/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" + "escalade": "^3.1.1", + "picocolors": "^1.0.0" }, - "engines": { - "node": ">=10.0.0" + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/web3-eth-contract": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.6.0.tgz", - "integrity": "sha512-ZUtO77zFnxuFtrc+D+iJ3AzNgFXAVcKnhEYN7f1PNz/mFjbtE6dJ+ujO0mvMbxIZF02t9IZv0CIXRpK0rDvZAw==", + "node_modules/update-notifier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", "dependencies": { - "@types/bn.js": "^4.11.5", - "web3-core": "1.6.0", - "web3-core-helpers": "1.6.0", - "web3-core-method": "1.6.0", - "web3-core-promievent": "1.6.0", - "web3-core-subscriptions": "1.6.0", - "web3-eth-abi": "1.6.0", - "web3-utils": "1.6.0" + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=4" } }, - "node_modules/web3-eth-ens": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.6.0.tgz", - "integrity": "sha512-AG24PNv9qbYHSpjHcU2pViOII0jvIR7TeojJ2bxXSDqfcgHuRp3NZGKv6xFvT4uNI4LEQHUhSC7bzHoNF5t8CA==", + "node_modules/update-notifier/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "web3-core": "1.6.0", - "web3-core-helpers": "1.6.0", - "web3-core-promievent": "1.6.0", - "web3-eth-abi": "1.6.0", - "web3-eth-contract": "1.6.0", - "web3-utils": "1.6.0" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=4" } }, - "node_modules/web3-eth-iban": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz", - "integrity": "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==", + "node_modules/update-notifier/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { - "bn.js": "^4.11.9", - "web3-utils": "1.6.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=4" } }, - "node_modules/web3-eth-personal": { + "node_modules/update-notifier/node_modules/ci-info": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.6.0.tgz", - "integrity": "sha512-8ohf4qAwbShf4RwES2tLHVqa+pHZnS5Q6tV80sU//bivmlZeyO1W4UWyNn59vu9KPpEYvLseOOC6Muxuvr8mFQ==", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" + }, + "node_modules/update-notifier/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { - "@types/node": "^12.12.6", - "web3-core": "1.6.0", - "web3-core-helpers": "1.6.0", - "web3-core-method": "1.6.0", - "web3-net": "1.6.0", - "web3-utils": "1.6.0" - }, - "engines": { - "node": ">=8.0.0" + "color-name": "1.1.3" } }, - "node_modules/web3-eth-personal/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + "node_modules/update-notifier/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, - "node_modules/web3-net": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.6.0.tgz", - "integrity": "sha512-LFfG95ovTT2sNHkO1TEfsaKpYcxOSUtbuwHQ0K3G0e5nevKDJkPEFIqIcob40yiwcWoqEjENJP9Bjk8CRrZ99Q==", + "node_modules/update-notifier/node_modules/configstore": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.5.tgz", + "integrity": "sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==", "dependencies": { - "web3-core": "1.6.0", - "web3-core-method": "1.6.0", - "web3-utils": "1.6.0" + "dot-prop": "^4.2.1", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=4" } }, - "node_modules/web3-providers-http": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.6.0.tgz", - "integrity": "sha512-sNxHFNv3lnxpmULt34AS6M36IYB/Hzm2Et4yPNzdP1XE644D8sQBZQZaJQdTaza5HfrlwoqU6AOK935armqGuA==", - "dependencies": { - "web3-core-helpers": "1.6.0", - "xhr2-cookies": "1.1.0" - }, + "node_modules/update-notifier/node_modules/crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==", "engines": { - "node": ">=8.0.0" + "node": ">=4" } }, - "node_modules/web3-providers-ipc": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.6.0.tgz", - "integrity": "sha512-ETYdfhpGiGoWpmmSJnONvnPfd3TPivHEGjXyuX+L5FUsbMOVZj9MFLNIS19Cx/YGL8UWJ/8alLJoTcWSIdz/aA==", + "node_modules/update-notifier/node_modules/dot-prop": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", + "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", "dependencies": { - "oboe": "2.1.5", - "web3-core-helpers": "1.6.0" + "is-obj": "^1.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=4" } }, - "node_modules/web3-providers-ws": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.6.0.tgz", - "integrity": "sha512-eNRmlhOPCpuVYwBrKBBQRLGPFb4U1Uo44r9EWV69Cpo4gP6XeBTl6nkawhLz6DS0fq79apyPfItJVuSfAy77pA==", - "dependencies": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.6.0", - "websocket": "^1.0.32" - }, + "node_modules/update-notifier/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "engines": { - "node": ">=8.0.0" + "node": ">=4" } }, - "node_modules/web3-providers-ws/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "node_modules/web3-shh": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.6.0.tgz", - "integrity": "sha512-ymN0OFL81WtEeSyb+PFpuUv39fR3frGwsZnIg5EVPZvrOIdaDSFcGSLDmafUt0vKSubvLMVYIBOCskRD6YdtEQ==", - "hasInstallScript": true, + "node_modules/update-notifier/node_modules/is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", "dependencies": { - "web3-core": "1.6.0", - "web3-core-method": "1.6.0", - "web3-core-subscriptions": "1.6.0", - "web3-net": "1.6.0" + "ci-info": "^1.5.0" }, - "engines": { - "node": ">=8.0.0" + "bin": { + "is-ci": "bin.js" } }, - "node_modules/web3-utils": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.6.0.tgz", - "integrity": "sha512-bgCAWAeQnJF035YTFxrcHJ5mGEfTi/McsjqldZiXRwlHK7L1PyOqvXiQLE053dlzvy1kdAxWl/sSSfLMyNUAXg==", - "dependencies": { - "bn.js": "^4.11.9", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - }, + "node_modules/update-notifier/node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-utils/node_modules/@types/bn.js": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", - "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", - "dependencies": { - "@types/node": "*" + "node": ">=0.10.0" } }, - "node_modules/web3-utils/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "node_modules/update-notifier/node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" + "pify": "^3.0.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=4" } }, - "node_modules/web3-utils/node_modules/ethereumjs-util/node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "node_modules/update-notifier/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=4" } }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "node_modules/update-notifier/node_modules/unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" + "crypto-random-string": "^1.0.0" }, "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "engines": { - "node": ">=0.8.0" + "node": ">=4" } }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/update-notifier/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dependencies": { - "ms": "2.0.0" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" } }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "node_modules/update-notifier/node_modules/xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==", + "engines": { + "node": ">=4" + } }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dependencies": { - "iconv-lite": "0.4.24" + "punycode": "^2.1.0" } }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", "dev": true }, - "node_modules/whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", "dev": true, "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" + "punycode": "1.3.2", + "querystring": "0.2.0" } }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", "dependencies": { - "isexe": "^2.0.0" + "prepend-http": "^1.0.1" }, - "bin": { - "which": "bin/which" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "node_modules/url-set-query": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==" + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "dev": true + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "hasInstallScript": true, "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "node-gyp-build": "^4.3.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=6.14.2" } }, - "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "optional": true, + "node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" } }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", - "dev": true + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "node_modules/which-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", - "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", + "node_modules/util.promisify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.1.2.tgz", + "integrity": "sha512-PBdZ03m1kBnQ5cjjO0ZvJMJS+QsbyIcFwi4hY4U76OQsCO9JrOYjbCFgIF76ccFg9xnJo7ZHPkqyj1GqmdS7MA==", + "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", + "define-properties": "^1.2.0", "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "object.getownpropertydescriptors": "^2.1.6", + "safe-array-concat": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", - "dependencies": { - "string-width": "^2.1.1" - }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "engines": { - "node": ">=4" + "node": ">= 0.4.0" } }, - "node_modules/winston": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.8.2.tgz", - "integrity": "sha512-MsE1gRx1m5jdTTO9Ld/vND4krP2To+lgDoMEHGGa4HIlAUyXJtfc7CxQcGXVyz2IBpw5hbFkj2b/AtUdQwyRew==", - "dependencies": { - "@colors/colors": "1.5.0", - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.4.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "safe-stable-stringify": "^2.3.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.5.0" - }, - "engines": { - "node": ">= 12.0.0" + "node_modules/uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "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.", + "bin": { + "uuid": "bin/uuid" } }, - "node_modules/winston-transport": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", - "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dependencies": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 6.4.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "node_modules/winston/node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" }, - "node_modules/with-callback": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/with-callback/-/with-callback-1.0.2.tgz", - "integrity": "sha512-zaUhn7OWgikdqWlPYpZ4rTX/6IAV0czMVyd+C6QLVrif2tATF28CYUnHBmHs2a5EaZo7bB1+plBUPHto+HW8uA==", + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "engines": { - "node": ">=4" + "node": ">= 0.8" } }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "engines": { - "node": ">=0.10.0" + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" } }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" - }, - "node_modules/workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", "dev": true, "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/walkdir": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.4.1.tgz", + "integrity": "sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==", + "optional": true, "engines": { - "node": ">=6" + "node": ">=6.0.0" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "makeerror": "1.0.12" } }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dependencies": { - "color-name": "1.1.3" + "defaults": "^1.0.3" } }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "node_modules/web3": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.6.0.tgz", + "integrity": "sha512-rWpXnO88MiVX5yTRqMBCVKASxc7QDkXZZUl1D48sKlbX4dt3BAV+nVMVUKCBKiluZ5Bp8pDrVCUdPx/jIYai5Q==", + "hasInstallScript": true, + "dependencies": { + "web3-bzz": "1.6.0", + "web3-core": "1.6.0", + "web3-eth": "1.6.0", + "web3-eth-personal": "1.6.0", + "web3-net": "1.6.0", + "web3-shh": "1.6.0", + "web3-utils": "1.6.0" + }, + "engines": { + "node": ">=8.0.0" + } }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, + "node_modules/web3-bzz": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.6.0.tgz", + "integrity": "sha512-ugYV6BsinwhIi0CsLWINBz4mqN9wR9vNG0WmyEbdECjxcPyr6vkaWt4qi0zqlUxEnYAwGj4EJXNrbjPILntQTQ==", + "hasInstallScript": true, "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "@types/node": "^12.12.6", + "got": "9.6.0", + "swarm-js": "^0.1.40" }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-bzz/node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", "engines": { "node": ">=6" } }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, + "node_modules/web3-bzz/node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", "dependencies": { - "ansi-regex": "^4.1.0" + "defer-to-connect": "^1.0.1" }, "engines": { "node": ">=6" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "node_modules/web3-bzz/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" }, - "node_modules/write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, + "node_modules/web3-bzz/node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", "dependencies": { - "mkdirp": "^0.5.1" + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "optional": true, + "node_modules/web3-bzz/node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.3.tgz", - "integrity": "sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ==", - "engines": { - "node": ">=8.3.0" + "pump": "^3.0.0" }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "engines": { + "node": ">=8" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "optional": true, + "node_modules/web3-bzz/node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "engines": { "node": ">=8" } }, - "node_modules/xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", - "dependencies": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "dependencies": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "node_modules/xhr-request-promise": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", - "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", - "dependencies": { - "xhr-request": "^1.1.0" - } + "node_modules/web3-bzz/node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" }, - "node_modules/xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", + "node_modules/web3-bzz/node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", "dependencies": { - "cookiejar": "^2.1.1" + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" } }, - "node_modules/xml-name-validator": { + "node_modules/web3-bzz/node_modules/json-buffer": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" }, - "node_modules/xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "dev": true, + "node_modules/web3-bzz/node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" + "json-buffer": "3.0.0" } }, - "node_modules/xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==", - "dev": true, + "node_modules/web3-bzz/node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", "engines": { - "node": ">=4.0" + "node": ">=8" } }, - "node_modules/xmlhttprequest": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==", + "node_modules/web3-bzz/node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "engines": { - "node": ">=0.4.0" + "node": ">=6" } }, - "node_modules/xregexp": { + "node_modules/web3-bzz/node_modules/prepend-http": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", - "integrity": "sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA==", - "engines": { - "node": "*" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", "engines": { - "node": ">=0.10.32" + "node": ">=4" } }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, + "node_modules/web3-bzz/node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" + "lowercase-keys": "^1.0.0" } }, - "node_modules/yargs-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", - "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "node_modules/web3-bzz/node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", "dependencies": { - "camelcase": "^4.1.0" - } - }, - "node_modules/yargs-parser/node_modules/camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", + "prepend-http": "^2.0.0" + }, "engines": { "node": ">=4" } }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, + "node_modules/web3-core": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.6.0.tgz", + "integrity": "sha512-o0WsLrJ2yD+HAAc29lGMWJef/MutTyuzpJC0UzLJtIAQJqtpDalzWINEu4j8XYXGk34N/V6vudtzRPo23QEE6g==", "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" + "@types/bn.js": "^4.11.5", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.6.0", + "web3-core-method": "1.6.0", + "web3-core-requestmanager": "1.6.0", + "web3-utils": "1.6.0" }, "engines": { - "node": ">=10" + "node": ">=8.0.0" } }, - "node_modules/yargs-unparser/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" + "node_modules/web3-core-helpers": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz", + "integrity": "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==", + "dependencies": { + "web3-eth-iban": "1.6.0", + "web3-utils": "1.6.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/yargs-unparser/node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" + "node_modules/web3-core-method": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.6.0.tgz", + "integrity": "sha512-cHekyEil4mtcCOk6Q1Zh4y+2o5pTwsLIxP6Bpt4BRtZgdsyPiadYJpkLAVT/quch5xN7Qs5ZwG5AvRCS3VwD2g==", + "dependencies": { + "@ethereumjs/common": "^2.4.0", + "@ethersproject/transactions": "^5.0.0-beta.135", + "web3-core-helpers": "1.6.0", + "web3-core-promievent": "1.6.0", + "web3-core-subscriptions": "1.6.0", + "web3-utils": "1.6.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/yargs/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, + "node_modules/web3-core-promievent": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.6.0.tgz", + "integrity": "sha512-ZzsevjMXWkhqW9dnVfTfb1OUcK7jKcKPvPIbQ4boJccNgvNZPZKlo8xB4pkAX38n4c59O5mC7Lt/z2QL/M5CeQ==", "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "eventemitter3": "4.0.4" }, "engines": { - "node": ">=6" + "node": ">=8.0.0" } }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, + "node_modules/web3-core-promievent/node_modules/eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "node_modules/web3-core-requestmanager": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.6.0.tgz", + "integrity": "sha512-CY5paPdiDXKTXPWaEUZekDfUXSuoE2vPxolwqzsvKwFWH5+H1NaXgrc+D5HpufgSvTXawTw0fy7IAicg8+PWqA==", "dependencies": { - "ansi-regex": "^4.1.0" + "util": "^0.12.0", + "web3-core-helpers": "1.6.0", + "web3-providers-http": "1.6.0", + "web3-providers-ipc": "1.6.0", + "web3-providers-ws": "1.6.0" }, "engines": { - "node": ">=6" + "node": ">=8.0.0" } }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, + "node_modules/web3-core-subscriptions": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.6.0.tgz", + "integrity": "sha512-kY9WZUY/m1URSOv3uTLshoZD9ZDiFKReIzHuPUkxFpD5oYNmr1/aPQNPCrrMxKODR7UVX/D90FxWwCYqHhLaxQ==", "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.6.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/yn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", - "integrity": "sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==", - "dev": true, + "node_modules/web3-core-subscriptions/node_modules/eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "node_modules/web3-core/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + }, + "node_modules/web3-eth": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.6.0.tgz", + "integrity": "sha512-qJMvai//r0be6I9ghU24/152f0zgJfYC23TMszN3Y6jse1JtjCBP2TlTibFcvkUN1RRdIUY5giqO7ZqAYAmp7w==", + "dependencies": { + "web3-core": "1.6.0", + "web3-core-helpers": "1.6.0", + "web3-core-method": "1.6.0", + "web3-core-subscriptions": "1.6.0", + "web3-eth-abi": "1.6.0", + "web3-eth-accounts": "1.6.0", + "web3-eth-contract": "1.6.0", + "web3-eth-ens": "1.6.0", + "web3-eth-iban": "1.6.0", + "web3-eth-personal": "1.6.0", + "web3-net": "1.6.0", + "web3-utils": "1.6.0" + }, "engines": { - "node": ">=4" + "node": ">=8.0.0" } }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" + "node_modules/web3-eth-abi": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.6.0.tgz", + "integrity": "sha512-fImomGE9McuTMJLwK8Tp0lTUzXqCkWeMm00qPVIwpJ/h7lCw9UFYV9+4m29wSqW6FF+FIZKwc6UBEf9dlx3orA==", + "dependencies": { + "@ethersproject/abi": "5.0.7", + "web3-utils": "1.6.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/zip-object": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/zip-object/-/zip-object-0.1.0.tgz", - "integrity": "sha512-eujiZK9Z3F/WuswEIWqlaNUwUj67oRw4Op5a1VeKw4n9XBkV7EdxtgblroWBYvLmD7XqZ1cjqsbmE3jU43prTA==" - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" + "node_modules/web3-eth-abi/node_modules/@ethersproject/abi": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.7.tgz", + "integrity": "sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==", + "dependencies": { + "@ethersproject/address": "^5.0.4", + "@ethersproject/bignumber": "^5.0.7", + "@ethersproject/bytes": "^5.0.4", + "@ethersproject/constants": "^5.0.4", + "@ethersproject/hash": "^5.0.4", + "@ethersproject/keccak256": "^5.0.3", + "@ethersproject/logger": "^5.0.5", + "@ethersproject/properties": "^5.0.3", + "@ethersproject/strings": "^5.0.4" } }, - "@aws-crypto/ie11-detection": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz", - "integrity": "sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==", - "dev": true, - "optional": true, - "requires": { - "tslib": "^1.11.1" + "node_modules/web3-eth-accounts": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.6.0.tgz", + "integrity": "sha512-2f6HS4KIH4laAsNCOfbNX3dRiQosqSY2TRK86C8jtAA/QKGdx+5qlPfYzbI2RjG81iayb2+mVbHIaEaBGZ8sGw==", + "dependencies": { + "@ethereumjs/common": "^2.3.0", + "@ethereumjs/tx": "^3.2.1", + "crypto-browserify": "3.12.0", + "eth-lib": "0.2.8", + "ethereumjs-util": "^7.0.10", + "scrypt-js": "^3.0.1", + "uuid": "3.3.2", + "web3-core": "1.6.0", + "web3-core-helpers": "1.6.0", + "web3-core-method": "1.6.0", + "web3-utils": "1.6.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "@aws-crypto/sha256-browser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz", - "integrity": "sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==", - "dev": true, - "optional": true, - "requires": { - "@aws-crypto/ie11-detection": "^2.0.0", - "@aws-crypto/sha256-js": "^2.0.0", - "@aws-crypto/supports-web-crypto": "^2.0.0", - "@aws-crypto/util": "^2.0.0", - "@aws-sdk/types": "^3.1.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "node_modules/web3-eth-accounts/node_modules/@types/bn.js": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", + "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", + "dependencies": { + "@types/node": "*" } }, - "@aws-crypto/sha256-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz", - "integrity": "sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==", - "dev": true, - "optional": true, - "requires": { - "@aws-crypto/util": "^2.0.0", - "@aws-sdk/types": "^3.1.0", - "tslib": "^1.11.1" - } + "node_modules/web3-eth-accounts/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, - "@aws-crypto/supports-web-crypto": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.2.tgz", - "integrity": "sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==", - "dev": true, - "optional": true, - "requires": { - "tslib": "^1.11.1" + "node_modules/web3-eth-accounts/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" } }, - "@aws-crypto/util": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.2.tgz", - "integrity": "sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/types": "^3.110.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "node_modules/web3-eth-contract": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.6.0.tgz", + "integrity": "sha512-ZUtO77zFnxuFtrc+D+iJ3AzNgFXAVcKnhEYN7f1PNz/mFjbtE6dJ+ujO0mvMbxIZF02t9IZv0CIXRpK0rDvZAw==", + "dependencies": { + "@types/bn.js": "^4.11.5", + "web3-core": "1.6.0", + "web3-core-helpers": "1.6.0", + "web3-core-method": "1.6.0", + "web3-core-promievent": "1.6.0", + "web3-core-subscriptions": "1.6.0", + "web3-eth-abi": "1.6.0", + "web3-utils": "1.6.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "@aws-sdk/abort-controller": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.200.0.tgz", - "integrity": "sha512-YflVl9JEFjy0cco+40FAocQfFGZ7fR2tnYhQPqXtfCJ9ywikB2PnzN3G6TtvNCFaSG1tLwnI0LZphVbk89sDtw==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, + "node_modules/web3-eth-ens": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.6.0.tgz", + "integrity": "sha512-AG24PNv9qbYHSpjHcU2pViOII0jvIR7TeojJ2bxXSDqfcgHuRp3NZGKv6xFvT4uNI4LEQHUhSC7bzHoNF5t8CA==", "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "web3-core": "1.6.0", + "web3-core-helpers": "1.6.0", + "web3-core-promievent": "1.6.0", + "web3-eth-abi": "1.6.0", + "web3-eth-contract": "1.6.0", + "web3-utils": "1.6.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "@aws-sdk/client-cognito-identity": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.200.0.tgz", - "integrity": "sha512-9WdOjdayhzL+k5PQibj3l4/luAGs+NJKC5OjIDKEKL54SC9QwsgwTv6Mb+oqm0sQa9FCNieXyZhSHb2aeR60sQ==", - "dev": true, - "optional": true, - "requires": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/client-sts": "3.200.0", - "@aws-sdk/config-resolver": "3.200.0", - "@aws-sdk/credential-provider-node": "3.200.0", - "@aws-sdk/fetch-http-handler": "3.200.0", - "@aws-sdk/hash-node": "3.200.0", - "@aws-sdk/invalid-dependency": "3.200.0", - "@aws-sdk/middleware-content-length": "3.200.0", - "@aws-sdk/middleware-endpoint": "3.200.0", - "@aws-sdk/middleware-host-header": "3.200.0", - "@aws-sdk/middleware-logger": "3.200.0", - "@aws-sdk/middleware-recursion-detection": "3.200.0", - "@aws-sdk/middleware-retry": "3.200.0", - "@aws-sdk/middleware-serde": "3.200.0", - "@aws-sdk/middleware-signing": "3.200.0", - "@aws-sdk/middleware-stack": "3.200.0", - "@aws-sdk/middleware-user-agent": "3.200.0", - "@aws-sdk/node-config-provider": "3.200.0", - "@aws-sdk/node-http-handler": "3.200.0", - "@aws-sdk/protocol-http": "3.200.0", - "@aws-sdk/smithy-client": "3.200.0", - "@aws-sdk/types": "3.200.0", - "@aws-sdk/url-parser": "3.200.0", - "@aws-sdk/util-base64-browser": "3.188.0", - "@aws-sdk/util-base64-node": "3.188.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.188.0", - "@aws-sdk/util-defaults-mode-browser": "3.200.0", - "@aws-sdk/util-defaults-mode-node": "3.200.0", - "@aws-sdk/util-endpoints": "3.200.0", - "@aws-sdk/util-user-agent-browser": "3.200.0", - "@aws-sdk/util-user-agent-node": "3.200.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.199.0", - "tslib": "^2.3.1" - }, + "node_modules/web3-eth-iban": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz", + "integrity": "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==", "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "bn.js": "^4.11.9", + "web3-utils": "1.6.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "@aws-sdk/client-sso": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.200.0.tgz", - "integrity": "sha512-EyOSl3hlkrTE9i0bgIvtdvMpCMplmZcLlkMy2mx2LdPKO+AWFOjUN7i5RgpFa7YdZq/csHkcakooJi48OOgSVA==", - "dev": true, - "optional": true, - "requires": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/config-resolver": "3.200.0", - "@aws-sdk/fetch-http-handler": "3.200.0", - "@aws-sdk/hash-node": "3.200.0", - "@aws-sdk/invalid-dependency": "3.200.0", - "@aws-sdk/middleware-content-length": "3.200.0", - "@aws-sdk/middleware-endpoint": "3.200.0", - "@aws-sdk/middleware-host-header": "3.200.0", - "@aws-sdk/middleware-logger": "3.200.0", - "@aws-sdk/middleware-recursion-detection": "3.200.0", - "@aws-sdk/middleware-retry": "3.200.0", - "@aws-sdk/middleware-serde": "3.200.0", - "@aws-sdk/middleware-stack": "3.200.0", - "@aws-sdk/middleware-user-agent": "3.200.0", - "@aws-sdk/node-config-provider": "3.200.0", - "@aws-sdk/node-http-handler": "3.200.0", - "@aws-sdk/protocol-http": "3.200.0", - "@aws-sdk/smithy-client": "3.200.0", - "@aws-sdk/types": "3.200.0", - "@aws-sdk/url-parser": "3.200.0", - "@aws-sdk/util-base64-browser": "3.188.0", - "@aws-sdk/util-base64-node": "3.188.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.188.0", - "@aws-sdk/util-defaults-mode-browser": "3.200.0", - "@aws-sdk/util-defaults-mode-node": "3.200.0", - "@aws-sdk/util-endpoints": "3.200.0", - "@aws-sdk/util-user-agent-browser": "3.200.0", - "@aws-sdk/util-user-agent-node": "3.200.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.199.0", - "tslib": "^2.3.1" - }, + "node_modules/web3-eth-personal": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.6.0.tgz", + "integrity": "sha512-8ohf4qAwbShf4RwES2tLHVqa+pHZnS5Q6tV80sU//bivmlZeyO1W4UWyNn59vu9KPpEYvLseOOC6Muxuvr8mFQ==", "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "@types/node": "^12.12.6", + "web3-core": "1.6.0", + "web3-core-helpers": "1.6.0", + "web3-core-method": "1.6.0", + "web3-net": "1.6.0", + "web3-utils": "1.6.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "@aws-sdk/client-sts": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.200.0.tgz", - "integrity": "sha512-9k3NlHDyaEdv5aUnt6V1wBugIl5fIL7AsKbvIH8+vCDaAknc9+9vLbxkBsskiOAh5rEWFeso60hjNJC+2ky5xQ==", - "dev": true, - "optional": true, - "requires": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/config-resolver": "3.200.0", - "@aws-sdk/credential-provider-node": "3.200.0", - "@aws-sdk/fetch-http-handler": "3.200.0", - "@aws-sdk/hash-node": "3.200.0", - "@aws-sdk/invalid-dependency": "3.200.0", - "@aws-sdk/middleware-content-length": "3.200.0", - "@aws-sdk/middleware-endpoint": "3.200.0", - "@aws-sdk/middleware-host-header": "3.200.0", - "@aws-sdk/middleware-logger": "3.200.0", - "@aws-sdk/middleware-recursion-detection": "3.200.0", - "@aws-sdk/middleware-retry": "3.200.0", - "@aws-sdk/middleware-sdk-sts": "3.200.0", - "@aws-sdk/middleware-serde": "3.200.0", - "@aws-sdk/middleware-signing": "3.200.0", - "@aws-sdk/middleware-stack": "3.200.0", - "@aws-sdk/middleware-user-agent": "3.200.0", - "@aws-sdk/node-config-provider": "3.200.0", - "@aws-sdk/node-http-handler": "3.200.0", - "@aws-sdk/protocol-http": "3.200.0", - "@aws-sdk/smithy-client": "3.200.0", - "@aws-sdk/types": "3.200.0", - "@aws-sdk/url-parser": "3.200.0", - "@aws-sdk/util-base64-browser": "3.188.0", - "@aws-sdk/util-base64-node": "3.188.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.188.0", - "@aws-sdk/util-defaults-mode-browser": "3.200.0", - "@aws-sdk/util-defaults-mode-node": "3.200.0", - "@aws-sdk/util-endpoints": "3.200.0", - "@aws-sdk/util-user-agent-browser": "3.200.0", - "@aws-sdk/util-user-agent-node": "3.200.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.199.0", - "fast-xml-parser": "4.0.11", - "tslib": "^2.3.1" - }, + "node_modules/web3-eth-personal/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + }, + "node_modules/web3-net": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.6.0.tgz", + "integrity": "sha512-LFfG95ovTT2sNHkO1TEfsaKpYcxOSUtbuwHQ0K3G0e5nevKDJkPEFIqIcob40yiwcWoqEjENJP9Bjk8CRrZ99Q==", "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "web3-core": "1.6.0", + "web3-core-method": "1.6.0", + "web3-utils": "1.6.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "@aws-sdk/config-resolver": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.200.0.tgz", - "integrity": "sha512-eq03XA4sPNJ6C3WbMLR5NPYQmS/S+TdFlNY044rG1ne0Mh+yrNPjIPggu42F4Xr5KtURB97et7bxSx1w7gvDeQ==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/signature-v4": "3.200.0", - "@aws-sdk/types": "3.200.0", - "@aws-sdk/util-config-provider": "3.188.0", - "@aws-sdk/util-middleware": "3.200.0", - "tslib": "^2.3.1" + "node_modules/web3-providers-http": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.6.0.tgz", + "integrity": "sha512-sNxHFNv3lnxpmULt34AS6M36IYB/Hzm2Et4yPNzdP1XE644D8sQBZQZaJQdTaza5HfrlwoqU6AOK935armqGuA==", + "dependencies": { + "web3-core-helpers": "1.6.0", + "xhr2-cookies": "1.1.0" }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ipc": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.6.0.tgz", + "integrity": "sha512-ETYdfhpGiGoWpmmSJnONvnPfd3TPivHEGjXyuX+L5FUsbMOVZj9MFLNIS19Cx/YGL8UWJ/8alLJoTcWSIdz/aA==", "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "oboe": "2.1.5", + "web3-core-helpers": "1.6.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "@aws-sdk/credential-provider-cognito-identity": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.200.0.tgz", - "integrity": "sha512-DrZbo4eGkKvzDEbFSA44iwQjzQSsMZKfU7fnBdA/Qs28TmNZ6oBgO9ljUuEHxhaWgDYxAE70KtJwEqD05IZVuw==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/client-cognito-identity": "3.200.0", - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, + "node_modules/web3-providers-ws": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.6.0.tgz", + "integrity": "sha512-eNRmlhOPCpuVYwBrKBBQRLGPFb4U1Uo44r9EWV69Cpo4gP6XeBTl6nkawhLz6DS0fq79apyPfItJVuSfAy77pA==", "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.6.0", + "websocket": "^1.0.32" + }, + "engines": { + "node": ">=8.0.0" } }, - "@aws-sdk/credential-provider-env": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.200.0.tgz", - "integrity": "sha512-I2hlRxEqcwsmr0C44RD083QYJ3nDIZE3K8WBQjNetFi5qTzXlI1usrOlCMfaIbee6k3BBB+cXIX1Vp8RUNkNQQ==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, + "node_modules/web3-providers-ws/node_modules/eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "node_modules/web3-shh": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.6.0.tgz", + "integrity": "sha512-ymN0OFL81WtEeSyb+PFpuUv39fR3frGwsZnIg5EVPZvrOIdaDSFcGSLDmafUt0vKSubvLMVYIBOCskRD6YdtEQ==", + "hasInstallScript": true, "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "web3-core": "1.6.0", + "web3-core-method": "1.6.0", + "web3-core-subscriptions": "1.6.0", + "web3-net": "1.6.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "@aws-sdk/credential-provider-imds": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.200.0.tgz", - "integrity": "sha512-qvUeUuK2DSQ0eVKijzh1ccOj1xNojVCTf+ENDa2EhXPVQmpERbhQiamTeSkLcKYOtDKxyEK7YBlkczIt/BL2UQ==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/node-config-provider": "3.200.0", - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/types": "3.200.0", - "@aws-sdk/url-parser": "3.200.0", - "tslib": "^2.3.1" - }, + "node_modules/web3-utils": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.6.0.tgz", + "integrity": "sha512-bgCAWAeQnJF035YTFxrcHJ5mGEfTi/McsjqldZiXRwlHK7L1PyOqvXiQLE053dlzvy1kdAxWl/sSSfLMyNUAXg==", "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "bn.js": "^4.11.9", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "@aws-sdk/credential-provider-ini": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.200.0.tgz", - "integrity": "sha512-6b8CbfxAw7UiWJ2GWSP/RhA2qxgo9iLZOunMqCqOlI627JEZb+oFKTzXwcORrrjpTKbfb/Q6/3ev5yGPonewHw==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/credential-provider-env": "3.200.0", - "@aws-sdk/credential-provider-imds": "3.200.0", - "@aws-sdk/credential-provider-sso": "3.200.0", - "@aws-sdk/credential-provider-web-identity": "3.200.0", - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/shared-ini-file-loader": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, + "node_modules/web3-utils/node_modules/@types/bn.js": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", + "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "@types/node": "*" } }, - "@aws-sdk/credential-provider-node": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.200.0.tgz", - "integrity": "sha512-HpBiMJt+xvHBTf2BjJJwnH+gXf6JapX4cGk3nZlJxE8Uu6P0bIVeFnwD20+yQ5N6Pm0vsJuoA8MNz9vOiPjImg==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/credential-provider-env": "3.200.0", - "@aws-sdk/credential-provider-imds": "3.200.0", - "@aws-sdk/credential-provider-ini": "3.200.0", - "@aws-sdk/credential-provider-process": "3.200.0", - "@aws-sdk/credential-provider-sso": "3.200.0", - "@aws-sdk/credential-provider-web-identity": "3.200.0", - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/shared-ini-file-loader": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, + "node_modules/web3-utils/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" } }, - "@aws-sdk/credential-provider-process": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.200.0.tgz", - "integrity": "sha512-Juio3viiz/ywrb88viwNxfauaxG+MrD2gMbnCfGEtZgdvix6XBYc6bRd+F94yY23EYWiU1s1tfdlScCIVeYfqA==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/shared-ini-file-loader": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, + "node_modules/web3-utils/node_modules/ethereumjs-util/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" } }, - "@aws-sdk/credential-provider-sso": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.200.0.tgz", - "integrity": "sha512-62ktkTAcr51GYshZiQdJcukps1O9QZGwJrVrmY+VdpKwdfSoJygpXmpFGWWlMs+hDkXLcNl3oLOPa3T+fxqN9Q==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/client-sso": "3.200.0", - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/shared-ini-file-loader": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" } }, - "@aws-sdk/credential-provider-web-identity": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.200.0.tgz", - "integrity": "sha512-++C1vRu/9SJo3MJuC6ARMYfwNKkR2ioq0KDL2b4NQAIyQLgyw0hoOzPlfUgpfvyx0CnPecAoQIY8jGNWfdDSBA==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "engines": { + "node": ">=0.8.0" } }, - "@aws-sdk/credential-providers": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.200.0.tgz", - "integrity": "sha512-YpxALYacNhmcYznlcmNUbXJ3w7Tt49iXgsmx+tQRzMx3m/99E4XWCGCz/4GRAncu7GV2oJYLL5Iyj5HQqR+jVA==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/client-cognito-identity": "3.200.0", - "@aws-sdk/client-sso": "3.200.0", - "@aws-sdk/client-sts": "3.200.0", - "@aws-sdk/credential-provider-cognito-identity": "3.200.0", - "@aws-sdk/credential-provider-env": "3.200.0", - "@aws-sdk/credential-provider-imds": "3.200.0", - "@aws-sdk/credential-provider-ini": "3.200.0", - "@aws-sdk/credential-provider-node": "3.200.0", - "@aws-sdk/credential-provider-process": "3.200.0", - "@aws-sdk/credential-provider-sso": "3.200.0", - "@aws-sdk/credential-provider-web-identity": "3.200.0", - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/shared-ini-file-loader": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, + "node_modules/websocket/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "ms": "2.0.0" } }, - "@aws-sdk/fetch-http-handler": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.200.0.tgz", - "integrity": "sha512-sqYUn3sjEWy6Yx/mJXjGQcMxfJ1YsxqPGrE0qmMCa6EP6ENl1BWrX0eutQmwdCq85UiziYqxRpkflJ7nN2Abag==", + "node_modules/websocket/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", "dev": true, - "optional": true, - "requires": { - "@aws-sdk/protocol-http": "3.200.0", - "@aws-sdk/querystring-builder": "3.200.0", - "@aws-sdk/types": "3.200.0", - "@aws-sdk/util-base64-browser": "3.188.0", - "tslib": "^2.3.1" - }, "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "iconv-lite": "0.4.24" } }, - "@aws-sdk/hash-node": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.200.0.tgz", - "integrity": "sha512-iQ0K85BteaiSq7V5LTsMbOSa9RckraOQ3eLtUaJ7u98ywByb7v6H96jfaFdAOAYE0SZ7n2Qp87d+zkHs3kxS5w==", + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", "dev": true, - "optional": true, - "requires": { - "@aws-sdk/types": "3.200.0", - "@aws-sdk/util-buffer-from": "3.188.0", - "tslib": "^2.3.1" - }, "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" } }, - "@aws-sdk/invalid-dependency": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.200.0.tgz", - "integrity": "sha512-M3g8U1Nahj9ef2Tqn26j03FIwHwQuIVps39i5P+dWEyFAfFJsdwMtrDI/neXmf7BPcbPFUH9MMcrOJpq/MxYBQ==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "@aws-sdk/is-array-buffer": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.188.0.tgz", - "integrity": "sha512-n69N4zJZCNd87Rf4NzufPzhactUeM877Y0Tp/F3KiHqGeTnVjYUa4Lv1vLBjqtfjYb2HWT3NKlYn5yzrhaEwiQ==", - "dev": true, - "optional": true, - "requires": { - "tslib": "^2.3.1" - }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@aws-sdk/middleware-content-length": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.200.0.tgz", - "integrity": "sha512-GOvtCgP0Q+dYvzWfn06DawaZbDkn+yz8p6R0UaoYMOWvpINFuR6kYu/tz9qjGhZsrjuDqVH+6mj6uuC87fupQQ==", - "dev": true, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", "optional": true, - "requires": { - "@aws-sdk/protocol-http": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@aws-sdk/middleware-endpoint": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.200.0.tgz", - "integrity": "sha512-r0OkdhjYqdv/iYM3KXj6LubQFZbM848FhAVuEiJEUNBFpUvhS6pCkmjhkd5QIUT+bhiD0gUj1OFzIHhQaHwyWA==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/middleware-serde": "3.200.0", - "@aws-sdk/protocol-http": "3.200.0", - "@aws-sdk/signature-v4": "3.200.0", - "@aws-sdk/types": "3.200.0", - "@aws-sdk/url-parser": "3.200.0", - "@aws-sdk/util-config-provider": "3.188.0", - "@aws-sdk/util-middleware": "3.200.0", - "tslib": "^2.3.1" - }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true + }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@aws-sdk/middleware-host-header": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.200.0.tgz", - "integrity": "sha512-oFRSUBXGBw6+QiOXgzu3cTPqAN97y+Lc3z2mDS3wJRqA4/Wmdzx/oTWhB5G0IsYSJHTevhZhfQPBLbhK5Ffehw==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/protocol-http": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "@aws-sdk/middleware-logger": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.200.0.tgz", - "integrity": "sha512-uTtu1bCDqKQNLoZ0MkEsn102T4itNC5o7U+FDNSRHKYHPY6o1MbS9nbcOKywMDBqhEit5nNKCw9vOoz49N6zpw==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, + "node_modules/widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "string-width": "^2.1.1" + }, + "engines": { + "node": ">=4" } }, - "@aws-sdk/middleware-recursion-detection": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.200.0.tgz", - "integrity": "sha512-3Y5UaBBuBs3EE1NgYexhnOdFfozyxHvz4f/452b1K55IigJvovTl3TI46tFEkXiqhRs9bJZ/DiuakbsGfiKMFQ==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/protocol-http": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, + "node_modules/winston": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.10.0.tgz", + "integrity": "sha512-nT6SIDaE9B7ZRO0u3UvdrimG0HkB7dSTAgInQnNR2SOPJ4bvq5q79+pXLftKmP52lJGW15+H5MCK0nM9D3KB/g==", "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "@colors/colors": "1.5.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.4.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.5.0" + }, + "engines": { + "node": ">= 12.0.0" } }, - "@aws-sdk/middleware-retry": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.200.0.tgz", - "integrity": "sha512-9YVofOwxocbNDfTcNQfWJsOA9MVdZIu0T6or0fr54cn1q0WJ69IoFeHVUmCiOXy9HRTop3GC6Fyc5pQmjaRRcQ==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/protocol-http": "3.200.0", - "@aws-sdk/service-error-classification": "3.200.0", - "@aws-sdk/types": "3.200.0", - "@aws-sdk/util-middleware": "3.200.0", - "tslib": "^2.3.1", - "uuid": "^8.3.2" - }, + "node_modules/winston-transport": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", + "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "optional": true - } + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 6.4.0" } }, - "@aws-sdk/middleware-sdk-sts": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.200.0.tgz", - "integrity": "sha512-1kZVgK+hk5F4oFMbzjzvv5qZ4DXJfpXOrHRu7dpmOeV8KL+NKYqYq7BeToDMjTTTq8atTHlDyQ4YrlgaOHyVCQ==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/middleware-signing": "3.200.0", - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/protocol-http": "3.200.0", - "@aws-sdk/signature-v4": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "node_modules/winston/node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "node_modules/with-callback": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/with-callback/-/with-callback-1.0.2.tgz", + "integrity": "sha512-zaUhn7OWgikdqWlPYpZ4rTX/6IAV0czMVyd+C6QLVrif2tATF28CYUnHBmHs2a5EaZo7bB1+plBUPHto+HW8uA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "engines": { + "node": ">=0.10.0" } }, - "@aws-sdk/middleware-serde": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.200.0.tgz", - "integrity": "sha512-NDYLVC7UxIDvu906itssEJE5yobPdVhMuE3Ef3MEMk3UTawd8f7lmo40kzFDBS3cW/c4jluGiTsN8r+8fPc3oA==", + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + }, + "node_modules/workerpool": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, - "optional": true, - "requires": { - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" } }, - "@aws-sdk/middleware-signing": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.200.0.tgz", - "integrity": "sha512-Guztdq7i/ZNWR68InHUJpSYpg668rNt+2N5z14SlWrZ8cup6ZHy3bRgzqClAPiXuHPKx9r9ysvczT6jCCyy+Xg==", + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "optional": true, - "requires": { - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/protocol-http": "3.200.0", - "@aws-sdk/signature-v4": "3.200.0", - "@aws-sdk/types": "3.200.0", - "@aws-sdk/util-middleware": "3.200.0", - "tslib": "^2.3.1" - }, "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "@aws-sdk/middleware-stack": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.200.0.tgz", - "integrity": "sha512-j2uSX4Bv347/14zXz7v/PKcTvE/AXQbXu+BQ1IQgqji7e3AT9QYJMsUD4TMK0SLYvCfBEtpfDXkA6WitT/ZPSA==", + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "optional": true, - "requires": { - "tslib": "^2.3.1" - }, "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "color-name": "1.1.3" } }, - "@aws-sdk/middleware-user-agent": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.200.0.tgz", - "integrity": "sha512-RZ3cfaIIC3+xjm+raEb1xfOB/kJsH99mHHcVkOeGuKGzzYAG8wG1N6EYOZgqO2SaNsr87sx9fxCAd8A4X0wgRA==", + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, - "optional": true, - "requires": { - "@aws-sdk/protocol-http": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" } }, - "@aws-sdk/node-config-provider": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.200.0.tgz", - "integrity": "sha512-TUZB/7JZfFQ6Ra4AhFCt64JvScosSkNZmhBE3a5Wdbh1uQlhVoczMumWPs1Gsl9awmYGipsDhZybTeI9r0b66w==", + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, - "optional": true, - "requires": { - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/shared-ini-file-loader": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" } }, - "@aws-sdk/node-http-handler": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.200.0.tgz", - "integrity": "sha512-foqNf0qsHTdClogmtlzJgPk8/s/kEOjAnkMVwJwBPEjVTxTN8i5oC4rXUsPIZ7LOYBTz2QQGkl3vY6BBFMmVGw==", + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", "dev": true, - "optional": true, - "requires": { - "@aws-sdk/abort-controller": "3.200.0", - "@aws-sdk/protocol-http": "3.200.0", - "@aws-sdk/querystring-builder": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, + "peer": true, "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=4" } }, - "@aws-sdk/property-provider": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.200.0.tgz", - "integrity": "sha512-KABh7LSkcWXCkilBa/WY2PvyR5vRMn1nwa2HYu9s1UToHbPCxIG0/ybtQfWNwVR4x5AtNODQYZBqxpBYUwau8w==", - "dev": true, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "optional": true, - "requires": { - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, - "@aws-sdk/protocol-http": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.200.0.tgz", - "integrity": "sha512-P61hkZtXXaTTk/ap+WCOxX/IIRCH1lTap6Yy8RigcDmblh/BE+vDRqqRiTebIq/pWgOzQ67OjFJLxDkkS/OMKQ==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" + "node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "engines": { + "node": ">=8.3.0" }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { "optional": true } } }, - "@aws-sdk/querystring-builder": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.200.0.tgz", - "integrity": "sha512-r4q7oUkcYsnxeVaIUEPGEPPobyn1CpAn7NmeuK8c3Lq4MrcfTx11aQMEtklmW+hvzavNPFxgYyUNiDuIyiVd6A==", - "dev": true, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", "optional": true, - "requires": { - "@aws-sdk/types": "3.200.0", - "@aws-sdk/util-uri-escape": "3.188.0", - "tslib": "^2.3.1" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "engines": { + "node": ">=8" } }, - "@aws-sdk/querystring-parser": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.200.0.tgz", - "integrity": "sha512-9C6c+fas2hMqvuCK8m7vwMqLb5W/x1Wib9yYJnBx40bOSdnOADRoRQitxCE07Iuq8aeHjPZYn1IhLhE9i9EmOg==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, + "node_modules/xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" } }, - "@aws-sdk/service-error-classification": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.200.0.tgz", - "integrity": "sha512-MFaMIJ/3v3C0XDerJDEfNYEquQXysnKtvuJJJWqPOPXMxCls4u8utyeXv0E6wO8ast6UW5xJKtzqEFRQ3t/+7w==", - "dev": true, - "optional": true - }, - "@aws-sdk/shared-ini-file-loader": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.200.0.tgz", - "integrity": "sha512-K7PxcJSsZ3ExdVsa6HP0l9f2kzsEeIfBn1bTBYsaacKmLeb1eUom+egSf5zr6cNmuyhPvKv0W7SbqYNC9MWTXg==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, + "node_modules/xhr-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" } }, - "@aws-sdk/signature-v4": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.200.0.tgz", - "integrity": "sha512-2xMRWwfHTIthwV97/ubWFnXwzh4lMEXcAzPTpuqGljAaG5mtExUTkAQqoNuJqt4wLconkN6QBbhN5fREtkUlRQ==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/is-array-buffer": "3.188.0", - "@aws-sdk/types": "3.200.0", - "@aws-sdk/util-hex-encoding": "3.188.0", - "@aws-sdk/util-middleware": "3.200.0", - "@aws-sdk/util-uri-escape": "3.188.0", - "tslib": "^2.3.1" - }, + "node_modules/xhr-request-promise": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", + "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "xhr-request": "^1.1.0" } }, - "@aws-sdk/smithy-client": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.200.0.tgz", - "integrity": "sha512-3tZHcvTHADz9H7su9w/fOJavOOAsC5olYfVVgeqteaHaSojFOaNm8fD4KvluSAIDpHyHZPVPLZIHwcEwuc7j9A==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/middleware-stack": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, + "node_modules/xhr2-cookies": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", + "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "cookiejar": "^2.1.1" } }, - "@aws-sdk/types": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.200.0.tgz", - "integrity": "sha512-4BfspYfvSwscstd5kUPAABu2rs6OfPZLKKq17frsNt6k3ax2WeHBsp3KIaOmqr0WDQnEBPjJginTB4uVsiSkdA==", - "dev": true, - "optional": true + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true }, - "@aws-sdk/url-parser": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.200.0.tgz", - "integrity": "sha512-scoAdYsBRBcg4gNKcwVUZrQ4C/ewYWo2JLRjWcaptcGfcdCWcl6905iTzcE/n1OhmaqWJsmUL6YL5ERr/4x8lA==", + "node_modules/xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", "dev": true, - "optional": true, - "requires": { - "@aws-sdk/querystring-parser": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" } }, - "@aws-sdk/util-base64-browser": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.188.0.tgz", - "integrity": "sha512-qlH+5NZBLiyKziL335BEPedYxX6j+p7KFRWXvDQox9S+s+gLCayednpK+fteOhBenCcR9fUZOVuAPScy1I8qCg==", + "node_modules/xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==", "dev": true, - "optional": true, - "requires": { - "tslib": "^2.3.1" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "engines": { + "node": ">=4.0" } }, - "@aws-sdk/util-base64-node": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.188.0.tgz", - "integrity": "sha512-r1dccRsRjKq+OhVRUfqFiW3sGgZBjHbMeHLbrAs9jrOjU2PTQ8PSzAXLvX/9lmp7YjmX17Qvlsg0NCr1tbB9OA==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/util-buffer-from": "3.188.0", - "tslib": "^2.3.1" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "node_modules/xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==", + "engines": { + "node": ">=0.4.0" } }, - "@aws-sdk/util-body-length-browser": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.188.0.tgz", - "integrity": "sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg==", - "dev": true, - "optional": true, - "requires": { - "tslib": "^2.3.1" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "node_modules/xmlhttprequest-ssl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", + "engines": { + "node": ">=0.4.0" } }, - "@aws-sdk/util-body-length-node": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.188.0.tgz", - "integrity": "sha512-XwqP3vxk60MKp4YDdvDeCD6BPOiG2e+/Ou4AofZOy5/toB6NKz2pFNibQIUg2+jc7mPMnGnvOW3MQEgSJ+gu/Q==", - "dev": true, - "optional": true, - "requires": { - "tslib": "^2.3.1" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "node_modules/xregexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", + "integrity": "sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA==", + "engines": { + "node": "*" } }, - "@aws-sdk/util-buffer-from": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.188.0.tgz", - "integrity": "sha512-NX1WXZ8TH20IZb4jPFT2CnLKSqZWddGxtfiWxD9M47YOtq/SSQeR82fhqqVjJn4P8w2F5E28f+Du4ntg/sGcxA==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/is-array-buffer": "3.188.0", - "tslib": "^2.3.1" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "engines": { + "node": ">=0.10.32" } }, - "@aws-sdk/util-config-provider": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.188.0.tgz", - "integrity": "sha512-LBA7tLbi7v4uvbOJhSnjJrxbcRifKK/1ZVK94JTV2MNSCCyNkFotyEI5UWDl10YKriTIUyf7o5cakpiDZ3O4xg==", + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, - "optional": true, - "requires": { - "tslib": "^2.3.1" - }, "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" } }, - "@aws-sdk/util-defaults-mode-browser": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.200.0.tgz", - "integrity": "sha512-WDFXifeo617AjCLd6ltddPDNvC7gsbCMQgUdXsuHt+paplyjqHF20jCU1+WXvFaTU5Ia1lN+SGDJb1nB1jawkw==", - "dev": true, - "optional": true, - "requires": { - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/types": "3.200.0", - "bowser": "^2.11.0", - "tslib": "^2.3.1" - }, + "node_modules/yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "camelcase": "^4.1.0" + } + }, + "node_modules/yargs-parser/node_modules/camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", + "engines": { + "node": ">=4" } }, - "@aws-sdk/util-defaults-mode-node": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.200.0.tgz", - "integrity": "sha512-1S/Y/KzKnK/aCqQiPR3JUlXv8NWjHiuuGUB1po3neeWnsld10Q4o2ScWWT/v+XCXFac7ublX6yjrCQ+1YBZNCw==", + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, - "optional": true, - "requires": { - "@aws-sdk/config-resolver": "3.200.0", - "@aws-sdk/credential-provider-imds": "3.200.0", - "@aws-sdk/node-config-provider": "3.200.0", - "@aws-sdk/property-provider": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" - }, "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" } }, - "@aws-sdk/util-endpoints": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.200.0.tgz", - "integrity": "sha512-qBPq/nVziDixIp8dLxL0Q+03JPy9HuJmL0sREHaE4sIHL1/g4gutXCQe5oYS4de82xSe4uNZo9qVBYW96h6m6A==", + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, - "optional": true, - "requires": { - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" + "engines": { + "node": ">=10" }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@aws-sdk/util-hex-encoding": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.188.0.tgz", - "integrity": "sha512-QyWovTtjQ2RYxqVM+STPh65owSqzuXURnfoof778spyX4iQ4z46wOge1YV2ZtwS8w5LWd9eeVvDrLu5POPYOnA==", + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, - "optional": true, - "requires": { - "tslib": "^2.3.1" + "engines": { + "node": ">=10" }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@aws-sdk/util-locate-window": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.188.0.tgz", - "integrity": "sha512-SxobBVLZkkLSawTCfeQnhVX3Azm9O+C2dngZVe1+BqtF8+retUbVTs7OfYeWBlawVkULKF2e781lTzEHBBjCzw==", + "node_modules/yargs/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, - "optional": true, - "requires": { - "tslib": "^2.3.1" - }, "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" } }, - "@aws-sdk/util-middleware": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.200.0.tgz", - "integrity": "sha512-yMC4pg9z31AxnvC9f2M+D7L1KCh6NgykPsNqQQxTz6fFIt/nXNc10eqYaVCJCn419bcSgQhtVDJ2RAudrCCabg==", + "node_modules/yargs/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, - "optional": true, - "requires": { - "tslib": "^2.3.1" - }, "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" } }, - "@aws-sdk/util-uri-escape": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.188.0.tgz", - "integrity": "sha512-4Y6AYZMT483Tiuq8dxz5WHIiPNdSFPGrl6tRTo2Oi2FcwypwmFhqgEGcqxeXDUJktvaCBxeA08DLr/AemVhPCg==", + "node_modules/yargs/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, - "optional": true, - "requires": { - "tslib": "^2.3.1" - }, "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } }, - "@aws-sdk/util-user-agent-browser": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.200.0.tgz", - "integrity": "sha512-985Qtcw813q3UanTakl17OJzdVRcw6p1lIl1Xww1CmuA9sW6X8+q6oQavnmXtACMd059sTUR/f+V4Yloya2Pmg==", + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, - "optional": true, - "requires": { - "@aws-sdk/types": "3.200.0", - "bowser": "^2.11.0", - "tslib": "^2.3.1" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "engines": { + "node": ">=6" } }, - "@aws-sdk/util-user-agent-node": { - "version": "3.200.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.200.0.tgz", - "integrity": "sha512-3dgMp31enW37VMg7GZDq5xhohEMo8mocwafQ1pKND/NDEjha9df3nk6Oy4F5Y2pG8GPdFvHnsTqJ6FJKwwYtxA==", + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "optional": true, - "requires": { - "@aws-sdk/node-config-provider": "3.200.0", - "@aws-sdk/types": "3.200.0", - "tslib": "^2.3.1" + "engines": { + "node": ">=10" }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@aws-sdk/util-utf8-browser": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.188.0.tgz", - "integrity": "sha512-jt627x0+jE+Ydr9NwkFstg3cUvgWh56qdaqAMDsqgRlKD21md/6G226z/Qxl7lb1VEW2LlmCx43ai/37Qwcj2Q==", + "node_modules/zip-object": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/zip-object/-/zip-object-0.1.0.tgz", + "integrity": "sha512-eujiZK9Z3F/WuswEIWqlaNUwUj67oRw4Op5a1VeKw4n9XBkV7EdxtgblroWBYvLmD7XqZ1cjqsbmE3jU43prTA==" + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dev": true, - "optional": true, "requires": { - "tslib": "^2.3.1" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true, - "optional": true - } + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, - "@aws-sdk/util-utf8-node": { - "version": "3.199.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.199.0.tgz", - "integrity": "sha512-Kk3qCdGbe5k0PUE8EBgMsRxNstvDCoWStYWjNwsHWuc/hJitSf44PColzXw6xxHqH1sY+6LcgIaMwJZ5C4bB6w==", + "@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dev": true, - "optional": true, "requires": { - "@aws-sdk/util-buffer-from": "3.188.0", - "tslib": "^2.3.1" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" }, "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "optional": true + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, "@babel/compat-data": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.0.tgz", - "integrity": "sha512-Gt9jszFJYq7qzXVK4slhc6NzJXnOVmRECWcVjF/T23rNXD9NtWQ0W3qxdg+p9wWIB+VQw3GYV/U2Ha9bRTfs4w==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", "dev": true }, "@babel/core": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", - "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.6", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helpers": "^7.19.4", - "@babel/parser": "^7.19.6", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.6", - "@babel/types": "^7.19.4", + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.17.tgz", + "integrity": "sha512-2EENLmhpwplDux5PSsZnSbnSkB3tZ6QTksgO25xwEL7pIDcNOMhF5v/s6RzwjMZzZzw9Ofc30gHv5ChCC8pifQ==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.22.17", + "@babel/helpers": "^7.22.15", + "@babel/parser": "^7.22.16", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.22.17", + "@babel/types": "^7.22.17", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" + "json5": "^2.2.3", + "semver": "^6.3.1" }, "dependencies": { "debug": { @@ -23579,168 +22146,154 @@ } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } }, "@babel/generator": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.0.tgz", - "integrity": "sha512-GUPcXxWibClgmYJuIwC2Bc2Lg+8b9VjaJ+HlNdACEVt+Wlr1eoU1OPZjZRm7Hzl0gaTsUZNQfeihvZJhG7oc3w==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz", + "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", "dev": true, "requires": { - "@babel/types": "^7.20.0", + "@babel/types": "^7.22.15", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } } }, "@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dev": true, "requires": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } }, "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", "dev": true }, "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", "dev": true, "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" } }, "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.15" } }, "@babel/helper-module-transforms": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", - "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.17.tgz", + "integrity": "sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.19.4", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.6", - "@babel/types": "^7.19.4" + "@babel/helper-environment-visitor": "^7.22.5", + "@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.15" } }, "@babel/helper-plugin-utils": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", - "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true }, "@babel/helper-simple-access": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", - "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, "requires": { - "@babel/types": "^7.19.4" + "@babel/types": "^7.22.5" } }, "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "dev": true }, "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz", + "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==", "dev": true }, "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", "dev": true }, "@babel/helpers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.0.tgz", - "integrity": "sha512-aGMjYraN0zosCEthoGLdqot1oRsmxVTQRHadsUPz5QM44Zej2PYRz7XiDE7GqnkZnNtLbOuxqoZw42vkU7+XEQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz", + "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==", "dev": true, "requires": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.0", - "@babel/types": "^7.20.0" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.22.15", + "@babel/types": "^7.22.15" } }, "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", + "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "dependencies": { @@ -23797,9 +22350,9 @@ } }, "@babel/parser": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.0.tgz", - "integrity": "sha512-G9VgAhEaICnz8iiJeGJQyVl6J2nTjbW0xeisva0PK6XcKsga7BIaqm4ZF8Rg1Wbaqmy6znspNqhPaPkyukujzg==", + "version": "7.22.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", + "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", "dev": true }, "@babel/plugin-syntax-object-rest-spread": { @@ -23812,30 +22365,30 @@ } }, "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" } }, "@babel/traverse": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.0.tgz", - "integrity": "sha512-5+cAXQNARgjRUK0JWu2UBwja4JLSO/rBMPJzpsKb+oBF5xlUuCfljQepS4XypBQoiigL0VQjTZy6WiONtUdScQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.0", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.0", - "@babel/types": "^7.20.0", + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.17.tgz", + "integrity": "sha512-xK4Uwm0JnAMvxYZxOVecss85WxTEIbTa7bnGyf/+EgCL5Zt3U7htUpEOWv9detPlamGKuRzCqw74xVglDWpPdg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.16", + "@babel/types": "^7.22.17", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -23852,13 +22405,13 @@ } }, "@babel/types": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.0.tgz", - "integrity": "sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg==", + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.17.tgz", + "integrity": "sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==", "dev": true, "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.15", "to-fast-properties": "^2.0.0" } }, @@ -23981,402 +22534,394 @@ } }, "@ethersproject/abi": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.7.tgz", - "integrity": "sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", "requires": { - "@ethersproject/address": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/hash": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/strings": "^5.0.4" + "@ethersproject/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" } }, "@ethersproject/abstract-provider": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.0.5.tgz", - "integrity": "sha512-i/CjElAkzV7vQBAeoz+IpjGfcFYEP9eD7j3fzZ0fzTq03DO7PPnR+xkEZ1IoDXGwDS+55aLM1xvLDwB/Lx6IOQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", "requires": { - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/networks": "^5.0.3", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/transactions": "^5.0.5", - "@ethersproject/web": "^5.0.6" + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" } }, "@ethersproject/abstract-signer": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.0.7.tgz", - "integrity": "sha512-8W8gy/QutEL60EoMEpvxZ8MFAEWs/JvH5nmZ6xeLXoZvmBCasGmxqHdYjo2cxg0nevkPkq9SeenSsBBZSCx+SQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", "requires": { - "@ethersproject/abstract-provider": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3" + "@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" } }, "@ethersproject/address": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.0.5.tgz", - "integrity": "sha512-DpkQ6rwk9jTefrRsJzEm6nhRiJd9pvhn1xN0rw5N/jswXG5r7BLk/GVA0mMAVWAsYfvi2xSc5L41FMox43RYEA==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", "requires": { - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/rlp": "^5.0.3", - "bn.js": "^4.4.0" + "@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" } }, "@ethersproject/base64": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.0.4.tgz", - "integrity": "sha512-4KRykQ7BQMeOXfvio1YITwHjxwBzh92UoXIdzxDE1p53CK28bbHPdsPNYo0wl0El7lJAMpT2SOdL0hhbWRnyIA==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", "requires": { - "@ethersproject/bytes": "^5.0.4" + "@ethersproject/bytes": "^5.7.0" } }, "@ethersproject/basex": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.0.4.tgz", - "integrity": "sha512-ixIr/kKiAoSzOnSc777AGIOAhKai5Ivqr4HO/Gz+YG+xkfv6kqD6AW4ga9vM20Wwb0QBhh3LoRWTu4V1K+x9Ew==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", + "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/properties": "^5.0.3" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/properties": "^5.7.0" } }, "@ethersproject/bignumber": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.8.tgz", - "integrity": "sha512-KXFVAFKS1jdTXYN8BE5Oj+ZfPMh28iRdFeNGBVT6cUFdtiPVqeXqc0ggvBqA3A1VoFFGgM7oAeaagA393aORHA==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "bn.js": "^4.4.0" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" + }, + "dependencies": { + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + } } }, "@ethersproject/bytes": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz", - "integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", "requires": { - "@ethersproject/logger": "^5.0.5" + "@ethersproject/logger": "^5.7.0" } }, "@ethersproject/constants": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.0.5.tgz", - "integrity": "sha512-foaQVmxp2+ik9FrLUCtVrLZCj4M3Ibgkqvh+Xw/vFRSerkjVSYePApaVE5essxhoSlF1U9oXfWY09QI2AXtgKA==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", "requires": { - "@ethersproject/bignumber": "^5.0.7" + "@ethersproject/bignumber": "^5.7.0" } }, "@ethersproject/contracts": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.0.5.tgz", - "integrity": "sha512-tFI255lFbmbqMkgnuyhDWHl3yWqttPlReplYuVvDCT/SuvBjLR4ad2uipBlh1fh5X1ipK9ettAoV4S0HKim4Kw==", - "requires": { - "@ethersproject/abi": "^5.0.5", - "@ethersproject/abstract-provider": "^5.0.4", - "@ethersproject/abstract-signer": "^5.0.4", - "@ethersproject/address": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3" + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", + "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", + "requires": { + "@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" } }, "@ethersproject/hash": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.0.6.tgz", - "integrity": "sha512-Gvh57v6BWhwnud6l7tMfQm32PRQ2DYx2WaAAQmAxAfYvmzUkpQCBstnGeNMXIL8/2wdkvcB2u+WZRWaZtsFuUQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", "requires": { - "@ethersproject/abstract-signer": "^5.0.6", - "@ethersproject/address": "^5.0.5", - "@ethersproject/bignumber": "^5.0.8", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.4", - "@ethersproject/strings": "^5.0.4" + "@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" } }, "@ethersproject/hdnode": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.0.5.tgz", - "integrity": "sha512-Ho4HZaK+KijE5adayvjAGusWMnT0mgwGa5hGMBofBOgX9nqiKf6Wxx68SXBGI1/L3rmKo6mlAjxUd8gefs0teQ==", - "requires": { - "@ethersproject/abstract-signer": "^5.0.4", - "@ethersproject/basex": "^5.0.3", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/pbkdf2": "^5.0.3", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/sha2": "^5.0.3", - "@ethersproject/signing-key": "^5.0.4", - "@ethersproject/strings": "^5.0.4", - "@ethersproject/transactions": "^5.0.5", - "@ethersproject/wordlists": "^5.0.4" + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", + "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", + "requires": { + "@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" } }, "@ethersproject/json-wallets": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.0.7.tgz", - "integrity": "sha512-dgOn9JtGgjT28mDXs4LYY2rT4CzS6bG/rxoYuPq3TLHIf6nmvBcr33Fee6RrM/y8UAx4gyIkf6wb2cXsOctvQQ==", - "requires": { - "@ethersproject/abstract-signer": "^5.0.4", - "@ethersproject/address": "^5.0.4", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/hdnode": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/pbkdf2": "^5.0.3", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/random": "^5.0.3", - "@ethersproject/strings": "^5.0.4", - "@ethersproject/transactions": "^5.0.5", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", + "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", + "requires": { + "@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" } }, "@ethersproject/keccak256": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.0.4.tgz", - "integrity": "sha512-GNpiOUm9PGUxFNqOxYKDQBM0u68bG9XC9iOulEQ8I0tOx/4qUpgVzvgXL6ugxr0RY554Gz/NQsVqknqPzUcxpQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", "requires": { - "@ethersproject/bytes": "^5.0.4", - "js-sha3": "0.5.7" + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" } }, "@ethersproject/logger": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz", - "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==" + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==" }, "@ethersproject/networks": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.0.4.tgz", - "integrity": "sha512-/wHDTRms5mpJ09BoDrbNdFWINzONe05wZRgohCXvEv39rrH/Gd/yAnct8wC0RsW3tmFOgjgQxuBvypIxuUynTw==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", "requires": { - "@ethersproject/logger": "^5.0.5" + "@ethersproject/logger": "^5.7.0" } }, "@ethersproject/pbkdf2": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.0.4.tgz", - "integrity": "sha512-9jVBjHXQKfr9+3bkCg01a8Cd1H9e+7Kw3ZMIvAxD0lZtuzrXsJxm1hVwY9KA+PRUvgS/9tTP4viXQYwLAax7zg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", + "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/sha2": "^5.0.3" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/sha2": "^5.7.0" } }, "@ethersproject/properties": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.4.tgz", - "integrity": "sha512-UdyX3GqBxFt15B0uSESdDNmhvEbK3ACdDXl2soshoPcneXuTswHDeA0LoPlnaZzhbgk4p6jqb4GMms5C26Qu6A==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", "requires": { - "@ethersproject/logger": "^5.0.5" + "@ethersproject/logger": "^5.7.0" } }, "@ethersproject/providers": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.0.13.tgz", - "integrity": "sha512-5jsuk1FwXxmoQApGs8LSQyS43KP01pHA+6cQ1OPov5pT5Pcqe6ffh6UD1//BZ9Vjf+5e9AQqIk8w7FkGyROuCA==", - "requires": { - "@ethersproject/abstract-provider": "^5.0.4", - "@ethersproject/abstract-signer": "^5.0.4", - "@ethersproject/address": "^5.0.4", - "@ethersproject/basex": "^5.0.3", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/hash": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/networks": "^5.0.3", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/random": "^5.0.3", - "@ethersproject/rlp": "^5.0.3", - "@ethersproject/sha2": "^5.0.3", - "@ethersproject/strings": "^5.0.4", - "@ethersproject/transactions": "^5.0.5", - "@ethersproject/web": "^5.0.6", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", + "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", + "requires": { + "@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.0", + "@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.0", "bech32": "1.1.4", - "ws": "7.2.3" + "ws": "7.4.6" } }, "@ethersproject/random": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.0.4.tgz", - "integrity": "sha512-AIZJhqs6Ba4/+U3lOjt3QZbP6b/kuuGLJUYFUonAgWmkTHwqsCwYnFvnHKQSUuHbXHvErp7WFXFlztx+yMn3kQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", + "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, "@ethersproject/rlp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.0.4.tgz", - "integrity": "sha512-5qrrZad7VTjofxSsm7Zg/7Dr4ZOln4S2CqiDdOuTv6MBKnXj0CiBojXyuDy52M8O3wxH0CyE924hXWTDV1PQWQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, "@ethersproject/sha2": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.0.4.tgz", - "integrity": "sha512-0yFhf1mspxAfWdXXoPtK94adUeu1R7/FzAa+DfEiZTc76sz/vHXf0LSIazoR3znYKFny6haBxME+usbvvEcF3A==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", + "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "hash.js": "1.1.3" - }, - "dependencies": { - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" - } - } + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "hash.js": "1.1.7" } }, "@ethersproject/signing-key": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.0.5.tgz", - "integrity": "sha512-Z1wY7JC1HVO4CvQWY2TyTTuAr8xK3bJijZw1a9G92JEmKdv1j255R/0YLBBcFTl2J65LUjtXynNJ2GbArPGi5g==", - "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "elliptic": "6.5.3" + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", + "requires": { + "@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" }, "dependencies": { - "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" } } }, "@ethersproject/solidity": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.0.5.tgz", - "integrity": "sha512-DMFQ0ouXmNVoKWbGEUFGi8Urli4SJip9jXafQyFHWPRr5oJUqDVkNfwcyC37k+mhBG93k7qrYXCH2xJnGEOxHg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", + "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", "requires": { - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/sha2": "^5.0.3", - "@ethersproject/strings": "^5.0.4" + "@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" } }, "@ethersproject/strings": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.0.5.tgz", - "integrity": "sha512-JED6WaIV00xM/gvj8vSnd+0VWtDYdidTmavFRCTQakqfz+4tDo6Jz5LHgG+dd45h7ah7ykCHW0C7ZXWEDROCXQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/logger": "^5.0.5" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, "@ethersproject/transactions": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.0.6.tgz", - "integrity": "sha512-htsFhOD+NMBxx676A8ehSuwVV49iqpSB+CkjPZ02tpNew0K6p8g0CZ46Z1ZP946gIHAU80xQ0NACHYrjIUaCFA==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", "requires": { - "@ethersproject/address": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/rlp": "^5.0.3", - "@ethersproject/signing-key": "^5.0.4" + "@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" } }, "@ethersproject/units": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.0.6.tgz", - "integrity": "sha512-tsJuy4mipppdmooukRfhXt8fGx9nxvfvG6Xdy0RDm7LzHsjghjwQ69m2bCpId6SDSR1Uq1cQ9irPiUBSyWolUA==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", + "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", "requires": { - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/logger": "^5.0.5" + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, "@ethersproject/wallet": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.0.6.tgz", - "integrity": "sha512-dRqx3+Degc5pvjaeeTHuk2EuTRM3b6ce/TiV0HRZhRXYnKyyjg0iYXEZo/b6p3rnV+Xhwxkc0+I/ISPkNpictA==", - "requires": { - "@ethersproject/abstract-provider": "^5.0.4", - "@ethersproject/abstract-signer": "^5.0.4", - "@ethersproject/address": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/hash": "^5.0.4", - "@ethersproject/hdnode": "^5.0.4", - "@ethersproject/json-wallets": "^5.0.6", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/random": "^5.0.3", - "@ethersproject/signing-key": "^5.0.4", - "@ethersproject/transactions": "^5.0.5", - "@ethersproject/wordlists": "^5.0.4" + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", + "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", + "requires": { + "@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" } }, "@ethersproject/web": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.0.9.tgz", - "integrity": "sha512-//QNlv1MSkOII1hv3+HQwWoiVFS+BMVGI0KYeUww4cyrEktnx1QIez5bTSab9s9fWTFaWKNmQNBwMbxAqPuYDw==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", "requires": { - "@ethersproject/base64": "^5.0.3", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/strings": "^5.0.4" + "@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" } }, "@ethersproject/wordlists": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.0.5.tgz", - "integrity": "sha512-XA3ycFltVrCTQt04w5nHu3Xq5Z6HjqWsXaAYQHFdqtugyUsIumaO9S5MOwFFuUYTNkZUoT3jCRa/OBS+K4tLfA==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", + "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", "requires": { - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/hash": "^5.0.4", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/strings": "^5.0.4" + "@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" } }, "@firebase/app-types": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.8.1.tgz", - "integrity": "sha512-p75Ow3QhB82kpMzmOntv866wH9eZ3b4+QbUY+8/DA5Zzdf1c8Nsk8B7kbFpzJt4wwHMdy5LTF5YUnoTc1JiWkw==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.0.tgz", + "integrity": "sha512-AeweANOIo0Mb8GiYm3xhTEBVCmPwTYAu9Hcd2qSkLuga/6+j9b1Jskl5bpiSQWy9eJ/j5pavxj6eYogmnuzm+Q==", "peer": true }, "@firebase/auth-interop-types": { @@ -24528,9 +23073,9 @@ }, "dependencies": { "@types/node": { - "version": "18.11.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.8.tgz", - "integrity": "sha512-uGwPWlE0Hj972KkHtCDVwZ8O39GmyjfMane1Z3GUBGGnkZ2USDq7SxLpVIiIHpweY9DS0QTDH0Nw7RNBsAAZ5A==", + "version": "20.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.0.tgz", + "integrity": "sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg==", "optional": true } } @@ -24985,19 +23530,20 @@ } }, "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" } }, "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "dev": true }, "@jridgewell/set-array": { @@ -25007,25 +23553,25 @@ "dev": true }, "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", "dev": true, "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "@mapbox/node-pre-gyp": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", - "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", "requires": { "detect-libc": "^2.0.0", "https-proxy-agent": "^5.0.0", @@ -25047,9 +23593,9 @@ } }, "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "requires": { "lru-cache": "^6.0.0" } @@ -25061,6 +23607,15 @@ } } }, + "@mongodb-js/saslprep": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.0.tgz", + "integrity": "sha512-Xfijy7HvfzzqiOAhAepF4SGN5e9leLkMvg/OPOF97XemjfVCYN/oWa75wnkc6mltMSTwY+XlbhWgUOJmkFspSw==", + "dev": true, + "requires": { + "sparse-bitfield": "^3.0.3" + } + }, "@phc/format": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@phc/format/-/format-1.0.0.tgz", @@ -25193,9 +23748,9 @@ "dev": true }, "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "dev": true }, "@types/agenda": { @@ -25209,13 +23764,13 @@ } }, "@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", + "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", "dev": true, "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" @@ -25241,12 +23796,12 @@ } }, "@types/babel__traverse": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz", - "integrity": "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", + "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", "dev": true, "requires": { - "@babel/types": "^7.3.0" + "@babel/types": "^7.20.7" } }, "@types/bn.js": { @@ -25276,25 +23831,25 @@ } }, "@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "requires": { "@types/http-cache-semantics": "*", - "@types/keyv": "*", + "@types/keyv": "^3.1.4", "@types/node": "*", - "@types/responselike": "*" + "@types/responselike": "^1.0.0" } }, "@types/chai": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", - "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==" + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==" }, "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "version": "3.4.36", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", + "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", "dev": true, "requires": { "@types/node": "*" @@ -25311,9 +23866,12 @@ "integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==" }, "@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" + "version": "2.8.14", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.14.tgz", + "integrity": "sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ==", + "requires": { + "@types/node": "*" + } }, "@types/eslint-visitor-keys": { "version": "1.0.0", @@ -25322,26 +23880,27 @@ "dev": true }, "@types/express": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", - "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", "dev": true, "requires": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", + "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "*" } }, "@types/express-serve-static-core": { - "version": "4.17.31", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", - "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", + "version": "4.17.36", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.36.tgz", + "integrity": "sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q==", "dev": true, "requires": { "@types/node": "*", "@types/qs": "*", - "@types/range-parser": "*" + "@types/range-parser": "*", + "@types/send": "*" } }, "@types/fs-extra": { @@ -25358,6 +23917,12 @@ "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" }, + "@types/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==", + "dev": true + }, "@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -25390,23 +23955,23 @@ "dev": true }, "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", "dev": true }, "@types/keyv": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-4.2.0.tgz", - "integrity": "sha512-xoBtGl5R9jeKUhc8ZqeYaRDx04qqJ10yhhXYGmJ4Jr8qKpvMsDQQrNUvF/wUJ4klOtmJeJM+p2Xo3zp9uaC3tw==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "requires": { - "keyv": "*" + "@types/node": "*" } }, "@types/lodash": { - "version": "4.14.187", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.187.tgz", - "integrity": "sha512-MrO/xLXCaUgZy3y96C/iOsaIqZSeupyTImKClHunL5GrmaiII2VwvWmLBu2hwa0Kp0sV19CsyjtrTc/Fx8rg/A==", + "version": "4.14.198", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz", + "integrity": "sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg==", "dev": true }, "@types/long": { @@ -25415,9 +23980,9 @@ "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, "@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, "@types/minimatch": { @@ -25472,9 +24037,9 @@ } }, "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "version": "6.9.8", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz", + "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==", "dev": true }, "@types/range-parser": { @@ -25499,12 +24064,23 @@ "@types/node": "*" } }, + "@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, "@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", + "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", "dev": true, "requires": { + "@types/http-errors": "*", "@types/mime": "*", "@types/node": "*" } @@ -25528,14 +24104,19 @@ "dev": true }, "@types/superagent": { - "version": "3.8.7", - "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-3.8.7.tgz", - "integrity": "sha512-9KhCkyXv268A2nZ1Wvu7rQWM+BmdYUVkycFeNnYrUL5Zwu7o8wPQ3wBfW59dDP+wuoxw0ww8YKgTNv8j/cgscA==", + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.13.tgz", + "integrity": "sha512-YIGelp3ZyMiH0/A09PMAORO0EBGlF5xIKfDpK74wdYvWUs2o96b5CItJcWPdH409b7SAXIIG6p8NdU/4U2Maww==", "requires": { "@types/cookiejar": "*", "@types/node": "*" } }, + "@types/triple-beam": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.3.tgz", + "integrity": "sha512-6tOUG+nVHn0cJbVp25JFayS5UE6+xlbcNF9Lo9mU7U0zk3zeUShZied4YEQZjy1JBF043FSkdXw8YkUJuVtB5g==" + }, "@types/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -25676,6 +24257,7 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "peer": true, "requires": {} }, "acorn-walk": { @@ -25901,6 +24483,15 @@ "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", "dev": true }, + "array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "requires": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + } + }, "array-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", @@ -25929,36 +24520,55 @@ "dev": true }, "array.prototype.map": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.5.tgz", - "integrity": "sha512-gfaKntvwqYIuC7mLLyv2wzZIJqrRhn5PZ9EfFejSx6a78sV7iDsGpG9P+3oUPtm1Rerqm6nrKS4FYuTIvWfo3g==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.6.tgz", + "integrity": "sha512-nK1psgF2cXqP3wSyCSq0Hc7zwNq3sfljQqaG27r/7a7ooNUnn5nGq6yYWyks9jMO5EoFQ0ax80hSg6oXSRNXaw==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-array-method-boxes-properly": "^1.0.0", "is-string": "^1.0.7" } }, "array.prototype.reduce": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz", - "integrity": "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz", + "integrity": "sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-array-method-boxes-properly": "^1.0.0", "is-string": "^1.0.7" } }, + "arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "requires": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + } + }, "arrify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "optional": true }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, "asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", @@ -25979,9 +24589,9 @@ } }, "assert-options": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/assert-options/-/assert-options-0.7.0.tgz", - "integrity": "sha512-7q9uNH/Dh8gFgpIIb9ja8PJEWA5AQy3xnBC8jtKs8K/gNVCr1K6kIvlm59HUyYgvM7oEDoLzGgPcGd9FqhtXEQ==" + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/assert-options/-/assert-options-0.8.0.tgz", + "integrity": "sha512-qSELrEaEz4sGwTs4Qh+swQkjiHAysC4rot21+jzXU86dJzNG+FDqBzyS3ohSoTRf4ZLA3FSwxQdiuNl5NXUtvA==" }, "assert-plus": { "version": "1.0.0", @@ -26013,9 +24623,9 @@ }, "dependencies": { "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" } } }, @@ -26077,30 +24687,18 @@ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" }, "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" }, "axios": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.0.tgz", - "integrity": "sha512-zT7wZyNYu3N5Bu0wuZ6QccIf93Qk1eV8LOewxgjOZFd2DenOs98cJ7+Y6703d0wkaXGY6/nZd4EweJaHz9uzQw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", + "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", "requires": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" - }, - "dependencies": { - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - } } }, "babel-jest": { @@ -26305,9 +24903,9 @@ } }, "bignumber.js": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz", - "integrity": "sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==" + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==" }, "binary-extensions": { "version": "2.2.0", @@ -26341,9 +24939,9 @@ }, "dependencies": { "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -26393,12 +24991,12 @@ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "requires": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -26406,7 +25004,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -26443,13 +25041,6 @@ "hoek": "6.x.x" } }, - "bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", - "dev": true, - "optional": true - }, "boxen": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", @@ -26664,15 +25255,15 @@ } }, "browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.11" } }, "bs-logger": { @@ -26712,25 +25303,10 @@ } }, "bson": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.0.tgz", - "integrity": "sha512-VrlEE4vuiO1WTpfof4VmaVolCVYkYTgB9iWgYNOrVlnifpME/06fhFRmONgBhClD5pFC1t9ZWqFUQEQAzY43bA==", - "dev": true, - "requires": { - "buffer": "^5.6.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - } - } + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.0.0.tgz", + "integrity": "sha512-FoWvdELfF2wQaUo8S/a1Rh2BDwJEUancDDnzdTpYymJTZjmvRpLWoqRPelKn+XSeh5D4YddWDG66cLtEhGGvcg==", + "dev": true }, "buffer": { "version": "4.9.2", @@ -26823,9 +25399,9 @@ "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==" }, "cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", "requires": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -26905,9 +25481,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001429", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001429.tgz", - "integrity": "sha512-511ThLu1hF+5RRRt0zYCf2U2yRr9GPF6m5y90SBCWsvSoYoW7yAGlv/elyPaNfvGCkp6kj/KFZWU0BMA69Prsg==", + "version": "1.0.30001534", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001534.tgz", + "integrity": "sha512-vlPVrhsCS7XaSh2VvWluIQEzVhefrUQcEsQWSS5A5V+dM07uv1qHeQzAOTGIMy9i3e9bH15+muvI/UHojVgS/Q==", "dev": true }, "capture-exit": { @@ -26930,9 +25506,9 @@ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" }, "cborg": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-1.9.5.tgz", - "integrity": "sha512-fLBv8wmqtlXqy1Yu+pHzevAIkW6k2K0ZtMujNzWphLsA34vzzg9BHn+5GmZqOJkSA9V7EMKsWrf6K976c1QMjQ==" + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-1.10.2.tgz", + "integrity": "sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==" }, "celebrate": { "version": "9.1.0", @@ -26944,13 +25520,13 @@ } }, "chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz", + "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==", "requires": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", - "deep-eql": "^3.0.1", + "deep-eql": "^4.1.2", "get-func-name": "^2.0.0", "loupe": "^2.3.1", "pathval": "^1.1.1", @@ -26958,17 +25534,28 @@ } }, "chai-http": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/chai-http/-/chai-http-4.3.0.tgz", - "integrity": "sha512-zFTxlN7HLMv+7+SPXZdkd5wUlK+KxH6Q7bIEMiEx0FK3zuuMqL7cwICAQ0V1+yYRozBburYuxN1qZstgHpFZQg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/chai-http/-/chai-http-4.4.0.tgz", + "integrity": "sha512-uswN3rZpawlRaa5NiDUHcDZ3v2dw5QgLyAwnQ2tnVNuP7CwIsOFuYJ0xR1WiR7ymD4roBnJIzOUep7w9jQMFJA==", "requires": { "@types/chai": "4", - "@types/superagent": "^3.8.3", - "cookiejar": "^2.1.1", + "@types/superagent": "4.1.13", + "charset": "^1.0.1", + "cookiejar": "^2.1.4", "is-ip": "^2.0.0", "methods": "^1.1.2", - "qs": "^6.5.1", - "superagent": "^3.7.0" + "qs": "^6.11.2", + "superagent": "^8.0.9" + }, + "dependencies": { + "qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "requires": { + "side-channel": "^1.0.4" + } + } } }, "chalk": { @@ -26984,7 +25571,13 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "dev": true, + "peer": true + }, + "charset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/charset/-/charset-1.0.1.tgz", + "integrity": "sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==" }, "check-error": { "version": "1.0.2", @@ -27008,9 +25601,9 @@ }, "dependencies": { "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -27036,9 +25629,9 @@ } }, "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "optional": true }, @@ -27217,6 +25810,7 @@ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", "dev": true, + "peer": true, "requires": { "restore-cursor": "^2.0.0" } @@ -27244,7 +25838,8 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true + "dev": true, + "peer": true }, "cliui": { "version": "5.0.0", @@ -27473,9 +26068,9 @@ } }, "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" }, "convert-source-map": { "version": "1.9.0", @@ -27494,9 +26089,9 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "cookiejar": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" }, "copy-descriptor": { "version": "0.1.1", @@ -27594,11 +26189,11 @@ } }, "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", "requires": { - "node-fetch": "2.6.7" + "node-fetch": "^2.6.12" } }, "cross-spawn": { @@ -27761,6 +26356,192 @@ } } }, + "dateformat": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha512-5sFRfAAmbHdIts+eKjR9kYJoF0ViCMVX9yqLu5A7S/v+nd077KgCITOMiirmyCBiZpKLDXbBOkYm6tu7rX/TKg==", + "dev": true, + "requires": { + "get-stdin": "^4.0.1", + "meow": "^3.3.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==", + "dev": true + } + } + }, + "debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true + }, "debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", @@ -27800,9 +26581,9 @@ } }, "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==" + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" }, "decompress-response": { "version": "3.3.0", @@ -27813,34 +26594,37 @@ } }, "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", "requires": { "type-detect": "^4.0.0" } }, "deep-equal": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.5.tgz", - "integrity": "sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz", + "integrity": "sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==", "optional": true, "requires": { - "call-bind": "^1.0.0", - "es-get-iterator": "^1.1.1", - "get-intrinsic": "^1.0.1", - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.2", - "is-regex": "^1.1.1", + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.1", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", "isarray": "^2.0.5", - "object-is": "^1.1.4", + "object-is": "^1.1.5", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.3.0", - "side-channel": "^1.0.3", - "which-boxed-primitive": "^1.0.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", "which-collection": "^1.0.1", - "which-typed-array": "^1.1.2" + "which-typed-array": "^1.1.9" }, "dependencies": { "isarray": { @@ -27874,11 +26658,22 @@ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" }, + "define-data-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.0.1.tgz", + "integrity": "sha512-22M+6zEspQHx10bfFQl2ET39IvfuQ7+rZIH7+ard8fCC4hPmkOSy+8JhKxBRLaWUziJ0O63NTYT97LR8zUfPTw==", + "requires": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "requires": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } @@ -27921,10 +26716,9 @@ "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" }, "denque": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", - "dev": true + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", + "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==" }, "depd": { "version": "2.0.0", @@ -27932,9 +26726,9 @@ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" }, "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "requires": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -27951,9 +26745,9 @@ "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==" }, "detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==" }, "detect-newline": { "version": "2.1.0", @@ -27961,6 +26755,15 @@ "integrity": "sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==", "dev": true }, + "dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "dicer": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.1.tgz", @@ -28011,11 +26814,59 @@ } } }, + "docker-modem": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-0.3.7.tgz", + "integrity": "sha512-4Xn4ZVtc/2DEFtxY04lOVeF7yvxwXGVo0sN8FKRBnLhBcwQ78Hb56j+Z5yAXXUhoweVhzGeBeGWahS+af0/mcg==", + "requires": { + "debug": "^2.6.0", + "JSONStream": "0.10.0", + "readable-stream": "~1.0.26-4", + "split-ca": "^1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + } + } + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "peer": true, "requires": { "esutils": "^2.0.2" } @@ -28076,9 +26927,9 @@ }, "dependencies": { "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "optional": true, "requires": { "core-util-is": "~1.0.0", @@ -28159,9 +27010,9 @@ } }, "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "version": "1.4.519", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.519.tgz", + "integrity": "sha512-kqs9oGYL4UFVkLKhqCTgBCYZv+wZ374yABDMqlDda9HvlkQxvSr7kgf4hfWVjMieDbX+1MwPHFBsOGCMIBaFKg==", "dev": true }, "elegant-spinner": { @@ -28226,9 +27077,9 @@ } }, "engine.io": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz", - "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.2.tgz", + "integrity": "sha512-IXsMcGpw/xRfjra46sVZVHiSWo/nJ/3g1337q9KNXtS6YRzbW5yIzTCb9DjhrBe7r3GZQR0I4+nq+4ODk5g/cA==", "requires": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", @@ -28238,8 +27089,8 @@ "cookie": "~0.4.1", "cors": "~2.8.5", "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.2.3" + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0" }, "dependencies": { "cookie": { @@ -28256,17 +27107,45 @@ } }, "ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "requires": {} + } + } + }, + "engine.io-client": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.2.tgz", + "integrity": "sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg==", + "requires": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0", + "xmlhttprequest-ssl": "~2.0.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", "requires": {} } } }, "engine.io-parser": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz", - "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", + "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==" }, "ent": { "version": "2.2.0", @@ -28302,34 +27181,49 @@ } }, "es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", "requires": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", "has": "^1.0.3", "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", + "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" } }, "es-array-method-boxes-properly": { @@ -28338,18 +27232,19 @@ "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" }, "es-get-iterator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", - "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", "requires": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.0", - "has-symbols": "^1.0.1", - "is-arguments": "^1.1.0", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", "is-map": "^2.0.2", "is-set": "^2.0.2", - "is-string": "^1.0.5", - "isarray": "^2.0.5" + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" }, "dependencies": { "isarray": { @@ -28359,6 +27254,16 @@ } } }, + "es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "requires": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + } + }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -28444,6 +27349,7 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", "dev": true, + "peer": true, "requires": { "@babel/code-frame": "^7.0.0", "ajv": "^6.9.1", @@ -28488,6 +27394,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "peer": true, "requires": { "color-convert": "^1.9.0" } @@ -28497,6 +27404,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "peer": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -28508,6 +27416,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "peer": true, "requires": { "color-name": "1.1.3" } @@ -28516,13 +27425,15 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "peer": true }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, + "peer": true, "requires": { "ms": "2.1.2" } @@ -28531,19 +27442,22 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true + "dev": true, + "peer": true }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "peer": true }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "peer": true, "requires": { "has-flag": "^3.0.0" } @@ -28598,6 +27512,7 @@ "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", "dev": true, + "peer": true, "requires": { "acorn": "^6.0.7", "acorn-jsx": "^5.0.0", @@ -28608,7 +27523,8 @@ "version": "6.4.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true + "dev": true, + "peer": true } } }, @@ -28618,10 +27534,11 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, + "peer": true, "requires": { "estraverse": "^5.1.0" }, @@ -28630,7 +27547,8 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true + "dev": true, + "peer": true } } }, @@ -28769,6 +27687,11 @@ "minimalistic-assert": "^1.0.0" } }, + "js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" + }, "node-addon-api": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", @@ -28808,6 +27731,13 @@ "requires": { "idna-uts46-hx": "^2.3.1", "js-sha3": "^0.5.7" + }, + "dependencies": { + "js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" + } } }, "eth-lib": { @@ -28870,13 +27800,6 @@ "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", "requires": { "js-sha3": "^0.8.0" - }, - "dependencies": { - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - } } }, "ethereum-checksum-address": { @@ -28911,9 +27834,9 @@ }, "dependencies": { "keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.3.tgz", + "integrity": "sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ==", "requires": { "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0", @@ -28986,40 +27909,40 @@ } }, "ethers": { - "version": "5.0.18", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.0.18.tgz", - "integrity": "sha512-WCiKGfAt09hBS1HZspu+JTgeunFcUCVRhCXO8X+VadBJGTRlG722XXib79Vz2oyBperz90CcjkBPdNly61Ah4A==", - "requires": { - "@ethersproject/abi": "5.0.7", - "@ethersproject/abstract-provider": "5.0.5", - "@ethersproject/abstract-signer": "5.0.7", - "@ethersproject/address": "5.0.5", - "@ethersproject/base64": "5.0.4", - "@ethersproject/basex": "5.0.4", - "@ethersproject/bignumber": "5.0.8", - "@ethersproject/bytes": "5.0.5", - "@ethersproject/constants": "5.0.5", - "@ethersproject/contracts": "5.0.5", - "@ethersproject/hash": "5.0.6", - "@ethersproject/hdnode": "5.0.5", - "@ethersproject/json-wallets": "5.0.7", - "@ethersproject/keccak256": "5.0.4", - "@ethersproject/logger": "5.0.6", - "@ethersproject/networks": "5.0.4", - "@ethersproject/pbkdf2": "5.0.4", - "@ethersproject/properties": "5.0.4", - "@ethersproject/providers": "5.0.13", - "@ethersproject/random": "5.0.4", - "@ethersproject/rlp": "5.0.4", - "@ethersproject/sha2": "5.0.4", - "@ethersproject/signing-key": "5.0.5", - "@ethersproject/solidity": "5.0.5", - "@ethersproject/strings": "5.0.5", - "@ethersproject/transactions": "5.0.6", - "@ethersproject/units": "5.0.6", - "@ethersproject/wallet": "5.0.6", - "@ethersproject/web": "5.0.9", - "@ethersproject/wordlists": "5.0.5" + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "requires": { + "@ethersproject/abi": "5.7.0", + "@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/contracts": "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/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" } }, "ethjs-unit": { @@ -29313,6 +28236,25 @@ "vary": "~1.1.2" }, "dependencies": { + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + } + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -29325,6 +28267,17 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } } } }, @@ -29394,6 +28347,7 @@ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, + "peer": true, "requires": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -29458,15 +28412,15 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true }, "fast-fifo": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.1.0.tgz", - "integrity": "sha512-Kl29QoNbNvn4nhDsLYjyIAaIqaJB6rBx5p3sL9VjaefJ+eMFBWVZiaoguaoZfzEKr5RhAti0UgM8703akGPJ6g==" + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" }, "fast-json-stable-stringify": { "version": "2.1.0", @@ -29478,22 +28432,17 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, + "fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, "fast-text-encoding": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==", "optional": true }, - "fast-xml-parser": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.11.tgz", - "integrity": "sha512-4aUg3aNRR/WjQAcpceODG1C3x3lFANXRo8+1biqfieHmg9pyMt7qB4lQV/Ta6sJCTbA5vfD8fnA8S54JATiFUA==", - "dev": true, - "optional": true, - "requires": { - "strnum": "^1.0.5" - } - }, "faye-websocket": { "version": "0.11.3", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", @@ -29521,6 +28470,7 @@ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", "dev": true, + "peer": true, "requires": { "escape-string-regexp": "^1.0.5" } @@ -29530,6 +28480,7 @@ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", "dev": true, + "peer": true, "requires": { "flat-cache": "^2.0.1" } @@ -29539,6 +28490,15 @@ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" }, + "filewatcher": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/filewatcher/-/filewatcher-3.0.1.tgz", + "integrity": "sha512-Fro8py2B8EJupSP37Kyd4kjKZLr+5ksFq7Vbw8A392Z15Unq8016SPUDvO/AsDj5V6bbPk98PTAinpc5YhPbJw==", + "dev": true, + "requires": { + "debounce": "^1.0.0" + } + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -29674,6 +28634,7 @@ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", "dev": true, + "peer": true, "requires": { "flatted": "^2.0.0", "rimraf": "2.6.3", @@ -29685,6 +28646,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, + "peer": true, "requires": { "glob": "^7.1.3" } @@ -29695,7 +28657,8 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true + "dev": true, + "peer": true }, "fn.name": { "version": "1.1.0", @@ -29727,9 +28690,9 @@ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" }, "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -29737,9 +28700,15 @@ } }, "formidable": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", - "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", + "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", + "requires": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0", + "qs": "^6.11.0" + } }, "forwarded": { "version": "0.2.0", @@ -29781,6 +28750,21 @@ "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "requires": { "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } } }, "fs.realpath": { @@ -29837,14 +28821,14 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" } }, "functional-red-black-tree": { @@ -29923,26 +28907,29 @@ } }, "gcp-metadata": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-3.5.0.tgz", - "integrity": "sha512-ZQf+DLZ5aKcRpLzYUyBS3yo3N0JSa82lNDO8rj3nMSlovLcz2riKFBsYgDzeXcv75oo5eqB2lx+B14UvPoCRnA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", + "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", + "dev": true, "optional": true, + "peer": true, "requires": { - "gaxios": "^2.1.0", - "json-bigint": "^0.3.0" + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" }, "dependencies": { "gaxios": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.3.4.tgz", - "integrity": "sha512-US8UMj8C5pRnao3Zykc4AAVr+cffoNKRTg9Rsf2GiuZCW69vgJj38VK2PzlPuQU73FZ/nTk9/Av6/JGcE1N9vA==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz", + "integrity": "sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==", + "dev": true, "optional": true, + "peer": true, "requires": { - "abort-controller": "^3.0.0", "extend": "^3.0.2", "https-proxy-agent": "^5.0.0", "is-stream": "^2.0.0", - "node-fetch": "^2.3.0" + "node-fetch": "^2.6.9" } } } @@ -29994,12 +28981,13 @@ "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==" }, "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" } }, @@ -30058,9 +29046,9 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -30145,6 +29133,14 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "requires": { + "define-properties": "^1.1.3" + } + }, "google-auth-library": { "version": "5.10.1", "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-5.10.1.tgz", @@ -30174,6 +29170,25 @@ "is-stream": "^2.0.0", "node-fetch": "^2.3.0" } + }, + "gcp-metadata": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-3.5.0.tgz", + "integrity": "sha512-ZQf+DLZ5aKcRpLzYUyBS3yo3N0JSa82lNDO8rj3nMSlovLcz2riKFBsYgDzeXcv75oo5eqB2lx+B14UvPoCRnA==", + "optional": true, + "requires": { + "gaxios": "^2.1.0", + "json-bigint": "^0.3.0" + } + }, + "json-bigint": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.3.1.tgz", + "integrity": "sha512-DGWnSzmusIreWlEupsUelHrhwmPPE+FiQvg+drKfk2p+bdEYa5mp4PJ8JsCWqae0M2jQNb0HPvnwvf1qOTThzQ==", + "optional": true, + "requires": { + "bignumber.js": "^9.0.0" + } } } }, @@ -30201,9 +29216,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "optional": true } } @@ -30225,6 +29240,14 @@ } } }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "got": { "version": "6.7.1", "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", @@ -30256,14 +29279,14 @@ } }, "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "graphql": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.6.0.tgz", - "integrity": "sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==" + "version": "16.8.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.0.tgz", + "integrity": "sha512-0oKGaR+y3qcS5mCu1vb7KG+a89vjn06C7Ihq/dDl3jA+A8B3TKomvi3CiEcVLJQGalbu8F52LxkOym7U5sSfbg==" }, "graphql-request": { "version": "4.3.0", @@ -30273,6 +29296,18 @@ "cross-fetch": "^3.1.5", "extract-files": "^9.0.0", "form-data": "^3.0.0" + }, + "dependencies": { + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } } }, "growl": { @@ -30349,6 +29384,16 @@ "resolved": "https://registry.npmjs.org/ammo/-/ammo-3.0.3.tgz", "integrity": "sha512-vo76VJ44MkUBZL/BzpGXaKzMfroF4ZR6+haRuw9p+eSWfoNaH2AxVc8xmiEPC08jhzJSeM6w7/iMUGet8b4oBQ==" }, + "b64": { + "version": "https://registry.npmjs.org/b64/-/b64-4.1.2.tgz", + "integrity": "sha512-+GUspBxlH3CJaxMUGUE1EBoWM6RKgWiYwUDal0qdf8m3ArnXNN1KzKVo5HOnE/FSq4HHyWf3TlHLsZI8PKQgrQ==", + "extraneous": true + }, + "big-time": { + "version": "https://registry.npmjs.org/big-time/-/big-time-2.0.1.tgz", + "integrity": "sha512-qtwYYoocwpiAxTXC5sIpB6nH5j6ckt+n/jhD7J5OEiFHnUZEFn0Xk8STUaE5s10LdazN/87bTDMe+fSihaW7Kg==", + "extraneous": true + }, "boom": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/boom/-/boom-7.2.2.tgz", @@ -30359,6 +29404,11 @@ "resolved": "https://registry.npmjs.org/bounce/-/bounce-1.2.2.tgz", "integrity": "sha512-1LPcXg3fkGVhjdA/P3DcR5cDktKEYtDpruJv9Nhmy36RoYaoxZfC82Zr2JmS3vysDJKqMtP0qJw3/P6iisTASg==" }, + "bourne": { + "version": "https://registry.npmjs.org/bourne/-/bourne-1.1.1.tgz", + "integrity": "sha512-Ou0l3W8+n1FuTOoIfIrCk9oF9WVWc+9fKoAl67XQr9Ws0z7LgILRZ7qtc9xdT4BveSKtnYXfKPgn8pFAqeQRew==", + "extraneous": true + }, "call": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/call/-/call-5.0.3.tgz", @@ -30374,6 +29424,16 @@ "resolved": "https://registry.npmjs.org/catbox-memory/-/catbox-memory-3.1.4.tgz", "integrity": "sha512-1tDnll066au0HXBSDHS/YQ34MQ2omBsmnA9g/jseyq/M3m7UPrajVtPDZK/rXgikSC1dfjo9Pa+kQ1qcyG2d3g==" }, + "content": { + "version": "https://registry.npmjs.org/content/-/content-4.0.6.tgz", + "integrity": "sha512-lR9ND3dXiMdmsE84K6l02rMdgiBVmtYWu1Vr/gfSGHcIcznBj2QxmSdUgDuNFOA+G9yrb1IIWkZ7aKtB6hDGyA==", + "extraneous": true + }, + "cryptiles": { + "version": "https://registry.npmjs.org/cryptiles/-/cryptiles-4.1.3.tgz", + "integrity": "sha512-gT9nyTMSUC1JnziQpPbxKGBbUg8VL7Zn2NB4E1cJYvuXdElHrwxrV9bmltZGDzet45zSDGyYceueke1TjynGzw==", + "extraneous": true + }, "heavy": { "version": "6.1.2", "resolved": "https://registry.npmjs.org/heavy/-/heavy-6.1.2.tgz", @@ -30384,16 +29444,36 @@ "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.0.1.tgz", "integrity": "sha512-3PvUwBerLNVJiIVQdpkWF9F/M0ekgb2NPJWOhsE28RXSQPsY42YSnaJ8d1kZjcAz58TZ/Fk9Tw64xJsENFlJNw==" }, + "iron": { + "version": "https://registry.npmjs.org/iron/-/iron-5.0.6.tgz", + "integrity": "sha512-zYUMOSkEXGBdwlV/AXF9zJC0aLuTJUKHkGeYS5I2g225M5i6SrxQyGJGhPgOR8BK1omL6N5i6TcwfsXbP8/Exw==", + "extraneous": true + }, "joi": { "version": "14.0.4", "resolved": "https://registry.npmjs.org/joi/-/joi-14.0.4.tgz", "integrity": "sha512-KUXRcinDUMMbtlOk7YLGHQvG73dLyf8bmgE+6sBTkdJbZpeGVGAlPXEHLiQBV7KinD/VLD5OA0EUgoTTfbRAJQ==" }, + "mime-db": { + "version": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", + "extraneous": true + }, "mimos": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/mimos/-/mimos-4.0.2.tgz", "integrity": "sha512-5XBsDqBqzSN88XPPH/TFpOalWOjHJM5Z2d3AMx/30iq+qXvYKd/8MPhqBwZDOLtoaIWInR3nLzMQcxfGK9djXA==" }, + "nigel": { + "version": "https://registry.npmjs.org/nigel/-/nigel-3.0.4.tgz", + "integrity": "sha512-3SZCCS/duVDGxFpTROHEieC+itDo4UqL9JNUyQJv3rljudQbK6aqus5B4470OxhESPJLN93Qqxg16rH7DUjbfQ==", + "extraneous": true + }, + "pez": { + "version": "https://registry.npmjs.org/pez/-/pez-4.0.5.tgz", + "integrity": "sha512-HvL8uiFIlkXbx/qw4B8jKDCWzo7Pnnd65Uvanf9OOCtb20MRcb9gtTVBf9NCnhETif1/nzbDHIjAWC/sUp7LIQ==", + "extraneous": true + }, "podium": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/podium/-/podium-3.1.5.tgz", @@ -30428,6 +29508,16 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==" + }, + "vise": { + "version": "https://registry.npmjs.org/vise/-/vise-3.0.1.tgz", + "integrity": "sha512-7BJNjsv2o83+E6AHAFSnjQF324UTgypsR/Sw/iFmLvr7RgJrEXF1xNBvb5LJfi+1FvWQXjJK4X41WMuHMeunPQ==", + "extraneous": true + }, + "wreck": { + "version": "https://registry.npmjs.org/wreck/-/wreck-14.1.3.tgz", + "integrity": "sha512-hb/BUtjX3ObbwO3slCOLCenQ4EP8e+n8j6FmTne3VhEFp5XV1faSJojiyxVSvw34vgdeTG5baLTl4NmjwokLlw==", + "extraneous": true } } }, @@ -30486,6 +29576,11 @@ "get-intrinsic": "^1.1.1" } }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -30567,6 +29662,11 @@ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, + "hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==" + }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -30603,9 +29703,9 @@ "dev": true }, "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, "http-errors": { "version": "2.0.0", @@ -30743,7 +29843,8 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true + "dev": true, + "peer": true }, "ignore-by-default": { "version": "1.0.1", @@ -30764,6 +29865,7 @@ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "peer": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -30852,6 +29954,7 @@ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", "dev": true, + "peer": true, "requires": { "ansi-escapes": "^3.2.0", "chalk": "^2.4.2", @@ -30873,6 +29976,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "peer": true, "requires": { "color-convert": "^1.9.0" } @@ -30882,6 +29986,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "peer": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -30893,6 +29998,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "peer": true, "requires": { "color-name": "1.1.3" } @@ -30901,19 +30007,22 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "peer": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true + "dev": true, + "peer": true }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, + "peer": true, "requires": { "ansi-regex": "^4.1.0" } @@ -30923,6 +30032,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "peer": true, "requires": { "has-flag": "^3.0.0" } @@ -30945,11 +30055,11 @@ "integrity": "sha512-rScRlhDcz6k199EkHqT8NpM87ebN89ICOzILoBHgaG36/WX50N32BnU/kpZgCGPLhARRAWUUX5/cyaIjt7Kipg==" }, "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "requires": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" } @@ -31071,23 +30181,25 @@ } }, "ipfs-utils": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-9.0.7.tgz", - "integrity": "sha512-Umvb0Zydy2zZiTmQBGLfLISr8vOmXX8cxEIP+N8zGHrtRShG/j32yl1xd/BtS+Hbg0FIbVm3opwvxB2gmta0YA==", + "version": "9.0.14", + "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-9.0.14.tgz", + "integrity": "sha512-zIaiEGX18QATxgaS0/EOQNoo33W0islREABAcxXE8n7y2MGAlB+hdsxXn4J0hGZge8IqVQhW8sWIb+oJz2yEvg==", "requires": { "any-signal": "^3.0.0", + "browser-readablestream-to-it": "^1.0.0", "buffer": "^6.0.1", "electron-fetch": "^1.7.2", "err-code": "^3.0.1", "is-electron": "^2.2.0", "iso-url": "^1.1.5", + "it-all": "^1.0.4", "it-glob": "^1.0.1", "it-to-stream": "^1.0.0", "merge-options": "^3.0.4", "nanoid": "^3.1.20", "native-fetch": "^3.0.0", - "node-fetch": "https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz", - "react-native-fetch-api": "^2.0.0", + "node-fetch": "^2.6.8", + "react-native-fetch-api": "^3.0.0", "stream-to-it": "^0.2.2" }, "dependencies": { @@ -31104,10 +30216,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "node-fetch": { - "version": "https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-iTASGs+HTFK5E4ZqcMsHmeJ4zodyq8L38lZV33jwqcBJYoUt3HjN4+ot+O9/0b+ke8ddE7UgOtVuZN/OkV19/g==" } } }, @@ -31145,6 +30253,16 @@ "has-tostringtag": "^1.0.0" } }, + "is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -31197,9 +30315,9 @@ } }, "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "requires": { "has": "^1.0.3" } @@ -31233,9 +30351,9 @@ } }, "is-electron": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.1.tgz", - "integrity": "sha512-r8EEQQsqT+Gn0aXFx7lTFygYQhILLCB+wn0WCDL5LZRINeLH/Rvw1j2oKodELLXYNImQ3CRlVsY8wW4cGOsyuw==" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz", + "integrity": "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==" }, "is-extendable": { "version": "1.0.1", @@ -31252,6 +30370,12 @@ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, + "is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true + }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", @@ -31455,15 +30579,11 @@ } }, "is-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", - "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.11" } }, "is-typedarray": { @@ -31485,6 +30605,12 @@ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true + }, "is-weakmap": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", @@ -31576,9 +30702,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -31617,9 +30743,9 @@ "dev": true }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true }, "supports-color": { @@ -31681,9 +30807,9 @@ } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true } } @@ -32364,9 +31490,9 @@ } }, "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, "requires": {} }, @@ -32683,9 +31809,9 @@ "dev": true }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true }, "supports-color": { @@ -32954,9 +32080,9 @@ } }, "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" }, "js-tokens": { "version": "4.0.0", @@ -33042,10 +32168,12 @@ "dev": true }, "json-bigint": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.3.1.tgz", - "integrity": "sha512-DGWnSzmusIreWlEupsUelHrhwmPPE+FiQvg+drKfk2p+bdEYa5mp4PJ8JsCWqae0M2jQNb0HPvnwvf1qOTThzQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dev": true, "optional": true, + "peer": true, "requires": { "bignumber.js": "^9.0.0" } @@ -33074,7 +32202,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "peer": true }, "json-stringify-safe": { "version": "5.0.1", @@ -33082,9 +32211,9 @@ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" }, "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, "jsonfile": { @@ -33095,6 +32224,20 @@ "graceful-fs": "^4.1.6" } }, + "jsonparse": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz", + "integrity": "sha512-fw7Q/8gFR8iSekUi9I+HqWIap6mywuoe7hQIg3buTVjuZgALKj4HAmm0X6f+TaL4c9NJbvyFQdaI2ppr5p6dnQ==" + }, + "JSONStream": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.10.0.tgz", + "integrity": "sha512-8XbSFFd43EG+1thjLNFIzCBlwXti0yKa7L+ak/f0T/pkC+31b7G41DXL/JzYpAoYWZ2eCPiu4IIqzijM8N0a/w==", + "requires": { + "jsonparse": "0.0.5", + "through": ">=2.2.7 <3" + } + }, "jsonwebtoken": { "version": "8.5.1", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", @@ -33132,9 +32275,9 @@ } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" } } }, @@ -33247,9 +32390,9 @@ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.3.tgz", + "integrity": "sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ==", "requires": { "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0", @@ -33264,9 +32407,9 @@ } }, "keyv": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.0.tgz", - "integrity": "sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA==", + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", "requires": { "json-buffer": "3.0.1" } @@ -33481,11 +32624,12 @@ } }, "logform": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.2.tgz", - "integrity": "sha512-W4c9himeAwXEdZ05dQNerhFz2XG80P9Oj0loPUMV23VC2it0orMHQhJm4hdnnor3rd1HsGf6a2lPwBM1zeXHGw==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.5.1.tgz", + "integrity": "sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==", "requires": { "@colors/colors": "1.5.0", + "@types/triple-beam": "^1.3.2", "fecha": "^4.2.0", "ms": "^2.1.1", "safe-stable-stringify": "^2.3.1", @@ -33520,9 +32664,9 @@ } }, "loupe": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", - "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", + "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", "requires": { "get-func-name": "^2.0.0" } @@ -33541,9 +32685,9 @@ } }, "luxon": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.1.0.tgz", - "integrity": "sha512-7w6hmKC0/aoWnEsmPCu5Br54BmbmUp5GfcqBxQngRcXJ+q5fdfjEzn7dxmJh2YdDhgW8PccYtlWKSv4tQkrTQg==" + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.3.tgz", + "integrity": "sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg==" }, "mailgun-js": { "version": "0.22.0", @@ -33595,9 +32739,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -33662,7 +32806,12 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "optional": true + "devOptional": true + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==" }, "meow": { "version": "5.0.0", @@ -33763,8 +32912,7 @@ "mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "optional": true + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" }, "mime-db": { "version": "1.52.0", @@ -33817,9 +32965,9 @@ } }, "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" }, "minimist-options": { "version": "3.0.2", @@ -33843,19 +32991,9 @@ } }, "minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", - "requires": { - "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==" }, "minizlib": { "version": "2.1.2", @@ -33866,6 +33004,14 @@ "yallist": "^4.0.0" }, "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -34182,31 +33328,28 @@ "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" }, "moment-timezone": { - "version": "0.5.38", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.38.tgz", - "integrity": "sha512-nMIrzGah4+oYZPflDvLZUgoVUO4fvAqHstvG3xAUnMolWncuAiLDWNnJZj6EwJGMGfb1ZcuTFE6GI3hNOVWI/Q==", + "version": "0.5.43", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.43.tgz", + "integrity": "sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ==", "requires": { - "moment": ">= 2.9.0" + "moment": "^2.29.4" } }, "mongodb": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.11.0.tgz", - "integrity": "sha512-9l9n4Nk2BYZzljW3vHah3Z0rfS5npKw6ktnkmFgTcnzaXH1DRm3pDl6VMHu84EVb1lzmSaJC4OzWZqTkB5i2wg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.0.0.tgz", + "integrity": "sha512-wUIYesF4DTyDccm0noE5TwGi9ISdXUAi9T2cQ4xPc+EUBZG44bfMVt2ecOG5Ypca7eCz3oRpJm6YI6c7jAnuNw==", "dev": true, "requires": { - "@aws-sdk/credential-providers": "^3.186.0", - "bson": "^4.7.0", - "denque": "^2.1.0", - "mongodb-connection-string-url": "^2.5.4", - "saslprep": "^1.0.3", - "socks": "^2.7.1" + "@mongodb-js/saslprep": "^1.1.0", + "bson": "^6.0.0", + "mongodb-connection-string-url": "^2.6.0" } }, "mongodb-connection-string-url": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.4.tgz", - "integrity": "sha512-SeAxuWs0ez3iI3vvmLk/j2y+zHwigTDKQhtdxTgt5ZCOQQS5+HW4g45/Xw5vzzbn7oQXCNQ24Z40AkJsizEy7w==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", "dev": true, "requires": { "@types/whatwg-url": "^8.2.1", @@ -34241,15 +33384,15 @@ } }, "mongoose": { - "version": "5.13.15", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.15.tgz", - "integrity": "sha512-cxp1Gbb8yUWkaEbajdhspSaKzAvsIvOtRlYD87GN/P2QEUhpd6bIvebi36T6M0tIVAMauNaK9SPA055N3PwF8Q==", + "version": "5.13.20", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.20.tgz", + "integrity": "sha512-TjGFa/XnJYt+wLmn8y9ssjyO2OhBMeEBtOHb9iJM16EWu2Du6L1Q6zSiEK2ziyYQM8agb4tumNIQFzqbxId7MA==", "requires": { "@types/bson": "1.x || 4.0.x", "@types/mongodb": "^3.5.27", "bson": "^1.1.4", "kareem": "2.3.2", - "mongodb": "3.7.3", + "mongodb": "3.7.4", "mongoose-legacy-pluralize": "1.0.2", "mpath": "0.8.4", "mquery": "3.2.5", @@ -34275,15 +33418,10 @@ "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==" }, - "denque": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", - "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==" - }, "mongodb": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.3.tgz", - "integrity": "sha512-Psm+g3/wHXhjBEktkxXsFMZvd3nemI0r3IPsE0bU+4//PnvNWKkzhZcEsbPcYiWqe8XqXJJEg4Tgtr7Raw67Yw==", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.4.tgz", + "integrity": "sha512-K5q8aBqEXMwWdVNh94UQTwZ6BejVbFhh1uB6c5FKtPE9eUMZPUO3sRZdgIEcHSrAWmxzpG/FeODDKL388sqRmw==", "requires": { "bl": "^2.2.1", "bson": "^1.1.4", @@ -34414,9 +33552,9 @@ } }, "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -34557,7 +33695,8 @@ "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", - "dev": true + "dev": true, + "peer": true }, "mysql": { "version": "2.18.1", @@ -34629,9 +33768,9 @@ "integrity": "sha512-O84Y3Qx6UPRNGSApxHQ2xtp3xHOOhYK99JQaJ2phanHIA/JTIEJLvzV6bUwzVz2k3nFwEOfaqzgpUH8QME1BzA==" }, "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" }, "nanomatch": { "version": "1.2.13", @@ -34686,14 +33825,23 @@ "dev": true }, "node-addon-api": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.0.0.tgz", - "integrity": "sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, + "node-docker-api": { + "version": "1.1.22", + "resolved": "https://registry.npmjs.org/node-docker-api/-/node-docker-api-1.1.22.tgz", + "integrity": "sha512-8xfOiuLDJQw+l58i66lUNQhRhS5fAExqQbLolmyqMucrsDON7k7eLMIHphcBwwB7utwCHCQkcp73gSAmzSiAiw==", + "requires": { + "docker-modem": "^0.3.1", + "memorystream": "^0.3.1" + } }, "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "requires": { "whatwg-url": "^5.0.0" }, @@ -34725,9 +33873,9 @@ "integrity": "sha512-8Df0906+tq/omxuCZD6PqhPaQDYuyJ1d+VITgxoIA8zvQd1ru+nMJcDChHH324MWitIgbVkAkQoGEEVJNpn/PA==" }, "node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", + "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==" }, "node-int64": { "version": "0.4.0", @@ -34749,9 +33897,9 @@ } }, "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, "node-schedule": { @@ -34765,9 +33913,9 @@ } }, "nodemon": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", - "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", + "version": "2.0.22", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", + "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", "dev": true, "requires": { "chokidar": "^3.5.2", @@ -34789,9 +33937,9 @@ "dev": true }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true }, "supports-color": { @@ -34825,11 +33973,11 @@ }, "dependencies": { "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "requires": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -34886,9 +34034,9 @@ } }, "nwsapi": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", - "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", "dev": true }, "oauth-sign": { @@ -34969,10 +34117,15 @@ } } }, + "object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" + }, "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" }, "object-is": { "version": "1.1.5", @@ -35010,15 +34163,16 @@ } }, "object.getownpropertydescriptors": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", - "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz", + "integrity": "sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==", "dev": true, "requires": { - "array.prototype.reduce": "^1.0.4", + "array.prototype.reduce": "^1.0.6", "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.1" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "safe-array-concat": "^1.0.0" } }, "object.pick": { @@ -35076,9 +34230,9 @@ } }, "openpgp": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/openpgp/-/openpgp-5.5.0.tgz", - "integrity": "sha512-SpwcJnxrK9Y0HRM6KxSFqkAEOSWEabCH/c8dII/+y2e5f6KvuDG5ZE7JXaPBaVJNE4VUZZeTphxXDoZD0KOHrw==", + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/openpgp/-/openpgp-5.10.1.tgz", + "integrity": "sha512-SR5Ft+ej51d0+p53ld5Ney0Yiz0y8Mh1YYLJrvpRMbTaNhvS1QcDX0Oq1rW9sjBnQXtgrpWw2Zve3rm7K5C/pw==", "requires": { "asn1.js": "^5.0.0" } @@ -35105,7 +34259,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true + "dev": true, + "peer": true }, "p-cancelable": { "version": "2.1.1", @@ -35255,6 +34410,7 @@ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "peer": true, "requires": { "callsites": "^3.0.0" }, @@ -35263,7 +34419,8 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "dev": true, + "peer": true } } }, @@ -35295,9 +34452,9 @@ } }, "parse-duration": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-duration/-/parse-duration-1.0.2.tgz", - "integrity": "sha512-Dg27N6mfok+ow1a2rj/nRjtCfaKrHUZV2SJpEn/s8GaVUSlf4GGRCRP1c13Hj+wfPKVMrFDqLMLITkYKgKxyyg==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parse-duration/-/parse-duration-1.1.0.tgz", + "integrity": "sha512-z6t9dvSJYaPoQq7quMzdEagSFtpGu+utzHqqxmpVWNNZRIXnvqyCvn9XsTdh7c/w0Bqmdz3RB3YnRaKtpRtEXQ==" }, "parse-headers": { "version": "2.0.5", @@ -35425,9 +34582,9 @@ } }, "pg-connection-string": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", - "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", + "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==" }, "pg-int8": { "version": "1.0.1", @@ -35440,26 +34597,26 @@ "integrity": "sha512-1KdmFGGTP6jplJoI8MfvRlfvMiyBivMRP7/ffh4a11RUFJ7kC2J0ZHlipoKiH/1hz+DVgceon9U2qbaHpPeyPg==" }, "pg-pool": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.2.tgz", - "integrity": "sha512-His3Fh17Z4eg7oANLob6ZvH8xIVen3phEZh2QuyrIl4dQSDVEabNducv6ysROKpDNPSD+12tONZVWfSgMvDD9w==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz", + "integrity": "sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==", "requires": {} }, "pg-promise": { - "version": "10.12.1", - "resolved": "https://registry.npmjs.org/pg-promise/-/pg-promise-10.12.1.tgz", - "integrity": "sha512-SiJkBUDGq7PNfJFJbWferodsSH+vLrhte0Q0kVgQbwlNYeKmp9Hhkr+357+5DWEuBGOHhSu1UQffSSf5HVqRtA==", + "version": "10.15.4", + "resolved": "https://registry.npmjs.org/pg-promise/-/pg-promise-10.15.4.tgz", + "integrity": "sha512-BKlHCMCdNUmF6gagVbehRWSEiVcZzPVltEx14OJExR9Iz9/1R6KETDWLLGv2l6yRqYFnEZZy1VDjRhArzeIGrw==", "requires": { - "assert-options": "0.7.0", + "assert-options": "0.8.0", "pg": "8.8.0", "pg-minify": "1.6.2", "spex": "3.2.0" } }, "pg-protocol": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz", - "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz", + "integrity": "sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==" }, "pg-types": { "version": "2.2.0", @@ -35498,10 +34655,25 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true }, "pkg-dir": { @@ -35610,9 +34782,9 @@ } }, "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -35821,7 +34993,8 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "dev": true, + "peer": true }, "promise-finally": { "version": "3.0.1", @@ -35829,15 +35002,15 @@ "integrity": "sha512-hsF8r05ZnypT00IZTC71Ejiu9A7kyyVfHpdl3faasOHNJX62sNPfE8vDAz6P27RJ31i2O5ruhc6JV5xWR6GElQ==" }, "promise.allsettled": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.6.tgz", - "integrity": "sha512-22wJUOD3zswWFqgwjNHa1965LvqTX87WPu/lreY2KSd7SVcERfuZ4GfUaOnJNnvtoIv2yXT/W00YIGMetXtFXg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.7.tgz", + "integrity": "sha512-hezvKvQQmsFkOdrZfYxUxkyxl8mgFQeT259Ajj9PXdbg9VzBCWrItOev72JyWxkCD5VSSqAeHmlN3tWx4DlmsA==", "requires": { "array.prototype.map": "^1.0.5", "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "iterate-value": "^1.0.2" } }, @@ -35860,9 +35033,9 @@ } }, "protobufjs": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", - "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", + "version": "6.11.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz", + "integrity": "sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==", "requires": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -35880,9 +35053,9 @@ }, "dependencies": { "@types/node": { - "version": "18.11.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.8.tgz", - "integrity": "sha512-uGwPWlE0Hj972KkHtCDVwZ8O39GmyjfMane1Z3GUBGGnkZ2USDq7SxLpVIiIHpweY9DS0QTDH0Nw7RNBsAAZ5A==" + "version": "20.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.0.tgz", + "integrity": "sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg==" } } }, @@ -36016,9 +35189,9 @@ } }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" }, "qs": { "version": "6.11.0", @@ -36088,9 +35261,9 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "requires": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -36116,9 +35289,9 @@ "dev": true }, "react-native-fetch-api": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/react-native-fetch-api/-/react-native-fetch-api-2.0.0.tgz", - "integrity": "sha512-GOA8tc1EVYLnHvma/TU9VTgLOyralO7eATRuCDchQveXW9Fr9vXygyq9iwqmM7YRZ8qRJfEt9xOS7OYMdJvRFw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-native-fetch-api/-/react-native-fetch-api-3.0.0.tgz", + "integrity": "sha512-g2rtqPjdroaboDKTsJCTlcmtw54E25OjyaunUP0anOZn4Fuo2IKs8BVfe02zVggA/UysbmfSnRJIqtNkAgggNA==", "requires": { "p-defer": "^3.0.0" } @@ -36183,9 +35356,9 @@ } }, "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -36253,13 +35426,13 @@ "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" }, "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" } }, "regexpp": { @@ -36303,6 +35476,15 @@ "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -36442,7 +35624,8 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true + "dev": true, + "peer": true }, "resolve-url": { "version": "0.2.1", @@ -36470,6 +35653,7 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", "dev": true, + "peer": true, "requires": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" @@ -36479,13 +35663,15 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true + "dev": true, + "peer": true }, "onetime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", "dev": true, + "peer": true, "requires": { "mimic-fn": "^1.0.0" } @@ -36566,17 +35752,37 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true + "dev": true, + "peer": true }, "rxjs": { "version": "6.6.7", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, + "peer": true, "requires": { "tslib": "^1.9.0" } }, + "safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + } + } + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -36602,9 +35808,9 @@ } }, "safe-stable-stringify": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.1.tgz", - "integrity": "sha512-dVHE6bMtS/bnL2mwualjc6IxEv1F+OCUpA46pKUj6F8uDbUM0jCCulPqRNPSnWwGNKx5etqMjZYdXtrm5KJZGA==" + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==" }, "safer-buffer": { "version": "2.1.2", @@ -36781,6 +35987,15 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, + "set-function-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.0.tgz", + "integrity": "sha512-WmS8UHojv5s1eSoRSmzO5zzgDq8PE1/X/ij0k+9fMYmINCc6+j+SF3Om8YyucKn2yjnK4ItNZOoQycNnHsZJTw==", + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -36899,9 +36114,9 @@ } }, "simple-update-notifier": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", - "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", + "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", "dev": true, "requires": { "semver": "~7.0.0" @@ -36932,6 +36147,7 @@ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "dev": true, + "peer": true, "requires": { "ansi-styles": "^3.2.0", "astral-regex": "^1.0.0", @@ -36943,6 +36159,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "peer": true, "requires": { "color-convert": "^1.9.0" } @@ -36952,6 +36169,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "peer": true, "requires": { "color-name": "1.1.3" } @@ -36960,7 +36178,8 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "peer": true } } }, @@ -37143,16 +36362,17 @@ } }, "socket.io": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.3.tgz", - "integrity": "sha512-zdpnnKU+H6mOp7nYRXH4GNv1ux6HL6+lHL8g7Ds7Lj8CkdK1jJK/dlwsKDculbyOHifcJ0Pr/yeXnZQ5GeFrcg==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.2.tgz", + "integrity": "sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==", "requires": { "accepts": "~1.3.4", "base64id": "~2.0.0", + "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.2.0", - "socket.io-adapter": "~2.4.0", - "socket.io-parser": "~4.2.0" + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" }, "dependencies": { "debug": { @@ -37166,14 +36386,46 @@ } }, "socket.io-adapter": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", - "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==" + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "requires": { + "ws": "~8.11.0" + }, + "dependencies": { + "ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "requires": {} + } + } + }, + "socket.io-client": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.2.tgz", + "integrity": "sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==", + "requires": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.5.2", + "socket.io-parser": "~4.2.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + } + } }, "socket.io-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz", - "integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", "requires": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1" @@ -37190,20 +36442,18 @@ } }, "socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", - "dev": true, + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", + "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", "requires": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" + "ip": "1.1.5", + "smart-buffer": "^4.1.0" }, "dependencies": { "ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha512-rBtCAQAJm8A110nbwn6YdveUnuZH3WrC36IwkRXxDnq53JvXA2NVQvB7IHyKomxK1MJ4VDNw3UtFDdXQ+AvLYA==" } } }, @@ -37223,20 +36473,6 @@ "requires": { "es6-promisify": "^5.0.0" } - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha512-rBtCAQAJm8A110nbwn6YdveUnuZH3WrC36IwkRXxDnq53JvXA2NVQvB7IHyKomxK1MJ4VDNw3UtFDdXQ+AvLYA==" - }, - "socks": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", - "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", - "requires": { - "ip": "1.1.5", - "smart-buffer": "^4.1.0" - } } } }, @@ -37299,15 +36535,15 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", - "optional": true, + "devOptional": true, "requires": { "memory-pager": "^1.0.2" } }, "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -37328,15 +36564,20 @@ } }, "spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==" + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==" }, "spex": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spex/-/spex-3.2.0.tgz", "integrity": "sha512-9srjJM7NaymrpwMHvSmpDeIK5GoRMX/Tq0E8aOlDPS54dDnDUIp30DrP9SphMPEETDLzEM9+4qo+KipmbtPecg==" }, + "split-ca": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", + "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==" + }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", @@ -37347,9 +36588,9 @@ } }, "split2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", - "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==" }, "sprintf-js": { "version": "1.0.3", @@ -37495,6 +36736,14 @@ "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==" }, + "stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "requires": { + "internal-slot": "^1.0.4" + } + }, "stream-events": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", @@ -37560,24 +36809,34 @@ "strip-ansi": "^4.0.0" } }, + "string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" } }, "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" } }, "strip-ansi": { @@ -37623,13 +36882,6 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" }, - "strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "dev": true, - "optional": true - }, "stubs": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", @@ -37637,63 +36889,50 @@ "optional": true }, "superagent": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", - "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", - "requires": { - "component-emitter": "^1.2.0", - "cookiejar": "^2.1.0", - "debug": "^3.1.0", - "extend": "^3.0.0", - "form-data": "^2.3.1", - "formidable": "^1.2.0", - "methods": "^1.1.1", - "mime": "^1.4.1", - "qs": "^6.5.1", - "readable-stream": "^2.3.5" + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", + "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", + "requires": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.1.2", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0", + "semver": "^7.3.8" }, "dependencies": { - "form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "ms": "2.1.2" } }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "yallist": "^4.0.0" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "requires": { - "safe-buffer": "~5.1.0" + "lru-cache": "^6.0.0" } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, @@ -37772,9 +37011,9 @@ } }, "got": { - "version": "11.8.5", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.5.tgz", - "integrity": "sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==", + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "requires": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -37860,6 +37099,7 @@ "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", "dev": true, + "peer": true, "requires": { "ajv": "^6.10.2", "lodash": "^4.17.14", @@ -37872,6 +37112,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, + "peer": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -37883,6 +37124,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, + "peer": true, "requires": { "ansi-regex": "^4.1.0" } @@ -37890,13 +37132,13 @@ } }, "tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", "requires": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", + "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" @@ -38046,7 +37288,8 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "dev": true, + "peer": true }, "thenify": { "version": "3.3.1", @@ -38065,8 +37308,7 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "through2": { "version": "3.0.2", @@ -38101,6 +37343,7 @@ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, + "peer": true, "requires": { "os-tmpdir": "~1.0.2" } @@ -38227,9 +37470,9 @@ "integrity": "sha512-MTBWv3jhVjTU7XR3IQHllbiJs8sc75a80OEhB6or/q7pLTWgQ0bMGQXXYQSrSuXe6WiKWDZ5txXY5P59a/coVA==" }, "triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==" }, "ts-jest": { "version": "24.3.0", @@ -38250,82 +37493,71 @@ } }, "ts-luxon": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/ts-luxon/-/ts-luxon-4.0.1.tgz", - "integrity": "sha512-y7wCmgQ1sIjDUheejmLIOz08XeJ8sQ75m4zKd2ppI4OgTbQIuW8e4ZfNyp75zgomSZGi0I/PIiaHSYdrHd+tiQ==" + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ts-luxon/-/ts-luxon-4.4.0.tgz", + "integrity": "sha512-da38ShNr8dHAXEMg2sBwecOmNus2Fd7Q4h/MAXUve00NVxaeEbR0DMbF2UECBCy22qKPN6F6fypfDdVUniLTEw==" }, "ts-node": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", - "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, "requires": { - "arrify": "^1.0.0", - "buffer-from": "^1.1.0", - "diff": "^3.1.0", + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", "make-error": "^1.1.1", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "source-map-support": "^0.5.6", - "yn": "^2.0.0" + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" }, "dependencies": { - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true }, "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true } } }, "ts-node-dev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-2.0.0.tgz", - "integrity": "sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==", + "version": "1.0.0-pre.44", + "resolved": "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-1.0.0-pre.44.tgz", + "integrity": "sha512-M5ZwvB6FU3jtc70i5lFth86/6Qj5XR5nMMBwVxZF4cZhpO7XcbWw6tbNiJo22Zx0KfjEj9py5DANhwLOkPPufw==", "dev": true, "requires": { - "chokidar": "^3.5.1", + "dateformat": "~1.0.4-1.2.3", "dynamic-dedupe": "^0.3.0", - "minimist": "^1.2.6", - "mkdirp": "^1.0.4", + "filewatcher": "~3.0.0", + "minimist": "^1.1.3", + "mkdirp": "^0.5.1", + "node-notifier": "^5.4.0", "resolve": "^1.0.0", "rimraf": "^2.6.1", "source-map-support": "^0.5.12", - "tree-kill": "^1.2.2", - "ts-node": "^10.4.0", + "tree-kill": "^1.2.1", + "ts-node": "*", "tsconfig": "^7.0.0" }, "dependencies": { - "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "dev": true - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -38334,33 +37566,6 @@ "requires": { "glob": "^7.1.3" } - }, - "ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true } } }, @@ -38377,12 +37582,12 @@ } }, "tsconfig-paths": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.0.tgz", - "integrity": "sha512-AHx4Euop/dXFC+Vx589alFba8QItjF+8hf8LtmuiCwHyI4rHXQtOOENaM8kvYf5fR0dRChy3wzWIZ9WbB7FWow==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dev": true, "requires": { - "json5": "^2.2.1", + "json5": "^2.2.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } @@ -38461,12 +37666,12 @@ "dev": true }, "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "dev": true, "requires": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -38550,6 +37755,49 @@ "mime-types": "~2.1.24" } }, + "typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + } + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -38569,9 +37817,10 @@ "integrity": "sha512-/c7Bxnm6eh5kXx2I+mTuO+2OvoWni5+rXA3PhXwVWCtJRYmz3hMok5s1AKLzoDvNAZqj/Q/acGstN0ri5aQoOA==" }, "typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==" + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true }, "typings": { "version": "2.1.1", @@ -38920,9 +38169,9 @@ "integrity": "sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw==" }, "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", "dev": true, "requires": { "escalade": "^3.1.1", @@ -39149,16 +38398,18 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "util.promisify": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.1.1.tgz", - "integrity": "sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.1.2.tgz", + "integrity": "sha512-PBdZ03m1kBnQ5cjjO0ZvJMJS+QsbyIcFwi4hY4U76OQsCO9JrOYjbCFgIF76ccFg9xnJo7ZHPkqyj1GqmdS7MA==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", "for-each": "^0.3.3", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.1" + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "object.getownpropertydescriptors": "^2.1.6", + "safe-array-concat": "^1.0.0" } }, "utils-merge": { @@ -39490,6 +38741,24 @@ "requires": { "@ethersproject/abi": "5.0.7", "web3-utils": "1.6.0" + }, + "dependencies": { + "@ethersproject/abi": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.7.tgz", + "integrity": "sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==", + "requires": { + "@ethersproject/address": "^5.0.4", + "@ethersproject/bignumber": "^5.0.7", + "@ethersproject/bytes": "^5.0.4", + "@ethersproject/constants": "^5.0.4", + "@ethersproject/hash": "^5.0.4", + "@ethersproject/keccak256": "^5.0.3", + "@ethersproject/logger": "^5.0.5", + "@ethersproject/properties": "^5.0.3", + "@ethersproject/strings": "^5.0.4" + } + } } }, "web3-eth-accounts": { @@ -39803,22 +39072,21 @@ } }, "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "dev": true }, "which-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", - "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" } }, "wide-align": { @@ -39838,9 +39106,9 @@ } }, "winston": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.8.2.tgz", - "integrity": "sha512-MsE1gRx1m5jdTTO9Ld/vND4krP2To+lgDoMEHGGa4HIlAUyXJtfc7CxQcGXVyz2IBpw5hbFkj2b/AtUdQwyRew==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.10.0.tgz", + "integrity": "sha512-nT6SIDaE9B7ZRO0u3UvdrimG0HkB7dSTAgInQnNR2SOPJ4bvq5q79+pXLftKmP52lJGW15+H5MCK0nM9D3KB/g==", "requires": { "@colors/colors": "1.5.0", "@dabh/diagnostics": "^2.0.2", @@ -39878,9 +39146,9 @@ "integrity": "sha512-zaUhn7OWgikdqWlPYpZ4rTX/6IAV0czMVyd+C6QLVrif2tATF28CYUnHBmHs2a5EaZo7bB1+plBUPHto+HW8uA==" }, "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==" }, "wordwrap": { "version": "1.0.0", @@ -39960,6 +39228,7 @@ "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", "dev": true, + "peer": true, "requires": { "mkdirp": "^0.5.1" } @@ -39977,9 +39246,9 @@ } }, "ws": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.3.tgz", - "integrity": "sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "requires": {} }, "xdg-basedir": { @@ -40056,6 +39325,11 @@ "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==" }, + "xmlhttprequest-ssl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==" + }, "xregexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", @@ -40174,9 +39448,9 @@ } }, "yn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", - "integrity": "sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true }, "yocto-queue": { diff --git a/snode/package.json b/snode/package.json index c4debbc..212907b 100755 --- a/snode/package.json +++ b/snode/package.json @@ -6,6 +6,8 @@ "scripts": { "build": "rimraf ./build && tsc", "dev": "ts-node-dev --respawn --inspect=9229 --transpile-only ./src/app.ts", + "dev6001": "ts-node-dev --inspect=6001 --transpile-only ./src/app.ts", + "dev6002": "ts-node-dev --inspect=6002 --transpile-only ./src/app.ts", "heroku-postbuild": "npm run build", "start": "nodemon", "inspect": "nodemon --inspect src/app.ts", @@ -45,7 +47,7 @@ "chai": "^4.3.6", "chai-http": "^4.3.0", "chalk": "^4.1.2", - "cors": "^2.8.4", + "cors": "^2.8.5", "crypto-js": "4.0.0", "dotenv": "^8.2.0", "eccrypto": "^1.1.3", @@ -56,7 +58,7 @@ "ethereum-blockies-base64": "^1.0.2", "ethereum-blockies-png": "^0.1.3", "ethereum-public-key-to-address": "0.0.2", - "ethers": "5.0.18", + "ethers": "^5.7.2", "event-dispatch": "^0.4.1", "eventemitter3": "^3.1.0", "express": "^4.16.2", @@ -79,7 +81,9 @@ "multer": "^1.4.5-lts.1", "mysql": "2.18.1", "nano-ipfs-store": "0.1.3", + "node-docker-api": "^1.1.22", "node-schedule": "1.3.2", + "object-hash": "^3.0.0", "openpgp": "^5.3.1", "pg-promise": "^10.12.0", "promise.allsettled": "^1.0.6", @@ -88,6 +92,7 @@ "request-promise": "^4.2.6", "secp256k1-v4": "https://github.com/HarshRajat/secp256k1-node", "socket.io": "^4.4.1", + "socket.io-client": "^4.5.3", "ts-luxon": "^4.0.1", "typedi": "^0.8.0", "typescript": "^4.5.4", @@ -110,7 +115,6 @@ "@typescript-eslint/eslint-plugin": "^1.7.0", "@typescript-eslint/parser": "^1.7.0", "aws-sdk": "2.770.0", - "eslint": "^5.16.0", "eslint-config-prettier": "^4.2.0", "eslint-plugin-prettier": "^3.0.1", "jest": "^24.1.0", @@ -118,10 +122,10 @@ "nodemon": "^2.0.1", "prettier": "^1.17.0", "ts-jest": "^24.0.0", - "ts-node": "^7.0.1", - "ts-node-dev": "^2.0.0", + "ts-node": "^10.4.0", + "ts-node-dev": "1.0.0-pre.44", "tsconfig-paths": "^4.0.0", "tslint": "^5.11.0", - "typescript": "^3.1.3" + "typescript": "^4.5.4" } } diff --git a/snode/src/api/index.ts b/snode/src/api/index.ts index 9d0bb00..bdb68ff 100755 --- a/snode/src/api/index.ts +++ b/snode/src/api/index.ts @@ -1,16 +1,12 @@ import { Router } from 'express'; -import pushMessaging from './routes/AppController'; +import {storageRoutes} from './routes/storageRoutes'; +import {ExpressUtil} from "../utilz/expressUtil"; // guaranteed to get dependencies export default () => { const app = Router(); - - // -- HELPERS - // For mailing route - pushMessaging(app); - console.log("pushMessaging loaded"); - - // Finally return app + app.use(ExpressUtil.handle); + storageRoutes(app); return app; }; diff --git a/snode/src/api/middlewares/onlyLocalhost.ts b/snode/src/api/middlewares/onlyLocalhost.ts new file mode 100644 index 0000000..3c4f03a --- /dev/null +++ b/snode/src/api/middlewares/onlyLocalhost.ts @@ -0,0 +1,65 @@ +import { Container } from 'typedi' +import config from '../../config' + +var dns = require('dns') +var os = require('os') +var ifaces = os.networkInterfaces() + +/** + * @param {*} req Express req Object + * @param {*} res Express res Object + * @param {*} next Express next Function + */ +const onlyLocalhost = async (req, res, next) => { + const Logger = Container.get('logger') + try { + // Check if ip is localhost and only continue + var ip = req.connection.remoteAddress + var host = req.get('host') + + if (config.environment === 'production') { + // Return with unauthorized error + return res.sendStatus(401).json({ info: 'Only development config' }) + } + + checkLocalHost(ip) + .then((result) => { + if (!result) { + return res.sendStatus(401).json({ info: 'Only localhost connection allowed' }) + } + + return next() + }) + .catch((e) => { + Logger.error('🔥 Error attaching Only Localhost middleware to req: %o', e) + return next(e) + }) + } catch (e) { + Logger.error('🔥 Error attaching Only Localhost middleware to req: %o', e) + return next(e) + } +} + +const checkLocalHost = async (address) => { + return new Promise((resolve, reject) => { + dns.lookup(address, function (err, addr) { + if (err) { + resolve(false) + return + } + try { + address = addr + Object.keys(ifaces).forEach(function (ifname) { + ifaces[ifname].forEach(function (iface) { + if (iface.address === address) resolve(true) + }) + }) + resolve(false) + } catch (err) { + reject(err) + } + }) + }) +} + +export default onlyLocalhost diff --git a/snode/src/api/routes/AppController.ts b/snode/src/api/routes/AppController.ts deleted file mode 100755 index a79bae9..0000000 --- a/snode/src/api/routes/AppController.ts +++ /dev/null @@ -1,189 +0,0 @@ -import {Router, Request, Response, NextFunction} from 'express'; -import {Container} from 'typedi'; -// import MessagingService from '../../services/pushMessageService'; -import middlewares from '../middlewares'; -import {celebrate, Joi} from 'celebrate'; -import log from '../../loaders/logger'; -import DbHelper from '../../helpers/dbHelper'; -import {isEmpty} from "lodash"; -import { StrUtil, DateUtil } from 'dstorage-common'; - -import bodyParser from "body-parser"; - -import {DateTime} from "ts-luxon"; -// const log = Container.get('logger'); -// console.log("pushMessaging imported"); - -const route = Router(); -const dbh = new DbHelper(); - -function splitIntoNameAndIndex(nsNameWithIndex: string): string[] { - return nsNameWithIndex.split('.', 2); -} - -function logRequest(req: Request) { - log.debug('Calling %o %o with body: %o', req.method, req.url, req.body); -} - -export default (app: Router) => { - app.use(bodyParser.json()); - - app.use('/v1/kv', route); - - app.post('/post-test', (req, res) => { - console.log('Got body:', req.body); - res.sendStatus(200); - }); - - route.get( - '/ns/:nsName/nsidx/:nsIndex/date/:dt/key/:key', /* */ - async (req: Request, res: Response, next: NextFunction) => { - logRequest(req); - const nsName = req.params.nsName; - const nsIndex = req.params.nsIndex; - const dt = req.params.dt; - const key = req.params.key; - const nodeId = 1; // todo read this from db - log.debug(`nsName=${nsName} nsIndex=${nsIndex} dt=${dt} key=${key} nodeId=${nodeId}`); - let shardId = DbHelper.calculateShardForNamespaceIndex(nsName, nsIndex); - log.debug(`nodeId=${nodeId} shardId=${shardId}`); - const success = await DbHelper.checkThatShardIsOnThisNode(nsName, shardId, nodeId); - if (!success) { - let errMsg = `${nsName}.${nsIndex} maps to shard ${shardId} which is missing on node ${nodeId}`; - console.log(errMsg); - return res.status(500) - .json({errorMessage: errMsg}) - } - const date = DateTime.fromISO(dt, {zone: 'utc'}); - if(!date.isValid) { - return res.status(400).json('Invalid date ' + dt); - } - log.debug(`parsed date ${dt} -> ${date}`) - const storageTable = await DbHelper.findStorageTableByDate(nsName, shardId, date); - log.debug(`found table ${storageTable}`) - if (StrUtil.isEmpty(storageTable)) { - log.error('storage table not found'); - return res.status(401).json('storage table not found'); - } - const storageItems = await DbHelper.findStorageItem(nsName, storageTable, key); - log.debug(`found value: ${storageItems}`) - log.debug('success is ' + success); - try { - // const messaging = Container.get(MessagingService); - return res.status(200).json({ - items: storageItems - }); - } catch (e) { - // log.error('🔥 error: %o', e); - return next(e); - } - } - ); - - route.post( - '/ns/:nsName/nsidx/:nsIndex/ts/:ts/key/:key', /* */ - async (req: Request, res: Response, next: NextFunction) => { - logRequest(req); - const nsName = req.params.nsName; // ex: feeds - const nsIndex = req.params.nsIndex; // ex: 1000000 - const ts:string = req.params.ts; //ex: 1661214142.123456 - const key = req.params.key; // ex: 5b62a7b2-d6eb-49ef-b080-20a7fa3091ad - const nodeId = 1; // todo read this from db - const body = JSON.stringify(req.body); - log.debug(`nsName=${nsName} nsIndex=${nsIndex} ts=${ts} key=${key} nodeId=${nodeId} body=${body}`); - let shardId = DbHelper.calculateShardForNamespaceIndex(nsName, nsIndex); - log.debug(`nodeId=${nodeId} shardId=${shardId}`); - const success = await DbHelper.checkThatShardIsOnThisNode(nsName, shardId, nodeId); - if (!success) { - let errMsg = `${nsName}.${nsIndex} maps to shard ${shardId} which is missing on node ${nodeId}`; - console.log(errMsg); - return res.status(500) - .json({errorMessage: errMsg}) - } - const date = DateUtil.parseUnixFloatAsDateTime(ts); - log.debug(`parsed date ${ts} -> ${date}`) - var storageTable = await DbHelper.findStorageTableByDate(nsName, shardId, date); - log.debug(`found table ${storageTable}`) - if (StrUtil.isEmpty(storageTable)) { - log.error('storage table not found'); - var monthStart = date.startOf('month').toISODate().toString(); - var monthEndExclusive = date.startOf('month').plus({months: 1}).toISODate().toString(); - log.debug('creating new storage table'); - const dateYYYYMM = DateUtil.formatYYYYMM(date); - const tableName = `storage_ns_${nsName}_d_${dateYYYYMM}`; - const recordCreated = await DbHelper.createNewNodestorageRecord(nsName, shardId, - monthStart, monthEndExclusive, tableName); - if (recordCreated) { - log.debug('record created: ', recordCreated) - // we've added a new record to node_storage_layout => we can safely try to create a table - // otherwise, if many connections attempt to create a table from multiple threads - // it leads to postgres deadlock sometimes - const createtable = await DbHelper.createNewStorageTable(tableName); - log.debug('creating node storage layout mapping') - log.debug(createtable); - } - } - var storageTable = await DbHelper.findStorageTableByDate(nsName, shardId, date); - const storageValue = await DbHelper.putValueInTable(nsName, shardId, nsIndex, storageTable, ts, key, body); - log.debug(`found value: ${storageValue}`) - log.debug('success is ' + success); - try { - // const messaging = Container.get(MessagingService); - return res.status(201).json(storageValue); - } catch (e) { - // log.error('🔥 error: %o', e); - return next(e); - } - } - ); - - /* Search for namespace:namespaceIndex data , ordered by timestamp asc, paginated by timestamp (!) - Pagination is achieved by using firstTs parameter, passed from the previous invocation - Timestamp example: 1661214142.000000 ( unixtime.microseconds ) - * */ - route.post( - '/ns/:nsName/nsidx/:nsIndex/month/:month/list/', /* */ - async (req: Request, res: Response, next: NextFunction) => { - logRequest(req); - // we will search for data starting from this key exclusive - // use lastTs from the previous request to get more data - const firstTs:string = <string>req.query.firstTs; - const nsName = req.params.nsName; - const nsIndex = req.params.nsIndex; - const dt = req.params.month + '01'; - const key = req.params.key; - const nodeId = 1; // todo read this from db - const body = JSON.stringify(req.body); - const page = parseInt(req.params.page); - log.debug(`nsName=${nsName} nsIndex=${nsIndex} dt=${dt} key=${key} nodeId=${nodeId} firstTs=${firstTs} body=${body}`); - let shardId = DbHelper.calculateShardForNamespaceIndex(nsName, nsIndex); - log.debug(`nodeId=${nodeId} shardId=${shardId}`); - const success = await DbHelper.checkThatShardIsOnThisNode(nsName, shardId, nodeId); - if (!success) { - let errMsg = `${nsName}.${nsIndex} maps to shard ${shardId} which is missing on node ${nodeId}`; - console.log(errMsg); - return res.status(500) - .json({errorMessage: errMsg}) - } - const date = DateTime.fromISO(dt, {zone: 'utc'}); - log.debug(`parsed date ${date} -> ${date}`) - // since the date is 1st day of month - we can do a lookup of the table name - const storageTable = await DbHelper.findStorageTableByDate(nsName, shardId, date); - log.debug(`found table ${storageTable}`) - if (StrUtil.isEmpty(storageTable)) { - log.error('storage table not found'); - return res.status(204).json(`storage table not found for date ${req.params.month}`); - } - const storageValue = await DbHelper.listInbox(nsName, shardId, nsIndex, storageTable, firstTs); - log.debug(`found value: ${storageValue}`) - log.debug('success is ' + success); - try { - // const messaging = Container.get(MessagingService); - return res.status(200).json(storageValue); - } catch (e) { - // log.error('🔥 error: %o', e); - return next(e); - } - } - ); -}; diff --git a/snode/src/api/routes/storageRoutes.ts b/snode/src/api/routes/storageRoutes.ts new file mode 100755 index 0000000..5d31dae --- /dev/null +++ b/snode/src/api/routes/storageRoutes.ts @@ -0,0 +1,204 @@ +import {Router, Request, Response, NextFunction} from 'express'; +import {Container} from 'typedi'; +import log from '../../loaders/logger'; +import DbHelper from '../../helpers/dbHelper'; +import bodyParser from "body-parser"; +import {DateTime} from "ts-luxon"; +import {ExpressUtil} from "../../utilz/expressUtil"; +import DateUtil from "../../utilz/dateUtil"; +import StrUtil from "../../utilz/strUtil"; +import {ValidatorContractState} from "../../services/messaging-common/validatorContractState"; +import onlyLocalhost from "../middlewares/onlyLocalhost"; +import StorageNode from "../../services/messaging/storageNode"; +import {Coll} from "../../utilz/coll"; +import {MessageBlockUtil} from "../../services/messaging-common/messageBlock"; +import {StorageContractState} from "../../services/messaging-common/storageContractState"; +import {EnvLoader} from "../../utilz/envLoader"; + +const PAGE_SIZE = Number.parseInt(EnvLoader.getPropertyOrDefault("PAGE_SIZE", "30")); + +const route = Router(); +const dbh = new DbHelper(); + + +function logRequest(req: Request) { + log.debug('Calling %o %o with body: %o', req.method, req.url, req.body); +} + +// todo ValidatorContractState +export function storageRoutes(app: Router) { + app.use(bodyParser.json()); + + app.post( + '/v1/reshard', + onlyLocalhost, + async (req: Request, res: Response, next: NextFunction) => { + logRequest(req); + const storageNode = Container.get(StorageNode); + // ex: { "arr": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14] } + let arr:number[] = req.body.arr; + let set = Coll.arrayToSet(arr); + await storageNode.handleReshard(set) + return res.status(200); + }); + + app.use('/v1/kv', route); + + + // todo move to StorageNode + route.get( + '/ns/:nsName/nsidx/:nsIndex/date/:dt/key/:key', + async (req: Request, res: Response, next: NextFunction) => { + logRequest(req); + const nsName = req.params.nsName; + const nsIndex = req.params.nsIndex; + const dt = req.params.dt; + const key = req.params.key; + + const valContractState = Container.get(ValidatorContractState); + const storageContractState = Container.get(StorageContractState); + const nodeId = valContractState.nodeId; // todo read this from db + log.debug(`nsName=${nsName} nsIndex=${nsIndex} dt=${dt} key=${key} nodeId=${nodeId}`); + let shardId = MessageBlockUtil.calculateAffectedShard(nsIndex, storageContractState.shardCount); + + const date = DateTime.fromISO(dt, {zone: 'utc'}); + if (!date.isValid) { + return res.status(400).json('Invalid date ' + dt); + } + log.debug(`parsed date ${dt} -> ${date}`) + const storageTable = await DbHelper.findStorageTableByDate(nsName, shardId, date); + log.debug(`found table ${storageTable}`) + if (StrUtil.isEmpty(storageTable)) { + log.error('storage table not found'); + return res.status(401).json('storage table not found'); + } + const storageItems = await DbHelper.findStorageItem(nsName, nsIndex, storageTable, key); + log.debug(`found value: ${storageItems}`) + try { + return res.status(200).json({ + items: storageItems + }); + } catch (e) { + return next(e); + } + } + ); + + + + // todo move to StorageNode + // todo not tested with new sharing (we don't use it anymore) + route.post( + '/ns/:nsName/nsidx/:nsIndex/ts/:ts/key/:key', /* */ + async (req: Request, res: Response, next: NextFunction) => { + logRequest(req); + const nsName = req.params.nsName; // ex: feeds + const nsIndex = req.params.nsIndex; // ex: 1000000 + const ts: string = req.params.ts; //ex: 1661214142.123456 + const key = req.params.key; // ex: 5b62a7b2-d6eb-49ef-b080-20a7fa3091ad + const valContractState = Container.get(ValidatorContractState); + const storageContractState = Container.get(StorageContractState); + + const nodeId = valContractState.nodeId; + const body = JSON.stringify(req.body); + log.debug(`nsName=${nsName} nsIndex=${nsIndex} ts=${ts} key=${key} nodeId=${nodeId} body=${body}`); + let shardId = MessageBlockUtil.calculateAffectedShard(nsIndex, storageContractState.shardCount); + log.debug(`nodeId=${nodeId} shardId=${shardId}`); + const success = await DbHelper.checkThatShardIsOnThisNode(nsName, shardId, nodeId); + if (!success) { + let errMsg = `${nsName}.${nsIndex} maps to shard ${shardId} which is missing on node ${nodeId}`; + console.log(errMsg); + return res.status(500) + .json({errorMessage: errMsg}) + } + const date = DateUtil.parseUnixFloatAsDateTime(ts); + log.debug(`parsed date ${ts} -> ${date}`) + var storageTable = await DbHelper.findStorageTableByDate(nsName, shardId, date); + log.debug(`found table ${storageTable}`) + if (StrUtil.isEmpty(storageTable)) { + log.error('storage table not found'); + var monthStart = date.startOf('month').toISODate().toString(); + var monthEndExclusive = date.startOf('month').plus({months: 1}).toISODate().toString(); + log.debug('creating new storage table'); + const dateYYYYMM = DateUtil.formatYYYYMM(date); + const tableName = `storage_ns_${nsName}_d_${dateYYYYMM}`; + const recordCreated = await DbHelper.createNewNodestorageRecord(nsName, shardId, + monthStart, monthEndExclusive, tableName); + if (recordCreated) { + log.debug('record created: ', recordCreated) + // we've added a new record to node_storage_layout => we can safely try to create a table + // otherwise, if many connections attempt to create a table from multiple threads + // it leads to postgres deadlock sometimes + await DbHelper.createNewStorageTable(tableName); + log.debug('creating node storage layout mapping') + } + } + var storageTable = await DbHelper.findStorageTableByDate(nsName, shardId, date); + const storageValue = await DbHelper.putValueInTable(nsName, shardId, nsIndex, storageTable, ts, key, body); + log.debug(`found value: ${storageValue}`) + log.debug('success is ' + success); + try { + return res.status(201).json(storageValue); + } catch (e) { + return next(e); + } + } + ); + + /* Search for namespace:namespaceIndex data , ordered by timestamp asc, paginated by timestamp (!) + Pagination is achieved by using firstTs parameter, passed from the previous invocation + Timestamp example: 1661214142.000000 ( unixtime.microseconds ) + * */ + // todo move to StorageNode + route.post( + '/ns/:nsName/nsidx/:nsIndex/month/:month/list/', /* */ + async (req: Request, res: Response, next: NextFunction) => { + logRequest(req); + // we will search for data starting from this key exclusive + // use lastTs from the previous request to get more data + const firstTs: string = <string>req.query.firstTs; + const nsName = req.params.nsName; + const nsIndex = req.params.nsIndex; + const dt = req.params.month + '01'; + + const valContractState = Container.get(ValidatorContractState); + const storageContractState = Container.get(StorageContractState); + const nodeId = valContractState.nodeId; // todo read this from db + log.debug(`nsName=${nsName} nsIndex=${nsIndex} dt=${dt} nodeId=${nodeId} PAGE_SIZE=${PAGE_SIZE}`); + let shardId = MessageBlockUtil.calculateAffectedShard(nsIndex, storageContractState.shardCount); + const date = DateTime.fromISO(dt, {zone: 'utc'}); + if (!date.isValid) { + return res.status(400).json('Invalid date ' + dt); + } + log.debug(`parsed date ${dt} -> ${date}`) + const storageTable = await DbHelper.findStorageTableByDate(nsName, shardId, date); + log.debug(`found table ${storageTable}`) + if (StrUtil.isEmpty(storageTable)) { + log.error('storage table not found'); + return res.status(401).json('storage table not found'); + } + const storageValue = await DbHelper.listInbox(nsName, shardId, nsIndex, storageTable, firstTs, PAGE_SIZE); + log.debug(`found value: ${storageValue}`) + try { + return res.status(200).json(storageValue); + } catch (e) { + return next(e); + } + } + ); + + // prints all namespaces + route.post( + '/ns/all/', /* */ + async (req: Request, res: Response, next: NextFunction) => { + logRequest(req); + const allNsIndex = await DbHelper.listAllNsIndex(); + try { + return res.status(200).json(allNsIndex); + } catch (e) { + return next(e); + } + } + ); +}; +// todo remove logic from router diff --git a/snode/src/appInit.ts b/snode/src/appInit.ts index ec4a9e7..09a5a34 100755 --- a/snode/src/appInit.ts +++ b/snode/src/appInit.ts @@ -1,13 +1,20 @@ +import {EnvLoader} from "./utilz/envLoader"; +EnvLoader.loadEnvOrFail(); + import 'reflect-metadata'; // We need this in order to use @Decorators import express from 'express'; import chalk from 'chalk'; +import {Container} from "typedi"; +import StorageNode from "./services/messaging/storageNode"; +import {ValidatorContractState} from "./services/messaging-common/validatorContractState"; +import {MySqlUtil} from "./utilz/mySqlUtil"; + async function startServer(logLevel = null) { if (logLevel) { const changeLogLevel = (await require('./config/index')).changeLogLevel; changeLogLevel(logLevel); } - // Continue Loading normally const config = (await require('./config/index')).default; logLevel = logLevel || config.logs.level; @@ -18,53 +25,16 @@ async function startServer(logLevel = null) { // Load logger const Logger = (await require('./loaders/logger')).default; - // Check environment setup first - // Logger.info('✌️ Verifying ENV'); - // const EnvVerifierLoader = (await require('./loaders/envVerifier')).default; - // await EnvVerifierLoader(); - // Logger.info('✔️ ENV Verified / Generated and Loaded!'); - await require('./api/index'); await require('./loaders/express'); + Container.set("logger", Logger); + + await Container.get(StorageNode).postConstruct(); // load app const app = express(); const server = require("http").createServer(app); - // const Pool = require("pg").Pool; - - // const credentials = { - // user: "postgres", - // host: "db", - // database: "snode1", - // password: "postgres", - // port: 5432, - // }; - - // let retries = 5; - - // async function connect() { - - // const pool = new Pool(credentials); - // const client = await pool.connect(); - // console.log("Connected to database"); - // client.release(); - // } - - // while (retries) { - // try { - // await connect(); - // break; - // } catch (err) { - // console.log(err); - // retries -= 1; - // console.log(`retries left: ${retries}`); - // // wait 5 seconds - // await new Promise((res) => setTimeout(res, 5000)); - // }} - - - /** * A little hack here * Import/Export can only be used in 'top-level code' diff --git a/snode/src/config/envLoader.ts b/snode/src/config/envLoader.ts deleted file mode 100644 index 4a3e35c..0000000 --- a/snode/src/config/envLoader.ts +++ /dev/null @@ -1,21 +0,0 @@ -import dotenv from 'dotenv'; -import { StrUtil } from 'dstorage-common'; - -export default class EnvLoader { - - public static loadEnvOrFail() { - const envFound = dotenv.config(); - if (envFound.error) { - // This error should crash whole process - throw new Error("⚠️ Couldn't find .env file ⚠️"); - } - } - - public static getPropertyOrFail(propName:string):string { - let val = process.env[propName]; - if(StrUtil.isEmpty(val)) { - throw new Error(`process.env.${propName} is empty`); - } - return val; - } -} \ No newline at end of file diff --git a/snode/src/config/index.ts b/snode/src/config/index.ts index 4a80cfb..8e249af 100755 --- a/snode/src/config/index.ts +++ b/snode/src/config/index.ts @@ -1,14 +1,7 @@ -import dotenv from 'dotenv'; // import {logLevel} from '../app' // Set the NODE_ENV to 'development' by default process.env.NODE_ENV = process.env.NODE_ENV || 'development'; -// loads all .env variables into process.env.* variables -const envFound = dotenv.config(); -if (envFound.error) { - // This error should crash whole process - throw new Error("⚠️ Couldn't find .env file ⚠️"); -} export const changeLogLevel = (level: string) => { if (level) { diff --git a/snode/src/helpers/dbHelper.ts b/snode/src/helpers/dbHelper.ts index 58bbb36..4621112 100755 --- a/snode/src/helpers/dbHelper.ts +++ b/snode/src/helpers/dbHelper.ts @@ -1,24 +1,127 @@ -import {Container} from 'typedi'; -import config from '../config'; -import { StrUtil } from 'dstorage-common' import log from '../loaders/logger'; import pgPromise from 'pg-promise'; import {DateTime} from "ts-luxon"; +import StrUtil from "../utilz/strUtil"; +import {EnvLoader} from "../utilz/envLoader"; +import {MySqlUtil} from "../utilz/mySqlUtil"; +import {PgUtil} from "../utilz/pgUtil"; +import {IClient} from "pg-promise/typescript/pg-subset"; -const pg = pgPromise({}); -// todo switch to a config file -export const db = pg(`postgres://${process.env.DB_USER}:${process.env.DB_PASS}@${process.env.DB_HOST}:5432/${process.env.DB_NAME}`); -const crypto = require('crypto'); +// mysql +import crypto from "crypto"; +import {WinstonUtil} from "../utilz/winstonUtil"; + +var mysql = require('mysql') +var mysqlPool = mysql.createPool({ + connectionLimit: 10, + host: EnvLoader.getPropertyOrFail('DB_HOST'), + user: EnvLoader.getPropertyOrFail('DB_USER'), + password: EnvLoader.getPropertyOrFail('DB_PASS'), + database: EnvLoader.getPropertyOrFail('DB_NAME'), + port: Number(EnvLoader.getPropertyOrFail('DB_NAME')) +}) +MySqlUtil.init(mysqlPool); + +// postgres +// todo fix variable substitution, see #putValueInTable() +// todo move everything into PgUtil including connection management +// todo use PgUtil +// todo use placeholders (?) + +let logger = WinstonUtil.newLog('pg'); +let options = { + query: function (e) { + logger.debug('', e.query); + if (e.params) { + logger.debug('PARAMS: ', e.params); + } + } +}; +const pg: pgPromise.IMain<{}, IClient> = pgPromise(options); +export const pgPool = pg(`postgres://${EnvLoader.getPropertyOrFail('PG_USER')}:${EnvLoader.getPropertyOrFail('PG_PASS')}@${EnvLoader.getPropertyOrFail('PG_HOST')}:5432/${EnvLoader.getPropertyOrFail('PG_NAME')}`); +PgUtil.init(pgPool); export default class DbHelper { + public static async createStorageTablesIfNeeded() { + await PgUtil.update(` + CREATE TABLE IF NOT EXISTS node_storage_layout + ( + namespace VARCHAR(20) NOT NULL, + namespace_shard_id VARCHAR(64) NOT NULL, + ts_start TIMESTAMP NOT NULL default NOW(), + ts_end TIMESTAMP NOT NULL default NOW(), + table_name VARCHAR(64) NOT NULL, + PRIMARY KEY (namespace, namespace_shard_id, ts_start, ts_end) + ); + `); + await PgUtil.update(` + +-- allows itself to be called on every call +-- recreates a view, no more than once per day, which contains +-- a consistent ordered list of all namespaces (wallets) in the system +CREATE OR REPLACE FUNCTION update_storage_all_namespace_view() +RETURNS VOID AS $$ +DECLARE + table_rec RECORD; + combined_query TEXT := ''; + last_update_var DATE; +BEGIN + CREATE TABLE IF NOT EXISTS view_update_log ( + view_name TEXT PRIMARY KEY, + last_update DATE NOT NULL + ); + + INSERT INTO view_update_log (view_name, last_update) + VALUES ('storage_all_namespace_view', '2000-01-01') + ON CONFLICT (view_name) DO NOTHING; + + -- Retrieve the last update date from the log + SELECT last_update INTO last_update_var + FROM view_update_log + WHERE view_name = 'storage_all_namespace_view'; + + -- Check if the view has already been updated today + IF last_update_var = CURRENT_DATE THEN + RETURN; + END IF; + + -- Construct the combined query + FOR table_rec IN + SELECT tablename + FROM pg_tables + WHERE schemaname = 'public' + AND tablename LIKE 'storage_ns_%_d_%' + LOOP + IF combined_query <> '' THEN + combined_query := combined_query || ' UNION '; + END IF; + combined_query := combined_query || 'SELECT namespace_id, max(ts) as last_ts FROM ' || table_rec.tablename || ' group by namespace_id'; + END LOOP; + + -- Create or replace the view + EXECUTE 'CREATE OR REPLACE VIEW storage_all_namespace_view AS + SELECT namespace_id, max(last_ts) as last_usage + FROM (' || combined_query || ') AS combined_query + GROUP BY namespace_id + ORDER BY last_usage desc'; + + -- Update the last update date in the log + UPDATE view_update_log + SET last_update = CURRENT_DATE + WHERE view_name = 'storage_all_namespace_view'; + +END $$ LANGUAGE plpgsql; + `) + } + // maps key -> 8bit space (0..255) - // uses first 8bit from an md5 hash + // uses first 4bit from an md5 hash public static calculateShardForNamespaceIndex(namespace: string, key: string): number { let buf = crypto.createHash('md5').update(key).digest(); let i32 = buf.readUInt32LE(0); - const i8bits = i32 & 0xFF; + const i8bits = i32 % 32; // todo it's 0x20 now, not 0xff log.debug('calculateShardForNamespaceIndex(): ', buf, '->', i32, '->', i8bits); return i8bits; } @@ -33,7 +136,7 @@ export default class DbHelper { tablename='storage_ns_inbox_d_${dbdate}') ` console.log(sql) - return db.query(sql).then(data => { + return pgPool.query(sql).then(data => { console.log(data) return Promise.resolve(true) }).catch(err => { @@ -49,7 +152,7 @@ export default class DbHelper { values ($1, $2, $3, $4, $5) on conflict do nothing; ` console.log(sql); - return db.result(sql, [namespace, namespaceShardId, ts_start, ts_end, table_name], r => r.rowCount) + return pgPool.result(sql, [namespace, namespaceShardId, ts_start, ts_end, table_name], r => r.rowCount) .then(rowCount => { console.log('inserted rowcount: ', rowCount) return Promise.resolve(rowCount == 1) @@ -59,40 +162,33 @@ export default class DbHelper { }); } - public static async createNewStorageTable(tableName: string): Promise<boolean> { - const sql = ` + public static async createNewStorageTable(tableName: string): Promise<void> { + + // primary key should prevent duplicates by skey per inbox + await PgUtil.update(` CREATE TABLE IF NOT EXISTS ${tableName} ( namespace VARCHAR(20) NOT NULL, - namespace_shard_id VARCHAR(20) NOT NULL, - namespace_id VARCHAR(20) NOT NULL, + namespace_shard_id VARCHAR(64) NOT NULL, + namespace_id VARCHAR(64) NOT NULL, ts TIMESTAMP NOT NULL default NOW(), - skey VARCHAR(64) NOT NULL PRIMARY KEY, + skey VARCHAR(64) NOT NULL, dataSchema VARCHAR(20) NOT NULL, - payload JSONB - ); + payload JSONB, + PRIMARY KEY(namespace,namespace_shard_id,namespace_id,skey) + );`); - CREATE INDEX IF NOT EXISTS + await PgUtil.update(`CREATE INDEX IF NOT EXISTS ${tableName}_idx ON ${tableName} - USING btree (namespace ASC, namespace_shard_id ASC, namespace_id ASC, ts ASC); - ` - // todo CREATE INDEX CONCURRENTLY ? - console.log(sql) - return db.query(sql).then(data => { - console.log(data) - return Promise.resolve(true) - }).catch(err => { - console.log(err); - return Promise.resolve(false); - }); + USING btree (namespace ASC, namespace_id ASC, ts ASC);`); } // todo fix params substitution for the pg library; - public static async checkThatShardIsOnThisNode(namespace: string, namespaceShardId: number, nodeId: number): Promise<boolean> { + public static async checkThatShardIsOnThisNode(namespace: string, namespaceShardId: number, nodeId: string): Promise<boolean> { const sql = `SELECT count(*) FROM network_storage_layout where namespace='${namespace}' and namespace_shard_id='${namespaceShardId}' and node_id='${nodeId}'` console.log(sql); - return db.query(sql).then(data => { + return pgPool.query(sql).then(data => { console.log(data) let cnt = parseInt(data[0].count); console.log(cnt); @@ -109,7 +205,7 @@ export default class DbHelper { where namespace='${namespace}' and namespace_shard_id='${namespaceShardId}' and ts_start <= '${dateYmd.toISO()}' and ts_end > '${dateYmd.toISO()}'` log.debug(sql); - return db.query(sql).then(data => { + return pgPool.query(sql).then(data => { log.debug(data); if (data.length != 1) { return Promise.reject('missing table with the correct name'); @@ -127,7 +223,7 @@ export default class DbHelper { from ${tableName} where skey = '${skey}'`; log.debug(sql); - return db.query(sql).then(data => { + return pgPool.query(sql).then(data => { log.debug(data); if (data.length != 1) { return Promise.reject('missing table with the correct name'); @@ -140,15 +236,15 @@ export default class DbHelper { }); } - public static async findStorageItem(ns: string, tableName: string, skey: string): Promise<StorageRecord[]> { + public static async findStorageItem(ns: string, nsIndex: string, tableName: string, skey: string): Promise<StorageRecord[]> { log.debug(`tableName is ${tableName} , skey is ${skey}`); const sql = `select skey as skey, extract(epoch from ts) as ts, payload as payload from ${tableName} - where skey = '${skey}'`; + where skey = '${skey}' and namespace_id='${nsIndex}' and namespace='${ns}'`; log.debug(sql); - return db.query(sql).then(data => { + return pgPool.query(sql).then(data => { log.debug(data); if (data.length != 1) { return Promise.reject('missing table with the correct name'); @@ -167,12 +263,19 @@ export default class DbHelper { storageTable: string, ts: string, skey: string, body: string) { log.debug(`putValueInTable() namespace=${ns}, namespaceShardId=${shardId} ,storageTable=${storageTable}, skey=${skey}, jsonValue=${body}`); - const sql = `INSERT INTO ${storageTable} - (namespace, namespace_shard_id, namespace_id, ts, skey, dataschema, payload) - values ('${ns}', '${shardId}', '${nsIndex}', to_timestamp(${ts}),'${skey}', 'v1', '${body}') - ON CONFLICT (skey) DO UPDATE SET payload = '${body}'` - log.debug(sql); - return db.none(sql).then(data => { + const sql = `INSERT INTO ${storageTable} (namespace, namespace_shard_id, namespace_id, ts, skey, dataschema, payload) + values (\${ns}, \${shardId}, \${nsIndex}, to_timestamp(\${ts}), \${skey}, 'v1', \${body}) + ON CONFLICT (namespace, namespace_shard_id, namespace_id, skey) DO UPDATE SET payload = \${body}`; + const params = { + ns, + shardId, + nsIndex, + ts, + skey, + body + } + console.log(sql, params); + return pgPool.none(sql, params).then(data => { log.debug(data); return Promise.resolve(); }).catch(err => { @@ -182,8 +285,7 @@ export default class DbHelper { } static async listInbox(namespace: string, namespaceShardId: number, nsIndex:string, - storageTable: string, firstTsExcluded: string): Promise<object> { - const pageSize = 5; + storageTable: string, firstTsExcluded: string, pageSize:number): Promise<object> { const pageLookAhead = 3; const pageSizeForSameTimestamp = pageSize * 20; const isFirstQuery = StrUtil.isEmpty(firstTsExcluded); @@ -191,18 +293,21 @@ export default class DbHelper { extract(epoch from ts) as ts, payload as payload from ${storageTable} - where namespace_id='${nsIndex}' ${ isFirstQuery ? '' : `and ts > to_timestamp(${firstTsExcluded})` } + where namespace='${namespace}' + and namespace_id='${nsIndex}' + ${ isFirstQuery ? '' : `and ts > to_timestamp(${firstTsExcluded})` } order by ts limit ${pageSize + pageLookAhead}`; log.debug(sql); - let data1 = await db.any(sql); - var items = []; + let data1 = await pgPool.any(sql); + var items = new Map<string, any>(); var lastTs: number = 0; for (let i = 0; i < Math.min(data1.length, pageSize); i++) { - items.push(DbHelper.convertRowToItem(data1[i], namespace)); + const item = DbHelper.convertRowToItem(data1[i], namespace); + items.set(item.skey, item); lastTs = data1[i].ts; } - log.debug(`added ${items.length} items; lastTs=${lastTs}`) + log.debug(`added ${items.size} items; lastTs=${lastTs}`) // [0...{pagesize-1 (lastTs)}...{data1.length-1 (lastTsRowId)}....] // we always request pageSize+3 rows; so if we have these additional rows we can verify that their ts != last row ts, // otherwise we should add these additional rows to the output (works only for 2..3 rows) @@ -224,30 +329,35 @@ export default class DbHelper { extract(epoch from ts) as ts, payload as payload from ${storageTable} - where ts = to_timestamp(${lastTs}) + where namespace='${namespace}' + and namespace_id='${nsIndex}' + and ts = to_timestamp(${lastTs}) order by ts limit ${pageSizeForSameTimestamp}`; log.debug(sql2); - let data2 = await db.any(sql2); + let data2 = await pgPool.any(sql2); for (let row of data2) { - items.push(DbHelper.convertRowToItem(row, namespace)); + const item = DbHelper.convertRowToItem(row, namespace); + items.set(item.skey, item); } log.debug(`extra query with ${data2.length} items to fix duplicate timestamps pagination, total size is ${items.length}`); } else if (lastTsRowId > pageSize - 1) { // we have more rows with same timestamp, they fit in pageSize+pageLookAhead rows for (let i = pageSize; i <= lastTsRowId; i++) { - items.push(DbHelper.convertRowToItem(data1[i], namespace)); + const item = DbHelper.convertRowToItem(data1[i], namespace); + items.set(item.skey, item); } - log.debug(`updated to ${items.length} items to fix duplicate timestamps pagination`) + log.debug(`updated to ${items.size} items to fix duplicate timestamps pagination`) } } + let itemsArr = [...items.values()]; return { - 'items': items, + 'items': itemsArr, 'lastTs': lastTs }; } - private static convertRowToItem(rowObj: any, namespace: string): any { + private static convertRowToItem(rowObj: any, namespace: string) { return { ns: namespace, skey: rowObj.skey, @@ -255,6 +365,26 @@ export default class DbHelper { payload: rowObj.payload }; } + + static async listAllNsIndex() { + const updateViewIfNeeded = `select update_storage_all_namespace_view();`; + log.debug(updateViewIfNeeded); + await pgPool.any(updateViewIfNeeded); + const selectAll = `select namespace_id, last_usage from storage_all_namespace_view;`; + log.debug(selectAll); + return pgPool.manyOrNone(selectAll).then(data => { + log.debug(data); + return Promise.resolve(data == null ? [] : data.map(function (item) { + return { + 'nsId': item.namespace_id, + 'last_usage' : item.last_usage + }; + })); + }).catch(err => { + log.debug(err); + return Promise.reject(err); + }); + } } export class StorageRecord { diff --git a/snode/src/loaders/envVerifier.ts b/snode/src/loaders/envVerifier.ts deleted file mode 100755 index 9bb8384..0000000 --- a/snode/src/loaders/envVerifier.ts +++ /dev/null @@ -1,123 +0,0 @@ -import LoggerInstance from './logger'; - -export default async () => { - try { - // Load FS and Other dependency - const fs = require('fs'); - const envfile = require('envfile'); - const readline = require('readline'); - - var fileModified = false; - - // Load environment files - const envpath = `${__dirname}/../../.env`; - const envsamplepath = `${__dirname}/../../.env.sample`; - - // First check and create .env if it doesn't exists - if (!fs.existsSync(envpath)) { - LoggerInstance.info('-- Checking for ENV File... Not Found'); - fs.writeFileSync(envpath, '', { flag: 'wx' }); - LoggerInstance.info(' -- ENV File Generated'); - } else { - LoggerInstance.info(' -- Checking for ENV File... Found'); - } - - // Now Load the environment - const envData = fs.readFileSync(envpath, 'utf8'); - const envObject = envfile.parse(envData); - - const envSampleData = fs.readFileSync(envsamplepath, 'utf8'); - const envSampleObject = envfile.parse(envSampleData); - - const readIntSampleENV = readline.createInterface({ - input: fs.createReadStream(envsamplepath), - output: false, - }); - - let realENVContents = ''; - LoggerInstance.info(' -- Verifying and building ENV File...'); - - for await (const line of readIntSampleENV) { - let moddedLine = line; - - // Check if line is comment or environment variable - if (moddedLine.startsWith('#') || moddedLine.startsWith('\n') || moddedLine.trim().length == 0) { - // do nothing, just include it in the line - // console.log("----"); - } else { - // This is an environtment variable, first segregate the comment if any and the variable info - const delimiter = '#'; - - const index = moddedLine.indexOf('#'); - const splits = - index == -1 - ? [moddedLine.slice(0, index), ''] - : [moddedLine.slice(0, index), ' ' + delimiter + moddedLine.slice(index + 1)]; - - const envVar = splits[0].split('=')[0]; // Get environment variable by splitting the sample and then taking first seperation - const comment = splits[1]; - - // Check if envVar exists in real env, if not ask for val - // console.log(envObject[`${envVar}`]) - if (!envObject[`${envVar}`] || envObject[`${envVar}`].trim() == '') { - // env key doesn't exist, ask for input - LoggerInstance.input(` Enter ENV Variable Value --> ${envVar}`); - - var value = ''; - - while (value.trim().length == 0) { - const rl = readline.createInterface({ - input: process.stdin, - output: null, - }); - value = await doSyncPrompt(rl, `${envSampleObject[envVar]} >`); - - if (value.trim().length == 0) { - LoggerInstance.error(" Incorrect Entry, Field can't be empty"); - } - } - - LoggerInstance.saved(` [Saved] ${envVar}=${value}`); - moddedLine = `${envVar}=${value}${comment}`; - - fileModified = true; - } else { - // Value exists so just replicate - moddedLine = `${envVar}=${envObject[envVar]}${comment}`; - } - } - - // finally append the line - realENVContents = `${realENVContents}\n${moddedLine}`; - } - - if (fileModified) { - LoggerInstance.info(' -- new ENV file generated, saving'); - fs.writeFileSync(envpath, realENVContents, { flag: 'w' }); - LoggerInstance.info(' -- ENV file saved!'); - } else { - LoggerInstance.info(' -- ENV file verified!'); - } - - return null; - } catch (e) { - LoggerInstance.error('🔥 Error on env verifier loader: %o', e); - throw e; - } - - // Leverages Node.js' awesome async/await functionality - async function doSyncPrompt(rl, message) { - var promptInput = await readLineAsync(rl, message); - rl.close(); - - return promptInput; - } - - function readLineAsync(rl, message) { - return new Promise((resolve, reject) => { - rl.question(message, answer => { - resolve(answer.trim()); - }); - }); - } -}; diff --git a/snode/src/loaders/express.ts b/snode/src/loaders/express.ts index f9b642c..8a7b429 100755 --- a/snode/src/loaders/express.ts +++ b/snode/src/loaders/express.ts @@ -13,6 +13,11 @@ export default ({ app }: { app: express.Application }) => { res.status(200).end(); }); + // The magic package that prevents frontend developers going nuts + // Alternate description: + // Enable Cross Origin Resource Sharing to all origins by default + app.use(cors()); + app.use('/api', routes()); // Load Static Files @@ -46,4 +51,5 @@ export default ({ app }: { app: express.Application }) => { } }); }); + }; diff --git a/snode/src/loaders/logger.ts b/snode/src/loaders/logger.ts index 4bf4fda..752b321 100755 --- a/snode/src/loaders/logger.ts +++ b/snode/src/loaders/logger.ts @@ -1,23 +1,7 @@ -import Transport from 'winston-transport'; import winston from 'winston'; - import config from '../config'; -const moment = require('moment'); // time library - -class DynamicLoggerTransport extends Transport { - private dynamicLogging: object = null; - private formatLogInfo: Function = null; - - constructor(opts, formatLogInfo) { - super(opts); - this.formatLogInfo = formatLogInfo; - } - - public setDynamicLoggerObject(object) { - this.dynamicLogging = object; - } +import {WinstonUtil} from "../utilz/winstonUtil"; -} const customLevels = { levels: { @@ -41,73 +25,20 @@ const customLevels = { } }; -var options = { - file: { - level: 'verbose', - filename: `${__dirname}/../../logs/app.log`, - handleExceptions: true, - json: true, - maxsize: 5242880, // 5MB - maxFiles: 5, - colorize: true - } -}; - -const parser = (param: any): string => { - if (!param) { - return ''; - } - if (typeof param === 'string') { - return param; - } - - return Object.keys(param).length ? JSON.stringify(param, undefined, 2) : ''; -}; - -const formatLogInfo = info => { - const { timestamp, level, message, meta } = info; - - const ts = moment(timestamp) - .local() - .format('HH:MM:ss'); - const metaMsg = meta ? `: ${parser(meta)}` : ''; - - return `${ts} ${level} ${parser(message)} ${metaMsg}`; -}; - -const formatter = winston.format.combine( - winston.format.errors({ stack: true }), - winston.format.splat(), - winston.format.printf(info => { - return formatLogInfo(info); - }), - winston.format.colorize({ - all: true - }) -); - let transports = []; - transports.push( - // Console should always be at 0 and dynamic log should always be at 2 - // remember and not change it as it's manually baked in hijackLogger - new winston.transports.Console({ - format: formatter - }), - new winston.transports.File(options.file) + // Console should always be at 0 and dynamic log should always be at 2 + // remember and not change it as it's manually baked in hijackLogger + WinstonUtil.consoleTransport, + WinstonUtil.debugFileTransport, + WinstonUtil.errorFileTransport, ); - +// WE SIMPLY REDIRECT ALL TO winstonUtil formatter x winstonUtil transports +// this instance is being used across the whole codebase const LoggerInstance = winston.createLogger({ level: config.logs.level, levels: customLevels.levels, - format: winston.format.combine( - winston.format.timestamp({ - format: 'YYYY-MM-DD HH:mm:ss', - }), - winston.format.errors({ stack: true }), - winston.format.splat(), - winston.format.json() - ), + format: WinstonUtil.createFormat2WhichRendersClassName(), transports }); diff --git a/snode/src/services/messaging-common/messageBlock.ts b/snode/src/services/messaging-common/messageBlock.ts new file mode 100644 index 0000000..1a4953b --- /dev/null +++ b/snode/src/services/messaging-common/messageBlock.ts @@ -0,0 +1,472 @@ +/** + block + 1 inputs -- + 2 outputs -- + message1 { source: wallet100, target: broadcast, signatures: [ { w100, 0x5} ] } + messageM { source: wallet200, target: [wallet1, ..., walletN], signatures: [ { w200, 0x6} ] } + 3 output signatures -- + signatures: [ { v1, 0xA}, { v2, 0xB}, { v3, 0xC}, + { s1, 0xD}, { s2, 0xE}, { s3, 0xF}, + { d1, 0x1}, { d2, 0x2}, { d3, 0x3} ] + */ +import {Coll} from '../../utilz/coll' +import StrUtil from '../../utilz/strUtil' +import {EthSig} from '../../utilz/ethSig' +import {Logger} from 'winston' +import {WinstonUtil} from '../../utilz/winstonUtil' +import {ObjectHasher} from '../../utilz/objectHasher' +import {EthUtil} from '../../utilz/EthUtil' +import {Check} from '../../utilz/check' +import {NumUtil} from "../../utilz/numUtil"; + +/* +ex: +{ + "requests": [ + { + "senderType": 0, + "id": "6294189a-03d6-4412-8458-971bef18969c", + "verificationProof": "eip712v2:0x37ba76d10dceff2c4675d186a17b0e0ffe6020eef42ba170a2436192051996ad3daf835bb660bbad587f44a4e153bd9285fe0a166b35abd978453942f0b325ec1c::uid::1675756031", + "sender": "eip155:5:0xD8634C39BBFd4033c0d3289C4515275102423681", + "recipient": "eip155:0xD8634C39BBFd4033c0d3289C4515275102423681", + "source": "ETH_TEST_GOERLI", + "identityBytes": "0+1+EPNS x LISCON+Dropping test directly on push nodes at LISCON 2021.", + "validatorToken": "eyJub2RlcyI6W3sibm9kZUlkIjoiMHg4ZTEyZEUxMkMzNWVBQmYzNWI1NmIwNEU1M0M0RTQ2OGU0NjcyN0U4IiwidHNNaWxsaXMiOjE2OTIyNzk1MTAwNTEsInJhbmRvbUhleCI6IjA5ZWFmOWE0YmE4ZDA3OTNkOTZjZmQ2OGYzNmE5ZDAwMDMzY2FlNGUiLCJwaW5nUmVzdWx0cyI6W3sibm9kZUlkIjoiMHhmREFFYWY3YWZDRmJiNGU0ZDE2REM2NmJEMjAzOWZkNjAwNENGY2U4IiwidHNNaWxsaXMiOjE2OTIyNzk1MTAwMjgsInN0YXR1cyI6MX1dLCJzaWduYXR1cmUiOiIweDAwYmYwMjNiYWExMTI0ZTEzYzI2MDg5ZWY1MjVmNWE2YjhmZGY4OWJhODA1YzRjNjU3OTJiMmY2M2I2ZmI3MDY1MWNlYjM1YTEzODM2MjZhODdmYzU4OGExNjQ1NDViMDE0NDk5NWFkM2Q5ODRlMGM2MDcwOWZmZWM1MDcxNThjMWMifSx7Im5vZGVJZCI6IjB4ZkRBRWFmN2FmQ0ZiYjRlNGQxNkRDNjZiRDIwMzlmZDYwMDRDRmNlOCIsInRzTWlsbGlzIjoxNjkyMjc5NTEwMDU1LCJyYW5kb21IZXgiOiIxN2RlZTc1NDcwYjQ0NWFiNDgzN2U4YTdhNDIxNmIwMjhkMzA4MTMyIiwicGluZ1Jlc3VsdHMiOlt7Im5vZGVJZCI6IjB4OGUxMmRFMTJDMzVlQUJmMzViNTZiMDRFNTNDNEU0NjhlNDY3MjdFOCIsInRzTWlsbGlzIjoxNjkyMjc5NTEwMDM3LCJzdGF0dXMiOjF9XSwic2lnbmF0dXJlIjoiMHgzYjJhOTVkMTBlNDdkZjY2MGRmMzM2NzcxNTA2MWZlOWE3ZDZhYTUzZGZmMGE2NzI2YzI0MjI0OWU2NDUyNTFiNjQ4MWQwMWNiMmViMWJiMDRkMmI1ZjI3ZjA1ODFkZTc5ZTFiNjdjMzRiZTBkNTMyOWE1YWViZWZiMGJjYjE0YTFiIn1dfQ==" + } + ], + "responses": [ + { + "header": { + "sender": "eip155:5:0xD8634C39BBFd4033c0d3289C4515275102423681", + "recipientsResolved": [ + { + "addr": "eip155:0x5ac9E6205eACA2bBbA6eF716FD9AabD76326EEee", + "ts": 1664871012 + }, + { + "addr": "eip155:0x69e666767Ba3a661369e1e2F572EdE7ADC926029", + "ts": 1666268868 + }, + { + "addr": "eip155:0xD8634C39BBFd4033c0d3289C4515275102423681", + "ts": 1692295692 + } + ], + "senderType": 0, + "source": "ETH_TEST_GOERLI" + }, + "payload": { + "notification": { + "title": "testing goerli - EPNS x LISCON", + "body": "Dropping test directly on push nodes at LISCON 2021." + }, + "data": { + "type": 1, + "app": "testing goerli", + "icon": "https://gateway.ipfs.io/ipfs/bafybeidkt3qrlcplntabfazs7nnzlxdzu36mmieth2ocyphm2kp4sh333a/QmTX8zZjzuKpiLZmn4ShNzyKDakNdbBQfwi449TBw7wgoK", + "url": "https://dev.push.org/", + "sectype": null, + "asub": "EPNS x LISCON", + "amsg": "Dropping test directly on push nodes at LISCON 2021.", + "acta": "", + "aimg": "", + "etime": null, + "hidden": "0", + "silent": "0", + "additionalMeta": null, + "sid": "6294189a-03d6-4412-8458-971bef18969c" + }, + "recipients": "eip155:0xd8634c39bbfd4033c0d3289c4515275102423681", + "verificationProof": "eip712v2:0x37ba76d10dceff2c4675d186a17b0e0ffe6020eef42ba170a2436192051996ad3daf835bb660bbad587f44a4e153bd9285fe0a166b35abd978453942f0b325ec1c::uid::1675756031" + } + } + ], + "responsesSignatures": [ + [ + { + "data": null, + "nodeMeta": { + "nodeId": "0x8e12dE12C35eABf35b56b04E53C4E468e46727E8", + "role": "V", + "tsMillis": 1692281453978 + }, + "signature": "0xb95379d016b20161756c32a756eaa1b1fee7817874a55c26ae8f339bcbeb4ae172bcdcecd64c773559a4198dcd67b8bb78e5ed6d4370d9a016a08c46cca417111c" + }, + { + "data": { + "recipientsMissing": { + "recipients": [ + { + "addr": "eip155:0xD8634C39BBFd4033c0d3289C4515275102423681" + } + ], + "sid": "6294189a-03d6-4412-8458-971bef18969c" + } + }, + "nodeMeta": { + "nodeId": "0xfDAEaf7afCFbb4e4d16DC66bD2039fd6004CFce8", + "role": "A", + "tsMillis": 1692281454034 + }, + "signature": "0x51a7216a97e180876c0da7a74ab2e3e2ea2d3484a29d1488853eb1f76540f078470d421386664adc26a57959f72df2a62e173ed4a678560c8167cf89d9d417ba1c" + } + ] + ], + "attestToken": "eyJub2RlcyI6W3sibm9kZUlkIjoiMHhmREFFYWY3YWZDRmJiNGU0ZDE2REM2NmJEMjAzOWZkNjAwNENGY2U4IiwidHNNaWxsaXMiOjE2OTIyODE0MzAwMjcsInJhbmRvbUhleCI6ImQ0OWM1NjY3MGVkNzIwZDQ1MDFkMjYzNmQ0YWY2MWI2OGEwNzJkZGMiLCJwaW5nUmVzdWx0cyI6W3sibm9kZUlkIjoiMHg4ZTEyZEUxMkMzNWVBQmYzNWI1NmIwNEU1M0M0RTQ2OGU0NjcyN0U4IiwidHNNaWxsaXMiOjE2OTIyODE0MDAwMzQsInN0YXR1cyI6MX1dLCJzaWduYXR1cmUiOiIweDlhNTFkNDU3MjM4ZGMzODM3MDgxNWM5Yzc0ZTdhZGMwNjE1YjdkMTc0OTU5YmViNmJlMDI1NTc5MzM0YmQyOTg1MDE1MGFjMjY0YTEyZGVhYzIxMmVjODc2ZjkyMjNmYTJkZmU3Y2MyOTE3ZDZjN2E5MjQ3MThkZDNhMjM1ZGNmMWIifSx7Im5vZGVJZCI6IjB4OGUxMmRFMTJDMzVlQUJmMzViNTZiMDRFNTNDNEU0NjhlNDY3MjdFOCIsInRzTWlsbGlzIjoxNjkyMjgxNDMwMDM1LCJyYW5kb21IZXgiOiIwOWNkYTI3ZTdmNzE2MmNhYmM4YzRiY2NiZDc2NjNhZGEyNTg0YzBkIiwicGluZ1Jlc3VsdHMiOlt7Im5vZGVJZCI6IjB4ZkRBRWFmN2FmQ0ZiYjRlNGQxNkRDNjZiRDIwMzlmZDYwMDRDRmNlOCIsInRzTWlsbGlzIjoxNjkyMjgxNDMwMDIwLCJzdGF0dXMiOjF9XSwic2lnbmF0dXJlIjoiMHgwOWRhNjg3NGMyNmVhNzAxODZlY2U4NWJiMWM1OWU0YjA5MjUxYTcwZTY5MmJlYjJlNmNkM2FjMDMyMmViN2ZhNDM2MmM3ZTRhZWY2ZmVmMzQyMDJjNGQ3ZmRkYjRjMTQ0ZWJjMGFkMWE5NmZlZGYwMzViNTVjMDg4MDM3MWI2ODFiIn1dfQ==" +} + */ +export class MessageBlock { + id: string + // input (filled by NetworkRole.VALIDATOR) + requests: PayloadItem[] = [] + // output (filled by NetworkRole.VALIDATOR) + attestToken: string + // output (filled by NetworkRole.VALIDATOR) + responses: FeedItem[] = [] // [feedItem] + // output (filled by NetworkRole.VALIDATOR at [0], NetworkRole.ATTESTER at [1+]) + responsesSignatures: FeedItemSig[][] = [] // [feedItem] [signatures] + + // stages + // randao: any; // todo secure random vector, which defines applied validators + // blockValidatorSig: VSignature[]; // first validator who produced that block + // blockStorageSig: VSignature[]; // snodes which store that block +} + +export class MessageBlockSignatures { + id: string + responsesSignatures: FeedItemSig[][] = [] +} + +export enum NetworkRole { + VALIDATOR = 'V', + ATTESTER = 'A', + STORAGE = 'S', + DELIVERY = 'D' +} + +export class NodeMeta { + nodeId: string // uniq node id, this is eth wallet, ex: 0xAAAAAAA + role: NetworkRole // validator, attester ex: "V" + tsMillis: number // timestamp, ms ex: 1999999 +} + +/* +ex: +{ + "nodeMeta": { + "nodeId": "0xfDAEaf7afCFbb4e4d16DC66bD2039fd6004CFce8", + "role": "A", + "tsMillis": 1692199658713 + }, + "data": { + "recipientsMissing" : [{ + "sid" : "e9fd5df5-d782-4196-9072-f912053bf96c", + "recipients": [ + {"addr" : "eip155:0xd8634c39bbfd4033c0d3289c4515275102423681"} + ], + }] + }, + "signature": "0xf46f12e12c8b1a7b15a38702f01db62a081c6906fd0839cef077f567e8bbb0b4603b51ca004b43714d9cb4032aefc6ef63646d0fa1fdb8281ff5f824efe4959c1c" +} + */ +export class FeedItemSig { + data: FISData | null + nodeMeta: NodeMeta // empty, until signed + signature: string // empty, until signed + + constructor(data: FISData, nodeMeta: NodeMeta, signature: string) { + this.data = data + this.nodeMeta = nodeMeta + this.signature = signature + } +} + +export class FISData { + recipientsMissing?: RecipientsMissing +} + +export class RecipientsMissing { + sid: string + recipients: RecipientMissing[] = [] +} + +export class RecipientMissing { + addr: string +} + +// see MySql:feeds +export class FeedItem { + header: FHeader + payload: FPayload +} + +export class FHeader { + sender: string // ex: eip155:1:0x6500 + recipientsResolved: Recipient[] // ex: eip155:1:0x0700 or a list of recipients + senderType: number // ex: #SenderType.CHANNEL + source: string // ex: ETH_MAINNET + // verification: string; // ex: eip712v2:0xFO00::uid::3F // todo Check that this is not needed + // subscribed:boolean; //, ex: true + // isSpam:boolean; //, ex: true +} + +export class Recipient { + addr: string + ts: number +} + +export class FNotification { + title: string + body: string +} + +export enum SenderType { + CHANNEL = 0, + W2W = 1, + PUSH_VIDEO = 2, + PUSH_SPACE = 3 +} + +export class FPayload { + data: FData + notification: FNotification + sectype: string + recipients: any + verificationProof: any +} + +export class FData { + app: string + sid: string + url: string + acta: string + aimg: string + amsg: string + asub: string + icon: string + type: number + epoch: string + etime: string + sectype: string + hidden: string // 0 or 1 + videoMeta: any +} + +// see PayloadService.addExternalPayload +export class PayloadItem { + // ex: AAAZZ-AAAAA-BBBB + id: string + // ex: eip712v2:0xFO00::uid::3F + verificationProof: string + // ex: eip155:1:0x6500 + sender: string + // ex: #SenderType.CHANNEL + senderType: number = SenderType.CHANNEL + // ex: eip155:1:0x0700 + recipient: string + // ex: ETH_MAINNET + source: string + // ex: 2+{"title":"test", "body":"test2", "data":{"acta":"", "aimg":"","amsg":""}} + identityBytes: any + + validatorToken: string + + public constructor( + payloadId: string, + verificationProof: string, + sender: string, + senderType: number = SenderType.CHANNEL, + recipient: string, + source: string, + identityBytes: any, + validatorToken?: string + ) { + this.id = payloadId + this.verificationProof = verificationProof + this.sender = sender + this.senderType = senderType + this.recipient = recipient + this.source = source + this.identityBytes = identityBytes + this.validatorToken = validatorToken + } +} + +export class MessageBlockUtil { + public static log: Logger = WinstonUtil.newLog(MessageBlockUtil) + + /** + * Calculates which addresses will receive messages + * as a result of processing this block.request[requestOffset] + * by a delivery node + * + * @param block + * @param requestOffset search by an offset + * @param requestSid OR search by sid + */ + static calculateRecipients( + block: Readonly<MessageBlock>, + requestOffset: number, + requestSid?: string + ): string[] { + if (requestOffset == null) { + requestOffset = block.requests.findIndex((value) => value.id === requestSid) + } + Check.isTrue(requestOffset >= 0, 'requestOffset not found') + const recipientsV = block.responses[requestOffset].header.recipientsResolved + const signaturesA = block.responsesSignatures[requestOffset] + const allRecipients = Coll.arrayToMap(recipientsV, 'addr') + for (const signatureA of signaturesA) { + const recipientsMissing = signatureA.data.recipientsMissing + if (recipientsMissing != null) { + for (const itemToRemove of recipientsMissing.recipients) { + allRecipients.delete(itemToRemove.addr) + } + } + } + return Array.from(allRecipients.keys()) + } + + static calculateHash(block: Readonly<MessageBlock>) { + return ObjectHasher.hashToSha256(block) + } + + /** + * Evaluates all messageBlock target recipients (normally these are addresses) + * for every included packet + * + * And for every recipient finds which shard will host this address + * + * @param block + * @param shardCount total amount of shards; see smart contract for this value + * @returns a set of shard ids + */ + static calculateAffectedShards(block: Readonly<MessageBlock>, shardCount: number): Set<number> { + const shards = new Set<number>() + for (const fi of block.responses) { + for (const recipient of fi.header.recipientsResolved) { + let shardId = this.calculateAffectedShard(recipient.addr, shardCount); + if (shardId == null) { + this.log.error('cannot calculate shardId for recipient %o in %o', recipient, fi); + continue; + } + shards.add(shardId) + } + } + return shards + } + + // 1) try to get first byte from caip address + // eip155:5:0xD8634C39BBFd4033c0d3289C4515275102423681 -> d8 -> 216 + // and use it as shard + // 2) take sha256(addr) -> + // shard count is a smart contract constant; normally it should never change + // lets read this value from a contract + public static calculateAffectedShard(recipientAddr: string, shardCount: number): number | null { + if (StrUtil.isEmpty(recipientAddr)) { + return null; + } + let shardId: number = null + const addrObj = EthUtil.parseCaipAddress(recipientAddr) + if (addrObj != null + && !StrUtil.isEmpty(addrObj.addr) + && addrObj.addr.startsWith('0x') + && addrObj.addr.length > 4) { + const firstByteAsHex = addrObj.addr.substring(2, 4).toLowerCase(); + shardId = Number.parseInt(firstByteAsHex, 16); + } + // 2) try to get sha256 otherwise + if (shardId == null) { + const firstByteAsHex = ObjectHasher.hashToSha256(recipientAddr).toLowerCase().substring(0, 2); + shardId = Number.parseInt(firstByteAsHex, 16); + } + Check.notNull(shardId); + Check.isTrue(shardId >= 0 && shardId <= 255 && NumUtil.isRoundedInteger(shardId)); + Check.isTrue(shardCount >= 1); + return shardId % shardCount; + } + + public static getBlockCreationTimeMillis(block: MessageBlock): number | null { + if (block.responsesSignatures.length > 0 + && block.responsesSignatures[0].length > 0) { + const sig = block.responsesSignatures[0][0]; + return sig?.nodeMeta?.tsMillis; + } + return null; + } + + public static checkBlock(block: MessageBlock, validatorsFromContract: Set<string>): CheckResult { + if (block.requests.length != block.responses.length) { + return CheckResult.failWithText( + `message block has incorrect length ${block.requests.length}!=${block.responses.length}` + ) + } + const blockValidatorNodeId = null + const item0sig0 = block.responsesSignatures[0][0] + if ( + item0sig0?.nodeMeta.role != NetworkRole.VALIDATOR || + StrUtil.isEmpty(item0sig0?.nodeMeta.nodeId) + ) { + return CheckResult.failWithText('first signature is not performed by a validator') + } + const result: FeedItemSig[] = [] + for (let i = 0; i < block.responses.length; i++) { + const payloadItem = block.requests[i] + const fi = block.responses[i] + // check signatures + const feedItemSignatures = block.responsesSignatures[i] + for (let j = 0; j < feedItemSignatures.length; j++) { + const fiSig = feedItemSignatures[j] + if (j == 0) { + if (fiSig.nodeMeta.role != NetworkRole.VALIDATOR) { + return CheckResult.failWithText( + `First signature on a feed item should be ${NetworkRole.VALIDATOR}` + ) + } + } else { + if (fiSig.nodeMeta.role != NetworkRole.ATTESTER) { + return CheckResult.failWithText( + `2+ signature on a feed item should be ${NetworkRole.ATTESTER}` + ) + } + } + const valid = EthSig.check( + fiSig.signature, + fiSig.nodeMeta.nodeId, + fi, + fiSig.data, + fiSig.nodeMeta + ) + if (!valid) { + return CheckResult.failWithText( + `signature is not valid: replyOffset ${i} sigOffset ${j} : ${JSON.stringify(fiSig)} ` + ) + } else { + this.log.debug('valid signature %o', fiSig) + } + const validNodeId = validatorsFromContract.has(fiSig.nodeMeta.nodeId) + if (!validNodeId) { + return CheckResult.failWithText( + `${fiSig.nodeMeta.nodeId} is not a valid nodeId from a contract` + ) + } else { + this.log.debug('valid nodeId %o', fiSig.nodeMeta.nodeId) + } + } + } + return CheckResult.ok() + } +} + +export class CheckResult { + success: boolean + err: string + + static failWithText(err: string): CheckResult { + return {success: false, err: err} + } + + static ok(): CheckResult { + return {success: true, err: ''} + } +} diff --git a/snode/src/services/messaging-common/queueClientHelper.ts b/snode/src/services/messaging-common/queueClientHelper.ts new file mode 100644 index 0000000..e97eb90 --- /dev/null +++ b/snode/src/services/messaging-common/queueClientHelper.ts @@ -0,0 +1,52 @@ +import { Check } from '../../utilz/check' +import { ValidatorContractState } from './validatorContractState' +import { MySqlUtil } from '../../utilz/mySqlUtil' +import { Logger } from 'winston' +import { WinstonUtil } from '../../utilz/winstonUtil' + +export class QueueClientHelper { + private static log: Logger = WinstonUtil.newLog(QueueClientHelper) + + // updates the dset_client table used for queries according to the contract data + public static async initClientForEveryQueueForEveryValidator( + contract: ValidatorContractState, + queueNames: string[] + ) { + Check.notEmptyArr(queueNames, 'queue names missing') + const allValidators = contract.getAllValidatorsExceptSelf() + for (const queueName of queueNames) { + for (const nodeInfo of allValidators) { + const targetNodeId = nodeInfo.nodeId + const targetNodeUrl = nodeInfo.url + const targetState = ValidatorContractState.isEnabled(nodeInfo) ? 1 : 0 + await MySqlUtil.insert( + `INSERT INTO dset_client (queue_name, target_node_id, target_node_url, target_offset, state) + VALUES (?, ?, ?, 0, ?) + ON DUPLICATE KEY UPDATE target_node_url=?, + state=?`, + queueName, + targetNodeId, + targetNodeUrl, + targetState, + targetNodeUrl, + targetState + ) + const targetOffset = await MySqlUtil.queryOneValue<number>( + `SELECT target_offset + FROM dset_client + where queue_name = ? + and target_node_id = ?`, + queueName, + targetNodeId + ) + this.log.info( + 'client polls (%s) queue: %s node: %s from offset: %d ', + targetState, + queueName, + targetNodeId, + targetOffset + ) + } + } + } +} diff --git a/snode/src/services/messaging-common/redisClient.ts b/snode/src/services/messaging-common/redisClient.ts new file mode 100644 index 0000000..b765299 --- /dev/null +++ b/snode/src/services/messaging-common/redisClient.ts @@ -0,0 +1,24 @@ +import { createClient, RedisClientType } from 'redis' +import config from '../../config' +import { Logger } from 'winston' +import { WinstonUtil } from '../../utilz/winstonUtil' +import { Service } from 'typedi' + +@Service() +export class RedisClient { + public log: Logger = WinstonUtil.newLog(RedisClient) + private client: RedisClientType + + public async postConstruct(): Promise<any> { + this.client = await createClient({ + url: config.REDIS_URL + }) + await this.client.connect() + this.client.on('error', (err) => this.log.error('Redis Client Error', err)) + await this.client.set('connection', 'Redis connection successful') // todo do we need this line? + } + + public getClient(): RedisClientType { + return this.client + } +} diff --git a/snode/src/services/messaging-common/storageContractState.ts b/snode/src/services/messaging-common/storageContractState.ts new file mode 100644 index 0000000..2d9f27a --- /dev/null +++ b/snode/src/services/messaging-common/storageContractState.ts @@ -0,0 +1,151 @@ +import {Service} from "typedi"; +import {Logger} from "winston"; +import {WinstonUtil} from "../../utilz/winstonUtil"; +import {EnvLoader} from "../../utilz/envLoader"; +import {Contract, ethers, Wallet} from "ethers"; +import {JsonRpcProvider} from "@ethersproject/providers/src.ts/json-rpc-provider"; +import {readFileSync} from "fs"; +import {BitUtil} from "../../utilz/bitUtil"; +import {EthersUtil} from "../../utilz/ethersUtil"; +import {Coll} from "../../utilz/coll"; +import {Check} from "../../utilz/check"; + + +@Service() +export class StorageContractState { + public log: Logger = WinstonUtil.newLog(StorageContractState); + + private listener: StorageContractListener; + private provider: JsonRpcProvider + private rpcEndpoint: string + private rpcNetwork: number + private useSigner: boolean; + // NODE STATE + private nodeWallet: Wallet | null; + private nodeAddress: string | null; + // CONTRACT STATE + private storageCtAddr: string + private storageCt: StorageContract; + public rf: number; + public shardCount: number; + // node0xA -> shard0, shard1, shard2 + public nodeShardMap: Map<string, Set<number>> = new Map(); + // VARS + // shard0 -> node0xA, node0xB + public shardToNodesMap: Map<number, Set<string>> = new Map(); + + public async postConstruct(useSigner: boolean, listener: StorageContractListener) { + this.log.info('postConstruct()'); + this.listener = listener; + this.storageCtAddr = EnvLoader.getPropertyOrFail('STORAGE_CONTRACT_ADDRESS') + this.rpcEndpoint = EnvLoader.getPropertyOrFail('VALIDATOR_RPC_ENDPOINT') + this.rpcNetwork = Number.parseInt(EnvLoader.getPropertyOrFail('VALIDATOR_RPC_NETWORK')) + this.provider = new ethers.providers.JsonRpcProvider( + this.rpcEndpoint, + this.rpcNetwork + ) + this.useSigner = useSigner; + if (useSigner) { + let connect = await EthersUtil.connectWithKey( + EnvLoader.getPropertyOrFail('CONFIG_DIR'), + EnvLoader.getPropertyOrFail('VALIDATOR_PRIVATE_KEY_FILE'), + EnvLoader.getPropertyOrFail('VALIDATOR_PRIVATE_KEY_PASS'), + 'StorageV1.json', + EnvLoader.getPropertyOrFail('STORAGE_CONTRACT_ADDRESS'), + this.provider + ); + this.storageCt = <StorageContract>connect.contract; + this.nodeWallet = connect.nodeWallet; + this.nodeAddress = connect.nodeAddress; + } else { + this.storageCt = <StorageContract>await EthersUtil.connectWithoutKey( + EnvLoader.getPropertyOrFail('CONFIG_DIR'), + 'StorageV1.json', + EnvLoader.getPropertyOrFail('STORAGE_CONTRACT_ADDRESS'), + this.provider + ) + } + await this.readContractState(); + await this.subscribeToContractChanges(); // todo ? ethers or hardhat always emits 1 fake event + } + + public async readContractState() { + this.log.info(`connected to StorageContract`) + this.rf = await this.storageCt.rf(); + let nodeCount = await this.storageCt.nodeCount(); + this.shardCount = await this.storageCt.SHARD_COUNT(); + this.log.info(`rf: ${this.rf} , shard count: ${this.shardCount} total nodeCount: ${nodeCount}`); + let nodesAddrList = await this.storageCt.getNodeAddresses(); + + await this.reloadEveryAddressAndNotifyListeners(nodesAddrList); + } + + public async subscribeToContractChanges() { + this.storageCt.on('SNodeMappingChanged', async (nodeList: string[]) => { + this.log.info(`EVENT: SNodeMappingChanged: nodeList=${JSON.stringify(nodeList)}`); + await this.reloadEveryAddressAndNotifyListeners(nodeList); + }); + } + + // todo we can add 1 contract call for all addrs + async reloadEveryAddressAndNotifyListeners(nodeAddrList: string[]): Promise<void> { + for (const nodeAddr of nodeAddrList) { + let nodeShardmask = await this.storageCt.getNodeShardsByAddr(nodeAddr); + const shardSet = Coll.arrayToSet(BitUtil.bitsToPositions(nodeShardmask)); + this.nodeShardMap.set(nodeAddr, shardSet); + this.log.info(`node %s is re-assigned to shards (%s) : %s`, + nodeAddr, nodeShardmask.toString(2), Coll.setToArray(shardSet)); + } + + this.shardToNodesMap.clear(); + for (const [nodeAddr, shardSet] of this.nodeShardMap) { + for (const shard of shardSet) { + let nodes = this.shardToNodesMap.get(shard); + if (nodes == null) { + nodes = new Set<string>(); + this.shardToNodesMap.set(shard, nodes); + } + nodes.add(nodeAddr); + } + } + let nodeShards: Set<number> = null; + if (this.useSigner) { + this.log.info(`this node %s is assigned to shards (%s) : %s`, + this.nodeAddress, + Coll.setToArray(this.getNodeShards())); + nodeShards = this.getNodeShards(); + } + await this.listener.handleReshard(nodeShards, this.nodeShardMap); + } + + // fails if this.nodeAddress is not defined + public getNodeShards(): Set<number> { + Check.notEmpty(this.nodeAddress); + const nodeShards = this.nodeShardMap.get(this.nodeAddress); + Check.notEmptySet(nodeShards); + return nodeShards; + } + + public getStorageNodesForShard(shard: number): Set<string> | null { + return this.shardToNodesMap.get(shard); + } +} + +type StorageContract = StorageContractAPI & Contract; + +export interface StorageContractAPI { + + rf(): Promise<number>; + + getNodeAddresses(): Promise<string[]>; + + getNodeShardsByAddr(addr: string): Promise<number>; + + nodeCount(): Promise<number>; + + SHARD_COUNT(): Promise<number>; +} + +export interface StorageContractListener { + handleReshard(currentNodeShards: Set<number> | null, allNodeShards: Map<string, Set<number>>): Promise<void>; +} \ No newline at end of file diff --git a/snode/src/services/messaging-common/validatorContractState.ts b/snode/src/services/messaging-common/validatorContractState.ts new file mode 100644 index 0000000..0a8f7e5 --- /dev/null +++ b/snode/src/services/messaging-common/validatorContractState.ts @@ -0,0 +1,387 @@ +import { Service } from 'typedi' +import { Contract, ethers, Wallet } from 'ethers' +import StrUtil from '../../utilz/strUtil' + +import fs, { readFileSync } from 'fs' +import path from 'path' +import { JsonRpcProvider } from '@ethersproject/providers/src.ts/json-rpc-provider' +import { EnvLoader } from '../../utilz/envLoader' +import { Logger } from 'winston' +import { WinstonUtil } from '../../utilz/winstonUtil' + +/* +Validator contract abstraction. +All blockchain goes here + */ +@Service() +export class ValidatorContractState { + nodeId: string + wallet: Wallet + + public log: Logger = WinstonUtil.newLog(ValidatorContractState) + + private contractFactory: ContractClientFactory + public contractCli: ValidatorCtClient + + public async postConstruct() { + this.log.info('ValidatorContractState.postConstruct()') + this.contractFactory = new ContractClientFactory() + this.contractCli = await this.contractFactory.buildRWClient(this.log) + await this.contractCli.connect() + // this.log.info('loaded %o ', this.contractCli.nodeMap) + this.wallet = this.contractFactory.nodeWallet + this.nodeId = this.wallet.address + if (!this.wallet) throw new Error('wallet is not loaded') + if (this.contractCli.vnodes == null) throw new Error('Nodes are not initialized') + } + + public isActiveValidator(nodeId: string): boolean { + const vi = this.contractCli.vnodes.get(nodeId) + return vi != null + } + + public getAllNodesMap(): Map<string, NodeInfo> { + return this.contractCli.vnodes + } + + public getActiveValidatorsExceptSelf(): NodeInfo[] { + const allNodes = Array.from(this.getAllNodesMap().values()) + const onlyGoodValidators = allNodes.filter( + (ni) => + ni.nodeType == NodeType.VNode && + ValidatorContractState.isEnabled(ni) && + this.nodeId !== ni.nodeId + ) + return onlyGoodValidators + } + + public getActiveValidators(): NodeInfo[] { + const allNodes = Array.from(this.getAllNodesMap().values()) + const onlyGoodValidators = allNodes.filter( + (ni) => ni.nodeType == NodeType.VNode && ValidatorContractState.isEnabled(ni) + ) + return onlyGoodValidators + } + + public getAllValidatorsExceptSelf(): NodeInfo[] { + const allNodes = Array.from(this.getAllNodesMap().values()) + const onlyGoodValidators = allNodes.filter( + (ni) => + ni.nodeType == NodeType.VNode && + ValidatorContractState.isEnabled(ni) && + this.nodeId !== ni.nodeId + ) + return onlyGoodValidators + } + + public static isEnabled(ni: NodeInfo) { + return ( + ni.nodeStatus == NodeStatus.OK || + ni.nodeStatus == NodeStatus.Reported || + ni.nodeStatus == NodeStatus.Slashed + ) + } +} + +class ContractClientFactory { + private validatorCtAddr: string + private provider: JsonRpcProvider + private abi: string + private pushTokenAddr: string + private validatorRpcEndpoint: string + private validatorRpcNetwork: number + private configDir: string + nodeWallet: Wallet + // private nodeWallet: Signer; + private validatorPrivateKeyFile: string + private validatorPrivateKeyPass: string + private nodeAddress: string + + constructor() { + this.validatorCtAddr = EnvLoader.getPropertyOrFail('VALIDATOR_CONTRACT_ADDRESS') + this.pushTokenAddr = EnvLoader.getPropertyOrFail('VALIDATOR_PUSH_TOKEN_ADDRESS') + this.validatorRpcEndpoint = EnvLoader.getPropertyOrFail('VALIDATOR_RPC_ENDPOINT') + this.validatorRpcNetwork = Number.parseInt(EnvLoader.getPropertyOrFail('VALIDATOR_RPC_NETWORK')) + this.provider = new ethers.providers.JsonRpcProvider( + this.validatorRpcEndpoint, + this.validatorRpcNetwork + ) + this.configDir = EnvLoader.getPropertyOrFail('CONFIG_DIR') + this.abi = ContractClientFactory.loadValidatorContractAbi(this.configDir, 'ValidatorV1.json') + } + + private static loadValidatorContractAbi(configDir: string, fileNameInConfigDir: string): string { + const fileAbsolute = path.resolve(configDir, `./${fileNameInConfigDir}`) + const file = fs.readFileSync(fileAbsolute, 'utf8') + const json = JSON.parse(file) + const abi = json.abi + console.log(`abi size:`, abi.length) + return abi + } + + // creates a client which can only read blockchain state + public async buildROClient(log: Logger): Promise<ValidatorCtClient> { + const contract = new ethers.Contract(this.validatorCtAddr, this.abi, this.provider) + return new ValidatorCtClient(contract, log) + } + + // creates a client, using an encrypted private key from disk, so that we could write to the blockchain + public async buildRWClient(log: Logger): Promise<ValidatorCtClient> { + this.validatorPrivateKeyFile = EnvLoader.getPropertyOrFail('VALIDATOR_PRIVATE_KEY_FILE') + this.validatorPrivateKeyPass = EnvLoader.getPropertyOrFail('VALIDATOR_PRIVATE_KEY_PASS') + + const jsonFile = readFileSync(this.configDir + '/' + this.validatorPrivateKeyFile, 'utf-8') + this.nodeWallet = await Wallet.fromEncryptedJson(jsonFile, this.validatorPrivateKeyPass) + this.nodeAddress = await this.nodeWallet.getAddress() + + const signer = this.nodeWallet.connect(this.provider) + const contract = new ethers.Contract(this.validatorCtAddr, this.abi, signer) + return new ValidatorCtClient(contract, log) + } +} + +interface ValidatorContract { + valPerBlock(): Promise<number> + + valPerBlockTarget(): Promise<number> + + nodeRandomMinCount(): Promise<number> + + nodeRandomPingCount(): Promise<number> + + getVNodes(): Promise<string[]> + + getSNodes(): Promise<string[]> + + getDNodes(): Promise<string[]> + + getNodeInfo(address: string): Promise<NodeInfo2> +} + +interface NodeInfo2 { + shortAddr: number + ownerWallet: string + nodeWallet: string + nodeType: NodeType + nodeTokens: number + nodeApiBaseUrl: string + counters: any + status: NodeStatus +} + +type TypedValidatorContract = ValidatorContract & Contract + +// all Validator contract interactions are wrapped into this class +// todo update with new events +export class ValidatorCtClient { + contract: TypedValidatorContract + private log: Logger + + // read on start, todo update on event + vnodes: Map<string, NodeInfo> = new Map<string, NodeInfo>() + // read on start, todo update on event + snodes: Map<string, NodeInfo> = new Map<string, NodeInfo>() + // read on start, todo update on event + dnodes: Map<string, NodeInfo> = new Map<string, NodeInfo>() + + // read on start, updated on change + public valPerBlock: number + // read on start, updated on change + private valPerBlockTarget: number + // read on start, updated on change + public nodeRandomMinCount: number + // read on start, updated on change + public nodeRandomPingCount: number + + constructor(contract: ethers.Contract, log: Logger) { + this.contract = <TypedValidatorContract>contract + this.log = log + } + + private async loadConstantsAndSubscribeToUpdates() { + this.valPerBlock = await this.contract.valPerBlock() + this.valPerBlockTarget = await this.contract.valPerBlockTarget() + this.log.info(`valPerBlock=${this.valPerBlock}`) + if (this.valPerBlock == null) { + throw new Error('valPerBlock is undefined') + } + this.contract.on('BlockParamsUpdated', (valPerBlock: number, valPerBlockTarget: number) => { + this.valPerBlock = valPerBlock + this.valPerBlockTarget = valPerBlockTarget + this.log.info(`attestersRequired=${this.valPerBlock}`) + }) + + this.nodeRandomMinCount = await this.contract.nodeRandomMinCount() + this.log.info(`nodeRandomMinCount=${this.nodeRandomMinCount}`) + if (this.nodeRandomMinCount == null) { + throw new Error('nodeRandomMinCount is undefined') + } + + this.nodeRandomPingCount = await this.contract.nodeRandomPingCount() + this.log.info(`nodeRandomPingCount=${this.nodeRandomPingCount}`) + + this.contract.on( + 'RandomParamsUpdated', + (nodeRandomMinCount: number, nodeRandomPingCount: number) => { + this.nodeRandomMinCount = nodeRandomMinCount + this.nodeRandomPingCount = nodeRandomPingCount + this.log.info(`nodeRandomMinCount=${this.nodeRandomMinCount}`) + } + ) + } + + private async loadVSDNodesAndSubscribeToUpdates() { + const vNodes = await this.contract.getVNodes() + for (const nodeAddr of vNodes) { + const niFromCt = await this.contract.getNodeInfo(nodeAddr) + const ni = new NodeInfo( + niFromCt.nodeWallet, + niFromCt.nodeApiBaseUrl, + niFromCt.nodeType, + niFromCt.status + ) + this.vnodes.set(niFromCt.nodeWallet, ni) + } + this.log.info('validator nodes loaded %o', this.vnodes) + + const sNodes = await this.contract.getSNodes() + for (const nodeAddr of sNodes) { + const niFromCt = await this.contract.getNodeInfo(nodeAddr) + const ni = new NodeInfo( + niFromCt.nodeWallet, + niFromCt.nodeApiBaseUrl, + niFromCt.nodeType, + niFromCt.status + ) + this.snodes.set(niFromCt.nodeWallet, ni) + } + this.log.info('storage nodes loaded %o', this.snodes) + + const dNodes = await this.contract.getDNodes() + for (const nodeAddr of dNodes) { + const niFromCt = await this.contract.getNodeInfo(nodeAddr) + const ni = new NodeInfo( + niFromCt.nodeWallet, + niFromCt.nodeApiBaseUrl, + niFromCt.nodeType, + niFromCt.status + ) + this.dnodes.set(niFromCt.nodeWallet, ni) + } + this.log.info('delivery nodes loaded %o', this.dnodes) + + this.contract.on( + 'NodeAdded', + ( + ownerWallet: string, + nodeWallet: string, + nodeType: number, + nodeTokens: number, + nodeApiBaseUrl: string + ) => { + this.log.info('NodeAdded %o', arguments) + this.log.info( + 'NodeAdded %s %s %s %s %s', + ownerWallet, + nodeWallet, + nodeType, + nodeTokens, + nodeApiBaseUrl + ) + const nodeMapByType = this.getNodeMapByType(nodeType) + const ni = new NodeInfo(nodeWallet, nodeApiBaseUrl, nodeType, NodeStatus.OK) + nodeMapByType.set(nodeWallet, ni) + this.log.info( + 'NodeAdded: nodeType: %s , %s -> %s', + nodeType, + nodeWallet, + JSON.stringify(ni) + ) + } + ) + + this.contract.on( + 'NodeStatusChanged', + (nodeWallet: string, nodeStatus: number, nodeTokens: number) => { + this.log.info('NodeStatusChanged', arguments) + this.log.info('NodeStatusChanged', nodeWallet, nodeStatus, nodeTokens) + const ni = + this.vnodes.get(nodeWallet) ?? this.snodes.get(nodeWallet) ?? this.dnodes.get(nodeWallet) + if (ni == null) { + this.log.error(`unknown node ${nodeWallet}`) + return + } + ni.nodeStatus = nodeStatus + } + ) + } + + private getNodeMapByType(nodeType: NodeType) { + const nodeMapByType: Map<string, NodeInfo> = null + if (nodeType == NodeType.VNode) { + return this.vnodes + } else if (nodeType == NodeType.SNode) { + return this.snodes + } else if (nodeType == NodeType.DNode) { + return this.dnodes + } else { + throw new Error('unsupported node type ' + nodeType) + } + } + + async connect() { + await this.loadConstantsAndSubscribeToUpdates() + const result = this.loadNodesFromEnv() + if (result != null) { + // we have a debug variable set; no need to do blockchain + this.vnodes = result + return + } + await this.loadVSDNodesAndSubscribeToUpdates() + } + + private loadNodesFromEnv(): Map<string, NodeInfo> | null { + const testValidatorsEnv = process.env.VALIDATOR_CONTRACT_TEST_VALIDATORS + if (testValidatorsEnv) { + // test mode + const testValidators = <{ validators: NodeInfo[] }>JSON.parse(testValidatorsEnv) + const result = new Map<string, NodeInfo>() + for (const vi of testValidators.validators) { + vi.nodeId = StrUtil.normalizeEthAddress(vi.nodeId) + result.set(vi.nodeId, vi) + } + return result + } else { + return null + } + } +} + +// from smart contract +export enum NodeStatus { + OK, + Reported, + Slashed, + BannedAndUnstaked, + Unstaked +} + +export class NodeInfo { + nodeId: string + url: string + nodeType: NodeType + nodeStatus: NodeStatus + + constructor(nodeId: string, url: string, nodeType: NodeType, nodeStatus: NodeStatus) { + this.nodeId = nodeId + this.url = url + this.nodeType = nodeType + this.nodeStatus = nodeStatus + } +} + +export enum NodeType { + VNode = 0, // validator 0 + SNode = 1, // storage 1 + DNode = 2 // delivery 2 +} diff --git a/snode/src/services/messaging-dset/queueClient.ts b/snode/src/services/messaging-dset/queueClient.ts new file mode 100644 index 0000000..7443f52 --- /dev/null +++ b/snode/src/services/messaging-dset/queueClient.ts @@ -0,0 +1,119 @@ +// ------------------------------ +// reads other node queue fully, appends everything to the local queue/storage +import {Logger} from 'winston' +import {WinstonUtil} from '../../utilz/winstonUtil' +import {MySqlUtil} from '../../utilz/mySqlUtil' +import axios from 'axios' +import {Consumer, QItem} from './queueTypes' + +export class QueueClient { + public log: Logger = WinstonUtil.newLog(QueueClient) + // remoteUrl: string // stored into db + // offset: number // stored into db + consumer: Consumer<QItem> + queueName: string + + constructor(consumer: Consumer<QItem>, remoteQueueName: string) { + this.consumer = consumer + this.queueName = remoteQueueName + } + + /** + * Call in cycle until it returns true, + * fetches maxRequests at max per each invocation per each endpoint + * @param maxRequests + * @returns true, if no more data available; false otherwise + */ + public async pollRemoteQueue(maxRequests: number): Promise<any> { + const result = [] + const sameQueueEndpoints = await MySqlUtil.queryArr<{ + id: number + queue_name: string + target_node_id: string + target_node_url: string + target_offset: number + }>( + `select id, queue_name, target_node_id, target_node_url, target_offset + from dset_client + where queue_name = ? + and state = 1 + order by id asc`, + this.queueName + ) + for (const endpoint of sameQueueEndpoints) { + // todo EVERY ENDPOINT CAN BE DONE IN PARALLEL + // read data from the endpoint (in cycle) , update the offset in db + const endpointStats = { + queueName: this.queueName, + target_node_id: endpoint.target_node_id, + target_node_url: endpoint.target_node_url, + queries: 0, + downloadedItems: 0, + newItems: 0, + lastOffset: endpoint.target_offset + } + let lastOffset = endpoint.target_offset + for (let i = 0; i < maxRequests; i++) { + result.push(endpointStats) + endpointStats.queries++ + const reply = await this.readItems( + endpoint.queue_name, + endpoint.target_node_url, + lastOffset + ) + if (!reply || reply.items?.length == 0) { + break + } + for (const item of reply.items) { + endpointStats.downloadedItems++ + let appendSuccessful = false; + try { + appendSuccessful = await this.consumer.accept(item); + } catch (e) { + this.log.error('error processing accept(): queue %s: ', this.queueName); + this.log.error(e); + } + if (appendSuccessful) { + endpointStats.newItems++ + } + } + await MySqlUtil.update( + 'UPDATE dset_client SET target_offset=? WHERE id=?', + reply.lastOffset, + endpoint.id + ) + lastOffset = reply.lastOffset + endpointStats.lastOffset = reply.lastOffset + } + } + return { + result: result + } + } + + public async readItems( + queueName: string, + baseUri: string, + firstOffset: number = 0 + ): Promise<{ items: QItem[]; lastOffset: number } | null> { + const url = `${baseUri}/apis/v1/dset/queue/${queueName}?firstOffset=${firstOffset}` + try { + const re = await axios.get(url, { + timeout: 3000 + // signal: AbortSignal.timeout(3000) + }) + this.log.debug('readItems %s from offset %d %o', url, firstOffset, re?.data) + const obj: { items: QItem[]; lastOffset: number } = re.data + return obj + } catch (e) { + this.log.warn('readItems failed for url %s', url) + return null + } + } + + public async readLastOffset(queueName: string, baseUri: string): Promise<number> { + const url = `${baseUri}/api/v1/dset/queue/${queueName}/lastOffset` + const resp: { result: number } = await axios.get(url, {timeout: 3000}) + return resp.result + } +} diff --git a/snode/src/services/messaging-dset/queueServer.ts b/snode/src/services/messaging-dset/queueServer.ts new file mode 100644 index 0000000..3a5616b --- /dev/null +++ b/snode/src/services/messaging-dset/queueServer.ts @@ -0,0 +1,166 @@ +// ------------------------------ +// a queue, which is used to store an append only log; +// this node: appends it - if storage says yes to a new item +// other nodes: read this from client +import { Logger } from 'winston' +import { WinstonUtil } from '../../utilz/winstonUtil' +import { MySqlUtil } from '../../utilz/mySqlUtil' +import { Consumer, DCmd, QItem } from './queueTypes' +import StrUtil from '../../utilz/strUtil' +import { ObjectHasher } from '../../utilz/objectHasher' + +export class QueueServer implements Consumer<QItem> { + private log: Logger = WinstonUtil.newLog(QueueServer) + replyPageSize = 10 + queueName: string + storage: Consumer<QItem> + + constructor( + localQueueName: string, + replyPageSize: number, + storageForDeduplication: Consumer<QItem> | null + ) { + this.queueName = localQueueName + this.replyPageSize = replyPageSize + this.storage = storageForDeduplication + } + + /** + * If we have storage: try adding to storage first + * Otherwise insert into the queue. + * + * If an item has object_hash we will use that field at the db level + * @param item + */ + public async accept(item: QItem): Promise<boolean> { + const cmd = item.object + let valid = true + if (this.storage != null) { + valid = await this.storage.accept(item) + } + this.log.debug('[%s] try add %o', this.queueName, cmd) + if (!valid) { + this.log.debug( + '[%s] item is already in the storage, skip adding to the queue', + this.queueName + ) + return false + } + let success + if (StrUtil.isEmpty(item.object_hash)) { + success = await this.appendDirect(cmd) + } else { + success = await this.appendWithHashChecks(item.object, item.object_hash) + } + this.log.debug('[%s] item pushed into the queue, success=%s', this.queueName, success) + return success + } + + /** + * Append to queue, only if cmdHash is uniq to the underlying queue table + * @param cmd + * @param cmdHash + */ + public async appendWithHashChecks(cmd: DCmd, cmdHash: string): Promise<boolean> { + const cmdStr = JSON.stringify(cmd) + /* + note: IGNORE consumes all type of errors, so it is a very error prone keyword + we will return true only if there are affected rows + another option is to remove IGNORE and catch the exception + */ + const res = await MySqlUtil.insert( + `INSERT IGNORE INTO dset_queue_${this.queueName}(object, object_hash) + VALUES (?, ?)`, + cmdStr, + cmdHash + ) + return res.affectedRows === 1 + } + + /* + Add directly to queue + */ + public async appendDirect(cmd: DCmd) { + const object = JSON.stringify(cmd) + const objectHash = ObjectHasher.hashToSha256(cmd) + const res = await MySqlUtil.insert( + `INSERT INTO dset_queue_${this.queueName}(object, object_hash) + VALUES (?,?)`, + object, + objectHash + ) + return res.affectedRows === 1 + } + + public async getFirstRowIdAfter(offset: number): Promise<number | null> { + return await MySqlUtil.queryOneValue( + `select min(id) as id + from dset_queue_${this.queueName} + where id > ?`, + offset + ) + } + + public async readItems(offset: number): Promise<QItem[]> { + const rows = await MySqlUtil.queryArr<{ id: number; object: string; object_hash: string }>( + `select id, object, object_hash + from dset_queue_${this.queueName} + where id > ? + order by id asc + limit ${this.replyPageSize} `, + offset + ) + const items: QItem[] = rows.map((row) => ({ + id: row.id, + object: JSON.parse(row.object), + object_hash: row.object_hash + })) + return items + } + + public getPageSize(): number { + return this.replyPageSize + } + + public async getLastOffset(): Promise<number> { + const row = await MySqlUtil.queryOneRow<{ lastOffset: number }>( + `select max(id) as lastOffset + from dset_queue_${this.queueName} + limit 1` + ) + return row == null ? 0 : row.lastOffset + } + + public async readWithLastOffset( + firstOffset: number + ): Promise<{ items: QItem[]; lastOffset: number }> { + const items = await this.readItems(firstOffset) + let lastOffset + if (items.length == 0) { + // no items in the range and # of rows missing is more than a page size + // ex: [1,2,3, 100,101,102] - missing ids from 4 to 99 + const nextId = await this.getFirstRowIdAfter(firstOffset) + if (nextId == null) { + // no more data in the table + lastOffset = firstOffset + } else { + // for [100,101,102] + // if data starts at [100] => firstOffset=99 + lastOffset = nextId - 1 + } + } else { + // some items are there, grab latest + lastOffset = items[items.length - 1].id + } + return { + items: items, + lastOffset: lastOffset + } + } +} + +export enum QueueServerMode { + APPEND_TO_STORAGE_FIRST, + ITEM, + ITEM_WITH_HASH +} diff --git a/snode/src/services/messaging-dset/queueTypes.ts b/snode/src/services/messaging-dset/queueTypes.ts new file mode 100644 index 0000000..57b066f --- /dev/null +++ b/snode/src/services/messaging-dset/queueTypes.ts @@ -0,0 +1,17 @@ +// abstract item, can be anything +export interface QItem { + // a queue index, 0-based number, always grows + // filled only when Item is fetched by QueueClient from another remote QueueServer + id?: number + // some unique data hash (or ID); // todo check that we use that correctly + object_hash?: string + // a json payload with data + object: DCmd +} + +// abstract command, only for type checks +export interface DCmd {} + +export interface Consumer<T> { + accept(item: T): Promise<boolean> +} diff --git a/snode/src/services/messaging/BlockStorage.ts b/snode/src/services/messaging/BlockStorage.ts new file mode 100644 index 0000000..4a36685 --- /dev/null +++ b/snode/src/services/messaging/BlockStorage.ts @@ -0,0 +1,228 @@ +import {Service} from "typedi"; +import {WinstonUtil} from "../../utilz/winstonUtil"; +import {Logger} from "winston"; +import {MySqlUtil} from "../../utilz/mySqlUtil"; +import {MessageBlock, MessageBlockUtil} from "../messaging-common/messageBlock"; +import StrUtil from "../../utilz/strUtil"; +import {Coll} from "../../utilz/coll"; +import {Check} from "../../utilz/check"; +import DbHelper from "../../helpers/dbHelper"; + +// stores everything in MySQL +@Service() +export class BlockStorage { + public log: Logger = WinstonUtil.newLog(BlockStorage); + + public async postConstruct() { + await this.createStorageTablesIfNeeded(); + } + + private async createStorageTablesIfNeeded() { + await MySqlUtil.insert(` + CREATE TABLE IF NOT EXISTS blocks + ( + object_hash VARCHAR(255) NOT NULL COMMENT 'optional: a uniq field to fight duplicates', + object MEDIUMTEXT NOT NULL, + object_shards JSON NOT NULL COMMENT 'message block shards', + PRIMARY KEY (object_hash) + ) ENGINE = InnoDB + DEFAULT CHARSET = utf8; + `); + + await MySqlUtil.insert(` + CREATE TABLE IF NOT EXISTS dset_queue_mblock + ( + id BIGINT NOT NULL AUTO_INCREMENT, + ts timestamp default CURRENT_TIMESTAMP() COMMENT 'timestamp is used for querying the queu', + object_hash VARCHAR(255) NOT NULL, + object_shard INT NOT NULL COMMENT 'message block shard', + PRIMARY KEY (id), + UNIQUE KEY uniq_mblock_object_hash (object_hash, object_shard), + FOREIGN KEY (object_hash) REFERENCES blocks (object_hash) + ) ENGINE = InnoDB + DEFAULT CHARSET = utf8; + `); + + await MySqlUtil.insert(` + CREATE TABLE IF NOT EXISTS dset_client + ( + id INT NOT NULL AUTO_INCREMENT, + queue_name varchar(32) NOT NULL COMMENT 'target node queue name', + target_node_id varchar(128) NOT NULL COMMENT 'target node eth address', + target_node_url varchar(128) NOT NULL COMMENT 'target node url, filled from the contract', + target_offset bigint(20) NOT NULL DEFAULT 0 COMMENT 'initial offset to fetch target queue', + state tinyint(1) NOT NULL DEFAULT 1 COMMENT '1 = enabled, 0 = disabled', + PRIMARY KEY (id), + UNIQUE KEY uniq_dset_name_and_target (queue_name, target_node_id) + ) ENGINE = InnoDB + DEFAULT CHARSET = utf8; + `); + + await MySqlUtil.insert(` + CREATE TABLE IF NOT EXISTS contract_shards + ( + ts timestamp default CURRENT_TIMESTAMP() COMMENT 'update timestamp', + shards_assigned json NOT NULL COMMENT 'optional: a uniq field to fight duplicates', + PRIMARY KEY (ts) + ) ENGINE = InnoDB + DEFAULT CHARSET = utf8; + + `); + } + + async saveBlockWithShardData(mb: MessageBlock, calculatedHash: string, shardSet: Set<number>): Promise<boolean> { + // NOTE: the code already atomically updates the db , + // so let's drop select because it's excessive) + let hashFromDb = await MySqlUtil.queryOneValueOrDefault( + 'SELECT object_hash FROM blocks where object_hash=?', + null, calculatedHash); + if (hashFromDb != null) { + this.log.info('received block with hash %s, ' + + 'already exists in the storage at index %s, ignoring', + calculatedHash, hashFromDb); + return false; + } + // insert block + this.log.info('received block with hash %s, adding to the db', calculatedHash); + const objectAsJson = JSON.stringify(mb); + const shardSetAsJson = JSON.stringify(Coll.setToArray(shardSet)); + const res = await MySqlUtil.insert( + `INSERT + IGNORE + INTO blocks(object, object_hash, object_shards) + VALUES (?, ?, ?)`, + objectAsJson, calculatedHash, shardSetAsJson); + let requiresProcessing = res.affectedRows === 1; + if (!requiresProcessing) { + return false; + } + // insert block to shard mapping + let valuesStr = ''; + let valuesArr = []; + for (const shardId of shardSet) { + valuesArr.push(calculatedHash, shardId); + valuesStr += valuesStr.length == 0 ? '(? , ?)' : ',(? , ?)' + } + const res2 = await MySqlUtil.insert( + `INSERT + IGNORE + INTO dset_queue_mblock(object_hash, object_shard) + VALUES + ${valuesStr}`, + ...valuesArr); + return true; + } + + /** + * Reads the latest row (by timestamp) + * ex: '[0,1,2,...,31]', 2023-05-05 17-00 + * and returns a set of {0,1,2..,31} + */ + public async loadNodeShards(): Promise<Set<number> | null> { + const shardsAssigned = await MySqlUtil.queryOneValueOrDefault<string>( + 'select shards_assigned from contract_shards order by ts desc limit 1', null); + let result: Set<number>; + if (shardsAssigned != null && !StrUtil.isEmpty(shardsAssigned)) { + const arr = JSON.parse(shardsAssigned); + result = new Set(arr); + } else { + result = new Set<number>(); + } + return result; + } + + /** + * Writes a set of {0,1,2..,31} + * to a new row with new timestamp + * @param nodeShards + */ + public async saveNodeShards(nodeShards: Set<number>): Promise<void> { + let arr = Coll.setToArray(nodeShards); + let arrAsJson = JSON.stringify(arr); + await MySqlUtil.insert('INSERT IGNORE INTO contract_shards(shards_assigned) VALUES(?)', arrAsJson); + } + + /** + * Iterates over all unique objectHash values in dset_queue_mblock_table. + * object gets filtered by specific shards + * + * handler will get all valid blocks which match the condition + * we also will query block contents from the blocks table + * + * @param shardCountFromStorageContract how many shards could be per 1 block + * @param pageSize how much data to load in 1 cycle + * @param shardsToLookFor shards filter + * @param handler callback for processing + */ + public async iterateAllStoredBlocks(shardCountFromStorageContract: number, + pageSize: number, + shardsToLookFor: Set<number>, + handler: (messageBlockJson: string, + messageBlockHash: string, + messageBlockShards: Set<number>) => Promise<void>) { + if (shardsToLookFor.size == 0) { + this.log.debug('iterateAllStoredBlocks(): no shards to unpack '); + return; + } + // [1,2] => (1, 2) + let shardsAsCsv = Array.from(shardsToLookFor.keys()).join(','); + + // query size + let queryLimit = pageSize; + Check.isTrue(queryLimit > 0 && queryLimit < 1000, 'bad query limit'); + let subqueryRowLimit = Math.round(3 * pageSize * shardCountFromStorageContract / 2); + Check.isTrue(shardCountFromStorageContract > 0 && shardCountFromStorageContract < 1000, + 'bad subquery limit'); + + // remember last N object hashes; + // this is the amount of a page that should be enough to remove duplicate object hashes + // i.e. 32 shards x 30 rows = approx 1000 rows of history + let cache = new Set<string>(); + let cacheMaxSize = 2 * subqueryRowLimit; + + let fromId = null; + let rows = null; + do { + /* + Finds rows + | minId | object_hash | shardsJson | + | 3 | 1 | [2,1] | + */ + rows = await MySqlUtil.queryArr<{ minId: number, object_hash: string, shardsJson: string }>( + `SELECT MIN(id) as minId, object_hash, CONCAT('[', GROUP_CONCAT(object_shard), ']') as shardsJson + FROM (SELECT id, object_hash, object_shard + FROM dset_queue_mblock + WHERE object_shard IN (${shardsAsCsv}) + and (? IS NULL OR id < ?) + ORDER BY id DESC + LIMIT ?) as sub + GROUP BY object_hash + ORDER BY minId DESC + LIMIT ?`, + fromId, fromId, subqueryRowLimit, queryLimit); + + for (const row of rows) { + const mbHash = row.object_hash; + if (!cache.has(mbHash)) { + const row = await MySqlUtil.queryOneRow<{ object: string, object_shards: string }>( + 'select object, object_shards from blocks where object_hash=?', mbHash); + if (row == null || StrUtil.isEmpty(row.object)) { + this.log.error('skipping objectHash=%s because there is no matching shard info in blocks table', + mbHash); + continue; + } + const mbShardSet = Coll.parseAsNumberSet(row.object_shards); + await handler(row.object, mbHash, mbShardSet); + cache.add(mbHash); + if (cache.size > cacheMaxSize) { + const firstCachedValue = cache.values().next().value; + cache.delete(firstCachedValue); + } + } + fromId = Math.min(fromId, row.minId); + } + Check.isTrue(cache.size <= cacheMaxSize); + } while (rows != null && rows.length > 0); + } + +} \ No newline at end of file diff --git a/snode/src/services/messaging/IndexStorage.ts b/snode/src/services/messaging/IndexStorage.ts new file mode 100644 index 0000000..68c6d9f --- /dev/null +++ b/snode/src/services/messaging/IndexStorage.ts @@ -0,0 +1,137 @@ +import {WinstonUtil} from "../../utilz/winstonUtil"; +import {Inject, Service} from "typedi"; +import {Logger} from "winston"; +import {FPayload, MessageBlock, MessageBlockUtil} from "../messaging-common/messageBlock"; +import {Check} from "../../utilz/check"; +import {Coll} from "../../utilz/coll"; +import DateUtil from "../../utilz/dateUtil"; +import DbHelper from "../../helpers/dbHelper"; +import StrUtil from "../../utilz/strUtil"; +import {StorageContractState} from "../messaging-common/storageContractState"; +import {ValidatorContractState} from "../messaging-common/validatorContractState"; +import {PgUtil} from "../../utilz/pgUtil"; + + +// stores everything in Postgres (!) +@Service() +export class IndexStorage { + public log: Logger = WinstonUtil.newLog(IndexStorage); + + @Inject() + private valContractState: ValidatorContractState; + + @Inject() + private storageContractState: StorageContractState; + + public async postConstruct() { + await DbHelper.createStorageTablesIfNeeded(); + } + + /* + sends the block contents (internal messages from every response) + to every recipient's inbox + + This is POSTGRES + */ + public async unpackBlockToInboxes(mb: MessageBlock, shardSet: Set<number>) { + // this is the list of shards that we support on this node + const nodeShards = this.storageContractState.getNodeShards(); + this.log.debug('storage node supports %s shards: %o', nodeShards.size, nodeShards); + let shardsToProcess = Coll.intersectSet(shardSet, nodeShards); + this.log.debug('block %s has %d inboxes to unpack', mb.id, shardsToProcess) + if (shardsToProcess.size == 0) { + this.log.debug('finished'); + return; + } + + // ex: 1661214142.123456 + let tsString = '' + (MessageBlockUtil.getBlockCreationTimeMillis(mb) / 1000.0); + if (tsString == null) { + tsString = '' + DateUtil.currentTimeSeconds(); + } + const currentNodeId = this.valContractState.nodeId; + for (let i = 0; i < mb.responses.length; i++) { + const feedItem = mb.responses[i]; + const targetWallets: string[] = MessageBlockUtil.calculateRecipients(mb, i); + for (let i1 = 0; i1 < targetWallets.length; i1++) { + const targetAddr = targetWallets[i1]; + let targetShard = MessageBlockUtil.calculateAffectedShard(targetAddr, this.storageContractState.shardCount); + if (!shardsToProcess.has(targetShard)) { + continue; + } + await this.putPayloadToInbox('inbox', targetShard, targetAddr, tsString, currentNodeId, feedItem.payload); + } + } + } + + + /** + * Puts a single item into + * This is POSTGRES + * + * @param nsName ex: inbox + * @param nsShardId ex: 0-31 + * @param nsId ex: eip155:0xAAAAA + * @param ts current time, ex: 1661214142.123456 + * @param nodeId current node id, ex: 0xAAAAAAA + * @param fpayload payload format + * + * todo pass ts as number + */ + public async putPayloadToInbox(nsName: string, nsShardId: number, nsId: string, + ts: string, + nodeId: string, + fpayload: FPayload) { + const key = fpayload.data.sid; + fpayload.recipients = null; // null recipients field because we don't need that + const date = DateUtil.parseUnixFloatAsDateTime(ts); + this.log.debug(`parsed date ${ts} -> ${date}`) + let storageTable = await DbHelper.findStorageTableByDate(nsName, nsShardId, date); + this.log.debug(`found table ${storageTable}`) + if (StrUtil.isEmpty(storageTable)) { + this.log.error('storage table not found'); + let monthStart = date.startOf('month').toISODate().toString(); + let monthEndExclusive = date.startOf('month').plus({months: 1}).toISODate().toString(); + this.log.debug('creating new storage table'); + const dateYYYYMM = DateUtil.formatYYYYMM(date); + const tableName = `storage_ns_${nsName}_d_${dateYYYYMM}`; + const recordCreated = await DbHelper.createNewNodestorageRecord(nsName, nsShardId, + monthStart, monthEndExclusive, tableName); + if (recordCreated) { + this.log.debug('record created: ', recordCreated) + // we've added a new record to node_storage_layout => we can safely try to create a table + // otherwise, if many connections attempt to create a table from multiple threads + // it leads to postgres deadlock sometimes + await DbHelper.createNewStorageTable(tableName); + this.log.debug('creating node storage layout mapping') + storageTable = tableName; + } + } + const storageValue = await DbHelper.putValueInTable(nsName, nsShardId, nsId, storageTable, + ts, key, JSON.stringify(fpayload)); + this.log.debug(`found value: ${storageValue}`) + } + + // todo remove shard entries from node_storage_layout also? + public async deleteShardsFromInboxes(shardsToDelete: Set<number>) { + this.log.debug('deleteShardsFromInboxes(): shardsToDelete: %j', + Coll.setToArray(shardsToDelete)); + if (shardsToDelete.size == 0) { + return; + } + // delete from index + let idsToDelete = Coll.numberSetToSqlQuoted(shardsToDelete); + const rows = await PgUtil.queryArr<{ table_name: string }>( + `select distinct table_name + from node_storage_layout + where namespace_shard_id in ${idsToDelete}`); + for (const row of rows) { + this.log.debug('clearing table %s from shards %o', row, idsToDelete); + await PgUtil.update(`delete + from ${row.table_name} + where namespace_shard_id in ${idsToDelete}`, + idsToDelete); + } + } + +} \ No newline at end of file diff --git a/snode/src/services/messaging/queueManager.ts b/snode/src/services/messaging/queueManager.ts new file mode 100644 index 0000000..58c8586 --- /dev/null +++ b/snode/src/services/messaging/queueManager.ts @@ -0,0 +1,77 @@ +import {Inject, Service} from 'typedi' +import {Logger} from 'winston' +import schedule from 'node-schedule' +import {ValidatorContractState} from '../messaging-common/validatorContractState' +import {WinstonUtil} from '../../utilz/winstonUtil' +import {QueueServer} from '../messaging-dset/queueServer' +import {QueueClient} from '../messaging-dset/queueClient' +import StorageNode from "./storageNode"; +import {QueueClientHelper} from "../messaging-common/queueClientHelper"; +import {EnvLoader} from "../../utilz/envLoader"; + + +@Service() +export class QueueManager { + public log: Logger = WinstonUtil.newLog(QueueManager) + + @Inject((type) => ValidatorContractState) + private contract: ValidatorContractState; + @Inject(type => StorageNode) + private storageNode:StorageNode; + + + // PING: schedule + private readonly CLIENT_READ_SCHEDULE = EnvLoader.getPropertyOrDefault('CLIENT_READ_SCHEDULE', '*/30 * * * * *'); + + public static QUEUE_MBLOCK = 'mblock' + mblockQueue: QueueServer + mblockClient: QueueClient + + constructor() {} + + private readonly QUEUE_REPLY_PAGE_SIZE = 10 + private readonly CLIENT_REQUEST_PER_SCHEDULED_JOB = 10 + + // client -> queue -?-> channelService -> table <------- client + public async postConstruct() { + this.log.debug('postConstruct') + this.mblockClient = new QueueClient(this.storageNode, QueueManager.QUEUE_MBLOCK) + await QueueClientHelper.initClientForEveryQueueForEveryValidator(this.contract, [QueueManager.QUEUE_MBLOCK]) + const qs = this + schedule.scheduleJob(this.CLIENT_READ_SCHEDULE, async function () { + const dbgPrefix = 'PollRemoteQueue' + try { + await qs.mblockClient.pollRemoteQueue(qs.CLIENT_REQUEST_PER_SCHEDULED_JOB) + qs.log.info(`CRON %s started`, dbgPrefix); + } catch (err) { + qs.log.error(`CRON %s failed %o`, dbgPrefix, err); + } finally { + qs.log.info(`CRON %s finished`, dbgPrefix); + } + }) + } + + public getQueue(queueName: string): QueueServer { + if (queueName == 'subscribers') { + return this.mblockQueue + } + throw new Error('invalid queue') + } + + public async getQueueLastOffset(queueName: string): Promise<any> { + const lastOffset = await this.getQueue(queueName).getLastOffset() + return { result: lastOffset } + } + + public async readItems(dsetName: string, firstOffset: number){ + const q = this.getQueue(dsetName) + return await q.readWithLastOffset(firstOffset); + } + + public async pollRemoteQueues(): Promise<any> { + const result = await this.mblockClient.pollRemoteQueue(1) + return result + } +} + + diff --git a/snode/src/services/messaging/storageNode.ts b/snode/src/services/messaging/storageNode.ts new file mode 100644 index 0000000..0f69292 --- /dev/null +++ b/snode/src/services/messaging/storageNode.ts @@ -0,0 +1,119 @@ +import {Inject, Service} from 'typedi' +import {ValidatorContractState} from "../messaging-common/validatorContractState"; +import {Logger} from "winston"; +import {FPayload, MessageBlock, MessageBlockUtil} from "../messaging-common/messageBlock"; +import {QueueClient} from "../messaging-dset/queueClient"; +import {Consumer, QItem} from "../messaging-dset/queueTypes"; +import {BlockStorage} from "./BlockStorage"; +import {QueueManager} from "./queueManager"; +import {Coll} from "../../utilz/coll"; +import {Check} from "../../utilz/check"; +import {WinstonUtil} from "../../utilz/winstonUtil"; +import {StorageContractListener, StorageContractState} from "../messaging-common/storageContractState"; +import {IndexStorage} from "./IndexStorage"; + +// todo reshard(): +// raise a flag while executing this; handle new updates somehow? +// todo V2 reshard(): +// redownload every block from peers (snodes), +// using the right virtual queue which exists for missing shards in (shardsToAdd) +@Service() +export default class StorageNode implements Consumer<QItem>, StorageContractListener { + public log: Logger = WinstonUtil.newLog(StorageNode) + + @Inject() + private valContractState: ValidatorContractState; + + @Inject() + private storageContractState: StorageContractState; + + @Inject(type => QueueManager) + private queueManager: QueueManager; + + @Inject() + private blockStorage: BlockStorage; + + @Inject() + private indexStorage: IndexStorage; + + private client: QueueClient; + + public async postConstruct() { + await this.blockStorage.postConstruct(); + await this.indexStorage.postConstruct(); + await this.valContractState.postConstruct(); + await this.storageContractState.postConstruct(true, this); + await this.queueManager.postConstruct(); + } + + // remote queue handler + async accept(item: QItem): Promise<boolean> { + // check hash + let mb = <MessageBlock>item.object; + Check.notEmpty(mb.id, 'message block has no id'); + let calculatedHash = MessageBlockUtil.calculateHash(mb); + if (calculatedHash !== item.object_hash) { + this.log.error('received item hash=%s , ' + + 'which differs from calculatedHash=%s, ' + + 'ignoring the block because producer calculated the hash incorrectly', + item.object_hash, calculatedHash); + return false; + } + // check contents + // since this check is not for historical data, but for realtime data, + // so we do not care about old blocked validators which might occur in the historical queue + let activeValidators = Coll.arrayToFields(this.valContractState.getActiveValidators(), 'nodeId'); + let check1 = MessageBlockUtil.checkBlock(mb, activeValidators); + if (!check1.success) { + this.log.error('item validation failed: ', check1.err); + return false; + } + // check database + let shardSet = MessageBlockUtil.calculateAffectedShards(mb, this.storageContractState.shardCount); + let isNew = await this.blockStorage.saveBlockWithShardData(mb, calculatedHash, shardSet); + if (!isNew) { + // this is not an error, because we read duplicates from every validator + this.log.debug('block %s already exists ', mb.id); + return false; + } + // send block + await this.indexStorage.unpackBlockToInboxes(mb, shardSet); + } + + + public async handleReshard(currentNodeShards: Set<number>|null, allNodeShards: Map<string, Set<number>>) { + let newShards = currentNodeShards ?? new Set(); + const oldShards = await this.blockStorage.loadNodeShards(); + this.log.debug('handleReshard(): newShards: %j oldShards: %j', + Coll.setToArray(newShards), Coll.setToArray(oldShards)) + if (Coll.isEqualSet(newShards, oldShards)) { + this.log.debug('handleReshard(): no reshard is needed') + return; + } + let shardsToAdd = Coll.substractSet(newShards, oldShards); + let shardsToDelete = Coll.substractSet(oldShards, newShards); + let commonShards = Coll.intersectSet(oldShards, newShards); + this.log.debug('shardsToAdd %j shardsToDelete %j shardsRemaining %j', + Coll.setToArray(shardsToAdd), + Coll.setToArray(shardsToDelete), + Coll.setToArray(commonShards)); + + await this.indexStorage.deleteShardsFromInboxes(shardsToDelete); + + // add to index + // reprocess every block from blocks table (only once per each block) + // if the block has shardsToAdd -> add anything which is in shardsToAdd + const pageSize = 30; + await this.blockStorage.iterateAllStoredBlocks(this.storageContractState.shardCount, + pageSize, + shardsToAdd, + async (messageBlockJson, messageBlockHash, messageBlockShards) => { + let mb: MessageBlock = JSON.parse(messageBlockJson); + let shardsToAddFromBlock = Coll.intersectSet(shardsToAdd, messageBlockShards); + this.log.debug('reindexing block %s, blockShards %s, shardsToAdd %s,, shardsToAddFromBlock', + messageBlockHash, Coll.setToArray(messageBlockShards), Coll.setToArray(shardsToAdd), Coll.setToArray(shardsToAddFromBlock)) + await this.indexStorage.unpackBlockToInboxes(mb, shardsToAddFromBlock); + }); + await this.blockStorage.saveNodeShards(newShards); + } +} \ No newline at end of file diff --git a/snode/src/utilz/EthUtil.ts b/snode/src/utilz/EthUtil.ts new file mode 100644 index 0000000..5665d8b --- /dev/null +++ b/snode/src/utilz/EthUtil.ts @@ -0,0 +1,35 @@ +import StrUtil from './strUtil' + +export class EthUtil { + static parseCaipAddress(addressinCAIP: string): CaipAddr | null { + if (StrUtil.isEmpty(addressinCAIP)) { + return null + } + const addressComponent = addressinCAIP.split(':') + if (addressComponent.length === 3) { + return { + namespace: addressComponent[0], + chainId: addressComponent[1], + addr: addressComponent[2] + } + } else if (addressComponent.length === 2) { + return { + namespace: addressComponent[0], + chainId: null, + addr: addressComponent[1] + } + } else { + return null + } + } +} + +// ex: eip155:5:0xD8634C39BBFd4033c0d3289C4515275102423681 +export class CaipAddr { + // ex: eip155 + namespace: string + // ex: 5 + chainId: string | null + // ex: 0xD8634C39BBFd4033c0d3289C4515275102423681 + addr: string +} diff --git a/snode/src/utilz/bitUtil.ts b/snode/src/utilz/bitUtil.ts new file mode 100644 index 0000000..22c8115 --- /dev/null +++ b/snode/src/utilz/bitUtil.ts @@ -0,0 +1,60 @@ +import {Coll} from "./coll"; + +export class BitUtil { + /** + * XORs 2 buffers, byte by byte: src = src XOR add + * 1 modifies src + * 2 returns srs || src's resized copy in case there is no room for add bytes + * + * @param src + * @param add + */ + public static xor(src: Buffer, add: Buffer): Buffer { + if (src == null && add == null) { + return Buffer.alloc(0) + } else if (add == null) { + return src + } else if (src == null) { + src = new Buffer(add.length) + add.copy(src, 0, 0, add.length) + return src + } + let target = src + if (add.length > src.length) { + target = new Buffer(add.length) + src.copy(target, 0, 0, src.length) + } + var length = Math.min(target.length, add.length) + for (var i = 0; i < length; ++i) { + target[i] = target[i] ^ add[i] + } + return target + } + + public static strToBase64(value: string): string { + return Buffer.from(value).toString('base64') + } + + public static base64ToStr(value: string): string { + return Buffer.from(value, 'base64').toString('utf8') + } + + public static getBit(number:number, bitOffset:number) { + return (number & (1 << bitOffset)) === 0 ? 0 : 1; + } + + public static bitsToPositions(number: number): number[] { + // return null; + const result: number[] = []; + let position = 0; + while (number !== 0) { + if ((number & 1) === 1) { + result.push(position); + } + number = number >>> 1; + position++; + } + Coll.sortNumbersAsc(result); + return result; + } +} diff --git a/snode/src/utilz/check.ts b/snode/src/utilz/check.ts new file mode 100644 index 0000000..6209236 --- /dev/null +++ b/snode/src/utilz/check.ts @@ -0,0 +1,34 @@ +import StrUtil from './strUtil' + +export class Check { + public static isTrue(condition: any, err?: string) { + if (!condition) { + throw new Error(StrUtil.isEmpty(err) ? 'Assertion failed' : err) + } + } + + public static notNull(condition: any, err?: string) { + if (condition == null) { + throw new Error(StrUtil.isEmpty(err) ? 'Null check failed' : err) + } + } + + // todo make var types + public static notEmpty(value: string, err?: string) { + if (StrUtil.isEmpty(value)) { + throw new Error(StrUtil.isEmpty(err) ? 'Str empty check failed' : err) + } + } + + public static notEmptyArr(value: any[], err?: string) { + if (value == null || value.length == 0) { + throw new Error(StrUtil.isEmpty(err) ? 'Str empty check failed' : err) + } + } + + public static notEmptySet(value: Set<any>, err?: string) { + if (value == null || value.size == 0) { + throw new Error(StrUtil.isEmpty(err) ? 'Set empty check failed' : err) + } + } +} diff --git a/snode/src/utilz/coll.ts b/snode/src/utilz/coll.ts new file mode 100644 index 0000000..b700d2d --- /dev/null +++ b/snode/src/utilz/coll.ts @@ -0,0 +1,103 @@ +// CollectionUtils +// all the proper type safe way to work with JS collections/sets/arrays +export class Coll { + + public static arrayToMap<K extends keyof V, V>(arr: V[], keyField: K): Map<V[K], V> { + if (arr == null || arr.length == 0) { + return new Map() + } + return new Map<V[K], V>(arr.map((value) => [value[keyField], value])) + } + + public static mapValuesToArray<K extends keyof V, V>(map: Map<V[K], V>): V[] { + if (map == null || map.size == 0) { + return [] + } + return [...map.values()]; + } + + public static mapKeysToArray<K>(map: Map<K, any>): K[] { + if (map == null || map.size == 0) { + return [] + } + return [...map.keys()]; + } + + + public static arrayToSet<V>(arr: V[]): Set<V> { + if (arr == null) { + return new Set<V>(); + } + return new Set<V>(arr) + } + + public static arrayToFields<K extends keyof V, V>(arr: V[], keyField: K): Set<V[K]> { + const arrayOfFields = arr.map((obj) => obj[keyField]) + return new Set(arrayOfFields) + } + + public static findIndex<V>(arr: V[], filter: (item: V) => boolean): number { + if (arr == null) { + return -1 + } + return arr.findIndex(filter) + } + + public static setToArray<V>(set: Set<V>): V[] { + if (set == null) { + return []; + } + return Array.from(set.keys()) + } + + // [1,2,3] - [2,3] = [1] + public static substractSet<T>(set1: Set<T>, set2: Set<T>): Set<T> { + return new Set([...set1].filter(x => !set2.has(x))); + } + + // [1,2,3] x [2, 3] = [2,3] + public static intersectSet<T>(set1: Set<T>, set2: Set<T>): Set<T> { + return new Set([...set1].filter(x => set2.has(x))); + } + + // [1,2,3] x [2, 3] = [2,3] + public static addSet<T>(set1: Set<T>, set2: Set<T>): Set<T> { + return new Set([...set1, ...set2]); + } + + public static sortNumbersAsc(array: number[]) { + if (array == null || array.length == 0) { + return; + } + array.sort((a, b) => { + return a - b; + }) + } + + public static isEqualSet<T>(a: Set<T>, b: Set<T>) { + if (a === b) return true; + if (a.size !== b.size) return false; + for (const value of a) { + if (!b.has(value)) { + return false; + } + } + return true; + } + + // parse '[1,2,3]' into Set<number>: 1,2,3 + public static parseAsNumberSet(jsonArray: string): Set<number> { + const arr: number[] = JSON.parse(jsonArray); + return Coll.arrayToSet(arr); + } + + // store set 1,2,3 as array: [1,2,3] + public static numberSetToJson(s: Set<number>): string { + return JSON.stringify([...s]); + } + + // set 1,2,3 to sql: ('1','2','3') + public static numberSetToSqlQuoted(s: Set<number>): string { + return '(' + Coll.setToArray(s).map(num => "'" + num + "'").join(',') + ')'; + } +} diff --git a/snode/src/utilz/dateUtil.ts b/snode/src/utilz/dateUtil.ts new file mode 100644 index 0000000..4840b49 --- /dev/null +++ b/snode/src/utilz/dateUtil.ts @@ -0,0 +1,56 @@ +import { DateTime } from 'ts-luxon' + +export default class DateUtil { + public static formatYYYYMMDD(yearValue: number, monthValue: number, dayValue: number): string { + return DateTime.fromObject({ year: yearValue, month: monthValue, day: dayValue }).toFormat( + 'yyyyMMdd' + ) + } + + public static formatYYYYMMDDEx(dt: DateTime): string { + return dt.toFormat('yyyyMMdd') + } + + public static formatYYYYMM(dt: DateTime): string { + return dt.toFormat('yyyyMM') + } + + public static buildDateTime(yearValue: number, monthValue: number, dayValue: number): DateTime { + return DateTime.fromObject({ year: yearValue, month: monthValue, day: dayValue }) + } + + // example: 1661214142.000000 + public static parseUnixFloatAsDouble(timestamp: string): number { + return Number.parseFloat(timestamp) + } + + // example: 1661214142 + public static parseUnixFloatAsInt(timestamp: string): number { + return Math.floor(Number.parseFloat(timestamp)) + } + + public static parseUnixFloatAsDateTime(timestamp: string): DateTime { + return DateTime.fromMillis(Number.parseFloat(timestamp) * 1000) + } + + public static dateTimeToUnixFloat(dt: DateTime): number { + return dt.toMillis() / 1000.0 + } + + public static currentTimeMillis(): number { + return Date.now() + } + + public static currentTimeSeconds(): number { + // new Date().getTime() + return Math.round( Date.now()/ 1000) + } + + public static millisToDate(timestamp: number): Date { + return new Date(timestamp) + } + + public static millisToUnixSeconds(timestamp: number): number { + return Math.round(timestamp / 1000) + } +} diff --git a/snode/src/utilz/envLoader.ts b/snode/src/utilz/envLoader.ts new file mode 100644 index 0000000..939fa82 --- /dev/null +++ b/snode/src/utilz/envLoader.ts @@ -0,0 +1,41 @@ +import dotenv from 'dotenv' +import StrUtil from './strUtil' + +export class EnvLoader { + + public static loadEnvOrFail() { + // loads all .env variables into process.env.* variables + // Optional support for CONFIG_DIR variable + console.log(`config dir is ${process.env.CONFIG_DIR}`); + let options = {}; + if (process.env.CONFIG_DIR) { + options = {path: `${process.env.CONFIG_DIR}/.env`}; + } + const envFound = dotenv.config(options); + if (envFound.error) { + throw new Error("⚠️ Couldn't find .env file ⚠️") + } + } + + public static getPropertyOrFail(propName: string): string { + const val = process.env[propName] + if (StrUtil.isEmpty(val)) { + throw new Error(`process.env.${propName} is empty`) + } + return val + } + + // for undefined: defaults to false + public static getPropertyAsBool(propName: string): boolean { + const val = process.env[propName] + return val != null && val.toLowerCase() === 'true' + } + + public static getPropertyOrDefault(propName: string, def:string): string { + const val = process.env[propName] + if (StrUtil.isEmpty(val)) { + return def; + } + return val + } +} diff --git a/snode/src/utilz/ethSig.ts b/snode/src/utilz/ethSig.ts new file mode 100644 index 0000000..be11cd9 --- /dev/null +++ b/snode/src/utilz/ethSig.ts @@ -0,0 +1,35 @@ +import {Wallet} from "ethers"; +import {verifyMessage} from "ethers/lib/utils"; +import {ObjectHasher} from "./objectHasher"; + +/** + * Utitily class that allows + * - to sign objects with an eth private key + * - to check that signature later + * + * Ignores 'signature' properties + */ +export class EthSig { + + public static async create(wallet: Wallet, ...object: any[]): Promise<string> { + const ethMessage = ObjectHasher.hashToSha256IgnoreSig(object); + const sig = await wallet.signMessage(ethMessage); + return sig; + } + + public static check(sig: string, targetWallet: string, ...object: any[]): boolean { + const ethMessage = ObjectHasher.hashToSha256IgnoreSig(object); + const verificationAddress = verifyMessage(ethMessage, sig); + if (targetWallet !== verificationAddress) { + return false; + } + return true; + } + + public static isEthZero(addr: string) { + return '0x0000000000000000000000000000000000000000' === addr + } +} + +export function Signed(target: Function) { +} \ No newline at end of file diff --git a/snode/src/utilz/ethersUtil.ts b/snode/src/utilz/ethersUtil.ts new file mode 100644 index 0000000..6f0613e --- /dev/null +++ b/snode/src/utilz/ethersUtil.ts @@ -0,0 +1,61 @@ +import path from "path"; +import fs from "fs"; +import {EnvLoader} from "./envLoader"; +import {Contract, ethers, Wallet} from "ethers"; +import {JsonRpcProvider} from "@ethersproject/providers/src.ts/json-rpc-provider"; +import {Logger} from "winston"; +import {ValidatorCtClient} from "../services/messaging-common/validatorContractState"; +import {WinstonUtil} from "./winstonUtil"; + +export class EthersUtil { + static log = WinstonUtil.newLog(EthersUtil); + + public static loadAbi(configDir: string, fileNameInConfigDir: string): string { + const fileAbsolute = path.resolve(configDir, `./${fileNameInConfigDir}`); + const file = fs.readFileSync(fileAbsolute, 'utf8'); + const json = JSON.parse(file); + const abi = json.abi; + console.log(`abi size:`, abi.length); + return abi; + } + + // creates a client, using an encrypted private key from disk, so that we could sign/write to the blockchain + public static async connectWithKey(configDir: string, + privateKeyFileName: string, + privateKeyPass: string, + contractAbiFileName: string, + contractAddr: string, + provider: JsonRpcProvider): Promise<ContractWithMeta> { + let abi = EthersUtil.loadAbi(configDir, contractAbiFileName); + const jsonFile = fs.readFileSync(configDir + '/' + privateKeyFileName, 'utf-8'); + let nodeWallet = await Wallet.fromEncryptedJson(jsonFile, privateKeyPass); + let nodeAddress = await nodeWallet.getAddress(); + const signer = nodeWallet.connect(provider) + const contract = new ethers.Contract(contractAddr, abi, signer); + this.log.debug('connecting contract %s using signer %s (keydir: %s, keyfile: %s, abi: %s) ', + contractAddr, signer.address, configDir, privateKeyFileName, contractAbiFileName); + return { + contract, + nodeWallet, + nodeAddress + }; + } + + // creates a client which can only read blockchain state + public static async connectWithoutKey(configDir: string, + contractAbiFileName: string, + contractAddr: string, + provider: JsonRpcProvider): Promise<Contract> { + let abi = EthersUtil.loadAbi(configDir, contractAbiFileName); + const contract = new ethers.Contract(contractAddr, abi, provider); + this.log.debug('connecting contract %s (no key, abi: %s) ', + contractAddr, contractAbiFileName); + return contract; + } +} + +type ContractWithMeta = { + contract: Contract; + nodeWallet: Wallet; + nodeAddress: string; +} \ No newline at end of file diff --git a/snode/src/utilz/expressUtil.ts b/snode/src/utilz/expressUtil.ts new file mode 100644 index 0000000..dd8e671 --- /dev/null +++ b/snode/src/utilz/expressUtil.ts @@ -0,0 +1,20 @@ +import { NextFunction, Request, Response } from 'express' +import { WinstonUtil } from './winstonUtil' + +export class ExpressUtil { + static log = WinstonUtil.newLog('http') + + static handle(req: Request, res: Response, next: NextFunction) { + ExpressUtil.log.debug( + `>> Calling %s %s %o with body: %o`, + req.method, + req.url, + req.params, + req.body + ) + res.on('finish', function () { + ExpressUtil.log.debug(`<< Reply ${res.statusCode} with body: %s`, res.statusMessage) + }) + next() + } +} diff --git a/snode/src/utilz/idUtil.ts b/snode/src/utilz/idUtil.ts new file mode 100755 index 0000000..17f32cb --- /dev/null +++ b/snode/src/utilz/idUtil.ts @@ -0,0 +1,8 @@ +import * as uuid from "uuid"; + +export default class IdUtil { + + public static getUuidV4(): string { + return uuid.v4(); + } +} \ No newline at end of file diff --git a/snode/src/utilz/mySqlUtil.ts b/snode/src/utilz/mySqlUtil.ts new file mode 100644 index 0000000..30621b2 --- /dev/null +++ b/snode/src/utilz/mySqlUtil.ts @@ -0,0 +1,137 @@ +import { Logger } from 'winston' +import { OkPacket, Pool } from 'mysql' +import { WinstonUtil } from './winstonUtil' +import { EnvLoader } from './envLoader' + +/* + A sync replacement of db.query callback-y code + + public async sendSpamEvent(payload_id) { + const query = `select sender from feeds WHERE payload_id=?` + return await new Promise((resolve, reject) => { + db.query(query, [payload_id], function (err, results) { + if (err) { + logger.error(err) + reject(err) + } else { + if (results.length > 0) { + const sender = results[0].sender + const feed = { + payload_id: payload_id, + sender: sender, + } + resolve(feed) + } else { + resolve({}) + } + } + }) + }).catch((err) => { + logger.error(err) + reject(err) + }) + } + ).catch((err) => { + logger.error(err) + reject(err) + }) + } + + Would look like + + let rows = await MySqlUtil.query<{channel: string, alias: string, subscriber: string, timestamp: string, is_currently_subscribed: string}> + (`select channel, alias, subscriber, timestamp, is_currently_subscribed + from subscribers + where (${channelDbField} = ? AND subscriber = ?)`, + cmd.message.channel, subscriberAddr); + + */ +export class MySqlUtil { + private static log: Logger = WinstonUtil.newLog('mysql') + static logSql = false + static pool: Pool + + public static init(pool: Pool) { + MySqlUtil.pool = pool + if (!MySqlUtil.logSql && EnvLoader.getPropertyAsBool('LOG_SQL_STATEMENTS')) { + pool.on('connection', function (connection) { + connection.on('enqueue', function (sequence) { + // if (sequence instanceof mysql.Sequence.Query) { + if ('Query' === sequence.constructor.name) { + MySqlUtil.log.debug(sequence.sql) + } + }) + }) + MySqlUtil.logSql = true + } + this.log.info('sql statement logging is enabled') + } + + public static async queryOneValueOrDefault<V>( + query: string, + defaultValue: V, + ...sqlArgs: any[] + ): Promise<V | null> { + const result = await this.queryOneRow(query, ...sqlArgs) + if (result == null) { + return defaultValue + } + const firstPropertyName = Object.entries(result)[0][0] + if (firstPropertyName == null) { + return defaultValue + } + const resultValue = result[firstPropertyName] + if (resultValue == null) { + return defaultValue + } + return resultValue + } + + public static async queryOneValue<V>(query: string, ...sqlArgs: any[]): Promise<V | null> { + return await this.queryOneValueOrDefault(query, null, ...sqlArgs) + } + + public static async queryOneRow<R>(query: string, ...sqlArgs: any[]): Promise<R | null> { + const result = await this.queryArr<R>(query, ...sqlArgs) + if (result.length != 1) { + return null + } + return result[0] + } + + public static async queryAnyArr(query: string, ...sqlArgs: any[]): Promise<any[]> { + return await this.queryArr<any>(query, ...sqlArgs) + } + + public static async update(query: string, ...sqlArgs: any[]): Promise<OkPacket> { + const res: any = await this.queryArr<void>(query, ...sqlArgs) + return <OkPacket>res + } + + public static async insert(query: string, ...sqlArgs: any[]): Promise<OkPacket> { + const res: any = await this.queryArr(query, ...sqlArgs) + return <OkPacket>res + } + + public static async queryArr<R>(query: string, ...sqlArgs: any[]): Promise<R[]> { + return new Promise<[R]>((resolve, reject) => { + MySqlUtil.pool.getConnection(function (err, connection) { + if (err) { + MySqlUtil.log.error(err) + reject(err) + return + } + connection.query(query, sqlArgs, function (err, results) { + connection.release() // always put connection back in pool after last query + if (err) { + MySqlUtil.log.error(err) + reject(err) + return + } + resolve(results) + return + }) + }) + }) + } +} diff --git a/snode/src/utilz/numUtil.ts b/snode/src/utilz/numUtil.ts new file mode 100644 index 0000000..1331ad6 --- /dev/null +++ b/snode/src/utilz/numUtil.ts @@ -0,0 +1,23 @@ +export class NumUtil { + public static parseInt(val: string | number | null, defaultValue: number): number { + if (val === null) { + return defaultValue + } + const valN = typeof val === 'string' ? Number(val) : val + if (isNaN(valN)) { + return defaultValue + } + return this.isRoundedInteger(valN) ? valN : Math.round(valN) + } + + static isRoundedInteger(valN: number) { + return Number.isInteger(valN); + } + + public static toString(value: number) { + if (value == null) { + return '' + } + return '' + value + } +} diff --git a/snode/src/utilz/objectHasher.ts b/snode/src/utilz/objectHasher.ts new file mode 100644 index 0000000..34e6dc8 --- /dev/null +++ b/snode/src/utilz/objectHasher.ts @@ -0,0 +1,45 @@ +const hash = require('object-hash') + +/** + * Allows to build a consistent hash out of a json object + */ +export class ObjectHasher { + private static options = { + algorithm: 'sha256', + encoding: 'hex', + respectFunctionProperties: false, // skip functions + respectFunctionNames: false, // skip function names + respectType: false, // skip class info + unorderedArrays: false, // don't sort arrays before hash + unorderedSets: false, // don't sort sets before hash + unorderedObjects: true // sort object properties before hash + } + + // todo Object.assign(target, src) + /** + * Returns hex string + * ex: de5ed3919975ece48c922a6380b59efc8638967ed236e0892164cc17ccfbf87b + * @param obj json object + */ + public static hashToSha256(obj: any): string { + return hash(obj, ObjectHasher.options) + } + + public static hashToSha256IgnoreSig(obj: any): string { + return hash(obj, { + ...ObjectHasher.options, + excludeKeys: function (propName) { + return 'signature' === propName + } + }) + } + + public static hashToSha256IgnoreRecipientsResolved(obj: any): string { + return hash(obj, { + ...ObjectHasher.options, + excludeKeys: function (propName) { + return 'recipientsResolved' === propName + } + }) + } +} diff --git a/snode/src/utilz/pgUtil.ts b/snode/src/utilz/pgUtil.ts new file mode 100644 index 0000000..eeab171 --- /dev/null +++ b/snode/src/utilz/pgUtil.ts @@ -0,0 +1,104 @@ +import {Logger} from 'winston' +import {OkPacket, Pool} from 'mysql' +import {WinstonUtil} from './winstonUtil' +import {EnvLoader} from './envLoader' +import StrUtil from "./strUtil"; +import pg from "pg-promise/typescript/pg-subset"; +import {IDatabase} from "pg-promise"; + +// PG PROMISE https://github.com/vitaly-t/pg-promise + +// NOTE: here are how named params are working in pg-async +// https://github.com/vitaly-t/pg-promise/wiki/Learn-by-Example#named-parameters +export class PgUtil { + private static log: Logger = WinstonUtil.newLog('pg') + static logSql = false + static pool:IDatabase<{}, pg.IClient>; // todo unknown type ??? + + public static init(pool:IDatabase<{}, pg.IClient>) { + PgUtil.pool = pool; + if (!PgUtil.logSql && EnvLoader.getPropertyAsBool('LOG_SQL_STATEMENTS')) { + // todo add logging query + values + PgUtil.logSql = true + } + this.log.info('sql statement logging is enabled') + } + + public static async queryOneValueOrDefault<V>( + query: string, + defaultValue: V, + ...sqlArgs: any[] + ): Promise<V | null> { + const result = await this.queryOneRow(query, ...sqlArgs) + if (result == null) { + return defaultValue + } + const firstPropertyName = Object.entries(result)[0][0] + if (firstPropertyName == null) { + return defaultValue + } + const resultValue = result[firstPropertyName] + if (resultValue == null) { + return defaultValue + } + return resultValue + } + + public static async queryOneValue<V>(query: string, ...sqlArgs: any[]): Promise<V | null> { + return await this.queryOneValueOrDefault(query, null, ...sqlArgs) + } + + public static async queryOneRow<R>(query: string, ...sqlArgs: any[]): Promise<R | null> { + const result = await this.queryArr<R>(query, ...sqlArgs) + if (result.length != 1) { + return null + } + return result[0] + } + + public static async queryAnyArr(query: string, ...sqlArgs: any[]): Promise<any[]> { + return await this.queryArr<any>(query, ...sqlArgs) + } + + public static async update(query: string, ...sqlArgs: any[]): Promise<number> { + query = StrUtil.replaceAllMySqlToPostre(query); + this.log.debug(query, ' ---> args ', sqlArgs); + let result = await this.pool.result<number>(query, sqlArgs,r => r.rowCount); + return result; + } + + public static async insert(query: string, ...sqlArgs: any[]): Promise<number> { + query = StrUtil.replaceAllMySqlToPostre(query); + this.log.debug(query, ' ---> args ', sqlArgs); + let result = await this.pool.result<number>(query, sqlArgs,r => r.rowCount); + return result; + } + + public static async queryArr<R>(query: string, ...sqlArgs: any[]): Promise<R[]> { + query = StrUtil.replaceAllMySqlToPostre(query); + this.log.debug(query, ' ---> args ', sqlArgs); + let result = await this.pool.query<R[]>(query, sqlArgs); + return result; + } + +} + +/* +function (err, connection) { + if (err) { + PgUtil.log.error(err) + reject(err) + return + } + connection.query(query, sqlArgs, function (err, results) { + connection.release() // always put connection back in pool after last query + if (err) { + PgUtil.log.error(err) + reject(err) + return + } + resolve(results) + return + }) + } +*/ diff --git a/snode/src/utilz/promiseUtil.ts b/snode/src/utilz/promiseUtil.ts new file mode 100644 index 0000000..a133a64 --- /dev/null +++ b/snode/src/utilz/promiseUtil.ts @@ -0,0 +1,92 @@ +export class PromiseUtil { + + // Waits for all promises to complete + public static allSettled<T>(promises: Promise<T>[]): Promise<PromiseResult<T>[]> { + let wrappedPromises = promises.map(p => { + return Promise.resolve(p) + .then( + val => new PromiseResult(PromiseResultType.SUCCESS, val, null), + err => new PromiseResult(PromiseResultType.FAILED, null, err)); + }); + return Promise.all(wrappedPromises); + } + + public static async sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); + } + + public static createDeferred<T>(rejectTimeout: number = 0, + resolveTimeout: number = 0): DeferredPromise<T> { + let deferred = new DeferredPromise<T>(); + deferred.promise = new Promise<T>((resolve, reject) => { + deferred.resolve = resolve; + deferred.reject = reject; + }); + if (rejectTimeout > 0) { + setTimeout(function () { + deferred.reject(); + }, rejectTimeout); + } + if (resolveTimeout > 0) { + setTimeout(function () { + deferred.resolve(); + }, resolveTimeout); + } + return deferred; + } + + +} + +export enum PromiseResultType { + FAILED = -1, + RUNNING = 0, + SUCCESS = 1 +} + +export class PromiseResult<T> { + private _status: PromiseResultType = PromiseResultType.RUNNING; + private _val: T; + private _err: any; + + constructor(status: number, val: T, err: any) { + this._status = status; + this._val = val; + this._err = err; + } + + public isFullfilled(): boolean { + return this._status == PromiseResultType.SUCCESS; + } + + public isSuccess(): boolean { + return this._status == PromiseResultType.SUCCESS; + } + + public isRejected(): boolean { + return this._status == PromiseResultType.FAILED; + } + + public isRunning(): boolean { + return this._status == PromiseResultType.RUNNING; + } + + get status(): PromiseResultType { + return this._status; + } + + get val(): T { + return this._val; + } + + get err(): any { + return this._err; + } +} + +export class DeferredPromise<T> { + promise: Promise<T>; + resolve: Function; + reject: Function; +} + diff --git a/snode/src/utilz/strUtil.ts b/snode/src/utilz/strUtil.ts new file mode 100755 index 0000000..b538954 --- /dev/null +++ b/snode/src/utilz/strUtil.ts @@ -0,0 +1,114 @@ +export default class StrUtil { + + public static isEmpty(s: string): boolean { + if (s == null) { + return true; + } + if (typeof s !== 'string') { + return false; + } + return s.length === 0 + } + + public static isHex(s: string): boolean { + if (StrUtil.isEmpty(s)) { + return false; + } + let pattern = /^[A-F0-9]+$/i; + let result = pattern.test(s); + return result; + } + + /** + * Return s if this is not empty, defaultValue otherwise + * @param s + * @param defaultValue + */ + public static getOrDefault(s: string, defaultValue: string) { + return StrUtil.isEmpty(s) ? defaultValue : s; + } + + public static toStringDeep(obj: any): string { + return JSON.stringify(obj, null, 4); + } + + // https://ethereum.stackexchange.com/questions/2045/is-ethereum-wallet-address-case-sensitive + public static normalizeEthAddress(addr: string): string { + return addr; + } + + public static replaceAll(str: string, + find: string[], replace: string[], + regexFlags: string):string { + var gFlag = false + + if (typeof str !== 'string') { + throw new TypeError('`str` parameter must be a string!') + } + + if (!Array.isArray(find)) { + throw new TypeError('`find` parameter must be an array!') + } + + if (!Array.isArray(replace)) { + throw new TypeError('`replace` parameter must be an array!') + } + + if (!find.length || !replace.length) { + throw new Error('`find` and `replace` parameters must not be empty!') + } + + if (find.length !== replace.length) { + throw new Error('`find` and `replace` parameters must be equal in length!') + } + + if (regexFlags) { + if (typeof regexFlags !== 'string') { + throw new TypeError('`regexFlags` parameter must be a string!') + } else if (~regexFlags.indexOf('g')) { + gFlag = true + } else { + regexFlags += 'g' + } + } else { + regexFlags = 'g' + } + + var done = [] + var joined = find.join(')|(') + var regex = new RegExp('(' + joined + ')', regexFlags) + + return str.replace(regex, (match, ...finds) => { + var replaced + + finds.some((found, index) => { + if (found !== undefined) { + if (gFlag) { + replaced = replace[index] + } else if (!~done.indexOf(found)) { + done.push(found) + replaced = replace[index] + } else { + replaced = found + } + + return true + } + }) + + return replaced + }) + } + + /** + * replaces MySql placeholders ? with Postre placehoslers $1 $2 $3 + * example: + * aaaa?bbbb?cccc? => aaaa$1bbbb$2cccc$3 + */ + public static replaceAllMySqlToPostre(s: string): string { + let cnt = 1; + return s.replace(/\?/g, function () { + return `$${cnt++}`; + }); + } +} diff --git a/snode/src/utilz/stringCounter.ts b/snode/src/utilz/stringCounter.ts new file mode 100644 index 0000000..537ab3a --- /dev/null +++ b/snode/src/utilz/stringCounter.ts @@ -0,0 +1,88 @@ +/** + * Holds a mapping of + * 'key' -> COUNTER + * + * i.e. + * 'c' -> 3 + * 'b' -> 2 + * 'a' -> 1 + * + * + * and returns it in ascending/descending order + * + * Each value holds an additional context object, i.e. 'a' -> 1, [ incrementObject1, incrementObject2 ] + * + */ + +export class StringCounter<T> { + map: Map<string, ValueHolder<T>> = new Map<string, ValueHolder<T>>() + + public increment(key: string, contextValue: T = null) { + const holder = this.map.get(key) + if (holder == null) { + this.map.set(key, new ValueHolder(1, contextValue)) + } else { + holder.value++ // using wrapper to avoid get/put + holder.append(contextValue) + } + } + + public getValue(key: string): number { + const holder = this.map.get(key) + return holder == undefined ? null : holder.value + } + + public getValueContext(key: string): T[] { + const holder = this.map.get(key) + return holder == undefined ? null : holder.incrementCtx + } + + public iterateAndSort( + asc: boolean, + callback: (index: number, key: string, count: number, incrementCtx: T[]) => void + ) { + this.sort(asc) + let i = 0 + for (const [key, valueHolder] of this.map) { + callback(i++, key, valueHolder.value, valueHolder.incrementCtx) + } + } + + public getMostFrequentEntry(): ValueHolder<T> { + const sortedMap = this.toSortedMap(false) + for (const [key, valueHolder] of sortedMap.entries()) { + return valueHolder + } + return null + } + + public sort(asc: boolean) { + this.map = this.toSortedMap(asc) + } + + private toSortedMap(asc: boolean) { + const sortedMap = new Map<string, ValueHolder<any>>( + [...this.map].sort((a, b) => { + // a[0] = key, a[1] = value + if (a[1].value == b[1].value) return 0 + if (a[1].value > b[1].value) return asc ? 1 : -1 + if (a[1].value < b[1].value) return asc ? -1 : 1 + }) + ) + return sortedMap + } +} + +export class ValueHolder<V> { + value: number + incrementCtx: V[] = [] + + constructor(value: number, contextValue: V) { + this.value = value + this.incrementCtx.push(contextValue) + } + + append(contextValue: V) { + this.incrementCtx.push(contextValue) + } +} diff --git a/snode/src/utilz/tuple.ts b/snode/src/utilz/tuple.ts new file mode 100644 index 0000000..b0f12b8 --- /dev/null +++ b/snode/src/utilz/tuple.ts @@ -0,0 +1 @@ +type Tuple<A, B> = [A, undefined?] | [undefined, B]; \ No newline at end of file diff --git a/snode/src/utilz/waitNotify.ts b/snode/src/utilz/waitNotify.ts new file mode 100644 index 0000000..d652d53 --- /dev/null +++ b/snode/src/utilz/waitNotify.ts @@ -0,0 +1,50 @@ +import {EventEmitter} from "events"; + +import IdUtil from "./idUtil"; + +export class WaitNotify { + ee: EventEmitter; + waitMsgIDs = []; + + constructor() { + this.ee = new EventEmitter(); + this.waitMsgIDs = []; + } + + async wait(timeout:number = 0) { + return new Promise<void>((resolve, reject) => { + const msgID = IdUtil.getUuidV4(); + this.waitMsgIDs.push(msgID); + let timeoutId; + this.ee.once(msgID, () => { + if (timeoutId) { + clearTimeout(timeoutId); + } + resolve(); + }); + if (timeout) { + timeoutId = setTimeout(() => { + const delIndex = this.waitMsgIDs.indexOf(msgID); + if (delIndex !== -1) { + this.waitMsgIDs.splice(delIndex, 1); + reject(new Error('wait timeout')); + } + }, timeout); + } + }); + } + + notify() { + this.notifyAll(); + } + + notifyAll() { + while (this.waitMsgIDs.length > 0) { + this.ee.emit(this.waitMsgIDs.shift()); + } + } + + notifyOne() { + this.ee.emit(this.waitMsgIDs.shift()); + } +} \ No newline at end of file diff --git a/snode/src/utilz/winstonUtil.ts b/snode/src/utilz/winstonUtil.ts new file mode 100644 index 0000000..3850205 --- /dev/null +++ b/snode/src/utilz/winstonUtil.ts @@ -0,0 +1,163 @@ +import {Format, TransformableInfo} from 'logform' +import {DateTime} from 'ts-luxon' +import winston from 'winston' +import StrUtil from './strUtil' +import {EnvLoader} from './envLoader' + +/* +Example usage: +public log: Logger = WinstonUtil.newLog(ValidatorNode); + +This is a hacky class which goal is +1. to create debug.log and error.log with custom text format (format2 in debugFileTransport and errorFileTransport) +2. make as little merge confligs with loaders/logger as possible (format1 in consoleTransport and jsonTransport) +3. provide newLog(name) which allows custom formatting of it's messages in debug.log and error.log + +Details +------- +We combine +winston logger + className + dynamic logger from loaders/logger +to work together +and add 2 new targets +debugFileTransport -> $LOG_DIR/debug.log +errorFileTransport -> $LOG_DIR/error.log + +How is this all wired + +All logs come into +loaders/logger.ts LoggerInstance +it formats in +format1: +18:08:06 info Express loaded +-> consoleTransport (takes format1) (renders as format1) +-> jsonLogTransport (takes format1) (renders as format1) +-> dynamicLoggingTransport (these are progressbars, it toggles on/off console output) +-> debugFileTransport (takes format1) (renders as format2) +-> errorFileTransport (takes format1) (renders as format2) + +Some logs come into newLogger(className) +it formats in format1 + adds className meta field +format1: +18:08:06 info Express loaded +-> consoleTransport (takes format1) (renders as format1) +-> jsonLogTransport (takes format1) (renders as format1) +-> debugFileTransport (takes format1) (renders as format2 with className) +-> errorFileTransport (takes format1) (renders as format2 with className) + +format2: +I 230811 174624 Got alias List (SendMessage) + +format2 with class name: +I 230811 174624 [MyClass] Got alias List (SendMessage) + +*/ + + +export class WinstonUtil { + private static readonly CLASS_NAME_LENGTH = 23 + private static readonly LOG_DIR = EnvLoader.getPropertyOrFail('LOG_DIR'); + private static readonly LOG_LEVEL = EnvLoader.getPropertyOrFail('LOG_LEVEL'); + private static loggerMap: Map<string, winston.Logger> = new Map(); + + // all console writes drop here + public static consoleTransport = new winston.transports.Console({ + format: WinstonUtil.createFormat2WhichRendersClassName() + }); + + // add debug writes drop here + + public static debugFileTransport = new winston.transports.File({ + level: 'debug', + filename: `${WinstonUtil.LOG_DIR}/debug.log`, + handleExceptions: true, + maxsize: 5242880, + maxFiles: 5, + colorize: false, + tailable: true, + format: WinstonUtil.createFormat2WhichRendersClassName() + }) + + // all exceptions drop here + public static errorFileTransport = new winston.transports.File({ + level: 'error', + filename: `${WinstonUtil.LOG_DIR}/error.log`, + handleExceptions: true, + maxsize: 5242880, + maxFiles: 5, + colorize: false, + tailable: true, + format: WinstonUtil.createFormat2WhichRendersClassName() + }) + + /* + { "message": "Checking Node Version", "level": "info", "timestamp": "230809 180338", className?: "myClass"} + */ + public static renderFormat2(info: TransformableInfo) { + const {timestamp, level, message, meta} = info + const levelFirstChar = level == null ? '' : level.toUpperCase()[0] + const date = DateTime.now() + const formattedDate = date.toFormat('yyMMdd HHmmss') + const className = info.className + let formattedClassName: string + if (StrUtil.isEmpty(className)) { + formattedClassName = ' ' + } else { + formattedClassName = (' [' + className.substring(0, this.CLASS_NAME_LENGTH) + '] ').padEnd( + this.CLASS_NAME_LENGTH + 4 + ) + } + const metaAsString = meta == null ? '' : meta + return `${levelFirstChar} ${formattedDate}${formattedClassName}${message} ${metaAsString}` + } + + static createFormat1WhichSetsClassName(className: string | null): Format { + return winston.format.combine( + winston.format.timestamp({ + format: 'YYYY-MM-DD HH:mm:ss' + }), + winston.format.errors({stack: true}), + winston.format.splat(), + winston.format.json(), + winston.format.printf((info) => { + info['className'] = className + return '' + }) + ) + } + + static createFormat2WhichRendersClassName(): Format { + return winston.format.combine( + winston.format.errors({stack: true}), + winston.format.splat(), + winston.format.printf((info) => { + return WinstonUtil.renderFormat2(info) + }) + ) + } + + public static newLog(classNameOrClass: string | { name: string }): winston.Logger { + let loggerName = null + if (typeof classNameOrClass === 'string') { + loggerName = classNameOrClass + } else if (!StrUtil.isEmpty(classNameOrClass?.name)) { + loggerName = classNameOrClass?.name + } + loggerName = + loggerName == null ? null : loggerName.toString().substring(0, this.CLASS_NAME_LENGTH) + let loggerObj = WinstonUtil.loggerMap.get(loggerName) + if (loggerObj != null) { + return loggerObj + } + loggerObj = winston.createLogger({ + level: WinstonUtil.LOG_LEVEL, + format: this.createFormat1WhichSetsClassName(loggerName), //winston.format.json(), + transports: [ + WinstonUtil.consoleTransport, + WinstonUtil.debugFileTransport, + WinstonUtil.errorFileTransport + ] + }); + WinstonUtil.loggerMap.set(loggerName, loggerObj) + return loggerObj + } +} diff --git a/snode/tests/DbHelper.test.ts b/snode/tests/DbHelper.test.ts index 89c5bd8..81c26c4 100755 --- a/snode/tests/DbHelper.test.ts +++ b/snode/tests/DbHelper.test.ts @@ -1,6 +1,8 @@ import chai from 'chai' import 'mocha' import DbHelper from '../src/helpers/dbHelper' +import {Container} from "node-docker-api/lib/container"; +import {filter} from "lodash"; chai.should() const crypto = require("crypto"); diff --git a/vnode/src/loaders/dbService.ts b/vnode/src/loaders/dbService.ts index 78ef8af..dfdb0ea 100644 --- a/vnode/src/loaders/dbService.ts +++ b/vnode/src/loaders/dbService.ts @@ -1,4 +1,3 @@ -import config from '../config'; import {Injectable, Logger} from "@nestjs/common"; import {IDatabase} from "pg-promise"; const {DateTime} = require("luxon");