From 2e3cada302b531318732d58ea26cc064d95a17e7 Mon Sep 17 00:00:00 2001 From: Ezerous Date: Thu, 17 Dec 2020 19:25:48 +0200 Subject: [PATCH 1/7] Pinner init --- docker/Makefile | 2 +- docker/docker-compose.yml | 2 +- .../concordia-app/src/options/web3Options.js | 2 +- .../concordia-app/src/views/Home/index.jsx | 12 +- .../concordia-contracts/contracts/Forum.sol | 82 +- .../contracts/Migrations.sol | 2 +- packages/concordia-contracts/package.json | 4 +- .../concordia-contracts/truffle-config.js | 2 +- packages/concordia-pinner/.gitattributes | 10 + packages/concordia-pinner/.gitignore | 40 + packages/concordia-pinner/package.json | 33 + packages/concordia-pinner/src/index.js | 44 + .../src/options/ipfsOptions.js | 28 + .../src/options/libp2pBundle.js | 91 ++ .../concordia-pinner/src/utils/ipfsUtils.js | 12 + .../concordia-pinner/src/utils/orbitUtils.js | 56 + packages/concordia-rendezvous/package.json | 1 - yarn.lock | 1208 ++++++++++++----- 18 files changed, 1211 insertions(+), 420 deletions(-) create mode 100644 packages/concordia-pinner/.gitattributes create mode 100644 packages/concordia-pinner/.gitignore create mode 100644 packages/concordia-pinner/package.json create mode 100644 packages/concordia-pinner/src/index.js create mode 100644 packages/concordia-pinner/src/options/ipfsOptions.js create mode 100644 packages/concordia-pinner/src/options/libp2pBundle.js create mode 100644 packages/concordia-pinner/src/utils/ipfsUtils.js create mode 100644 packages/concordia-pinner/src/utils/orbitUtils.js diff --git a/docker/Makefile b/docker/Makefile index 7b8bcd0..0b47f47 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -28,7 +28,7 @@ run-ganache-test: # Rendezvous targets run-rendezvous: @docker network create --driver bridge concordia_rendezvous_network || true &&\ - docker run -d -p 9090:9090 --name concordia-rendezvous libp2p/js-libp2p-webrtc-star:version-0.20.1 + docker run -d -p 9090:9090 --name concordia-rendezvous libp2p/js-libp2p-webrtc-star:version-0.20.5 # Contracts targets build-contracts: diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index d3a6a42..3fa4386 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -21,7 +21,7 @@ services: restart: always rendezvous: - image: libp2p/js-libp2p-webrtc-star:version-0.20.1 + image: libp2p/js-libp2p-webrtc-star:version-0.20.5 container_name: concordia-rendezvous networks: rendezvous_network: diff --git a/packages/concordia-app/src/options/web3Options.js b/packages/concordia-app/src/options/web3Options.js index 0190d32..ded958c 100644 --- a/packages/concordia-app/src/options/web3Options.js +++ b/packages/concordia-app/src/options/web3Options.js @@ -17,7 +17,7 @@ const web3WebsocketOptions = { }; const web3 = (WEB3_HOST !== undefined && WEB3_PORT !== undefined) - ? new Web3.providers.WebsocketProvider(`ws://${WEB3_HOST}:${WEB3_PORT}`) + ? new Web3(new Web3.providers.WebsocketProvider(`ws://${WEB3_HOST}:${WEB3_PORT}`)) : new Web3(Web3.givenProvider || new Web3.providers.WebsocketProvider( `ws://${WEB3_HOST_DEFAULT}:${WEB3_PORT_DEFAULT}`, web3WebsocketOptions, )); diff --git a/packages/concordia-app/src/views/Home/index.jsx b/packages/concordia-app/src/views/Home/index.jsx index 69305ba..989d684 100644 --- a/packages/concordia-app/src/views/Home/index.jsx +++ b/packages/concordia-app/src/views/Home/index.jsx @@ -8,20 +8,20 @@ import './styles.css'; import { drizzle } from '../../redux/store'; import { FORUM_CONTRACT } from '../../constants/contracts/ContractNames'; -const { contracts: { [FORUM_CONTRACT]: { methods: { getNumberOfTopics } } } } = drizzle; +const { contracts: { [FORUM_CONTRACT]: { methods: { numTopics } } } } = drizzle; const Home = () => { const [numberOfTopicsCallHash, setNumberOfTopicsCallHash] = useState(''); - const getNumberOfTopicsResults = useSelector((state) => state.contracts[FORUM_CONTRACT].getNumberOfTopics); + const numTopicsResults = useSelector((state) => state.contracts[FORUM_CONTRACT].numTopics); useEffect(() => { - setNumberOfTopicsCallHash(getNumberOfTopics.cacheCall()); + setNumberOfTopicsCallHash(numTopics.cacheCall()); }, []); - const numberOfTopics = useMemo(() => (getNumberOfTopicsResults[numberOfTopicsCallHash] !== undefined - ? parseInt(getNumberOfTopicsResults[numberOfTopicsCallHash].value, 10) + const numberOfTopics = useMemo(() => (numTopicsResults[numberOfTopicsCallHash] !== undefined + ? parseInt(numTopicsResults[numberOfTopicsCallHash].value, 10) : null), - [getNumberOfTopicsResults, numberOfTopicsCallHash]); + [numTopicsResults, numberOfTopicsCallHash]); return useMemo(() => ( diff --git a/packages/concordia-contracts/contracts/Forum.sol b/packages/concordia-contracts/contracts/Forum.sol index cff1f8c..915fed3 100644 --- a/packages/concordia-contracts/contracts/Forum.sol +++ b/packages/concordia-contracts/contracts/Forum.sol @@ -1,8 +1,12 @@ //SPDX-License-Identifier: MIT -pragma solidity 0.7.1; -pragma experimental ABIEncoderV2; +pragma solidity 0.8.0; contract Forum { + // Error messages for require() + string public constant USER_HAS_NOT_SIGNED_UP = "User hasn't signed up yet."; + string public constant USERNAME_TAKEN = "Username is already taken."; + string public constant TOPIC_DOES_NOT_EXIST = "Topic doesn't exist."; + string public constant POST_DOES_NOT_EXIST = "Post doesn't exist."; //----------------------------------------USER---------------------------------------- struct User { @@ -13,40 +17,41 @@ contract Forum { bool signedUp; // Helper variable for hasUserSignedUp() } - mapping (address => User) users; - mapping (string => address) userAddresses; + mapping(address => User) users; + mapping(string => address) usernameAddresses; + address[] userAddresses; event UserSignedUp(string username, address userAddress); event UsernameUpdated(string newName, string oldName, address userAddress); function signUp(string memory username) public returns (bool) { - require (!hasUserSignedUp(msg.sender), "User has already signed up."); - require(!isUserNameTaken(username), "Username is already taken."); - users[msg.sender] = User(username, - new uint[](0), new uint[](0), block.timestamp, true); - userAddresses[username] = msg.sender; + require(!hasUserSignedUp(msg.sender), USER_HAS_NOT_SIGNED_UP); + require(!isUserNameTaken(username), USERNAME_TAKEN); + users[msg.sender] = User(username, new uint[](0), new uint[](0), block.timestamp, true); + usernameAddresses[username] = msg.sender; + userAddresses.push(msg.sender); emit UserSignedUp(username, msg.sender); return true; } function updateUsername(string memory newUsername) public returns (bool) { - require (hasUserSignedUp(msg.sender), "User hasn't signed up yet."); - require(!isUserNameTaken(newUsername), "Username is already taken."); + require(hasUserSignedUp(msg.sender), USER_HAS_NOT_SIGNED_UP); + require(!isUserNameTaken(newUsername), USERNAME_TAKEN); string memory oldUsername = getUsername(msg.sender); - delete userAddresses[users[msg.sender].username]; + delete usernameAddresses[users[msg.sender].username]; users[msg.sender].username = newUsername; - userAddresses[newUsername] = msg.sender; + usernameAddresses[newUsername] = msg.sender; emit UsernameUpdated(newUsername, oldUsername, msg.sender); return true; } function getUsername(address userAddress) public view returns (string memory) { - require (hasUserSignedUp(userAddress), "User hasn't signed up yet."); + require(hasUserSignedUp(userAddress), USER_HAS_NOT_SIGNED_UP); return users[userAddress].username; } function getUserAddress(string memory username) public view returns (address) { - return userAddresses[username]; + return usernameAddresses[username]; } function hasUserSignedUp(address userAddress) public view returns (bool) { @@ -54,31 +59,35 @@ contract Forum { } function isUserNameTaken(string memory username) public view returns (bool) { - if (getUserAddress(username)!=address(0)) + if (getUserAddress(username) != address(0)) return true; return false; } function getUserTopics(address userAddress) public view returns (uint[] memory) { - require (hasUserSignedUp(userAddress), "User hasn't signed up yet."); + require(hasUserSignedUp(userAddress), USER_HAS_NOT_SIGNED_UP); return users[userAddress].topicIDs; } function getUserPosts(address userAddress) public view returns (uint[] memory) { - require (hasUserSignedUp(userAddress), "User hasn't signed up yet."); + require(hasUserSignedUp(userAddress), USER_HAS_NOT_SIGNED_UP); return users[userAddress].postIDs; } function getUserDateOfRegister(address userAddress) public view returns (uint) { - require (hasUserSignedUp(userAddress), "User hasn't signed up yet."); + require(hasUserSignedUp(userAddress), USER_HAS_NOT_SIGNED_UP); return users[userAddress].timestamp; } function getUser(address userAddress) public view returns (User memory) { - require(hasUserSignedUp(userAddress), "User hasn't signed up yet."); + require(hasUserSignedUp(userAddress), USER_HAS_NOT_SIGNED_UP); return users[userAddress]; } + function getUserAddresses() public view returns (address[] memory) { + return userAddresses; + } + //----------------------------------------POSTING---------------------------------------- struct Topic { uint topicID; @@ -94,17 +103,17 @@ contract Forum { uint topicID; } - uint numTopics; // Total number of topics - uint numPosts; // Total number of posts + uint public numTopics; // Total number of topics + uint public numPosts; // Total number of posts - mapping (uint => Topic) topics; - mapping (uint => Post) posts; + mapping(uint => Topic) topics; + mapping(uint => Post) posts; event TopicCreated(uint topicID, uint postID); event PostCreated(uint postID, uint topicID); function createTopic() public returns (uint, uint) { - require(hasUserSignedUp(msg.sender)); // Only registered users can create topics + require(hasUserSignedUp(msg.sender), USER_HAS_NOT_SIGNED_UP); //Creates topic uint topicID = numTopics++; topics[topicID] = Topic(topicID, msg.sender, block.timestamp, new uint[](0)); @@ -121,8 +130,8 @@ contract Forum { } function createPost(uint topicID) public returns (uint) { - require(hasUserSignedUp(msg.sender)); // Only registered users can create posts - require(topicID obj.name === "UserSignedUp" && obj.type === 'event' + ); + web3.eth.subscribe('logs', { + address: contractAddress, + topics: [eventJsonInterface.signature] + }, function(error, result){ + if (!error) { + const eventObj = web3.eth.abi.decodeLog( + eventJsonInterface.inputs, + result.data, + result.topics.slice(1) + ) + console.log(`UserSignedUp!`, eventObj[1]) + getPeerDatabases(orbit, userAddresses).then(peerDBs => openKVDBs(orbit, peerDBs)); + } + }); +} + +main(); diff --git a/packages/concordia-pinner/src/options/ipfsOptions.js b/packages/concordia-pinner/src/options/ipfsOptions.js new file mode 100644 index 0000000..7c3c0d3 --- /dev/null +++ b/packages/concordia-pinner/src/options/ipfsOptions.js @@ -0,0 +1,28 @@ +import libp2pBundle from './libp2pBundle' + +export default { + repo: 'ipfs', + config: { + Addresses: { + Swarm: [ + // Use local signaling server (see also rendezvous script in package.json) + // For more information: https://github.com/libp2p/js-libp2p-webrtc-star + `/ip4/127.0.0.1/tcp/9090/wss/p2p-webrtc-star`, + + // Use the following public servers if needed + // '/dns4/wrtc-star1.par.dwebops.pub/tcp/443/wss/p2p-webrtc-star', + // '/dns4/ wrtc-star2.sjc.dwebops.pub/tcp/443/wss/p2p-webrtc-star' + ], + }, + }, + libp2p: libp2pBundle, + EXPERIMENTAL: { + pubsub: true, + }, + preload: { + enabled: false, + }, + init: { + emptyRepo: true, + }, +} diff --git a/packages/concordia-pinner/src/options/libp2pBundle.js b/packages/concordia-pinner/src/options/libp2pBundle.js new file mode 100644 index 0000000..ab23f3d --- /dev/null +++ b/packages/concordia-pinner/src/options/libp2pBundle.js @@ -0,0 +1,91 @@ +import Libp2p from 'libp2p'; +import wrtc from 'wrtc'; +import MulticastDNS from 'libp2p-mdns'; +import WebrtcStar from 'libp2p-webrtc-star'; +import Bootstrap from 'libp2p-bootstrap'; +import Gossipsub from 'libp2p-gossipsub'; +import KadDHT from 'libp2p-kad-dht'; +import MPLEX from 'libp2p-mplex'; +import { NOISE } from 'libp2p-noise'; + +// See also: https://github.com/libp2p/js-libp2p/blob/master/doc/CONFIGURATION.md +export default (opts) => { + return new Libp2p({ + peerId: opts.peerId, + addresses: { + listen: ['/ip4/127.0.0.1/tcp/9090/wss/p2p-webrtc-star'] + }, + connectionManager: { + minPeers: 25, + maxPeers: 100, + pollInterval: 5000 + }, + modules: { + transport: [ + WebrtcStar + ], + streamMuxer: [ + MPLEX + ], + connEncryption: [ + NOISE + ], + peerDiscovery: [ + MulticastDNS, + Bootstrap + ], + dht: KadDHT, + pubsub: Gossipsub + }, + config: { + transport: { + [WebrtcStar.prototype[Symbol.toStringTag]]: { + wrtc + } + }, + peerDiscovery: { + autoDial: true, + mdns: { + enabled: true, + interval: 10000 + }, + bootstrap: { + enabled: true, + interval: 30e3, + list: opts.config.Bootstrap + } + }, + relay: { + enabled: true, + hop: { + enabled: true, + active: true + } + }, + dht: { + enabled: true, + kBucketSize: 20, + randomWalk: { + enabled: true, + interval: 10e3, + timeout: 2e3 + } + }, + pubsub: { + enabled: true, + emitself: true + } + }, + metrics: { + enabled: true, + computeThrottleMaxQueueSize: 1000, + computeThrottleTimeout: 2000, + movingAverageIntervals: [ + 60 * 1000, // 1 minute + 5 * 60 * 1000, // 5 minutes + 15 * 60 * 1000 // 15 minutes + ], + maxOldPeersRetention: 50 + } + }) +} diff --git a/packages/concordia-pinner/src/utils/ipfsUtils.js b/packages/concordia-pinner/src/utils/ipfsUtils.js new file mode 100644 index 0000000..a2fcc2a --- /dev/null +++ b/packages/concordia-pinner/src/utils/ipfsUtils.js @@ -0,0 +1,12 @@ +export function displayIPFSStats(ipfs){ + //TODO: investigate occasional printing of duplicate peers + setInterval(async () => { + try { + const peers = await ipfs.swarm.peers() + console.log(`Number of peers: ${peers.length}`) + console.dir(peers) + } catch (err) { + console.log('IPFS peer logging error:', err) + } + }, 3000) +} diff --git a/packages/concordia-pinner/src/utils/orbitUtils.js b/packages/concordia-pinner/src/utils/orbitUtils.js new file mode 100644 index 0000000..d871b66 --- /dev/null +++ b/packages/concordia-pinner/src/utils/orbitUtils.js @@ -0,0 +1,56 @@ +import IPFS from 'ipfs'; +import OrbitDB from 'orbit-db'; +import Identities from 'orbit-db-identity-provider'; +import { EthereumContractIdentityProvider } from '@ezerous/eth-identity-provider'; +import Web3 from 'web3'; +import ipfsOptions from '../options/ipfsOptions'; +import { displayIPFSStats } from './ipfsUtils'; + +export async function createOrbitInstance(contractAddress){ + Identities.addIdentityProvider(EthereumContractIdentityProvider); + + EthereumContractIdentityProvider.setWeb3(new Web3()); // We need a fully-featured new Web3 for signature verification + EthereumContractIdentityProvider.setContractAddress(contractAddress); + + const ipfs = await IPFS.create(ipfsOptions); + + displayIPFSStats(ipfs); + + return await OrbitDB.createInstance(ipfs); +} + +export async function getPeerDatabases(orbit, userAddresses) { + const peerDBs = []; + for (const userAddress of userAddresses) { + peerDBs.push(await determineKVAddress({ orbit, dbName:'user', userAddress })); + peerDBs.push(await determineKVAddress({ orbit, dbName:'posts', userAddress })); + peerDBs.push(await determineKVAddress({ orbit, dbName:'topics', userAddress })); + } + return peerDBs; +} + +export async function openKVDBs(orbit, databases) { + for (const db of databases){ + const store = await orbit.keyvalue(db); + store.events.on('replicated', (address) => console.log(`Replicated ${address}`)); + console.log(`Opened ${db}`); + } +} + +// TODO: share code below with frontend (?) +async function determineDBAddress({ + orbit, dbName, type, identityId, +}) { + const ipfsMultihash = (await orbit.determineAddress(dbName, type, { + accessController: { write: [identityId] }, + })).root; + return `/orbitdb/${ipfsMultihash}/${dbName}`; +} + +async function determineKVAddress({ orbit, dbName, userAddress }) { + return determineDBAddress({ + orbit, dbName, type: 'keyvalue', identityId: userAddress + EthereumContractIdentityProvider.contractAddress, + }); +} + + diff --git a/packages/concordia-rendezvous/package.json b/packages/concordia-rendezvous/package.json index 33c3363..9558701 100644 --- a/packages/concordia-rendezvous/package.json +++ b/packages/concordia-rendezvous/package.json @@ -4,7 +4,6 @@ "private": true, "description": "Rendezvous server for Concordia", "scripts": { - "rendezvous": "star-signal --port=9090 --host=127.0.0.1", "start": "star-signal --port=9090 --host=127.0.0.1" }, "dependencies": { diff --git a/yarn.lock b/yarn.lock index ad94257..2ece6a4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22,9 +22,9 @@ "@babel/highlight" "^7.8.3" "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" - integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== dependencies: "@babel/highlight" "^7.10.4" @@ -56,42 +56,41 @@ source-map "^0.5.0" "@babel/core@^7.1.0", "@babel/core@^7.4.5": - version "7.12.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" - integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd" + integrity sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w== dependencies: "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.5" + "@babel/generator" "^7.12.10" "@babel/helper-module-transforms" "^7.12.1" "@babel/helpers" "^7.12.5" - "@babel/parser" "^7.12.7" + "@babel/parser" "^7.12.10" "@babel/template" "^7.12.7" - "@babel/traverse" "^7.12.9" - "@babel/types" "^7.12.7" + "@babel/traverse" "^7.12.10" + "@babel/types" "^7.12.10" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.1" json5 "^2.1.2" lodash "^4.17.19" - resolve "^1.3.2" semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.12.5", "@babel/generator@^7.4.0", "@babel/generator@^7.9.0": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.5.tgz#a2c50de5c8b6d708ab95be5e6053936c1884a4de" - integrity sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A== +"@babel/generator@^7.12.10", "@babel/generator@^7.4.0", "@babel/generator@^7.9.0": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.11.tgz#98a7df7b8c358c9a37ab07a24056853016aba3af" + integrity sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA== dependencies: - "@babel/types" "^7.12.5" + "@babel/types" "^7.12.11" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" - integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== +"@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz#54ab9b000e60a93644ce17b3f37d313aaf1d115d" + integrity sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ== dependencies: - "@babel/types" "^7.10.4" + "@babel/types" "^7.12.10" "@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": version "7.10.4" @@ -101,14 +100,14 @@ "@babel/helper-explode-assignable-expression" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/helper-builder-react-jsx-experimental@^7.12.4": - version "7.12.4" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.4.tgz#55fc1ead5242caa0ca2875dcb8eed6d311e50f48" - integrity sha512-AjEa0jrQqNk7eDQOo0pTfUOwQBMF+xVqrausQwT9/rTKy0g04ggFNaJpaE09IQMn9yExluigWMJcj0WC7bq+Og== +"@babel/helper-builder-react-jsx-experimental@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.11.tgz#a39616d7e4cf8f9da1f82b5fc3ee1f7406beeb11" + integrity sha512-4oGVOekPI8dh9JphkPXC68iIuP6qp/RPbaPmorRmEFbRAHZjSqxPjqHudn18GVDPgCuFM/KdFXc63C17Ygfa9w== dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-module-imports" "^7.12.1" - "@babel/types" "^7.12.1" + "@babel/helper-annotate-as-pure" "^7.12.10" + "@babel/helper-module-imports" "^7.12.5" + "@babel/types" "^7.12.11" "@babel/helper-builder-react-jsx@^7.10.4": version "7.10.4" @@ -164,20 +163,20 @@ "@babel/types" "^7.12.1" "@babel/helper-function-name@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" - integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz#1fd7738aee5dcf53c3ecff24f1da9c511ec47b42" + integrity sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA== dependencies: - "@babel/helper-get-function-arity" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" + "@babel/helper-get-function-arity" "^7.12.10" + "@babel/template" "^7.12.7" + "@babel/types" "^7.12.11" -"@babel/helper-get-function-arity@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" - integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== +"@babel/helper-get-function-arity@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf" + integrity sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag== dependencies: - "@babel/types" "^7.10.4" + "@babel/types" "^7.12.10" "@babel/helper-hoist-variables@^7.10.4": version "7.10.4" @@ -186,7 +185,7 @@ dependencies: "@babel/types" "^7.10.4" -"@babel/helper-member-expression-to-functions@^7.12.1": +"@babel/helper-member-expression-to-functions@^7.12.1", "@babel/helper-member-expression-to-functions@^7.12.7": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855" integrity sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw== @@ -215,12 +214,12 @@ "@babel/types" "^7.12.1" lodash "^4.17.19" -"@babel/helper-optimise-call-expression@^7.10.4": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz#7f94ae5e08721a49467346aa04fd22f750033b9c" - integrity sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw== +"@babel/helper-optimise-call-expression@^7.10.4", "@babel/helper-optimise-call-expression@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz#94ca4e306ee11a7dd6e9f42823e2ac6b49881e2d" + integrity sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ== dependencies: - "@babel/types" "^7.12.7" + "@babel/types" "^7.12.10" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.10.4" @@ -237,14 +236,14 @@ "@babel/types" "^7.12.1" "@babel/helper-replace-supers@^7.12.1": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz#f009a17543bbbbce16b06206ae73b63d3fca68d9" - integrity sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA== + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz#ea511658fc66c7908f923106dd88e08d1997d60d" + integrity sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA== dependencies: - "@babel/helper-member-expression-to-functions" "^7.12.1" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/traverse" "^7.12.5" - "@babel/types" "^7.12.5" + "@babel/helper-member-expression-to-functions" "^7.12.7" + "@babel/helper-optimise-call-expression" "^7.12.10" + "@babel/traverse" "^7.12.10" + "@babel/types" "^7.12.11" "@babel/helper-simple-access@^7.12.1": version "7.12.1" @@ -261,21 +260,21 @@ "@babel/types" "^7.12.1" "@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" - integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz#1b4cc424458643c47d37022223da33d76ea4603a" + integrity sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g== dependencies: - "@babel/types" "^7.11.0" + "@babel/types" "^7.12.11" -"@babel/helper-validator-identifier@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" - integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== +"@babel/helper-validator-identifier@^7.10.4", "@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== -"@babel/helper-validator-option@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz#175567380c3e77d60ff98a54bb015fe78f2178d9" - integrity sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A== +"@babel/helper-validator-option@^7.12.1", "@babel/helper-validator-option@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz#d66cb8b7a3e7fe4c6962b32020a131ecf0847f4f" + integrity sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw== "@babel/helper-wrap-function@^7.10.4": version "7.12.3" @@ -305,10 +304,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.12.7", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.9.0": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.7.tgz#fee7b39fe809d0e73e5b25eecaf5780ef3d73056" - integrity sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg== +"@babel/parser@^7.1.0", "@babel/parser@^7.12.10", "@babel/parser@^7.12.7", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.9.0": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.11.tgz#9ce3595bcd74bc5c466905e86c535b8b25011e79" + integrity sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg== "@babel/plugin-proposal-async-generator-functions@^7.12.1", "@babel/plugin-proposal-async-generator-functions@^7.8.3": version "7.12.1" @@ -593,10 +592,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-block-scoping@^7.12.1", "@babel/plugin-transform-block-scoping@^7.8.3": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz#f0ee727874b42a208a48a586b84c3d222c2bbef1" - integrity sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w== +"@babel/plugin-transform-block-scoping@^7.12.11", "@babel/plugin-transform-block-scoping@^7.8.3": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.11.tgz#83ae92a104dbb93a7d6c6dd1844f351083c46b4f" + integrity sha512-atR1Rxc3hM+VPg/NvNvfYw0npQEAcHuJ+MGZnFn6h3bo+1U3BWXMdFMlvVRApBTWKQMX7SOwRJZA5FBF/JQbvA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" @@ -784,35 +783,35 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-react-jsx-development@^7.12.7", "@babel/plugin-transform-react-jsx-development@^7.9.0": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.7.tgz#4c2a647de79c7e2b16bfe4540677ba3121e82a08" - integrity sha512-Rs3ETtMtR3VLXFeYRChle5SsP/P9Jp/6dsewBQfokDSzKJThlsuFcnzLTDRALiUmTC48ej19YD9uN1mupEeEDg== + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.11.tgz#078aa7e1f5f75a68ee9598ebed90000fcb11092f" + integrity sha512-5MvsGschXeXJsbzQGR/BH89ATMzCsM7rx95n+R7/852cGoK2JgMbacDw/A9Pmrfex4tArdMab0L5SBV4SB/Nxg== dependencies: - "@babel/helper-builder-react-jsx-experimental" "^7.12.4" + "@babel/helper-builder-react-jsx-experimental" "^7.12.11" "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-jsx" "^7.12.1" -"@babel/plugin-transform-react-jsx-self@^7.12.1", "@babel/plugin-transform-react-jsx-self@^7.9.0": +"@babel/plugin-transform-react-jsx-self@^7.9.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz#ef43cbca2a14f1bd17807dbe4376ff89d714cf28" integrity sha512-FbpL0ieNWiiBB5tCldX17EtXgmzeEZjFrix72rQYeq9X6nUK38HCaxexzVQrZWXanxKJPKVVIU37gFjEQYkPkA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-react-jsx-source@^7.12.1", "@babel/plugin-transform-react-jsx-source@^7.9.0": +"@babel/plugin-transform-react-jsx-source@^7.9.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz#d07de6863f468da0809edcf79a1aa8ce2a82a26b" integrity sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-react-jsx@^7.12.7", "@babel/plugin-transform-react-jsx@^7.9.1": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.7.tgz#8b14d45f6eccd41b7f924bcb65c021e9f0a06f7f" - integrity sha512-YFlTi6MEsclFAPIDNZYiCRbneg1MFGao9pPG9uD5htwE0vDbPaMUMeYd6itWjw7K4kro4UbdQf3ljmFl9y48dQ== +"@babel/plugin-transform-react-jsx@^7.12.10", "@babel/plugin-transform-react-jsx@^7.9.1": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.11.tgz#09a7319195946b0ddc09f9a5f01346f2cb80dfdd" + integrity sha512-5nWOw6mTylaFU72BdZfa0dP1HsGdY3IMExpxn8LBE8dNmkQjB+W+sR+JwIdtbzkPvVuFviT3zyNbSUkuVTVxbw== dependencies: "@babel/helper-builder-react-jsx" "^7.10.4" - "@babel/helper-builder-react-jsx-experimental" "^7.12.4" + "@babel/helper-builder-react-jsx-experimental" "^7.12.11" "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-jsx" "^7.12.1" @@ -877,10 +876,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-typeof-symbol@^7.12.1", "@babel/plugin-transform-typeof-symbol@^7.8.4": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz#9ca6be343d42512fbc2e68236a82ae64bc7af78a" - integrity sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q== +"@babel/plugin-transform-typeof-symbol@^7.12.10", "@babel/plugin-transform-typeof-symbol@^7.8.4": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz#de01c4c8f96580bd00f183072b0d0ecdcf0dec4b" + integrity sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" @@ -975,15 +974,15 @@ semver "^5.5.0" "@babel/preset-env@^7.4.5": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.7.tgz#54ea21dbe92caf6f10cb1a0a576adc4ebf094b55" - integrity sha512-OnNdfAr1FUQg7ksb7bmbKoby4qFOHw6DKWWUNB9KqnnCldxhxJlP+21dpyaWFmf2h0rTbOkXJtAGevY3XW1eew== + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.11.tgz#55d5f7981487365c93dbbc84507b1c7215e857f9" + integrity sha512-j8Tb+KKIXKYlDBQyIOy4BLxzv1NUOwlHfZ74rvW+Z0Gp4/cI2IMDPBWAgWceGcE7aep9oL/0K9mlzlMGxA8yNw== dependencies: "@babel/compat-data" "^7.12.7" "@babel/helper-compilation-targets" "^7.12.5" "@babel/helper-module-imports" "^7.12.5" "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-validator-option" "^7.12.1" + "@babel/helper-validator-option" "^7.12.11" "@babel/plugin-proposal-async-generator-functions" "^7.12.1" "@babel/plugin-proposal-class-properties" "^7.12.1" "@babel/plugin-proposal-dynamic-import" "^7.12.1" @@ -1012,7 +1011,7 @@ "@babel/plugin-transform-arrow-functions" "^7.12.1" "@babel/plugin-transform-async-to-generator" "^7.12.1" "@babel/plugin-transform-block-scoped-functions" "^7.12.1" - "@babel/plugin-transform-block-scoping" "^7.12.1" + "@babel/plugin-transform-block-scoping" "^7.12.11" "@babel/plugin-transform-classes" "^7.12.1" "@babel/plugin-transform-computed-properties" "^7.12.1" "@babel/plugin-transform-destructuring" "^7.12.1" @@ -1038,12 +1037,12 @@ "@babel/plugin-transform-spread" "^7.12.1" "@babel/plugin-transform-sticky-regex" "^7.12.7" "@babel/plugin-transform-template-literals" "^7.12.1" - "@babel/plugin-transform-typeof-symbol" "^7.12.1" + "@babel/plugin-transform-typeof-symbol" "^7.12.10" "@babel/plugin-transform-unicode-escapes" "^7.12.1" "@babel/plugin-transform-unicode-regex" "^7.12.1" "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.12.7" - core-js-compat "^3.7.0" + "@babel/types" "^7.12.11" + core-js-compat "^3.8.0" semver "^5.5.0" "@babel/preset-modules@^0.1.3": @@ -1070,16 +1069,14 @@ "@babel/plugin-transform-react-jsx-source" "^7.9.0" "@babel/preset-react@^7.0.0": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.7.tgz#36d61d83223b07b6ac4ec55cf016abb0f70be83b" - integrity sha512-wKeTdnGUP5AEYCYQIMeXMMwU7j+2opxrG0WzuZfxuuW9nhKvvALBjl67653CWamZJVefuJGI219G591RSldrqQ== + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.10.tgz#4fed65f296cbb0f5fb09de6be8cddc85cc909be9" + integrity sha512-vtQNjaHRl4DUpp+t+g4wvTHsLQuye+n0H/wsXIZRn69oz/fvNC7gQ4IK73zGJBaxvHoxElDvnYCthMcT7uzFoQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-react-display-name" "^7.12.1" - "@babel/plugin-transform-react-jsx" "^7.12.7" + "@babel/plugin-transform-react-jsx" "^7.12.10" "@babel/plugin-transform-react-jsx-development" "^7.12.7" - "@babel/plugin-transform-react-jsx-self" "^7.12.1" - "@babel/plugin-transform-react-jsx-source" "^7.12.1" "@babel/plugin-transform-react-pure-annotations" "^7.12.1" "@babel/preset-typescript@7.9.0": @@ -1121,27 +1118,27 @@ "@babel/parser" "^7.12.7" "@babel/types" "^7.12.7" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.9", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.9.0": - version "7.12.9" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.9.tgz#fad26c972eabbc11350e0b695978de6cc8e8596f" - integrity sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.9.0": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.10.tgz#2d1f4041e8bf42ea099e5b2dc48d6a594c00017a" + integrity sha512-6aEtf0IeRgbYWzta29lePeYSk+YAFIC3kyqESeft8o5CkFlYIMX+EQDDWEiAQ9LHOA3d0oHdgrSsID/CKqXJlg== dependencies: "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.5" + "@babel/generator" "^7.12.10" "@babel/helper-function-name" "^7.10.4" "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/parser" "^7.12.7" - "@babel/types" "^7.12.7" + "@babel/parser" "^7.12.10" + "@babel/types" "^7.12.10" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.19" -"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.9.0": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.7.tgz#6039ff1e242640a29452c9ae572162ec9a8f5d13" - integrity sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ== +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.9.0": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.11.tgz#a86e4d71e30a9b6ee102590446c98662589283ce" + integrity sha512-ukA9SQtKThINm++CX1CwmliMrE54J6nIYB5XTwL5f/CLFW9owfls+YSU8tVW15RQ2w+a3fSbPjC6HdQNtWZkiA== dependencies: - "@babel/helper-validator-identifier" "^7.10.4" + "@babel/helper-validator-identifier" "^7.12.11" lodash "^4.17.19" to-fast-properties "^2.0.0" @@ -1178,6 +1175,21 @@ "@ethersproject/properties" ">=5.0.0-beta.131" "@ethersproject/strings" ">=5.0.0-beta.130" +"@ethersproject/abi@5.0.7": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.7.tgz#79e52452bd3ca2956d0e1c964207a58ad1a0ee7b" + integrity sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw== + dependencies: + "@ethersproject/address" "^5.0.4" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/hash" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/strings" "^5.0.4" + "@ethersproject/abi@5.0.9", "@ethersproject/abi@^5.0.5": version "5.0.9" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.9.tgz#738c1c557e56d8f395a5a27caef9b0449bc85a10" @@ -1281,10 +1293,10 @@ "@ethersproject/logger" "^5.0.5" "@ethersproject/properties" "^5.0.3" -"@ethersproject/hash@5.0.8", "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.0.4": - version "5.0.8" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.0.8.tgz#368a60addc3c5cd18e28f78c80dc94e1bacb82d8" - integrity sha512-Qay01tcFyFreYjSMt82rOQGMfQDmLm1sj3iNNO1BhrVf840xgBZuJ7gBATERzAjTuTCHUHw9BuGwxErJUS95yg== +"@ethersproject/hash@5.0.9", "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.0.4": + version "5.0.9" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.0.9.tgz#81252a848185b584aa600db4a1a68cad9229a4d4" + integrity sha512-e8/i2ZDeGSgCxXT0vocL54+pMbw5oX5fNjb2E3bAIvdkh5kH29M7zz1jHu1QDZnptIuvCZepIbhUH8lxKE2/SQ== dependencies: "@ethersproject/abstract-signer" "^5.0.6" "@ethersproject/address" "^5.0.5" @@ -1588,9 +1600,9 @@ "@hapi/hoek" "9.x.x" "@hapi/boom@9.x.x", "@hapi/boom@^9.1.0": - version "9.1.0" - resolved "https://registry.yarnpkg.com/@hapi/boom/-/boom-9.1.0.tgz#0d9517657a56ff1e0b42d0aca9da1b37706fec56" - integrity sha512-4nZmpp4tXbm162LaZT45P7F7sgiem8dwAh2vHWT6XX24dozNjGMg6BvKCRvtCUcmcXqeMIUqWN8Rc5X8yKuROQ== + version "9.1.1" + resolved "https://registry.yarnpkg.com/@hapi/boom/-/boom-9.1.1.tgz#89e6f0e01637c2a4228da0d113e8157c93677b04" + integrity sha512-VNR8eDbBrOxBgbkddRYIe7+8DZ+vSbV6qlmaN2x7eWjsUjy2VmQgChkOKcVZIeupEZYj+I0dqNg430OhwzagjA== dependencies: "@hapi/hoek" "9.x.x" @@ -2020,10 +2032,10 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== -"@openzeppelin/contracts@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.2.0.tgz#3e6b3a7662d8ed64271ade96ef42655db983fd9d" - integrity sha512-bUOmkSoPkjnUyMiKo6RYnb0VHBk5D9KKDAgNLzF41aqAM3TeE0yGdFF5dVRcV60pZdJLlyFT/jjXIZCWyyEzAQ== +"@openzeppelin/contracts@~3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.3.0.tgz#ffdb693c5c349fc33bba420248dd3ac0a2d7c408" + integrity sha512-AemZEsQYtUp1WRkcmZm1div5ORfTpLquLaziCIrSagjxyKdmObxuaY1yjQ5SHFMctR8rLwp706NXTbiIRJg7pw== "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" @@ -2189,7 +2201,7 @@ "@sinonjs/commons" "^1" "@sinonjs/samsam" "^5.0.2" -"@sinonjs/samsam@^5.0.2", "@sinonjs/samsam@^5.2.0": +"@sinonjs/samsam@^5.0.2", "@sinonjs/samsam@^5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-5.3.0.tgz#1d2f0743dc54bf13fe9d508baefacdffa25d4329" integrity sha512-hXpcfx3aq+ETVBwPlRFICld5EnrkexXuXDwqUNhDdr5L8VjvMeSRwyOa0qL7XFmR+jVWR4rUZtnxlG7RX72sBg== @@ -2350,9 +2362,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.0.16" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.16.tgz#0bbbf70c7bc4193210dd27e252c51260a37cd6a7" - integrity sha512-S63Dt4CZOkuTmpLGGWtT/mQdVORJOpx6SZWGVaP56dda/0Nx5nEe82K7/LAm8zYr6SfMq+1N2OreIOrHAx656w== + version "7.11.0" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.0.tgz#b9a1efa635201ba9bc850323a8793ee2d36c04a0" + integrity sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg== dependencies: "@babel/types" "^7.3.0" @@ -2429,19 +2441,19 @@ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*": - version "14.14.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.10.tgz#5958a82e41863cfc71f2307b3748e3491ba03785" - integrity sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ== + version "14.14.14" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.14.tgz#f7fd5f3cc8521301119f63910f0fb965c7d761ae" + integrity sha512-UHnOPWVWV1z+VV8k6L1HhG7UbGBgIdghqF3l9Ny9ApPghbjICXkUJSd/b9gOgQfjM1r+37cipdw/HJ3F6ICEnQ== "@types/node@^12.12.6": - version "12.19.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.8.tgz#efd6d1a90525519fc608c9db16c8a78f7693a978" - integrity sha512-D4k2kNi0URNBxIRCb1khTnkWNHv8KSL1owPmS/K5e5t8B2GzMReY7AsJIY1BnP5KdlgC4rj9jk2IkDMasIE7xg== + version "12.19.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.9.tgz#990ad687ad8b26ef6dcc34a4f69c33d40c95b679" + integrity sha512-yj0DOaQeUrk3nJ0bd3Y5PeDRJ6W0r+kilosLA+dzF3dola/o9hxhMSg2sFvVcA2UHS5JSOsZp4S0c1OEXc4m1Q== "@types/node@^13.7.0": - version "13.13.34" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.34.tgz#c9300a1b6560d90817fb2bba650e250116a575f9" - integrity sha512-g8D1HF2dMDKYSDl5+79izRwRgNPsSynmWMbj50mj7GZ0b7Lv4p8EmZjbo3h0h+6iLr6YmVz9VnF6XVZ3O6V1Ug== + version "13.13.36" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.36.tgz#0c4d3c4e365396c84b1c595524e2faff7dd45b26" + integrity sha512-ctzZJ+XsmHQwe3xp07gFUq4JxBaRSYzKHPgblR76//UanGST7vfFNF0+ty5eEbgTqsENopzoDK090xlha9dccQ== "@types/parse-json@^4.0.0": version "4.0.0" @@ -3048,6 +3060,11 @@ array-equal@^1.0.0: resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= +array-filter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" + integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -3058,7 +3075,7 @@ array-flatten@^2.1.0: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== -array-includes@^3.0.3, array-includes@^3.1.1: +array-includes@^3.0.3, array-includes@^3.1.1, array-includes@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.2.tgz#a8db03e0b88c8c6aeddc49cb132f9bcab4ebf9c8" integrity sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw== @@ -3251,6 +3268,13 @@ autoprefixer@^9.6.1: postcss "^7.0.32" postcss-value-parser "^4.1.0" +available-typed-arrays@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz#6b098ca9d8039079ee3f77f7b783c4480ba513f5" + integrity sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ== + dependencies: + array-filter "^1.0.0" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -3795,13 +3819,13 @@ browserslist@4.10.0: pkg-up "^3.1.0" browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.15.0, browserslist@^4.6.2, browserslist@^4.6.4, browserslist@^4.9.1: - version "4.15.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.15.0.tgz#3d48bbca6a3f378e86102ffd017d9a03f122bdb0" - integrity sha512-IJ1iysdMkGmjjYeRlDU8PQejVwxvVO5QOfXH7ylW31GO6LwNRSmm/SgRXtNsEXqMLl2e+2H5eEJ7sfynF8TCaQ== + version "4.16.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.0.tgz#410277627500be3cb28a1bfe037586fbedf9488b" + integrity sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ== dependencies: - caniuse-lite "^1.0.30001164" + caniuse-lite "^1.0.30001165" colorette "^1.2.1" - electron-to-chromium "^1.3.612" + electron-to-chromium "^1.3.621" escalade "^3.1.1" node-releases "^1.1.67" @@ -4058,10 +4082,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001164: - version "1.0.30001165" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001165.tgz#32955490d2f60290bb186bb754f2981917fa744f" - integrity sha512-8cEsSMwXfx7lWSUMA2s08z9dIgsnR5NAqjXP23stdsU3AUWkCr/rr4s4OFtHXn5XXr6+7kam3QFVoYyXNPdJPA== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001165: + version "1.0.30001170" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001170.tgz#0088bfecc6a14694969e391cc29d7eb6362ca6a7" + integrity sha512-Dd4d/+0tsK0UNLrZs3CvNukqalnVTRrxb5mcQm8rHL49t7V5ZaTygwXkrq+FB+dVDf++4ri8eJnFEJAB8332PA== capture-exit@^2.0.0: version "2.0.0" @@ -4242,13 +4266,12 @@ cids@^0.7.1: multihashes "~0.4.15" cids@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cids/-/cids-1.0.2.tgz#04ebadd65e5600a07feb16db594160f087c6eab3" - integrity sha512-ohCcYyEHh0Z5Hl+O1IML4kt6Kx5GPho1ybxtqK4zyk6DeV5CvOLoT/mqDh0cgKcAvsls3vcVa9HjZc7RQr3geA== + version "1.1.4" + resolved "https://registry.yarnpkg.com/cids/-/cids-1.1.4.tgz#d2aa4343fef971ef896b032fa0b99a66755d0f98" + integrity sha512-mo0IWZKcaQZsret8cP39MzDnPVT9NhhQEVaIKwWnBFaLtj2slTFckYMnbk15ptewNkb22qRBLfuBK+qiWYW/Mg== dependencies: - class-is "^1.1.0" multibase "^3.0.1" - multicodec "^2.0.1" + multicodec "^2.1.0" multihashes "^3.0.1" uint8arrays "^1.1.0" @@ -4653,7 +4676,7 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.6.2, core-js-compat@^3.7.0: +core-js-compat@^3.6.2, core-js-compat@^3.8.0: version "3.8.1" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.1.tgz#8d1ddd341d660ba6194cbe0ce60f4c794c87a36e" integrity sha512-a16TLmy9NVD1rkjUGbwuyWkiDoN0FDpAwrfLONvHFQx0D9k7J9y0srwMT8QP/Z6HE3MIFaVynEeYwZwPX1o5RQ== @@ -4774,7 +4797,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0: +cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -5582,10 +5605,10 @@ electron-fetch@^1.7.2: dependencies: encoding "^0.1.13" -electron-to-chromium@^1.3.378, electron-to-chromium@^1.3.612: - version "1.3.616" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.616.tgz#de63d1c79bb8eb61168774df0c11c9e1af69f9e8" - integrity sha512-CI8L38UN2BEnqXw3/oRIQTmde0LiSeqWSRlPA42ZTYgJQ8fYenzAM2Z3ni+jtILTcrs5aiXZCGJ96Pm+3/yGyQ== +electron-to-chromium@^1.3.378, electron-to-chromium@^1.3.621: + version "1.3.630" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.630.tgz#102e930466e53ab7fde6009c2d50b8a4574b543e" + integrity sha512-HSTsvqOrR3kWsoekKu0EOQXR/YOncKs3HAys9lysvIS2ec/mlfV1ZoLHSx00semK+PscVJwqcvBN4ayGPs++fA== elliptic@6.5.3, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3: version "6.5.3" @@ -5719,9 +5742,9 @@ err-code@^2.0.0, err-code@^2.0.1, err-code@^2.0.3: integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== errno@^0.1.3, errno@~0.1.1, errno@~0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== dependencies: prr "~1.0.1" @@ -5863,7 +5886,7 @@ escodegen@^1.11.0, escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" -eslint-config-airbnb-base@^14.2.1: +eslint-config-airbnb-base@^14.1.0, eslint-config-airbnb-base@^14.2.1: version "14.2.1" resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz#8a2eb38455dc5a312550193b319cdaeef042cd1e" integrity sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA== @@ -5881,6 +5904,15 @@ eslint-config-airbnb@^18.1.0: object.assign "^4.1.2" object.entries "^1.1.2" +eslint-config-airbnb@~18.1.0: + version "18.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-18.1.0.tgz#724d7e93dadd2169492ff5363c5aaa779e01257d" + integrity sha512-kZFuQC/MPnH7KJp6v95xsLBf63G/w7YqdPfQ0MUanxQ7zcKUNG8j+sSY860g3NwCBOa62apw16J6pRN+AOgXzw== + dependencies: + eslint-config-airbnb-base "^14.1.0" + object.assign "^4.1.0" + object.entries "^1.1.1" + eslint-config-react-app@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz#698bf7aeee27f0cea0139eaef261c7bf7dd623df" @@ -5959,7 +5991,25 @@ eslint-plugin-import@^2.20.2: resolve "^1.17.0" tsconfig-paths "^3.9.0" -eslint-plugin-jsx-a11y@6.2.3: +eslint-plugin-import@~2.20.2: + version "2.20.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz#91fc3807ce08be4837141272c8b99073906e588d" + integrity sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg== + dependencies: + array-includes "^3.0.3" + array.prototype.flat "^1.2.1" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.2" + eslint-module-utils "^2.4.1" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.0" + read-pkg-up "^2.0.0" + resolve "^1.12.0" + +eslint-plugin-jsx-a11y@6.2.3, eslint-plugin-jsx-a11y@~6.2.3: version "6.2.3" resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz#b872a09d5de51af70a97db1eea7dc933043708aa" integrity sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg== @@ -5996,12 +6046,12 @@ eslint-plugin-react-hooks@^1.6.1: resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz#6210b6d5a37205f0b92858f895a4e827020a7d04" integrity sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA== -eslint-plugin-react-hooks@^4.2.0: +eslint-plugin-react-hooks@^4.2.0, eslint-plugin-react-hooks@~4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz#8c229c268d468956334c943bb45fc860280f5556" integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ== -eslint-plugin-react@7.19.0: +eslint-plugin-react@7.19.0, eslint-plugin-react@~7.19.0: version "7.19.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.19.0.tgz#6d08f9673628aa69c5559d33489e855d83551666" integrity sha512-SPT8j72CGuAP+JFbT0sJHOB80TX/pu44gQ4vXH/cq+hQTiY2PuZ6IHkqXJV6x1b28GDdo1lbInjKUrrdUf0LOQ== @@ -6113,7 +6163,7 @@ eslint@^5.6.0: table "^5.2.3" text-table "^0.2.0" -eslint@^6.6.0, eslint@^6.8.0: +eslint@^6.6.0, eslint@^6.8.0, eslint@~6.8.0: version "6.8.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== @@ -6156,6 +6206,11 @@ eslint@^6.6.0, eslint@^6.8.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" +esm@~3.2.25: + version "3.2.25" + resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" + integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== + espree@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" @@ -6297,9 +6352,9 @@ ethereumjs-util@^6.0.0: rlp "^2.2.3" ethers@^5.0.8: - version "5.0.23" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.0.23.tgz#461a6e63c4906d5ea64126d53975ddf2ca81a979" - integrity sha512-f3pTcgYpMhtmMTMG9KO6pWHYjrCiGz7yVnvMsTQgAYfAVAeUxKy2H1cxQJyqyghRjtAvgVYJlnXQo8mMCD63BA== + version "5.0.24" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.0.24.tgz#fbb8e4d35070d134f2eb846c07500b8c0eaef6d3" + integrity sha512-77CEtVC88fJGEhxGXRvQqAEH6e2A+ZFiv2FBT6ikXndlty5sw6vMatAhg1v+w3CaaGZOf1CP81jl4Mc8Zrj08A== dependencies: "@ethersproject/abi" "5.0.9" "@ethersproject/abstract-provider" "5.0.7" @@ -6311,7 +6366,7 @@ ethers@^5.0.8: "@ethersproject/bytes" "5.0.8" "@ethersproject/constants" "5.0.7" "@ethersproject/contracts" "5.0.8" - "@ethersproject/hash" "5.0.8" + "@ethersproject/hash" "5.0.9" "@ethersproject/hdnode" "5.0.7" "@ethersproject/json-wallets" "5.0.9" "@ethersproject/keccak256" "5.0.6" @@ -6406,19 +6461,19 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== +execa@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" + integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" is-stream "^2.0.0" merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" strip-final-newline "^2.0.0" exenv@^1.2.2: @@ -6844,9 +6899,9 @@ fnv1a@^1.0.1: integrity sha1-kV4tbQI8Q9UiStn20qPEFW9XEvU= follow-redirects@^1.0.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" - integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== + version "1.13.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.1.tgz#5f69b813376cee4fd0474a3aba835df04ab763b7" + integrity sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg== for-in@^0.1.3: version "0.1.8" @@ -6865,6 +6920,11 @@ for-own@^0.1.3: dependencies: for-in "^1.0.1" +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -7077,9 +7137,9 @@ get-func-name@^2.0.0: integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= get-intrinsic@^1.0.0, get-intrinsic@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.1.tgz#94a9768fcbdd0595a1c9273aacf4c89d075631be" - integrity sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg== + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.2.tgz#6820da226e50b24894e08859469dc68361545d49" + integrity sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg== dependencies: function-bind "^1.1.1" has "^1.0.3" @@ -7107,13 +7167,18 @@ get-stream@^4.0.0, get-stream@^4.1.0: dependencies: pump "^3.0.0" -get-stream@^5.0.0, get-stream@^5.1.0: +get-stream@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" +get-stream@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" + integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -7159,11 +7224,11 @@ glob@7.1.6, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glo path-is-absolute "^1.0.0" global-dirs@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.0.1.tgz#acdf3bb6685bcd55cb35e8a052266569e9469201" - integrity sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A== + version "2.1.0" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" + integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== dependencies: - ini "^1.3.5" + ini "1.3.7" global-modules@2.0.0: version "2.0.0" @@ -7554,9 +7619,9 @@ html-encoding-sniffer@^1.0.2: whatwg-encoding "^1.0.1" html-entities@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" - integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== + version "1.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" + integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== html-escaper@^2.0.0: version "2.0.2" @@ -7692,10 +7757,10 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== humble-localstorage@^1.4.2: version "1.4.2" @@ -7824,9 +7889,9 @@ import-fresh@^2.0.0: resolve-from "^3.0.0" import-fresh@^3.0.0, import-fresh@^3.1.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.2.tgz#fc129c160c5d68235507f4331a6baad186bdbc3e" - integrity sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw== + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" @@ -7899,10 +7964,15 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= +ini@1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" + integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== + ini@^1.3.5, ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== inquirer@7.0.4: version "7.0.4" @@ -8062,25 +8132,23 @@ ipfs-block-service@^0.18.0: err-code "^2.0.0" streaming-iterables "^5.0.2" -ipfs-cli@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/ipfs-cli/-/ipfs-cli-0.2.2.tgz#24223ba5f414e2f85ad2908cd8c1399e47192fef" - integrity sha512-9DhIdTd8P/uvBv+IdhGjHEl2lpeXm8x2sj30PLddBHFo9PHOWUfqwo7FYHYIzn6MiakL0XWph4HAKX9Jw0iHJA== +ipfs-cli@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/ipfs-cli/-/ipfs-cli-0.2.3.tgz#3bb9dd72100f9f41e9380c005d4d6b2898e753c1" + integrity sha512-3DGUh/V9INVPG5dv0bT1DQpjVM5diKEVrVYSMtk/h5enVPbNHTZ+Dz4zOwjRsob5QQNkdVQWdHnhCcRHNyWFCA== dependencies: bignumber.js "^9.0.0" byteman "^1.3.5" cid-tool "^1.0.0" cids "^1.0.0" debug "^4.1.1" - dlv "^1.1.3" err-code "^2.0.3" - execa "^4.0.3" + execa "^5.0.0" get-folder-size "^2.0.1" - ipfs-core "^0.3.0" - ipfs-core-utils "^0.5.3" - ipfs-http-client "^48.1.2" - ipfs-http-gateway "^0.1.3" - ipfs-http-server "^0.1.3" + ipfs-core "^0.3.1" + ipfs-core-utils "^0.5.4" + ipfs-daemon "^0.3.2" + ipfs-http-client "^48.1.3" ipfs-repo "^7.0.0" ipfs-utils "^5.0.0" ipld-dag-cbor "^0.17.0" @@ -8091,12 +8159,7 @@ ipfs-cli@^0.2.2: it-glob "0.0.10" it-pipe "^1.1.0" jsondiffpatch "^0.4.1" - just-safe-set "^2.1.0" - libp2p "^0.29.3" libp2p-crypto "^0.18.0" - libp2p-delegated-content-routing "^0.8.0" - libp2p-delegated-peer-routing "^0.8.0" - libp2p-webrtc-star "^0.20.1" mafmt "^8.0.0" multiaddr "^8.0.0" multiaddr-to-uri "^6.0.0" @@ -8110,9 +8173,6 @@ ipfs-cli@^0.2.2: streaming-iterables "^5.0.2" uint8arrays "^1.1.0" yargs "^16.0.3" - optionalDependencies: - prom-client "^12.0.0" - prometheus-gc-stats "^0.6.0" ipfs-core-utils@^0.4.0: version "0.4.0" @@ -8129,10 +8189,10 @@ ipfs-core-utils@^0.4.0: it-peekable "0.0.1" uint8arrays "^1.1.0" -ipfs-core-utils@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/ipfs-core-utils/-/ipfs-core-utils-0.5.3.tgz#1590301675cb7f0d5103f49c6543b1dfd9a4c04d" - integrity sha512-JuJz+sp+9+g7U5j0+M6+biBnVtbJnlRNuBrqku/RcwoH4IIMTX99PctGGyo8AjCo5ZK+j0om1Pp2cWTZrlSdAQ== +ipfs-core-utils@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/ipfs-core-utils/-/ipfs-core-utils-0.5.4.tgz#c7fa508562086be65cebb51feb13c58abbbd3d8d" + integrity sha512-V+OHCkqf/263jHU0Fc9Rx/uDuwlz3PHxl3qu6a5ka/mNi6gucbFuI53jWsevCrOOY9giWMLB29RINGmCV5dFeQ== dependencies: any-signal "^2.0.0" blob-to-it "^1.0.1" @@ -8149,10 +8209,10 @@ ipfs-core-utils@^0.5.3: timeout-abort-controller "^1.1.1" uint8arrays "^1.1.0" -ipfs-core@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/ipfs-core/-/ipfs-core-0.3.0.tgz#eb2f4a62d5adb2575e0ba3a43508e4f9d17818db" - integrity sha512-uBcYGsIM8lb8dixDvZ09OrMM5nBsvMQX9tUFS3+oo24JRhGKMWtDVV3umn26mXygobdQfGCTZFqjVMxoLssVEA== +ipfs-core@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/ipfs-core/-/ipfs-core-0.3.1.tgz#059bca87fa50f5a26f007e11526c530b9e7abbf9" + integrity sha512-d94i8Bvhm+0a38rZG2q7EcQXcVT4cTkjCZAu7ZZ4HOWyB0EevqrxH6D7VK3zv6fe+iOC6iv4qrB+Wtt1pE6NVw== dependencies: array-shuffle "^1.0.1" bignumber.js "^9.0.0" @@ -8170,11 +8230,11 @@ ipfs-core@^0.3.0: interface-datastore "^2.0.0" ipfs-bitswap "^4.0.0" ipfs-block-service "^0.18.0" - ipfs-core-utils "^0.5.3" + ipfs-core-utils "^0.5.4" ipfs-repo "^7.0.0" ipfs-unixfs "^2.0.3" ipfs-unixfs-exporter "^3.0.4" - ipfs-unixfs-importer "^4.0.0" + ipfs-unixfs-importer "^5.0.0" ipfs-utils "^5.0.0" ipld "^0.28.0" ipld-block "^0.11.0" @@ -8210,13 +8270,34 @@ ipfs-core@^0.3.0: multicodec "^2.0.1" multihashing-async "^2.0.1" native-abort-controller "~0.0.3" - p-defer "^3.0.0" p-queue "^6.6.1" parse-duration "^0.4.4" peer-id "^0.14.1" streaming-iterables "^5.0.2" uint8arrays "^1.1.0" +ipfs-daemon@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/ipfs-daemon/-/ipfs-daemon-0.3.2.tgz#e2c10b98d248f38f7ecde39fa3e546ba43e3cdf6" + integrity sha512-MBpwB0zpYU17/ZZ4jGMGNvOHx6SYOOZyTfViw+dy/P3JZmeTZBzhPJQOZ0vwwnJI7OIwWscEakJWV4q4c6hrJw== + dependencies: + debug "^4.1.1" + dlv "^1.1.3" + ipfs-core "^0.3.1" + ipfs-http-client "^48.1.3" + ipfs-http-gateway "^0.1.4" + ipfs-http-server "^0.1.4" + ipfs-utils "^5.0.0" + just-safe-set "^2.1.0" + libp2p "^0.29.3" + libp2p-delegated-content-routing "^0.8.0" + libp2p-delegated-peer-routing "^0.8.0" + libp2p-webrtc-star "^0.20.1" + multiaddr "^8.0.0" + optionalDependencies: + prom-client "^12.0.0" + prometheus-gc-stats "^0.6.0" + ipfs-http-client@^47.0.1: version "47.0.1" resolved "https://registry.yarnpkg.com/ipfs-http-client/-/ipfs-http-client-47.0.1.tgz#509c6c742ab405bc2a7e6e0fe373e19e9b85633b" @@ -8252,17 +8333,17 @@ ipfs-http-client@^47.0.1: stream-to-it "^0.2.1" uint8arrays "^1.1.0" -ipfs-http-client@^48.1.2: - version "48.1.2" - resolved "https://registry.yarnpkg.com/ipfs-http-client/-/ipfs-http-client-48.1.2.tgz#7cdb731e792e4d235be1e19726ccaf12e55ff0b6" - integrity sha512-eeqHhjYUgPNBKxkS29xYS7Mtc9JxzLKI9Bua2nphB5vG1l6W2hjDTntfVl4ddY07XqZogDu6yTL3UsFj0WJFeg== +ipfs-http-client@^48.1.3: + version "48.1.3" + resolved "https://registry.yarnpkg.com/ipfs-http-client/-/ipfs-http-client-48.1.3.tgz#d9b91b1f65d54730de92290d3be5a11ef124b400" + integrity sha512-+JV4cdMaTvYN3vd4r6+mcVxV3LkJXzc4kn2ToVbObpVpdqmG34ePf1KlvFF8A9gjcel84WpiP5xCEV/IrisPBA== dependencies: any-signal "^2.0.0" bignumber.js "^9.0.0" cids "^1.0.0" debug "^4.1.1" form-data "^3.0.0" - ipfs-core-utils "^0.5.3" + ipfs-core-utils "^0.5.4" ipfs-utils "^5.0.0" ipld-block "^0.11.0" ipld-dag-cbor "^0.17.0" @@ -8283,10 +8364,10 @@ ipfs-http-client@^48.1.2: stream-to-it "^0.2.2" uint8arrays "^1.1.0" -ipfs-http-gateway@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/ipfs-http-gateway/-/ipfs-http-gateway-0.1.3.tgz#0a5689d692bd802cea72a3a5866396f2636be846" - integrity sha512-SwBRSvwwXxlYEUBlDOBngmKFifnCFjs7HM90mgJnRjahDZzGV8YKAZpVLys0szLybz+pqGKK7LxSo7+ALS2hKQ== +ipfs-http-gateway@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/ipfs-http-gateway/-/ipfs-http-gateway-0.1.4.tgz#b91e88484b5b3ffddf9cc8359ecd6452aa350744" + integrity sha512-/WuCFC5k31DiIIplGatyJnMmJ74YLnv12xU5DR1rr3E7abKLdyyvaca4cQz3iz2hFcTKvnD3+rRelbXH785JiA== dependencies: "@hapi/ammo" "^5.0.1" "@hapi/boom" "^9.1.0" @@ -8294,7 +8375,7 @@ ipfs-http-gateway@^0.1.3: cids "^1.0.0" debug "^4.1.1" hapi-pino "^8.3.0" - ipfs-core-utils "^0.5.3" + ipfs-core-utils "^0.5.4" ipfs-http-response "^0.6.0" is-ipfs "^2.0.0" it-last "^1.0.4" @@ -8320,10 +8401,10 @@ ipfs-http-response@^0.6.0: multihashes "^3.0.1" p-try-each "^1.0.1" -ipfs-http-server@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/ipfs-http-server/-/ipfs-http-server-0.1.3.tgz#5f5c06c12a3d29d27eff56c806d7ca893c428789" - integrity sha512-Hn7mEgfifHSVL1DFO1mIIytYiOW3Zlav+t6yQjdU+mgTzyH/4C7vwbz7V6ib5IfShROrfmeE6ahkt4IvEb9wxA== +ipfs-http-server@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/ipfs-http-server/-/ipfs-http-server-0.1.4.tgz#fef174c86a09514bbeef7bd8e11dd12448f4da39" + integrity sha512-EyGqwvYpOJHIW6eJ5te2UjjMA073JwabL7oNfCvITFb5ZcRKd76+ox0TDSHlkKUeWN8JP7T/00wYRj+8km2Oyg== dependencies: "@hapi/boom" "^9.1.0" "@hapi/content" "^5.0.2" @@ -8333,8 +8414,8 @@ ipfs-http-server@^0.1.3: dlv "^1.1.3" err-code "^2.0.3" hapi-pino "^8.3.0" - ipfs-core-utils "^0.5.3" - ipfs-http-gateway "^0.1.3" + ipfs-core-utils "^0.5.4" + ipfs-http-gateway "^0.1.4" ipfs-unixfs "^2.0.3" ipld-dag-pb "^0.20.0" it-all "^1.0.4" @@ -8363,12 +8444,13 @@ ipfs-http-server@^0.1.3: prom-client "^12.0.0" ipfs-log@~5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ipfs-log/-/ipfs-log-5.0.0.tgz#bd89edd9eabd22d22365184817b4eca6ad89bf43" - integrity sha512-I8ow4Y42fODdQAX0vtc4xWO5daNTzAQzrWWGd1p6tIdr/OI0IFpC3ifpEWPW3qgWXPg30E9TXYmtxRp0fkOSbA== + version "5.0.1" + resolved "https://registry.yarnpkg.com/ipfs-log/-/ipfs-log-5.0.1.tgz#0335492ae404ab88bebbd682cecd9efcb8059838" + integrity sha512-n9Tf2rFqqK/r2rshQMAcS/COCwYNi8m2wCZN2ZLT9vhgXMsB1c1YEsCgZru7+cWCHTmuJwuBEjAJX9l9jQPSWw== dependencies: ipfs-http-client "^47.0.1" json-stringify-deterministic "^1.0.1" + multicodec "^2.0.1" multihashing-async "^2.0.1" orbit-db-identity-provider "~0.3.1" orbit-db-io "~0.3.0" @@ -8452,16 +8534,16 @@ ipfs-unixfs-exporter@^3.0.4: it-last "^1.0.1" multihashing-async "^2.0.0" -ipfs-unixfs-importer@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/ipfs-unixfs-importer/-/ipfs-unixfs-importer-4.0.0.tgz#da9906225fbe0eb9d3ebed05c6ed4a41b5812376" - integrity sha512-ybTcgjNBaB6azQz8jJYESweATJFoc6D+Xo8USM0GahRx9xlFS+4qjnmGbC6H9RcFFt81amcP/P1zX9v83wo3cA== +ipfs-unixfs-importer@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ipfs-unixfs-importer/-/ipfs-unixfs-importer-5.0.0.tgz#f87bc69f99b08ef5d904ecdcd2fc74e9360122ca" + integrity sha512-bvdnCXwwCj72w/FQ7o6XcvrcbCUgXrruK0UZOfhl/mf44Nv0DWyn1Y4hQF/u63rJvYLQdAMlqniAAtFQpHQhcg== dependencies: bl "^4.0.0" err-code "^2.0.0" hamt-sharding "^1.0.0" ipfs-unixfs "^2.0.4" - ipfs-utils "^4.0.0" + ipfs-utils "^5.0.0" ipld-dag-pb "^0.20.0" it-all "^1.0.1" it-batch "^1.0.3" @@ -8538,7 +8620,7 @@ ipfs-utils@^4.0.0, ipfs-utils@^4.0.1: node-fetch "^2.6.0" stream-to-it "^0.2.0" -ipfs-utils@^5.0.0: +ipfs-utils@^5.0.0, ipfs-utils@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ipfs-utils/-/ipfs-utils-5.0.1.tgz#7c0053d5e77686f45577257a73905d4523e6b4f7" integrity sha512-28KZPgO4Uf5duT2ORLAYfboUp98iUshDD7yRAfbNxNAR8Dtidfn6o20rZfoXnkri2zKBVIPlJkuCPmPJB+6erg== @@ -8560,14 +8642,14 @@ ipfs-utils@^5.0.0: node-fetch "^2.6.0" stream-to-it "^0.2.0" -ipfs@~0.52.0: - version "0.52.2" - resolved "https://registry.yarnpkg.com/ipfs/-/ipfs-0.52.2.tgz#e568d6b5818e3c2deddf7e7230ce7b87fb3b8537" - integrity sha512-2OZe6HyHGzSfdv55RFuw89n43zj+hPGLfmsz0h2LL4OH7ERtQVCH/5foDEoV6NJsXnBnps8w6adCtyrZeze9IQ== +ipfs@~0.52.0, ipfs@~0.52.1: + version "0.52.3" + resolved "https://registry.yarnpkg.com/ipfs/-/ipfs-0.52.3.tgz#4a1e1651da197fb8dfdcd01abd20308198059b66" + integrity sha512-zCd2Ziq1GYDJizXdoAj5nof325i3mx2kzOhG6E+xdEK6FcK6kQwKendaBlQHwTbzHLqLI7ITxsepQzFWNopI2g== dependencies: debug "^4.1.1" - ipfs-cli "^0.2.2" - ipfs-core "^0.3.0" + ipfs-cli "^0.2.3" + ipfs-core "^0.3.1" ipfs-repo "^7.0.0" semver "^7.3.2" update-notifier "^5.0.0" @@ -8860,6 +8942,11 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== +is-generator-function@^1.0.7: + version "1.0.8" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.8.tgz#dfb5c2b120e02b0a8d9d2c6806cd5621aa922f7b" + integrity sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ== + is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" @@ -8913,9 +9000,9 @@ is-loopback-addr@^1.0.0: integrity sha512-DhWU/kqY7X2F6KrrVTu7mHlbd2Pbo4D1YkAzasBMjQs6lJAoefxaA6m6CpSX0K6pjt9D0b9PNFI5zduy/vzOYw== is-map@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.1.tgz#520dafc4307bb8ebc33b813de5ce7c9400d644a1" - integrity sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw== + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" + integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== is-negative-zero@^2.0.0: version "2.0.1" @@ -9038,9 +9125,9 @@ is-root@2.1.0: integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== is-set@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.1.tgz#d1604afdab1724986d30091575f54945da7e5f43" - integrity sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA== + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" + integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== is-stream@^1.0.0, is-stream@^1.1.0: version "1.1.0" @@ -9071,6 +9158,17 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.1" +is-typed-array@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.4.tgz#1f66f34a283a3c94a4335434661ca53fff801120" + integrity sha512-ILaRgn4zaSrVNXNGtON6iFNotXW3hAPF3+0fB1usg2jFlWqo5fEDdmJkz0zBfoi7Dgskr8Khi2xZ8cXqZEfXNA== + dependencies: + available-typed-arrays "^1.0.2" + call-bind "^1.0.0" + es-abstract "^1.18.0-next.1" + foreach "^2.0.5" + has-symbols "^1.0.1" + is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -9881,7 +9979,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@3.14.0, js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1: +js-yaml@3.14.0: version "3.14.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== @@ -9889,6 +9987,14 @@ js-yaml@3.14.0, js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + jsbn@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" @@ -10094,12 +10200,12 @@ jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3: object.assign "^4.1.0" "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.1.0.tgz#642f1d7b88aa6d7eb9d8f2210e166478444fa891" - integrity sha512-d4/UOjg+mxAWxCiF0c5UTSwyqbchkbqCvK87aBovhnh8GtysTjWmgC63tY0cJx/HzGgm9qnA147jVBdpOiQ2RA== + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82" + integrity sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q== dependencies: - array-includes "^3.1.1" - object.assign "^4.1.1" + array-includes "^3.1.2" + object.assign "^4.1.2" just-debounce-it@^1.1.0: version "1.1.0" @@ -10390,7 +10496,7 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -libp2p-bootstrap@^0.12.1: +libp2p-bootstrap@^0.12.1, libp2p-bootstrap@~0.12.1: version "0.12.1" resolved "https://registry.yarnpkg.com/libp2p-bootstrap/-/libp2p-bootstrap-0.12.1.tgz#216322e2d682935c8ee1c7b672acf69241178c3c" integrity sha512-atHXxfxE8isHb+XKHsJ5UgFMteqfi0Xal94h+2EAJmobXcIq1mBMUeIgmkHMsaZZNwJwQxq6MKFthJngWJ8vEw== @@ -10501,6 +10607,22 @@ libp2p-gossipsub@^0.6.1: time-cache "^0.3.0" uint8arrays "^1.1.0" +libp2p-gossipsub@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/libp2p-gossipsub/-/libp2p-gossipsub-0.7.0.tgz#92964135163b5f29df6bf24b18fd76df37b5002e" + integrity sha512-uHohd/1SMBg36BNZSMYIwoAsOKFqt8FJh9dq7izHd4PKMyKDlRMdc1LYdqdMMj+MBcDctulMw4zGeGE8WTK62A== + dependencies: + "@types/debug" "^4.1.5" + debug "^4.1.1" + denque "^1.4.1" + err-code "^2.0.0" + it-pipe "^1.0.1" + libp2p-interfaces "^0.7.2" + peer-id "^0.14.0" + protons "^2.0.0" + time-cache "^0.3.0" + uint8arrays "^1.1.0" + libp2p-interfaces@^0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/libp2p-interfaces/-/libp2p-interfaces-0.4.1.tgz#1610034845e7ceb7cf93b5309945cf5ea698c9ee" @@ -10594,7 +10716,7 @@ libp2p-interfaces@^0.6.0: streaming-iterables "^5.0.2" uint8arrays "^1.1.0" -libp2p-interfaces@^0.7.1: +libp2p-interfaces@^0.7.1, libp2p-interfaces@^0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/libp2p-interfaces/-/libp2p-interfaces-0.7.2.tgz#77281294b6bba72d0e9bf6c0e0b3471e37330cc3" integrity sha512-uI4vPiwdi9pKScLoAvwMqXiEjUtUACavtqZEvdm36T1PcmzsfDbGDKGCkGoDENQ/kztsggfb/9PoEAiNw3CQxQ== @@ -10628,10 +10750,44 @@ libp2p-interfaces@^0.7.1: streaming-iterables "^5.0.2" uint8arrays "^1.1.0" -libp2p-kad-dht@^0.20.1: - version "0.20.2" - resolved "https://registry.yarnpkg.com/libp2p-kad-dht/-/libp2p-kad-dht-0.20.2.tgz#8ba427985c763d92f907a7608f586c72d4709152" - integrity sha512-O6WK43kYjKXJWy+7tLyPScWt7ulBxMzmMKtvlKIv0z8GF7GboUWYAbcbLVEeZIaKkwwfjSMwadL9qFeImGTAOg== +libp2p-interfaces@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/libp2p-interfaces/-/libp2p-interfaces-0.8.1.tgz#426c0d599f169aa7a599d7707e7b82cec1baba40" + integrity sha512-46ttBnPMmg3/I8hPQE08uJtmI6CB2O/+xnOqYJ+yW8m1mqpMNJvQd/yTkoMyNXxJnGhAzC1Vn7IxVrisQhOmNA== + dependencies: + "@types/bl" "^2.1.0" + abort-controller "^3.0.0" + abortable-iterator "^3.0.0" + chai "^4.2.0" + chai-checkmark "^1.0.1" + debug "^4.1.1" + delay "^4.3.0" + detect-node "^2.0.4" + dirty-chai "^2.0.1" + err-code "^2.0.0" + it-goodbye "^2.0.1" + it-length-prefixed "^3.1.0" + it-pair "^1.0.0" + it-pipe "^1.1.0" + it-pushable "^1.4.0" + libp2p-crypto "^0.18.0" + libp2p-tcp "^0.15.0" + multiaddr "^8.0.0" + multibase "^3.0.0" + multihashes "^3.0.1" + p-defer "^3.0.0" + p-limit "^2.3.0" + p-wait-for "^3.1.0" + peer-id "^0.14.0" + protons "^2.0.0" + sinon "^9.0.2" + streaming-iterables "^5.0.2" + uint8arrays "^1.1.0" + +libp2p-kad-dht@^0.20.1, libp2p-kad-dht@~0.20.1: + version "0.20.4" + resolved "https://registry.yarnpkg.com/libp2p-kad-dht/-/libp2p-kad-dht-0.20.4.tgz#2a1f61e86a10942ef16a7553a91ff96e598c55a0" + integrity sha512-7v4+3bdcoGUyR/8Y5G/Ok9UyhuqghpXFZq5VpW3oph5WtR348snTaBTPkI/8xkQmBxvLIAMxuomp7cMrQaTUyw== dependencies: abort-controller "^3.0.0" async "^2.6.2" @@ -10663,7 +10819,7 @@ libp2p-kad-dht@^0.20.1: varint "^5.0.0" xor-distance "^2.0.0" -libp2p-mdns@^0.15.0: +libp2p-mdns@^0.15.0, libp2p-mdns@~0.15.0: version "0.15.0" resolved "https://registry.yarnpkg.com/libp2p-mdns/-/libp2p-mdns-0.15.0.tgz#c4e71e162ef2ea817d9d745376a1acac1271fe51" integrity sha512-wuILE+mwC6ww/0TMkR3k2h53D5Ma9TXpz0siacbsACcGukkS+mIpsvruaf9U1Uxe0F1aC8+Y+Vi5lP8C3YR9Lg== @@ -10673,7 +10829,7 @@ libp2p-mdns@^0.15.0: multicast-dns "^7.2.0" peer-id "^0.14.0" -libp2p-mplex@^0.10.0: +libp2p-mplex@^0.10.0, libp2p-mplex@~0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/libp2p-mplex/-/libp2p-mplex-0.10.1.tgz#9f8f276230bd00805f0138591582d42a69343817" integrity sha512-D7XslSL2MpoQdWFW9m62fZb6U1iq5x18WDIJmBIxM4PKBbhNVsicMAfRGvm/ZntLmxkl2KO8utIcVjYBFg9tsQ== @@ -10687,7 +10843,7 @@ libp2p-mplex@^0.10.0: it-pushable "^1.3.1" varint "^5.0.0" -libp2p-noise@^2.0.1: +libp2p-noise@^2.0.1, libp2p-noise@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/libp2p-noise/-/libp2p-noise-2.0.1.tgz#f00dc80811c52937cd411d96af6554972ee075c2" integrity sha512-Jhd/jirWL3qkqGqIC1P4SH+OYlmKFll6UjFVYdw7otBKnbmdBUTW2Lg75/L1+7dYKwitHKu5EWlAd3zPU36gfg== @@ -10716,7 +10872,7 @@ libp2p-record@^0.9.0: protons "^2.0.0" uint8arrays "^1.1.0" -libp2p-tcp@^0.15.0, libp2p-tcp@^0.15.1: +libp2p-tcp@^0.15.0, libp2p-tcp@^0.15.1, libp2p-tcp@~0.15.1: version "0.15.1" resolved "https://registry.yarnpkg.com/libp2p-tcp/-/libp2p-tcp-0.15.1.tgz#644b83abf46f213ee9476d2db4135636f0a17d17" integrity sha512-alvgZ3lSNUyiz4vJOqvm6RpMQN9d17gSJa+VT+2pYLGf82o8pX3QvyhltMkBG7u9I+qZAkD6L27s8o0h38dpOg== @@ -10730,7 +10886,7 @@ libp2p-tcp@^0.15.0, libp2p-tcp@^0.15.1: multiaddr "^8.0.0" stream-to-it "^0.2.2" -libp2p-utils@^0.2.0, libp2p-utils@^0.2.1: +libp2p-utils@^0.2.0, libp2p-utils@^0.2.1, libp2p-utils@^0.2.2: version "0.2.3" resolved "https://registry.yarnpkg.com/libp2p-utils/-/libp2p-utils-0.2.3.tgz#4eb2a59a9eda342bed73cb94553c87a63c95848a" integrity sha512-9BoMCgvJF7LJ+JVMaHtqfCqhZN4i/sx0DrY6lf9U0Rq9uUgQ9qTai2O9LXcfr1LOS3OMMeRLsKk25MMgsf7W3w== @@ -10755,34 +10911,7 @@ libp2p-webrtc-peer@^10.0.1: randombytes "^2.0.3" readable-stream "^3.4.0" -libp2p-webrtc-star@^0.20.1: - version "0.20.2" - resolved "https://registry.yarnpkg.com/libp2p-webrtc-star/-/libp2p-webrtc-star-0.20.2.tgz#9979e42d02c5f42fc78785b3c325b7f0fad50a35" - integrity sha512-P4oZ/v/bhhR0U/dpq8QfzRyKE2l5L4KFM6yrc3j1bj+gbQLBMH2P76/N3jlHqTVBdYavOwdCEifXwfG/qGp+3Q== - dependencies: - "@hapi/hapi" "^20.0.0" - "@hapi/inert" "^6.0.3" - abortable-iterator "^3.0.0" - class-is "^1.1.0" - debug "^4.2.0" - err-code "^2.0.3" - ipfs-utils "^5.0.0" - it-pipe "^1.1.0" - libp2p-utils "^0.2.1" - libp2p-webrtc-peer "^10.0.1" - mafmt "^8.0.0" - menoetius "0.0.2" - minimist "^1.2.5" - multiaddr "^8.0.0" - p-defer "^3.0.0" - peer-id "^0.14.2" - prom-client "^12.0.0" - socket.io "^2.3.0" - socket.io-client "^2.3.0" - stream-to-it "^0.2.2" - streaming-iterables "^5.0.3" - -libp2p-webrtc-star@~0.20.5: +libp2p-webrtc-star@^0.20.1, libp2p-webrtc-star@~0.20.2, libp2p-webrtc-star@~0.20.5: version "0.20.5" resolved "https://registry.yarnpkg.com/libp2p-webrtc-star/-/libp2p-webrtc-star-0.20.5.tgz#c52364dfbe59fd8e5da0e32feeaca374d3a79f9a" integrity sha512-Tny1+q0EY192WgrkNCV7360ifI3RXjMoao91qwLhNwx7ArsqVMzrZvBnK3MTMmYQaGE1W0n/CLlw/Nn344iv2Q== @@ -10826,9 +10955,9 @@ libp2p-websockets@^0.14.0: p-timeout "^3.2.0" libp2p@^0.29.3: - version "0.29.3" - resolved "https://registry.yarnpkg.com/libp2p/-/libp2p-0.29.3.tgz#9cee0f44a300a5ac22f2805e5da57d98df442664" - integrity sha512-voILMLwpDqe/KafqaeH7CsmMNtOagV7ln6vNl0/2Lgq4zyY+vCmlzULRaStSagU+9V0QWoSoPmIgQdZ/Ydelhw== + version "0.29.4" + resolved "https://registry.yarnpkg.com/libp2p/-/libp2p-0.29.4.tgz#95247793185badb603ef82c36f21455ec6943dfb" + integrity sha512-RACD3rvhgBTcLDtILwN8lE2z3GV5OCR1Se/wQ9UPYArSImsoikKjGQMvW0vZl9W3adUqmJOUs7CJWTUvdTAOpw== dependencies: abort-controller "^3.0.0" aggregate-error "^3.0.1" @@ -10870,6 +10999,54 @@ libp2p@^0.29.3: varint "^5.0.0" xsalsa20 "^1.0.2" +libp2p@~0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/libp2p/-/libp2p-0.30.0.tgz#a98128abd21819720028a7fc40201a52f328e1d8" + integrity sha512-MUFWnuFAcexb0tRf3Ai8Zt4PUmDwIUCNN2a8bHfei1uaF6jqXAKQxgOJ4dmbGf/nrnKp89NpupjTK9WqYDonrg== + dependencies: + abort-controller "^3.0.0" + aggregate-error "^3.0.1" + any-signal "^1.1.0" + bignumber.js "^9.0.0" + cids "^1.0.0" + class-is "^1.1.0" + debug "^4.1.1" + err-code "^2.0.0" + events "^3.1.0" + hashlru "^2.3.0" + interface-datastore "^2.0.0" + ipfs-utils "^5.0.1" + it-all "^1.0.1" + it-buffer "^0.1.2" + it-handshake "^1.0.1" + it-length-prefixed "^3.0.1" + it-pipe "^1.1.0" + it-protocol-buffers "^0.2.0" + libp2p-crypto "^0.18.0" + libp2p-interfaces "^0.8.1" + libp2p-utils "^0.2.2" + mafmt "^8.0.0" + merge-options "^2.0.0" + moving-average "^1.0.0" + multiaddr "^8.1.0" + multicodec "^2.0.0" + multihashing-async "^2.0.1" + multistream-select "^1.0.0" + mutable-proxy "^1.0.0" + node-forge "^0.9.1" + p-any "^3.0.0" + p-fifo "^1.0.0" + p-settle "^4.0.1" + peer-id "^0.14.2" + protons "^2.0.0" + retimer "^2.0.0" + sanitize-filename "^1.6.3" + set-delayed-interval "^1.0.0" + streaming-iterables "^5.0.2" + timeout-abort-controller "^1.1.1" + varint "^5.0.0" + xsalsa20 "^1.0.2" + lines-and-columns@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" @@ -11326,9 +11503,9 @@ mime@1.6.0: integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@^2.4.4: - version "2.4.6" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" - integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + version "2.4.7" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.7.tgz#962aed9be0ed19c91fd7dc2ece5d7f4e89a90d74" + integrity sha512-dhNd1uA2u397uQk3Nv5LM4lm93WYDUXFn3Fu291FJerns4jyTudqhIWe4W04YLy7Uk1tm1Ore04NpjRvQp/NPA== mimic-fn@^1.0.0: version "1.2.0" @@ -11565,11 +11742,16 @@ ms@2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -ms@2.1.2, ms@^2.1.1: +ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + multiaddr-to-uri@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/multiaddr-to-uri/-/multiaddr-to-uri-6.0.0.tgz#8f08a75c6eeb2370d5d24b77b8413e3f0fa9bcc0" @@ -11578,9 +11760,9 @@ multiaddr-to-uri@^6.0.0: multiaddr "^8.0.0" multiaddr@^8.0.0, multiaddr@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/multiaddr/-/multiaddr-8.1.1.tgz#d86315deed93752fa68b4199fee56f8b4a516a2b" - integrity sha512-Dyur7rWX44MlgKIqVA2dYPOZx/UwG60PVSffJ5S17uo6Pu31lftJXShMEfPtUDGHnyALAOWOuC3X/iPhDtw4Vg== + version "8.1.2" + resolved "https://registry.yarnpkg.com/multiaddr/-/multiaddr-8.1.2.tgz#74060ff8636ba1c01b2cf0ffd53950b852fa9b1f" + integrity sha512-r13IzW8+Sv9zab9Gt8RPMIN2WkptIPq99EpAzg4IbJ/zTELhiEwXWr9bAmEatSCI4j/LSA6ESJzvz95JZ+ZYXQ== dependencies: cids "^1.0.0" class-is "^1.1.0" @@ -11651,13 +11833,13 @@ multicodec@^1.0.0: buffer "^5.6.0" varint "^5.0.0" -multicodec@^2.0.0, multicodec@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-2.0.1.tgz#0971bbef83fcb354315c837c9a3f3e2e422af371" - integrity sha512-YDYeWn9iGa76hOHAyyZa0kbt3tr5FLg1ZXUHrZUJltjnxxdbTIbHnxWLd2zTcMOjdT3QyO+Xs4bQgJUcC2RWUA== +multicodec@^2.0.0, multicodec@^2.0.1, multicodec@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-2.1.0.tgz#b66dff2184e91e74ac68981e0deba2591bbf1f87" + integrity sha512-7AYpK/avswOWvnqQ9/jOkQCS7Fp4aKxw5ojvn5gyK2VQTZz3YVXeLMzoIZDBy745JSfJMXkTS0ptnHci5Mt1mA== dependencies: - uint8arrays "1.0.0" - varint "^5.0.0" + uint8arrays "1.1.0" + varint "^6.0.0" multihashes@^0.4.15, multihashes@~0.4.13, multihashes@~0.4.15: version "0.4.21" @@ -12076,7 +12258,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npm-run-path@^4.0.0: +npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== @@ -12291,7 +12473,7 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" -onetime@^5.1.0: +onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== @@ -13109,9 +13291,9 @@ pino-std-serializers@^2.4.2: integrity sha512-wXqbqSrIhE58TdrxxlfLwU9eDhrzppQDvGhBEr1gYbzzM4KKo3Y63gSjiDXRKLVS2UOXdPNR2v+KnQgNrs+xUg== pino@^6.0.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/pino/-/pino-6.7.0.tgz#d5d96b7004fed78816b5694fda3eab02b5ca6d23" - integrity sha512-vPXJ4P9rWCwzlTJt+f0Ni4THc3DWyt8iDDCO4edQ8narTu6hnpzdXu8FqeSJCGndl1W6lfbYQUQihUO54y66Lw== + version "6.8.0" + resolved "https://registry.yarnpkg.com/pino/-/pino-6.8.0.tgz#d242f9936f2e65217fde75c0af5d5d8b4d3d3fde" + integrity sha512-nxq+6Jr7m0cMjYFBoTRw3bco14omZ/SQCheAHz9GVwdkbUrzKhgT+gSI/ql2Mnsca0QQKgpB/ACWhjxE4JsX3Q== dependencies: fast-redact "^3.0.0" fast-safe-stringify "^2.0.7" @@ -13764,9 +13946,9 @@ postcss-selector-matches@^4.0.0: postcss "^7.0.2" postcss-selector-not@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz#c68ff7ba96527499e832724a2674d65603b645c0" - integrity sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ== + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz#263016eef1cf219e0ade9a913780fc1f48204cbf" + integrity sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ== dependencies: balanced-match "^1.0.0" postcss "^7.0.2" @@ -14318,9 +14500,9 @@ react-error-overlay@^6.0.7: integrity sha512-HvPuUQnLp5H7TouGq3kzBeioJmXms1wHy9EGjz2OURWBp4qZO6AfGEcnxts1D/CbwPLRAgTMPCEgYhA3sEM4vw== react-i18next@^11.7.3: - version "11.7.4" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.7.4.tgz#6c0142e15652d8dd80cd7d857e36efe2e9d4d09a" - integrity sha512-Aq0+QVW7NMYuAtk0Stcwp4jWeNTd1p5XefAfBPcjs/4c/2duG3v3G3zdtn8fC8L4EyA/coKLwdULHI+lYTbF8w== + version "11.8.4" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.8.4.tgz#5407d2edcaa704c38e4034e7ac06413914ed6e6d" + integrity sha512-QlPJfX+Roi+jEQ6frBSsLHHH+VWbUoCl6wZDT8XHMd6PsSgepjgD2sZf/h7F46JnHeuy0U+SxY3TtrJF+aDIyg== dependencies: "@babel/runtime" "^7.3.1" html-parse-stringify2 "2.0.1" @@ -14929,6 +15111,13 @@ rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3, rimraf@^2.7.1: dependencies: glob "^7.1.3" +rimraf@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -15246,6 +15435,11 @@ set-blocking@^2.0.0, set-blocking@~2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= +set-delayed-interval@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/set-delayed-interval/-/set-delayed-interval-1.0.0.tgz#1f7c065780a365f10250f8a80e2be10175ea0388" + integrity sha512-29fhAwuZlLcuBnW/EwxvLcg2D3ELX+VBDNhnavs3YYkab72qmrcSeQNVdzl8EcPPahGQXhBM6MKdPLCQGMDakw== + set-immediate-shim@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" @@ -15355,7 +15549,7 @@ side-channel@^1.0.2, side-channel@^1.0.3: es-abstract "^1.18.0-next.0" object-inspect "^1.8.0" -signal-exit@^3.0.0, signal-exit@^3.0.2: +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== @@ -15389,14 +15583,14 @@ simple-swizzle@^0.2.2: is-arrayish "^0.3.1" sinon@^9.0.2: - version "9.2.1" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-9.2.1.tgz#64cc88beac718557055bd8caa526b34a2231be6d" - integrity sha512-naPfsamB5KEE1aiioaoqJ6MEhdUs/2vtI5w1hPAXX/UwvoPjXcwh1m5HiKx0HGgKR8lQSoFIgY5jM6KK8VrS9w== + version "9.2.2" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-9.2.2.tgz#b83cf5d43838f99cfa3644453f4c7db23e7bd535" + integrity sha512-9Owi+RisvCZpB0bdOVFfL314I6I4YoRlz6Isi4+fr8q8YQsDPoCe5UnmNtKHRThX3negz2bXHWIuiPa42vM8EQ== dependencies: "@sinonjs/commons" "^1.8.1" "@sinonjs/fake-timers" "^6.0.1" "@sinonjs/formatio" "^5.0.1" - "@sinonjs/samsam" "^5.2.0" + "@sinonjs/samsam" "^5.3.0" diff "^4.0.2" nise "^4.0.4" supports-color "^7.1.0" @@ -16406,10 +16600,10 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" -truffle@~5.1.45: - version "5.1.56" - resolved "https://registry.yarnpkg.com/truffle/-/truffle-5.1.56.tgz#8453e9487bca3d300fe936168a8069ce1274bc84" - integrity sha512-hmRcHZqrOF5vlc0s4CoM72mRMRgP/jObK57ixfDAri+oLRgHgIKBf98R7nsy0ruq+WHCAdq1jslmrF026lUxAw== +truffle@~5.1.58: + version "5.1.58" + resolved "https://registry.yarnpkg.com/truffle/-/truffle-5.1.58.tgz#3202bc080ef71c811fe9181bfc47fff944afab62" + integrity sha512-BnMSq9+0vUj6B8OODs/U/cV7MiyNrKOKmeO1fhn2LOvN6XpOd06Qitw0V15lNxlCL+datx2WEZ9AnYql689bnQ== dependencies: app-module-path "^2.2.0" mocha "8.1.2" @@ -16569,15 +16763,7 @@ typical@^6.0.0: resolved "https://registry.yarnpkg.com/typical/-/typical-6.0.1.tgz#89bd1a6aa5e5e96fa907fb6b7579223bff558a06" integrity sha512-+g3NEp7fJLe9DPa1TArHm9QAA7YciZmWnfAqEaFrBihQ7epOv9i99rjtgb6Iz0wh3WuQDjsCTDfgRoGnmHN81A== -uint8arrays@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-1.0.0.tgz#9cf979517f85c32d6ef54adf824e3499bb715331" - integrity sha512-14tqEVujDREW7YwonSZZwLvo7aFDfX7b6ubvM/U7XvZol+CC/LbhaX/550VlWmhddAL9Wou1sxp0Of3tGqXigg== - dependencies: - multibase "^3.0.0" - web-encoding "^1.0.2" - -uint8arrays@^1.0.0, uint8arrays@^1.1.0: +uint8arrays@1.1.0, uint8arrays@^1.0.0, uint8arrays@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-1.1.0.tgz#d034aa65399a9fd213a1579e323f0b29f67d0ed2" integrity sha512-cLdlZ6jnFczsKf5IH1gPHTtcHtPGho5r4CvctohmQjw8K7Q3gFdfIGHxSTdTaCKrL4w09SsPRJTqRS0drYeszA== @@ -16853,6 +17039,18 @@ util@^0.11.0: dependencies: inherits "2.0.3" +util@^0.12.0: + version "0.12.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.3.tgz#971bb0292d2cc0c892dab7c6a5d37c2bec707888" + integrity sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + safe-buffer "^5.1.2" + which-typed-array "^1.1.2" + utila@~0.4: version "0.4.0" resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" @@ -16993,9 +17191,9 @@ wbuf@^1.1.0, wbuf@^1.7.3: minimalistic-assert "^1.0.0" web-encoding@^1.0.2, web-encoding@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/web-encoding/-/web-encoding-1.0.4.tgz#0398d39ce2cbef5ed2617080750ed874e6153aea" - integrity sha512-DcXs2lbVPzuJmn2kuDEwul2oZg7p4YMa5J2f0YzsOBHaAnBYGPNUB/rJ74DTjTKpw7F0+lSsVM8sFHE2UyBixg== + version "1.0.6" + resolved "https://registry.yarnpkg.com/web-encoding/-/web-encoding-1.0.6.tgz#ec631356ee523b4474ecbcae680440bd1e79416a" + integrity sha512-26wEnRPEFAc5d5lmH1Q/DuvWEYsRF1D2alX2jlKpdmqv7cj+BbANL7Xlcl9r4s72Eg9kItZa9RWVbBMC9dMv4w== web3-bzz@1.3.0: version "1.3.0" @@ -17007,6 +17205,16 @@ web3-bzz@1.3.0: swarm-js "^0.1.40" underscore "1.9.1" +web3-bzz@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.3.1.tgz#c7e13e5fbbbe4634b0d883e5440069fc58e58044" + integrity sha512-MN726zFpFpwhs3NMC35diJGkwTVUj+8LM/VWqooGX/MOjgYzNrJ7Wr8EzxoaTCy87edYNBprtxBkd0HzzLmung== + dependencies: + "@types/node" "^12.12.6" + got "9.6.0" + swarm-js "^0.1.40" + underscore "1.9.1" + web3-core-helpers@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.3.0.tgz#697cc3246a7eaaaac64ea506828d861c981c3f31" @@ -17016,6 +17224,15 @@ web3-core-helpers@1.3.0: web3-eth-iban "1.3.0" web3-utils "1.3.0" +web3-core-helpers@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.3.1.tgz#ffd6f47c1b54a8523f00760a8d713f44d0f97e97" + integrity sha512-tMVU0ScyQUJd/HFWfZrvGf+QmPCodPyKQw1gQ+n9We/H3vPPbUxDjNeYnd4BbYy5O9ox+0XG6i3+JlwiSkgDkA== + dependencies: + underscore "1.9.1" + web3-eth-iban "1.3.1" + web3-utils "1.3.1" + web3-core-method@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.3.0.tgz#a71387af842aec7dbad5dbbd1130c14cc6c8beb3" @@ -17028,6 +17245,18 @@ web3-core-method@1.3.0: web3-core-subscriptions "1.3.0" web3-utils "1.3.0" +web3-core-method@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.3.1.tgz#c1d8bf1e2104a8d625c99caf94218ad2dc948c92" + integrity sha512-dA38tNVZWTxBFMlLFunLD5Az1AWRi5HqM+AtQrTIhxWCzg7rJSHuaYOZ6A5MHKGPWpdykLhzlna0SsNv5AVs8w== + dependencies: + "@ethersproject/transactions" "^5.0.0-beta.135" + underscore "1.9.1" + web3-core-helpers "1.3.1" + web3-core-promievent "1.3.1" + web3-core-subscriptions "1.3.1" + web3-utils "1.3.1" + web3-core-promievent@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.3.0.tgz#e0442dd0a8989b6bdce09293976cee6d9237a484" @@ -17035,6 +17264,13 @@ web3-core-promievent@1.3.0: dependencies: eventemitter3 "4.0.4" +web3-core-promievent@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.3.1.tgz#b4da4b34cd9681e22fcda25994d7629280a1e046" + integrity sha512-jGu7TkwUqIHlvWd72AlIRpsJqdHBQnHMeMktrows2148gg5PBPgpJ10cPFmCCzKT6lDOVh9B7pZMf9eckMDmiA== + dependencies: + eventemitter3 "4.0.4" + web3-core-requestmanager@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.3.0.tgz#c5b9a0304504c0e6cce6c90bc1a3bff82732aa1f" @@ -17046,6 +17282,18 @@ web3-core-requestmanager@1.3.0: web3-providers-ipc "1.3.0" web3-providers-ws "1.3.0" +web3-core-requestmanager@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.3.1.tgz#6dd2b5161ba778dfffe68994a4accff2decc54fe" + integrity sha512-9WTaN2SoyJX1amRyTzX2FtbVXsyWBI2Wef2Q3gPiWaEo/VRVm3e4Bq8MwxNTUMIJMO8RLGHjtdgsoDKPwfL73Q== + dependencies: + underscore "1.9.1" + util "^0.12.0" + web3-core-helpers "1.3.1" + web3-providers-http "1.3.1" + web3-providers-ipc "1.3.1" + web3-providers-ws "1.3.1" + web3-core-subscriptions@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.3.0.tgz#c2622ccd2b84f4687475398ff966b579dba0847e" @@ -17055,6 +17303,15 @@ web3-core-subscriptions@1.3.0: underscore "1.9.1" web3-core-helpers "1.3.0" +web3-core-subscriptions@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.3.1.tgz#be1103259f91b7fc7f4c6a867aa34dea70a636f7" + integrity sha512-eX3N5diKmrxshc6ZBZ8EJxxAhCxdYPbYXuF2EfgdIyHmxwmYqIVvKepzO8388Bx8JD3D0Id/pKE0dC/FnDIHTQ== + dependencies: + eventemitter3 "4.0.4" + underscore "1.9.1" + web3-core-helpers "1.3.1" + web3-core@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.3.0.tgz#b818903738461c1cca0163339e1d6d3fa51242cf" @@ -17068,6 +17325,19 @@ web3-core@1.3.0: web3-core-requestmanager "1.3.0" web3-utils "1.3.0" +web3-core@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.3.1.tgz#fb0fc5d952a7f3d580a7e6155d2f28be064e64cb" + integrity sha512-QlBwSyjl2pqYUBE7lH9PfLxa8j6AzzAtvLUqkgoaaFJYLP/+XavW1n6dhVCTq+U3L3eNc+bMp9GLjGDJNXMnGg== + dependencies: + "@types/bn.js" "^4.11.5" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.3.1" + web3-core-method "1.3.1" + web3-core-requestmanager "1.3.1" + web3-utils "1.3.1" + web3-eth-abi@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.3.0.tgz#387b7ea9b38be69ad8856bc7b4e9a6a69bb4d22b" @@ -17077,6 +17347,15 @@ web3-eth-abi@1.3.0: underscore "1.9.1" web3-utils "1.3.0" +web3-eth-abi@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.3.1.tgz#d60fe5f15c7a3a426c553fdaa4199d07f1ad899c" + integrity sha512-ds4aTeKDUEqTXgncAtxvcfMpPiei9ey7+s2ZZ+OazK2CK5jWhFiJuuj9Q68kOT+hID7E1oSDVsNmJWFD/7lbMw== + dependencies: + "@ethersproject/abi" "5.0.7" + underscore "1.9.1" + web3-utils "1.3.1" + web3-eth-accounts@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.3.0.tgz#010acf389b2bee6d5e1aecb2fe78bfa5c8f26c7a" @@ -17094,6 +17373,23 @@ web3-eth-accounts@1.3.0: web3-core-method "1.3.0" web3-utils "1.3.0" +web3-eth-accounts@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.3.1.tgz#63b247461f1ae0ae46f9a5d5aa896ea80237143e" + integrity sha512-wsV3/0Pbn5+pI8PiCD1CYw7I1dkQujcP//aJ+ZH8PoaHQoG6HnJ7nTp7foqa0r/X5lizImz/g5S8D76t3Z9tHA== + dependencies: + crypto-browserify "3.12.0" + eth-lib "0.2.8" + ethereumjs-common "^1.3.2" + ethereumjs-tx "^2.1.1" + scrypt-js "^3.0.1" + underscore "1.9.1" + uuid "3.3.2" + web3-core "1.3.1" + web3-core-helpers "1.3.1" + web3-core-method "1.3.1" + web3-utils "1.3.1" + web3-eth-contract@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.3.0.tgz#c758340ac800788e29fa29edc8b0c0ac957b741c" @@ -17109,6 +17405,21 @@ web3-eth-contract@1.3.0: web3-eth-abi "1.3.0" web3-utils "1.3.0" +web3-eth-contract@1.3.1, web3-eth-contract@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.3.1.tgz#05cb77bd2a671c5480897d20de487f3bae82e113" + integrity sha512-cHu9X1iGrK+Zbrj4wYKwHI1BtVGn/9O0JRsZqd9qcFGLwwAmaCJYy0sDn7PKCKDSL3qB+MDILoyI7FaDTWWTHg== + dependencies: + "@types/bn.js" "^4.11.5" + underscore "1.9.1" + web3-core "1.3.1" + web3-core-helpers "1.3.1" + web3-core-method "1.3.1" + web3-core-promievent "1.3.1" + web3-core-subscriptions "1.3.1" + web3-eth-abi "1.3.1" + web3-utils "1.3.1" + web3-eth-ens@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.3.0.tgz#0887ba38473c104cf5fb8a715828b3b354fa02a2" @@ -17124,6 +17435,21 @@ web3-eth-ens@1.3.0: web3-eth-contract "1.3.0" web3-utils "1.3.0" +web3-eth-ens@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.3.1.tgz#ccfd621ddc1fecb44096bc8e60689499a9eb4421" + integrity sha512-MUQvYgUYQ5gAwbZyHwI7y+NTT6j98qG3MVhGCUf58inF5Gxmn9OlLJRw8Tofgf0K87Tk9Kqw1/2QxUE4PEZMMA== + dependencies: + content-hash "^2.5.2" + eth-ens-namehash "2.0.8" + underscore "1.9.1" + web3-core "1.3.1" + web3-core-helpers "1.3.1" + web3-core-promievent "1.3.1" + web3-eth-abi "1.3.1" + web3-eth-contract "1.3.1" + web3-utils "1.3.1" + web3-eth-iban@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.3.0.tgz#15b782dfaf273ebc4e3f389f1367f4e88ddce4a5" @@ -17132,6 +17458,14 @@ web3-eth-iban@1.3.0: bn.js "^4.11.9" web3-utils "1.3.0" +web3-eth-iban@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.3.1.tgz#4351e1a658efa5f3218357f0a38d6d8cad82481e" + integrity sha512-RCQLfR9Z+DNfpw7oUauYHg1HcVoEljzhwxKn3vi15gK0ssWnTwRGqUiIyVTeSb836G6oakOd5zh7XYqy7pn+nw== + dependencies: + bn.js "^4.11.9" + web3-utils "1.3.1" + web3-eth-personal@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.3.0.tgz#d376e03dc737d961ff1f8d1aca866efad8477135" @@ -17144,6 +17478,18 @@ web3-eth-personal@1.3.0: web3-net "1.3.0" web3-utils "1.3.0" +web3-eth-personal@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.3.1.tgz#cfe8af01588870d195dabf0a8d9e34956fb8856d" + integrity sha512-/vZEQpXJfBfYoy9KT911ItfoscEfF0Q2j8tsXzC2xmmasSZ6YvAUuPhflVmAo0IHQSX9rmxq0q1p3sbnE3x2pQ== + dependencies: + "@types/node" "^12.12.6" + web3-core "1.3.1" + web3-core-helpers "1.3.1" + web3-core-method "1.3.1" + web3-net "1.3.1" + web3-utils "1.3.1" + web3-eth@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.3.0.tgz#898e5f5a8827f9bc6844e267a52eb388916a6771" @@ -17163,6 +17509,25 @@ web3-eth@1.3.0: web3-net "1.3.0" web3-utils "1.3.0" +web3-eth@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.3.1.tgz#60ac4b58e5fd17b8dbbb8378abd63b02e8326727" + integrity sha512-e4iL8ovj0zNxzbv4LTHEv9VS03FxKlAZD+95MolwAqtVoUnKC2H9X6dli0w6eyXP0aKw+mwY0g0CWQHzqZvtXw== + dependencies: + underscore "1.9.1" + web3-core "1.3.1" + web3-core-helpers "1.3.1" + web3-core-method "1.3.1" + web3-core-subscriptions "1.3.1" + web3-eth-abi "1.3.1" + web3-eth-accounts "1.3.1" + web3-eth-contract "1.3.1" + web3-eth-ens "1.3.1" + web3-eth-iban "1.3.1" + web3-eth-personal "1.3.1" + web3-net "1.3.1" + web3-utils "1.3.1" + web3-net@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.3.0.tgz#b69068cccffab58911c2f08ca4abfbefb0f948c6" @@ -17172,6 +17537,15 @@ web3-net@1.3.0: web3-core-method "1.3.0" web3-utils "1.3.0" +web3-net@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.3.1.tgz#79374b1df37429b0839b83b0abc4440ac6181568" + integrity sha512-vuMMWMk+NWHlrNfszGp3qRjH/64eFLiNIwUi0kO8JXQ896SP3Ma0su5sBfSPxNCig047E9GQimrL9wvYAJSO5A== + dependencies: + web3-core "1.3.1" + web3-core-method "1.3.1" + web3-utils "1.3.1" + web3-providers-http@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.3.0.tgz#88227f64c88b32abed4359383c2663616e0dc531" @@ -17180,6 +17554,14 @@ web3-providers-http@1.3.0: web3-core-helpers "1.3.0" xhr2-cookies "1.1.0" +web3-providers-http@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.3.1.tgz#becbea61706b2fa52e15aca6fe519ee108a8fab9" + integrity sha512-DOujG6Ts7/hAMj0PW5p9/1vwxAIr+1CJ6ZWHshtfOq1v1KnMphVTGOrjcTTUvPT33/DA/so2pgGoPMrgaEIIvQ== + dependencies: + web3-core-helpers "1.3.1" + xhr2-cookies "1.1.0" + web3-providers-ipc@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.3.0.tgz#d7c2b203733b46f7b4e7b15633d891648cf9a293" @@ -17189,6 +17571,15 @@ web3-providers-ipc@1.3.0: underscore "1.9.1" web3-core-helpers "1.3.0" +web3-providers-ipc@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.3.1.tgz#3cb2572fc5286ab2f3117e0a2dce917816c3dedb" + integrity sha512-BNPscLbvwo+u/tYJrLvPnl/g/SQVSnqP/TjEsB033n4IXqTC4iZ9Of8EDmI0U6ds/9nwNqOBx3KsxbinL46UZA== + dependencies: + oboe "2.1.5" + underscore "1.9.1" + web3-core-helpers "1.3.1" + web3-providers-ws@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.3.0.tgz#84adeff65acd4624d7f5bb43c5b2b22d8f0f63a4" @@ -17199,6 +17590,16 @@ web3-providers-ws@1.3.0: web3-core-helpers "1.3.0" websocket "^1.0.32" +web3-providers-ws@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.3.1.tgz#a70140811d138a1a5cf3f0c39d11887c8e341c83" + integrity sha512-DAbVbiizv0Hr/bLKjyyKMHc/66ccVkudan3eRsf+R/PXWCqfXb7q6Lwodj4llvC047pEuLKR521ZKr5wbfk1KQ== + dependencies: + eventemitter3 "4.0.4" + underscore "1.9.1" + web3-core-helpers "1.3.1" + websocket "^1.0.32" + web3-shh@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.3.0.tgz#62d15297da8fb5f733dd1b98f9ade300590f4d49" @@ -17209,6 +17610,16 @@ web3-shh@1.3.0: web3-core-subscriptions "1.3.0" web3-net "1.3.0" +web3-shh@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.3.1.tgz#42294d684358c22aa48616cb9a3eb2e9c1e6362f" + integrity sha512-57FTQvOW1Zm3wqfZpIEqL4apEQIR5JAxjqA4RM4eL0jbdr+Zj5Y4J93xisaEVl6/jMtZNlsqYKTVswx8mHu1xw== + dependencies: + web3-core "1.3.1" + web3-core-method "1.3.1" + web3-core-subscriptions "1.3.1" + web3-net "1.3.1" + web3-utils@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.0.tgz#5bac16e5e0ec9fe7bdcfadb621655e8aa3cf14e1" @@ -17223,7 +17634,21 @@ web3-utils@1.3.0: underscore "1.9.1" utf8 "3.0.0" -web3@1.3.0, web3@~1.3.0: +web3-utils@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.1.tgz#9aa880dd8c9463fe5c099107889f86a085370c2e" + integrity sha512-9gPwFm8SXtIJuzdrZ37PRlalu40fufXxo+H2PiCwaO6RpKGAvlUlWU0qQbyToFNXg7W2H8djEgoAVac8NLMCKQ== + dependencies: + bn.js "^4.11.9" + eth-lib "0.2.8" + ethereum-bloom-filters "^1.0.6" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + underscore "1.9.1" + utf8 "3.0.0" + +web3@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/web3/-/web3-1.3.0.tgz#8fe4cd6e2a21c91904f343ba75717ee4c76bb349" integrity sha512-4q9dna0RecnrlgD/bD1C5S+81Untbd6Z/TBD7rb+D5Bvvc0Wxjr4OP70x+LlnwuRDjDtzBwJbNUblh2grlVArw== @@ -17236,15 +17661,28 @@ web3@1.3.0, web3@~1.3.0: web3-shh "1.3.0" web3-utils "1.3.0" +web3@~1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.3.1.tgz#f780138c92ae3c42ea45e1a3c6ae8844e0aa5054" + integrity sha512-lDJwOLSRWHYwhPy4h5TNgBRJ/lED7lWXyVOXHCHcEC8ai3coBNdgEXWBu/GGYbZMsS89EoUOJ14j3Ufi4dUkog== + dependencies: + web3-bzz "1.3.1" + web3-core "1.3.1" + web3-eth "1.3.1" + web3-eth-personal "1.3.1" + web3-net "1.3.1" + web3-shh "1.3.1" + web3-utils "1.3.1" + webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== webpack-dev-middleware@^3.7.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" - integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== + version "3.7.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" + integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== dependencies: memory-fs "^0.4.1" mime "^2.4.4" @@ -17368,9 +17806,9 @@ websocket-extensions@>=0.1.1: integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== websocket@^1.0.32: - version "1.0.32" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.32.tgz#1f16ddab3a21a2d929dec1687ab21cfdc6d3dbb1" - integrity sha512-i4yhcllSP4wrpoPMU2N0TQ/q0O94LRG/eUQjEAamRltjQ1oT1PFFKOG4i877OlJgCG8rw6LrrowJp+TYCEWF7Q== + version "1.0.33" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.33.tgz#407f763fc58e74a3fa41ca3ae5d78d3f5e3b82a5" + integrity sha512-XwNqM2rN5eh3G2CUQE3OHZj+0xfdH42+OFK6LdC2yqiC0YU8e5UK0nYre220T0IyyN031V/XOvtHvXozvJYFWA== dependencies: bufferutil "^4.0.1" debug "^2.2.0" @@ -17419,6 +17857,19 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= +which-typed-array@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.4.tgz#8fcb7d3ee5adf2d771066fba7cf37e32fe8711ff" + integrity sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA== + dependencies: + available-typed-arrays "^1.0.2" + call-bind "^1.0.0" + es-abstract "^1.18.0-next.1" + foreach "^2.0.5" + function-bind "^1.1.1" + has-symbols "^1.0.1" + is-typed-array "^1.1.3" + which@2.0.2, which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -17669,6 +18120,15 @@ write@1.0.3: dependencies: mkdirp "^0.5.1" +wrtc@~0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/wrtc/-/wrtc-0.4.6.tgz#909ace2cffd34e11633d4e1c20527510a12e7b5b" + integrity sha512-4uD+oFoY2yuo3AV9fum3cXUXR6v8YQHZlqBrKkCRGjW1BvKrVHtLNH4UaNLBLiJu9DL89WqUWmbzsQ9RxMzANw== + dependencies: + node-pre-gyp "^0.13.0" + optionalDependencies: + domexception "^1.0.1" + ws@7.2.3: version "7.2.3" resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46" @@ -17772,9 +18232,9 @@ xor-distance@^2.0.0: integrity sha512-AsAqZfPAuWx7qB/0kyRDUEvoU3QKsHWzHU9smFlkaiprEpGfJ/NBbLze2Uq0rdkxCxkNM9uOLvz/KoNBCbZiLQ== xregexp@^4.3.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.4.0.tgz#29660f5d6567cd2ef981dd4a50cb05d22c10719d" - integrity sha512-83y4aa8o8o4NZe+L+46wpa+F1cWR/wCGOWI3tzqUso0w3/KAvXy0+Di7Oe/cbNMixDR4Jmi7NEybWU6ps25Wkg== + version "4.4.1" + resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.4.1.tgz#c84a88fa79e9ab18ca543959712094492185fe65" + integrity sha512-2u9HwfadaJaY9zHtRRnH6BY6CQVNQKkYm3oLtC9gJXXzfsbACg5X5e4EZZGVAH+YIfa+QA9lsFQTTe3HURF3ag== dependencies: "@babel/runtime-corejs3" "^7.12.1" From 08529858b5a5655eeab27f90008ccfd5b4786772 Mon Sep 17 00:00:00 2001 From: Ezerous Date: Thu, 31 Dec 2020 14:58:46 +0200 Subject: [PATCH 2/7] Express init, refactoring --- packages/concordia-pinner/package.json | 3 + packages/concordia-pinner/src/constants.js | 9 + packages/concordia-pinner/src/index.js | 38 +++- .../src/options/ipfsOptions.js | 11 +- .../src/options/libp2pBundle.js | 3 +- .../concordia-pinner/src/utils/ipfsUtils.js | 12 -- .../concordia-pinner/src/utils/orbitUtils.js | 11 +- yarn.lock | 203 +++++++++++++++--- 8 files changed, 222 insertions(+), 68 deletions(-) create mode 100644 packages/concordia-pinner/src/constants.js delete mode 100644 packages/concordia-pinner/src/utils/ipfsUtils.js diff --git a/packages/concordia-pinner/package.json b/packages/concordia-pinner/package.json index eff05c5..a0cc566 100644 --- a/packages/concordia-pinner/package.json +++ b/packages/concordia-pinner/package.json @@ -12,7 +12,9 @@ "dependencies": { "@ezerous/eth-identity-provider": "~0.1.2", "esm": "~3.2.25", + "express": "^4.17.1", "ipfs": "~0.52.1", + "is-reachable": "^5.0.0", "level": "~6.0.1", "libp2p": "~0.30.0", "libp2p-bootstrap": "~0.12.1", @@ -23,6 +25,7 @@ "libp2p-noise": "~2.0.1", "libp2p-tcp": "~0.15.1", "libp2p-webrtc-star": "~0.20.2", + "lodash": "^4.17.20", "orbit-db": "~0.26.0", "orbit-db-identity-provider": "~0.3.1", "rimraf": "~3.0.2", diff --git a/packages/concordia-pinner/src/constants.js b/packages/concordia-pinner/src/constants.js new file mode 100644 index 0000000..cd55e2c --- /dev/null +++ b/packages/concordia-pinner/src/constants.js @@ -0,0 +1,9 @@ +import breezeOptions from 'concordia-app/src/options/breezeOptions'; +import { WEB3_HOST_DEFAULT, WEB3_PORT_DEFAULT } from 'concordia-app/src/constants/configuration/defaults'; +const { WEB3_HOST, WEB3_PORT } = process.env; + +export const web3ProviderUrl = (WEB3_HOST !== undefined && WEB3_PORT !== undefined) + ? `ws://${WEB3_HOST}:${WEB3_PORT}` + : `ws://${WEB3_HOST_DEFAULT}:${WEB3_PORT_DEFAULT}`; + +export const swarmAddresses = breezeOptions.ipfs.config.Addresses.Swarm; diff --git a/packages/concordia-pinner/src/index.js b/packages/concordia-pinner/src/index.js index dbd5bc4..196650e 100644 --- a/packages/concordia-pinner/src/index.js +++ b/packages/concordia-pinner/src/index.js @@ -1,10 +1,26 @@ import Web3 from 'web3'; import Contract from 'web3-eth-contract'; +import IPFS from 'ipfs'; +import express from 'express' +import isReachable from 'is-reachable'; //TODO: health checking web3 network and rendezvous +import _ from 'lodash'; import { forumContract } from 'concordia-contracts'; import { createOrbitInstance, getPeerDatabases, openKVDBs } from './utils/orbitUtils'; +import ipfsOptions from './options/ipfsOptions'; +import { web3ProviderUrl } from './constants'; +const API_PORT = process.env.PINNER_API_PORT || 4444; + +process.on('unhandledRejection', error => { + // This happens when attempting to initialize without any available Swarm addresses (e.g. Rendezvous) + if(error.code === 'ERR_NO_VALID_ADDRESSES'){ + console.error('unhandledRejection', error.message); + process.exit(1); + } +}); + +let ipfs; async function main () { - const web3ProviderUrl = 'ws://127.0.0.1:8545'; const web3 = new Web3(new Web3.providers.WebsocketProvider(web3ProviderUrl)); const networkId = await web3.eth.net.getId(); @@ -13,7 +29,8 @@ async function main () { Contract.setProvider(web3ProviderUrl); const contract = new Contract(forumContract.abi, contractAddress); - const orbit = await createOrbitInstance(contractAddress); + ipfs = await IPFS.create(ipfsOptions); + const orbit = await createOrbitInstance(ipfs, contractAddress); // Open & replicate databases of existing users const userAddresses = await contract.methods.getUserAddresses().call(); @@ -35,10 +52,25 @@ async function main () { result.data, result.topics.slice(1) ) - console.log(`UserSignedUp!`, eventObj[1]) + console.log(`User signed up:`, eventObj[1]); getPeerDatabases(orbit, userAddresses).then(peerDBs => openKVDBs(orbit, peerDBs)); } }); } main(); + +const app = express(); + +app.get('/', async (req, res) => { + let responseBody = {peers:[], totalPeers:0}; + const peers = await ipfs.swarm.peers(); //TODO: surround with try + const uniquePeers = _.uniqBy(peers, 'peer'); + responseBody.peers = uniquePeers; + responseBody.totalPeers = uniquePeers.length; + res.send(responseBody); +}); + +app.listen(API_PORT, () => { + console.log(`Pinner API at http://localhost:${API_PORT}!`); +}); diff --git a/packages/concordia-pinner/src/options/ipfsOptions.js b/packages/concordia-pinner/src/options/ipfsOptions.js index 7c3c0d3..26e0669 100644 --- a/packages/concordia-pinner/src/options/ipfsOptions.js +++ b/packages/concordia-pinner/src/options/ipfsOptions.js @@ -1,18 +1,11 @@ import libp2pBundle from './libp2pBundle' +import { swarmAddresses } from '../constants'; export default { repo: 'ipfs', config: { Addresses: { - Swarm: [ - // Use local signaling server (see also rendezvous script in package.json) - // For more information: https://github.com/libp2p/js-libp2p-webrtc-star - `/ip4/127.0.0.1/tcp/9090/wss/p2p-webrtc-star`, - - // Use the following public servers if needed - // '/dns4/wrtc-star1.par.dwebops.pub/tcp/443/wss/p2p-webrtc-star', - // '/dns4/ wrtc-star2.sjc.dwebops.pub/tcp/443/wss/p2p-webrtc-star' - ], + Swarm: swarmAddresses }, }, libp2p: libp2pBundle, diff --git a/packages/concordia-pinner/src/options/libp2pBundle.js b/packages/concordia-pinner/src/options/libp2pBundle.js index ab23f3d..e797859 100644 --- a/packages/concordia-pinner/src/options/libp2pBundle.js +++ b/packages/concordia-pinner/src/options/libp2pBundle.js @@ -7,13 +7,14 @@ import Gossipsub from 'libp2p-gossipsub'; import KadDHT from 'libp2p-kad-dht'; import MPLEX from 'libp2p-mplex'; import { NOISE } from 'libp2p-noise'; +import { swarmAddresses } from '../constants'; // See also: https://github.com/libp2p/js-libp2p/blob/master/doc/CONFIGURATION.md export default (opts) => { return new Libp2p({ peerId: opts.peerId, addresses: { - listen: ['/ip4/127.0.0.1/tcp/9090/wss/p2p-webrtc-star'] + listen: swarmAddresses }, connectionManager: { minPeers: 25, diff --git a/packages/concordia-pinner/src/utils/ipfsUtils.js b/packages/concordia-pinner/src/utils/ipfsUtils.js deleted file mode 100644 index a2fcc2a..0000000 --- a/packages/concordia-pinner/src/utils/ipfsUtils.js +++ /dev/null @@ -1,12 +0,0 @@ -export function displayIPFSStats(ipfs){ - //TODO: investigate occasional printing of duplicate peers - setInterval(async () => { - try { - const peers = await ipfs.swarm.peers() - console.log(`Number of peers: ${peers.length}`) - console.dir(peers) - } catch (err) { - console.log('IPFS peer logging error:', err) - } - }, 3000) -} diff --git a/packages/concordia-pinner/src/utils/orbitUtils.js b/packages/concordia-pinner/src/utils/orbitUtils.js index d871b66..f3c024d 100644 --- a/packages/concordia-pinner/src/utils/orbitUtils.js +++ b/packages/concordia-pinner/src/utils/orbitUtils.js @@ -1,21 +1,14 @@ -import IPFS from 'ipfs'; import OrbitDB from 'orbit-db'; import Identities from 'orbit-db-identity-provider'; import { EthereumContractIdentityProvider } from '@ezerous/eth-identity-provider'; import Web3 from 'web3'; -import ipfsOptions from '../options/ipfsOptions'; -import { displayIPFSStats } from './ipfsUtils'; -export async function createOrbitInstance(contractAddress){ +export async function createOrbitInstance(ipfs, contractAddress){ Identities.addIdentityProvider(EthereumContractIdentityProvider); EthereumContractIdentityProvider.setWeb3(new Web3()); // We need a fully-featured new Web3 for signature verification EthereumContractIdentityProvider.setContractAddress(contractAddress); - const ipfs = await IPFS.create(ipfsOptions); - - displayIPFSStats(ipfs); - return await OrbitDB.createInstance(ipfs); } @@ -52,5 +45,3 @@ async function determineKVAddress({ orbit, dbName, userAddress }) { orbit, dbName, type: 'keyvalue', identityId: userAddress + EthereumContractIdentityProvider.contractAddress, }); } - - diff --git a/yarn.lock b/yarn.lock index 2ece6a4..9247832 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2179,6 +2179,11 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== +"@sindresorhus/is@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.0.0.tgz#2ff674e9611b45b528896d820d3d7a812de2f0e4" + integrity sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ== + "@sinonjs/commons@^1", "@sinonjs/commons@^1.6.0", "@sinonjs/commons@^1.7.0", "@sinonjs/commons@^1.8.1": version "1.8.1" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" @@ -2330,6 +2335,13 @@ dependencies: defer-to-connect "^1.0.1" +"@szmarczak/http-timer@^4.0.5": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.5.tgz#bfbd50211e9dfa51ba07da58a14cdfd333205152" + integrity sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ== + dependencies: + defer-to-connect "^2.0.0" + "@tokenizer/token@^0.1.0", "@tokenizer/token@^0.1.1": version "0.1.1" resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.1.1.tgz#f0d92c12f87079ddfd1b29f614758b9696bc29e3" @@ -2382,6 +2394,16 @@ dependencies: "@types/node" "*" +"@types/cacheable-request@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.1.tgz#5d22f3dded1fd3a84c0bbeb5039a7419c2c91976" + integrity sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "*" + "@types/node" "*" + "@types/responselike" "*" + "@types/debug@^4.1.5": version "4.1.5" resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.5.tgz#b14efa8852b7768d898906613c23f688713e02cd" @@ -2400,6 +2422,11 @@ "@types/minimatch" "*" "@types/node" "*" +"@types/http-cache-semantics@*": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz#9140779736aa2655635ee756e2467d787cfe8a2a" + integrity sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A== + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" @@ -2430,6 +2457,13 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= +"@types/keyv@*": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.1.tgz#e45a45324fca9dab716ab1230ee249c9fb52cfa7" + integrity sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw== + dependencies: + "@types/node" "*" + "@types/long@^4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9" @@ -2472,6 +2506,13 @@ resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== +"@types/responselike@*", "@types/responselike@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" + integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + dependencies: + "@types/node" "*" + "@types/secp256k1@^4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.1.tgz#fb3aa61a1848ad97d7425ff9dcba784549fca5a4" @@ -3148,6 +3189,11 @@ arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + asap@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" @@ -3999,6 +4045,11 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + cacheable-request@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" @@ -4012,6 +4063,19 @@ cacheable-request@^6.0.0: normalize-url "^4.1.0" responselike "^1.0.2" +cacheable-request@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.1.tgz#062031c2856232782ed694a257fa35da93942a58" + integrity sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^2.0.0" + call-bind@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" @@ -5187,6 +5251,13 @@ decompress-response@^3.2.0, decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + deep-eql@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" @@ -5234,6 +5305,11 @@ defer-to-connect@^1.0.1: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== +defer-to-connect@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.0.tgz#83d6b199db041593ac84d781b5222308ccf4c2c1" + integrity sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg== + deferred-leveldown@~5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.1.0.tgz#c21e40641a8e48530255a4ad31371cc7fe76b332" @@ -5886,7 +5962,7 @@ escodegen@^1.11.0, escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" -eslint-config-airbnb-base@^14.1.0, eslint-config-airbnb-base@^14.2.1: +eslint-config-airbnb-base@^14.2.1: version "14.2.1" resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz#8a2eb38455dc5a312550193b319cdaeef042cd1e" integrity sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA== @@ -5904,15 +5980,6 @@ eslint-config-airbnb@^18.1.0: object.assign "^4.1.2" object.entries "^1.1.2" -eslint-config-airbnb@~18.1.0: - version "18.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-18.1.0.tgz#724d7e93dadd2169492ff5363c5aaa779e01257d" - integrity sha512-kZFuQC/MPnH7KJp6v95xsLBf63G/w7YqdPfQ0MUanxQ7zcKUNG8j+sSY860g3NwCBOa62apw16J6pRN+AOgXzw== - dependencies: - eslint-config-airbnb-base "^14.1.0" - object.assign "^4.1.0" - object.entries "^1.1.1" - eslint-config-react-app@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz#698bf7aeee27f0cea0139eaef261c7bf7dd623df" @@ -5991,25 +6058,7 @@ eslint-plugin-import@^2.20.2: resolve "^1.17.0" tsconfig-paths "^3.9.0" -eslint-plugin-import@~2.20.2: - version "2.20.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz#91fc3807ce08be4837141272c8b99073906e588d" - integrity sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg== - dependencies: - array-includes "^3.0.3" - array.prototype.flat "^1.2.1" - contains-path "^0.1.0" - debug "^2.6.9" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.2" - eslint-module-utils "^2.4.1" - has "^1.0.3" - minimatch "^3.0.4" - object.values "^1.1.0" - read-pkg-up "^2.0.0" - resolve "^1.12.0" - -eslint-plugin-jsx-a11y@6.2.3, eslint-plugin-jsx-a11y@~6.2.3: +eslint-plugin-jsx-a11y@6.2.3: version "6.2.3" resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz#b872a09d5de51af70a97db1eea7dc933043708aa" integrity sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg== @@ -6046,12 +6095,12 @@ eslint-plugin-react-hooks@^1.6.1: resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz#6210b6d5a37205f0b92858f895a4e827020a7d04" integrity sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA== -eslint-plugin-react-hooks@^4.2.0, eslint-plugin-react-hooks@~4.2.0: +eslint-plugin-react-hooks@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz#8c229c268d468956334c943bb45fc860280f5556" integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ== -eslint-plugin-react@7.19.0, eslint-plugin-react@~7.19.0: +eslint-plugin-react@7.19.0: version "7.19.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.19.0.tgz#6d08f9673628aa69c5559d33489e855d83551666" integrity sha512-SPT8j72CGuAP+JFbT0sJHOB80TX/pu44gQ4vXH/cq+hQTiY2PuZ6IHkqXJV6x1b28GDdo1lbInjKUrrdUf0LOQ== @@ -6163,7 +6212,7 @@ eslint@^5.6.0: table "^5.2.3" text-table "^0.2.0" -eslint@^6.6.0, eslint@^6.8.0, eslint@~6.8.0: +eslint@^6.6.0, eslint@^6.8.0: version "6.8.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== @@ -7314,6 +7363,23 @@ got@9.6.0, got@^9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" +got@^11.7.0: + version "11.8.1" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.1.tgz#df04adfaf2e782babb3daabc79139feec2f7e85d" + integrity sha512-9aYdZL+6nHmvJwHALLwKSUZ0hMwGaJGYv3hoPLPgnT8BoBXm1SjnZeky+91tfwJaDzun2s4RsBRy48IEYv2q2Q== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.1" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + got@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" @@ -7752,6 +7818,14 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.0-beta.5.2" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.0-beta.5.2.tgz#8b923deb90144aea65cf834b016a340fc98556f3" + integrity sha512-xYz9goEyBnC8XwXDTuC/MZ6t+MrKVQZOk4s7+PaDkwIsQd8IwqvM+0M6bA/2lvG8GHXcPdf+MejTUeO2LCPCeQ== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" @@ -9092,11 +9166,30 @@ is-plain-object@~5.0.0: resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== +is-port-reachable@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-port-reachable/-/is-port-reachable-3.0.0.tgz#edf721e7d354e6e00cbeb0fc174ad89bdf6056b3" + integrity sha512-056IzLiWHdgVd6Eq1F9HtJl+cIkvi5X2MJ/A1fjQtByHkzQE1wGardnPhqrarOGDF88BOW+297X7PDvZ2vcyVg== + is-promise@~1, is-promise@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-1.0.1.tgz#31573761c057e33c2e91aab9e96da08cefbe76e5" integrity sha1-MVc3YcBX4zwukaq56W2gjO++duU= +is-reachable@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-reachable/-/is-reachable-5.0.0.tgz#caa3a4d1c6368fdafb85cdb7d1e219e5b8fded6b" + integrity sha512-frRPbdrQWEqbnF1il9Dyrf52Q40exkHdo4/grWMjHrBn4G1DKC9sbuQihgANkJPNi2eosU4AXBsrITdXmc3IQg== + dependencies: + arrify "^2.0.1" + got "^11.7.0" + is-port-reachable "^3.0.0" + p-any "^3.0.0" + p-timeout "^3.2.0" + prepend-http "^3.0.1" + router-ips "^1.0.0" + url-parse "^1.4.7" + is-regex@^1.0.4, is-regex@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" @@ -10084,6 +10177,11 @@ json-buffer@3.0.0: resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -10259,6 +10357,13 @@ keyv@^3.0.0: dependencies: json-buffer "3.0.0" +keyv@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.3.tgz#4f3aa98de254803cafcd2896734108daa35e4254" + integrity sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA== + dependencies: + json-buffer "3.0.1" + killable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" @@ -11522,6 +11627,11 @@ mimic-response@^1.0.0, mimic-response@^1.0.1: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" @@ -14057,6 +14167,11 @@ prepend-http@^2.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= +prepend-http@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-3.0.1.tgz#3e724d58fd5867465b300bb9615009fa2f8ee3b6" + integrity sha512-BLxfZh+m6UiAiCPZFJ4+vYoL7NrRs5XgCTRrjseATAggXhdZKKxn+JUNmuVYWY23bDHgaEHodxw8mnmtVEDtHw== + prettier@^1.14.3: version "1.19.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" @@ -14383,6 +14498,11 @@ quick-format-unescaped@^4.0.1: resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz#437a5ea1a0b61deb7605f8ab6a8fd3858dbeb701" integrity sha512-RyYpQ6Q5/drsJyOhrWHYMWTedvjTIat+FTwv0K4yoUxzvekw2aRHMQJLlnvt8UantkZg2++bEzD9EdxXqkWf4A== +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + rabin-wasm@^0.1.1: version "0.1.4" resolved "https://registry.yarnpkg.com/rabin-wasm/-/rabin-wasm-0.1.4.tgz#062310686acfc9e05c13c7156a2339af148c78f2" @@ -14973,6 +15093,11 @@ reset@^0.1.0: resolved "https://registry.yarnpkg.com/reset/-/reset-0.1.0.tgz#9fc7314171995ae6cb0b7e58b06ce7522af4bafb" integrity sha1-n8cxQXGZWubLC35YsGznUir0uvs= +resolve-alpn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.0.0.tgz#745ad60b3d6aff4b4a48e01b8c0bdc70959e0e8c" + integrity sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA== + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -15043,6 +15168,13 @@ responselike@^1.0.2: dependencies: lowercase-keys "^1.0.0" +responselike@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723" + integrity sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw== + dependencies: + lowercase-keys "^2.0.0" + restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -15133,6 +15265,11 @@ rlp@^2.2.3: dependencies: bn.js "^4.11.1" +router-ips@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/router-ips/-/router-ips-1.0.0.tgz#44e00858ebebc0133d58e40b2cd8a1fbb04203f5" + integrity sha1-ROAIWOvrwBM9WOQLLNih+7BCA/U= + rsa-pem-to-jwk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/rsa-pem-to-jwk/-/rsa-pem-to-jwk-1.1.3.tgz#245e76bdb7e7234cfee7ca032d31b54c38fab98e" @@ -16946,7 +17083,7 @@ url-parse-lax@^3.0.0: dependencies: prepend-http "^2.0.0" -url-parse@^1.4.3: +url-parse@^1.4.3, url-parse@^1.4.7: version "1.4.7" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== From bdd78d25f10452d57b94dcb220ae821f04c2007e Mon Sep 17 00:00:00 2001 From: Ezerous Date: Thu, 7 Jan 2021 14:16:40 +0200 Subject: [PATCH 3/7] Enhanced API --- .../src/options/breezeOptions.js | 2 + packages/concordia-pinner/src/app.js | 57 +++++++++++++++++++ packages/concordia-pinner/src/constants.js | 8 ++- packages/concordia-pinner/src/index.js | 33 +++-------- 4 files changed, 73 insertions(+), 27 deletions(-) create mode 100644 packages/concordia-pinner/src/app.js diff --git a/packages/concordia-app/src/options/breezeOptions.js b/packages/concordia-app/src/options/breezeOptions.js index 3f3a15f..ea38e82 100644 --- a/packages/concordia-app/src/options/breezeOptions.js +++ b/packages/concordia-app/src/options/breezeOptions.js @@ -8,6 +8,8 @@ import { const REACT_APP_RENDEZVOUS_HOST = process.env.REACT_APP_RENDEZVOUS_HOST || REACT_APP_RENDEZVOUS_HOST_DEFAULT; const REACT_APP_RENDEZVOUS_PORT = process.env.REACT_APP_RENDEZVOUS_PORT || REACT_APP_RENDEZVOUS_PORT_DEFAULT; +export const RENDEZVOUS_URL = `http://${REACT_APP_RENDEZVOUS_HOST}:${REACT_APP_RENDEZVOUS_PORT}`; + const breezeOptions = { ipfs: { repo: 'concordia', diff --git a/packages/concordia-pinner/src/app.js b/packages/concordia-pinner/src/app.js new file mode 100644 index 0000000..cbf9748 --- /dev/null +++ b/packages/concordia-pinner/src/app.js @@ -0,0 +1,57 @@ +import express from 'express'; +import _ from 'lodash'; +import isReachable from 'is-reachable'; + +import { API_PORT, RENDEZVOUS_URL, WEB3_PROVIDER_URL } from './constants'; + +const POLLING_INTERVAL = 1000; + +let app; +let responseBody = { + ipfs:{id:"", localAddresses:[], peers:[], totalPeers:0, repoStats:{}}, + orbit:{identity:{}, databases:[]}, + web3:{url:WEB3_PROVIDER_URL, reachable: false}, + rendezvous:{url:RENDEZVOUS_URL, reachable: false}, + timestamp:0 +}; + +export function startAPI(orbit){ + app = express(); + app.get('/', async (req, res) => { + res.send(responseBody); + }); + + app.listen(API_PORT, () => { + console.log(`Pinner API at http://localhost:${API_PORT}!`); + }); + setInterval(getStats, POLLING_INTERVAL, orbit); +} + +async function getStats(orbit) { + try { + const ipfs = orbit._ipfs; + const {id} = await ipfs.id(); + const peers = await ipfs.swarm.peers(); + const localAddresses = await ipfs.swarm.localAddrs(); + const repoStats = await ipfs.stats.repo(); + const uniquePeers = _.uniqBy(peers, 'peer'); + const orbitIdentity = orbit.identity; + const databases = Object.keys(orbit.stores); + const isWeb3Reachable = await isReachable(WEB3_PROVIDER_URL); + const isRendezvousReachable = await isReachable(RENDEZVOUS_URL); + const timestamp = + new Date(); + + responseBody.ipfs.id = id; + responseBody.ipfs.peers = uniquePeers; + responseBody.ipfs.totalPeers = uniquePeers.length; + responseBody.ipfs.localAddresses = localAddresses; + responseBody.ipfs.repoStats = repoStats; + responseBody.orbit.identity = orbitIdentity; + responseBody.orbit.databases = databases; + responseBody.web3.reachable = isWeb3Reachable; + responseBody.rendezvous.reachable = isRendezvousReachable; + responseBody.timestamp = timestamp; + } catch (err) { + console.error('Error while getting stats:', err) + } +} diff --git a/packages/concordia-pinner/src/constants.js b/packages/concordia-pinner/src/constants.js index cd55e2c..5acb7f8 100644 --- a/packages/concordia-pinner/src/constants.js +++ b/packages/concordia-pinner/src/constants.js @@ -1,9 +1,13 @@ -import breezeOptions from 'concordia-app/src/options/breezeOptions'; +import breezeOptions, {RENDEZVOUS_URL} from 'concordia-app/src/options/breezeOptions'; import { WEB3_HOST_DEFAULT, WEB3_PORT_DEFAULT } from 'concordia-app/src/constants/configuration/defaults'; const { WEB3_HOST, WEB3_PORT } = process.env; -export const web3ProviderUrl = (WEB3_HOST !== undefined && WEB3_PORT !== undefined) +const API_PORT = process.env.PINNER_API_PORT || 4444; + +const WEB3_PROVIDER_URL = (WEB3_HOST !== undefined && WEB3_PORT !== undefined) ? `ws://${WEB3_HOST}:${WEB3_PORT}` : `ws://${WEB3_HOST_DEFAULT}:${WEB3_PORT_DEFAULT}`; export const swarmAddresses = breezeOptions.ipfs.config.Addresses.Swarm; + +export {API_PORT, WEB3_PROVIDER_URL, RENDEZVOUS_URL}; diff --git a/packages/concordia-pinner/src/index.js b/packages/concordia-pinner/src/index.js index 196650e..edb108b 100644 --- a/packages/concordia-pinner/src/index.js +++ b/packages/concordia-pinner/src/index.js @@ -1,14 +1,11 @@ import Web3 from 'web3'; import Contract from 'web3-eth-contract'; import IPFS from 'ipfs'; -import express from 'express' -import isReachable from 'is-reachable'; //TODO: health checking web3 network and rendezvous -import _ from 'lodash'; import { forumContract } from 'concordia-contracts'; import { createOrbitInstance, getPeerDatabases, openKVDBs } from './utils/orbitUtils'; import ipfsOptions from './options/ipfsOptions'; -import { web3ProviderUrl } from './constants'; -const API_PORT = process.env.PINNER_API_PORT || 4444; +import { WEB3_PROVIDER_URL } from './constants'; +import { startAPI } from './app'; process.on('unhandledRejection', error => { // This happens when attempting to initialize without any available Swarm addresses (e.g. Rendezvous) @@ -18,18 +15,17 @@ process.on('unhandledRejection', error => { } }); -let ipfs; - async function main () { - const web3 = new Web3(new Web3.providers.WebsocketProvider(web3ProviderUrl)); + console.log('Initializing...'); + const web3 = new Web3(new Web3.providers.WebsocketProvider(WEB3_PROVIDER_URL)); const networkId = await web3.eth.net.getId(); const contractAddress = forumContract.networks[networkId].address; - Contract.setProvider(web3ProviderUrl); + Contract.setProvider(WEB3_PROVIDER_URL); const contract = new Contract(forumContract.abi, contractAddress); - ipfs = await IPFS.create(ipfsOptions); + const ipfs = await IPFS.create(ipfsOptions); const orbit = await createOrbitInstance(ipfs, contractAddress); // Open & replicate databases of existing users @@ -56,21 +52,8 @@ async function main () { getPeerDatabases(orbit, userAddresses).then(peerDBs => openKVDBs(orbit, peerDBs)); } }); + + startAPI(orbit); } main(); - -const app = express(); - -app.get('/', async (req, res) => { - let responseBody = {peers:[], totalPeers:0}; - const peers = await ipfs.swarm.peers(); //TODO: surround with try - const uniquePeers = _.uniqBy(peers, 'peer'); - responseBody.peers = uniquePeers; - responseBody.totalPeers = uniquePeers.length; - res.send(responseBody); -}); - -app.listen(API_PORT, () => { - console.log(`Pinner API at http://localhost:${API_PORT}!`); -}); From 9351e93e4c1eb7d15b11f6c71e0a6605557944ec Mon Sep 17 00:00:00 2001 From: Ezerous Date: Fri, 8 Jan 2021 15:39:25 +0200 Subject: [PATCH 4/7] Hotfix --- packages/concordia-pinner/package.json | 2 +- packages/concordia-pinner/src/index.js | 5 +++-- yarn.lock | 14 +++++++------- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/packages/concordia-pinner/package.json b/packages/concordia-pinner/package.json index a0cc566..0b7b81d 100644 --- a/packages/concordia-pinner/package.json +++ b/packages/concordia-pinner/package.json @@ -18,7 +18,7 @@ "level": "~6.0.1", "libp2p": "~0.30.0", "libp2p-bootstrap": "~0.12.1", - "libp2p-gossipsub": "~0.7.0", + "libp2p-gossipsub": "~0.8.0", "libp2p-kad-dht": "~0.20.1", "libp2p-mdns": "~0.15.0", "libp2p-mplex": "~0.10.0", diff --git a/packages/concordia-pinner/src/index.js b/packages/concordia-pinner/src/index.js index edb108b..2dcc90a 100644 --- a/packages/concordia-pinner/src/index.js +++ b/packages/concordia-pinner/src/index.js @@ -48,8 +48,9 @@ async function main () { result.data, result.topics.slice(1) ) - console.log(`User signed up:`, eventObj[1]); - getPeerDatabases(orbit, userAddresses).then(peerDBs => openKVDBs(orbit, peerDBs)); + const userAddress = eventObj[1]; + console.log(`User signed up:`, userAddress); + getPeerDatabases(orbit, [userAddress]).then(peerDBs => openKVDBs(orbit, peerDBs)); } }); diff --git a/yarn.lock b/yarn.lock index 9247832..8763267 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10712,17 +10712,17 @@ libp2p-gossipsub@^0.6.1: time-cache "^0.3.0" uint8arrays "^1.1.0" -libp2p-gossipsub@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/libp2p-gossipsub/-/libp2p-gossipsub-0.7.0.tgz#92964135163b5f29df6bf24b18fd76df37b5002e" - integrity sha512-uHohd/1SMBg36BNZSMYIwoAsOKFqt8FJh9dq7izHd4PKMyKDlRMdc1LYdqdMMj+MBcDctulMw4zGeGE8WTK62A== +libp2p-gossipsub@~0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/libp2p-gossipsub/-/libp2p-gossipsub-0.8.0.tgz#b9c961560dc02afa079790f44882854a19a94abf" + integrity sha512-nR5XGN6E5n2ukPR9aa/rtegwluxiK+vT9j5Oulp+P1h6T9vEqDvFAEe9cqA3FiT7apI5gk44SE0aZFTMpxz6EA== dependencies: "@types/debug" "^4.1.5" debug "^4.1.1" denque "^1.4.1" err-code "^2.0.0" it-pipe "^1.0.1" - libp2p-interfaces "^0.7.2" + libp2p-interfaces "^0.8.0" peer-id "^0.14.0" protons "^2.0.0" time-cache "^0.3.0" @@ -10821,7 +10821,7 @@ libp2p-interfaces@^0.6.0: streaming-iterables "^5.0.2" uint8arrays "^1.1.0" -libp2p-interfaces@^0.7.1, libp2p-interfaces@^0.7.2: +libp2p-interfaces@^0.7.1: version "0.7.2" resolved "https://registry.yarnpkg.com/libp2p-interfaces/-/libp2p-interfaces-0.7.2.tgz#77281294b6bba72d0e9bf6c0e0b3471e37330cc3" integrity sha512-uI4vPiwdi9pKScLoAvwMqXiEjUtUACavtqZEvdm36T1PcmzsfDbGDKGCkGoDENQ/kztsggfb/9PoEAiNw3CQxQ== @@ -10855,7 +10855,7 @@ libp2p-interfaces@^0.7.1, libp2p-interfaces@^0.7.2: streaming-iterables "^5.0.2" uint8arrays "^1.1.0" -libp2p-interfaces@^0.8.1: +libp2p-interfaces@^0.8.0, libp2p-interfaces@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/libp2p-interfaces/-/libp2p-interfaces-0.8.1.tgz#426c0d599f169aa7a599d7707e7b82cec1baba40" integrity sha512-46ttBnPMmg3/I8hPQE08uJtmI6CB2O/+xnOqYJ+yW8m1mqpMNJvQd/yTkoMyNXxJnGhAzC1Vn7IxVrisQhOmNA== From 1e6c03a79f020e704c6dce9497150649e1a85290 Mon Sep 17 00:00:00 2001 From: Ezerous Date: Fri, 5 Feb 2021 21:59:06 +0200 Subject: [PATCH 5/7] fix: post's author shouldn't be able to vote for it --- packages/concordia-contracts/contracts/Forum.sol | 5 +++++ packages/concordia-contracts/contracts/PostVoting.sol | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/concordia-contracts/contracts/Forum.sol b/packages/concordia-contracts/contracts/Forum.sol index 05d6031..6120530 100644 --- a/packages/concordia-contracts/contracts/Forum.sol +++ b/packages/concordia-contracts/contracts/Forum.sol @@ -171,4 +171,9 @@ contract Forum { posts[postID].topicID ); } + + function getPostAuthor(uint postID) public view returns (address) { + require(postExists(postID), POST_DOES_NOT_EXIST); + return posts[postID].author; + } } diff --git a/packages/concordia-contracts/contracts/PostVoting.sol b/packages/concordia-contracts/contracts/PostVoting.sol index c6183c7..1b3374a 100644 --- a/packages/concordia-contracts/contracts/PostVoting.sol +++ b/packages/concordia-contracts/contracts/PostVoting.sol @@ -70,11 +70,13 @@ contract PostVoting { } function vote(uint postID, Option option) private { - require(forum.hasUserSignedUp(msg.sender), forum.USER_HAS_NOT_SIGNED_UP()); + address voter = msg.sender; + require(forum.hasUserSignedUp(voter), forum.USER_HAS_NOT_SIGNED_UP()); require(forum.postExists(postID), forum.POST_DOES_NOT_EXIST()); + address postAuthor = forum.getPostAuthor(postID); + require(voter != postAuthor, "Post's author cannot vote for it."); PostBallot storage postBallot = postBallots[postID]; - address voter = msg.sender; Option prevOption = postBallot.votes[voter]; if (prevOption == option) From da5311afea9a22aab241b9d2b553e5f44d2665fd Mon Sep 17 00:00:00 2001 From: apostolof Date: Sun, 7 Feb 2021 00:06:22 +0200 Subject: [PATCH 6/7] refactor: remove awaits, fix lint issues, add env vars for orbitdb path --- packages/concordia-pinner/.eslintrc.js | 60 ++ packages/concordia-pinner/package.json | 2 + packages/concordia-pinner/src/app.js | 94 +-- packages/concordia-pinner/src/constants.js | 12 +- packages/concordia-pinner/src/index.js | 106 ++-- .../src/options/ipfsOptions.js | 35 +- .../src/options/libp2pBundle.js | 140 +++-- .../concordia-pinner/src/utils/orbitUtils.js | 75 ++- yarn.lock | 558 ++++++++++++++---- 9 files changed, 743 insertions(+), 339 deletions(-) create mode 100755 packages/concordia-pinner/.eslintrc.js diff --git a/packages/concordia-pinner/.eslintrc.js b/packages/concordia-pinner/.eslintrc.js new file mode 100755 index 0000000..9625123 --- /dev/null +++ b/packages/concordia-pinner/.eslintrc.js @@ -0,0 +1,60 @@ +module.exports = { + env: { + browser: true, + es6: true, + jest: true, + }, + extends: [ + 'plugin:react/recommended', + 'airbnb', + ], + globals: { + Atomics: 'readonly', + SharedArrayBuffer: 'readonly', + }, + parser: 'babel-eslint', + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + ecmaVersion: 2018, + sourceType: 'module', + }, + plugins: [ + 'react', + 'react-hooks', + ], + rules: { + 'react/jsx-props-no-spreading': 'off', + 'import/extensions': 'off', + 'react/jsx-indent': [ + 'error', + 4, + { + checkAttributes: true, + indentLogicalExpressions: true, + }, + ], + 'react/require-default-props': 'off', + 'react/prop-types': 'off', + 'react-hooks/rules-of-hooks': 'error', + 'react-hooks/exhaustive-deps': 'error', + 'max-len': ['warn', { code: 120, tabWidth: 4 }], + 'no-unused-vars': 'warn', + 'no-console': 'off', + 'no-shadow': 'warn', + 'no-multi-str': 'warn', + 'jsx-a11y/label-has-associated-control': [2, { + labelAttributes: ['label'], + controlComponents: ['Input'], + depth: 3, + }], + }, + settings: { + 'import/resolver': { + node: { + extensions: ['.js', '.jsx'], + }, + }, + }, +}; diff --git a/packages/concordia-pinner/package.json b/packages/concordia-pinner/package.json index 0b7b81d..65fa4f8 100644 --- a/packages/concordia-pinner/package.json +++ b/packages/concordia-pinner/package.json @@ -11,6 +11,8 @@ "license": "MIT", "dependencies": { "@ezerous/eth-identity-provider": "~0.1.2", + "concordia-app": "~0.1.0", + "concordia-contracts": "~0.1.0", "esm": "~3.2.25", "express": "^4.17.1", "ipfs": "~0.52.1", diff --git a/packages/concordia-pinner/src/app.js b/packages/concordia-pinner/src/app.js index cbf9748..f0eb924 100644 --- a/packages/concordia-pinner/src/app.js +++ b/packages/concordia-pinner/src/app.js @@ -1,57 +1,61 @@ import express from 'express'; import _ from 'lodash'; import isReachable from 'is-reachable'; - import { API_PORT, RENDEZVOUS_URL, WEB3_PROVIDER_URL } from './constants'; const POLLING_INTERVAL = 1000; -let app; -let responseBody = { - ipfs:{id:"", localAddresses:[], peers:[], totalPeers:0, repoStats:{}}, - orbit:{identity:{}, databases:[]}, - web3:{url:WEB3_PROVIDER_URL, reachable: false}, - rendezvous:{url:RENDEZVOUS_URL, reachable: false}, - timestamp:0 +const responseBody = { + ipfs: { + id: '', localAddresses: [], peers: [], totalPeers: 0, repoStats: {}, + }, + orbit: { identity: {}, databases: [] }, + web3: { url: WEB3_PROVIDER_URL, reachable: false }, + rendezvous: { url: RENDEZVOUS_URL, reachable: false }, + timestamp: 0, }; -export function startAPI(orbit){ - app = express(); - app.get('/', async (req, res) => { - res.send(responseBody); - }); +async function getStats(orbit) { + try { + // eslint-disable-next-line no-underscore-dangle + const ipfs = orbit._ipfs; + const { id } = await ipfs.id(); + const peers = await ipfs.swarm.peers(); + const localAddresses = await ipfs.swarm.localAddrs(); + const repoStats = await ipfs.stats.repo(); + const uniquePeers = _.uniqBy(peers, 'peer'); + const orbitIdentity = orbit.identity; + const databases = Object.keys(orbit.stores); + const isWeb3Reachable = await isReachable(WEB3_PROVIDER_URL); + const isRendezvousReachable = await isReachable(RENDEZVOUS_URL); + const timestamp = +new Date(); - app.listen(API_PORT, () => { - console.log(`Pinner API at http://localhost:${API_PORT}!`); - }); - setInterval(getStats, POLLING_INTERVAL, orbit); + responseBody.ipfs.id = id; + responseBody.ipfs.peers = uniquePeers; + responseBody.ipfs.totalPeers = uniquePeers.length; + responseBody.ipfs.localAddresses = localAddresses; + responseBody.ipfs.repoStats = repoStats; + responseBody.orbit.identity = orbitIdentity; + responseBody.orbit.databases = databases; + responseBody.web3.reachable = isWeb3Reachable; + responseBody.rendezvous.reachable = isRendezvousReachable; + responseBody.timestamp = timestamp; + } catch (err) { + console.error('Error while getting stats:', err); + } } -async function getStats(orbit) { - try { - const ipfs = orbit._ipfs; - const {id} = await ipfs.id(); - const peers = await ipfs.swarm.peers(); - const localAddresses = await ipfs.swarm.localAddrs(); - const repoStats = await ipfs.stats.repo(); - const uniquePeers = _.uniqBy(peers, 'peer'); - const orbitIdentity = orbit.identity; - const databases = Object.keys(orbit.stores); - const isWeb3Reachable = await isReachable(WEB3_PROVIDER_URL); - const isRendezvousReachable = await isReachable(RENDEZVOUS_URL); - const timestamp = + new Date(); - - responseBody.ipfs.id = id; - responseBody.ipfs.peers = uniquePeers; - responseBody.ipfs.totalPeers = uniquePeers.length; - responseBody.ipfs.localAddresses = localAddresses; - responseBody.ipfs.repoStats = repoStats; - responseBody.orbit.identity = orbitIdentity; - responseBody.orbit.databases = databases; - responseBody.web3.reachable = isWeb3Reachable; - responseBody.rendezvous.reachable = isRendezvousReachable; - responseBody.timestamp = timestamp; - } catch (err) { - console.error('Error while getting stats:', err) - } -} +const startAPI = (orbit) => { + const app = express(); + app.get('/', async (req, res) => { + res.send(responseBody); + }); + + app.listen(API_PORT, () => { + console.log(`Pinner API at http://localhost:${API_PORT}!`); + }); + + setInterval(getStats, POLLING_INTERVAL, orbit); +}; + +export default startAPI; diff --git a/packages/concordia-pinner/src/constants.js b/packages/concordia-pinner/src/constants.js index 5acb7f8..e837f85 100644 --- a/packages/concordia-pinner/src/constants.js +++ b/packages/concordia-pinner/src/constants.js @@ -1,13 +1,17 @@ -import breezeOptions, {RENDEZVOUS_URL} from 'concordia-app/src/options/breezeOptions'; +import breezeOptions, { RENDEZVOUS_URL } from 'concordia-app/src/options/breezeOptions'; import { WEB3_HOST_DEFAULT, WEB3_PORT_DEFAULT } from 'concordia-app/src/constants/configuration/defaults'; +import path from 'path'; + const { WEB3_HOST, WEB3_PORT } = process.env; const API_PORT = process.env.PINNER_API_PORT || 4444; const WEB3_PROVIDER_URL = (WEB3_HOST !== undefined && WEB3_PORT !== undefined) - ? `ws://${WEB3_HOST}:${WEB3_PORT}` - : `ws://${WEB3_HOST_DEFAULT}:${WEB3_PORT_DEFAULT}`; + ? `ws://${WEB3_HOST}:${WEB3_PORT}` + : `ws://${WEB3_HOST_DEFAULT}:${WEB3_PORT_DEFAULT}`; export const swarmAddresses = breezeOptions.ipfs.config.Addresses.Swarm; -export {API_PORT, WEB3_PROVIDER_URL, RENDEZVOUS_URL}; +export const ORBIT_DIRECTORY_DEFAULT = path.join(__dirname, '..', 'orbitdb'); + +export { API_PORT, WEB3_PROVIDER_URL, RENDEZVOUS_URL }; diff --git a/packages/concordia-pinner/src/index.js b/packages/concordia-pinner/src/index.js index 2dcc90a..57566b8 100644 --- a/packages/concordia-pinner/src/index.js +++ b/packages/concordia-pinner/src/index.js @@ -1,60 +1,80 @@ import Web3 from 'web3'; import Contract from 'web3-eth-contract'; import IPFS from 'ipfs'; -import { forumContract } from 'concordia-contracts'; +import { contracts } from 'concordia-contracts'; +import { FORUM_CONTRACT } from 'concordia-app/src/constants/contracts/ContractNames'; import { createOrbitInstance, getPeerDatabases, openKVDBs } from './utils/orbitUtils'; import ipfsOptions from './options/ipfsOptions'; import { WEB3_PROVIDER_URL } from './constants'; -import { startAPI } from './app'; +import startAPI from './app'; -process.on('unhandledRejection', error => { +process.on('unhandledRejection', (error) => { // This happens when attempting to initialize without any available Swarm addresses (e.g. Rendezvous) - if(error.code === 'ERR_NO_VALID_ADDRESSES'){ + if (error.code === 'ERR_NO_VALID_ADDRESSES') { console.error('unhandledRejection', error.message); process.exit(1); } + + // Don't swallow other errors + console.error(error); + throw error; }); -async function main () { +const getDeployedContract = async (web3) => { + const forumContract = contracts.find((contract) => contract.contractName === FORUM_CONTRACT); + + return web3.eth.net.getId() + .then((networkId) => forumContract.networks[networkId].address) + .then((contractAddress) => { + Contract.setProvider(WEB3_PROVIDER_URL); + const contract = new Contract(forumContract.abi, contractAddress); + + return { contract, contractAddress }; + }); +}; + +// Open & replicate databases of existing users +const openExistingUsersDatabases = async (contract, orbit) => contract.methods.getUserAddresses().call() + .then((userAddresses) => getPeerDatabases(orbit, userAddresses)) + .then((peerDBs) => openKVDBs(orbit, peerDBs)); + +const handleWeb3LogEvent = (web3, eventJsonInterface, orbit) => (error, result) => { + if (!error) { + const eventObj = web3.eth.abi.decodeLog( + eventJsonInterface.inputs, + result.data, + result.topics.slice(1), + ); + const userAddress = eventObj[1]; + console.log('User signed up:', userAddress); + getPeerDatabases(orbit, [userAddress]) + .then((peerDBs) => openKVDBs(orbit, peerDBs)); + } +}; + +const main = async () => { console.log('Initializing...'); const web3 = new Web3(new Web3.providers.WebsocketProvider(WEB3_PROVIDER_URL)); - const networkId = await web3.eth.net.getId(); - - const contractAddress = forumContract.networks[networkId].address; - - Contract.setProvider(WEB3_PROVIDER_URL); - const contract = new Contract(forumContract.abi, contractAddress); - - const ipfs = await IPFS.create(ipfsOptions); - const orbit = await createOrbitInstance(ipfs, contractAddress); - - // Open & replicate databases of existing users - const userAddresses = await contract.methods.getUserAddresses().call(); - const peerDBs = await getPeerDatabases(orbit, userAddresses); - await openKVDBs(orbit, peerDBs); - - // Listen for new users and subscribe to their databases - const eventJsonInterface = web3.utils._.find( - contract._jsonInterface, - obj => obj.name === "UserSignedUp" && obj.type === 'event' - ); - web3.eth.subscribe('logs', { - address: contractAddress, - topics: [eventJsonInterface.signature] - }, function(error, result){ - if (!error) { - const eventObj = web3.eth.abi.decodeLog( - eventJsonInterface.inputs, - result.data, - result.topics.slice(1) - ) - const userAddress = eventObj[1]; - console.log(`User signed up:`, userAddress); - getPeerDatabases(orbit, [userAddress]).then(peerDBs => openKVDBs(orbit, peerDBs)); - } - }); - - startAPI(orbit); -} + + getDeployedContract(web3) + .then(({ contract, contractAddress }) => IPFS.create(ipfsOptions) + .then((ipfs) => createOrbitInstance(ipfs, contractAddress)) + .then((orbit) => openExistingUsersDatabases(contract, orbit) + .then(() => { + // Listen for new users and subscribe to their databases + const eventJsonInterface = web3.utils._.find( + // eslint-disable-next-line no-underscore-dangle + contract._jsonInterface, + (obj) => obj.name === 'UserSignedUp' && obj.type === 'event', + ); + + web3.eth.subscribe('logs', { + address: contractAddress, + topics: [eventJsonInterface.signature], + }, handleWeb3LogEvent(web3, eventJsonInterface, orbit)); + + startAPI(orbit); + }))); +}; main(); diff --git a/packages/concordia-pinner/src/options/ipfsOptions.js b/packages/concordia-pinner/src/options/ipfsOptions.js index 26e0669..b25b5e6 100644 --- a/packages/concordia-pinner/src/options/ipfsOptions.js +++ b/packages/concordia-pinner/src/options/ipfsOptions.js @@ -1,21 +1,22 @@ -import libp2pBundle from './libp2pBundle' +import libp2pBundle from './libp2pBundle'; import { swarmAddresses } from '../constants'; export default { - repo: 'ipfs', - config: { - Addresses: { - Swarm: swarmAddresses - }, + repo: 'ipfs', + config: { + Profile: 'server', + Addresses: { + Swarm: swarmAddresses, }, - libp2p: libp2pBundle, - EXPERIMENTAL: { - pubsub: true, - }, - preload: { - enabled: false, - }, - init: { - emptyRepo: true, - }, -} + }, + libp2p: libp2pBundle, + EXPERIMENTAL: { + pubsub: true, + }, + preload: { + enabled: false, + }, + init: { + emptyRepo: true, + }, +}; diff --git a/packages/concordia-pinner/src/options/libp2pBundle.js b/packages/concordia-pinner/src/options/libp2pBundle.js index e797859..4de108b 100644 --- a/packages/concordia-pinner/src/options/libp2pBundle.js +++ b/packages/concordia-pinner/src/options/libp2pBundle.js @@ -10,83 +10,81 @@ import { NOISE } from 'libp2p-noise'; import { swarmAddresses } from '../constants'; // See also: https://github.com/libp2p/js-libp2p/blob/master/doc/CONFIGURATION.md -export default (opts) => { - return new Libp2p({ - peerId: opts.peerId, - addresses: { - listen: swarmAddresses - }, - connectionManager: { - minPeers: 25, - maxPeers: 100, - pollInterval: 5000 - }, - modules: { - transport: [ - WebrtcStar - ], - streamMuxer: [ - MPLEX - ], - connEncryption: [ - NOISE - ], - peerDiscovery: [ - MulticastDNS, - Bootstrap - ], - dht: KadDHT, - pubsub: Gossipsub - }, - config: { - transport: { - [WebrtcStar.prototype[Symbol.toStringTag]]: { - wrtc - } +export default (opts) => new Libp2p({ + peerId: opts.peerId, + addresses: { + listen: swarmAddresses, + }, + connectionManager: { + minPeers: 25, + maxPeers: 100, + pollInterval: 5000, + }, + modules: { + transport: [ + WebrtcStar, + ], + streamMuxer: [ + MPLEX, + ], + connEncryption: [ + NOISE, + ], + peerDiscovery: [ + MulticastDNS, + Bootstrap, + ], + dht: KadDHT, + pubsub: Gossipsub, + }, + config: { + transport: { + [WebrtcStar.prototype[Symbol.toStringTag]]: { + wrtc, }, - peerDiscovery: { - autoDial: true, - mdns: { - enabled: true, - interval: 10000 - }, - bootstrap: { - enabled: true, - interval: 30e3, - list: opts.config.Bootstrap - } + }, + peerDiscovery: { + autoDial: true, + mdns: { + enabled: true, + interval: 10000, }, - relay: { + bootstrap: { enabled: true, - hop: { - enabled: true, - active: true - } + interval: 30e3, + list: opts.config.Bootstrap, }, - dht: { + }, + relay: { + enabled: true, + hop: { enabled: true, - kBucketSize: 20, - randomWalk: { - enabled: true, - interval: 10e3, - timeout: 2e3 - } + active: true, }, - pubsub: { + }, + dht: { + enabled: true, + kBucketSize: 20, + randomWalk: { enabled: true, - emitself: true - } + interval: 10e3, + timeout: 2e3, + }, }, - metrics: { + pubsub: { enabled: true, - computeThrottleMaxQueueSize: 1000, - computeThrottleTimeout: 2000, - movingAverageIntervals: [ - 60 * 1000, // 1 minute - 5 * 60 * 1000, // 5 minutes - 15 * 60 * 1000 // 15 minutes - ], - maxOldPeersRetention: 50 - } - }) -} + emitself: true, + }, + }, + metrics: { + enabled: true, + computeThrottleMaxQueueSize: 1000, + computeThrottleTimeout: 2000, + movingAverageIntervals: [ + 60 * 1000, // 1 minute + 5 * 60 * 1000, // 5 minutes + 15 * 60 * 1000, // 15 minutes + ], + maxOldPeersRetention: 50, + }, +}); diff --git a/packages/concordia-pinner/src/utils/orbitUtils.js b/packages/concordia-pinner/src/utils/orbitUtils.js index f3c024d..71f47bf 100644 --- a/packages/concordia-pinner/src/utils/orbitUtils.js +++ b/packages/concordia-pinner/src/utils/orbitUtils.js @@ -2,46 +2,45 @@ import OrbitDB from 'orbit-db'; import Identities from 'orbit-db-identity-provider'; import { EthereumContractIdentityProvider } from '@ezerous/eth-identity-provider'; import Web3 from 'web3'; - -export async function createOrbitInstance(ipfs, contractAddress){ - Identities.addIdentityProvider(EthereumContractIdentityProvider); - - EthereumContractIdentityProvider.setWeb3(new Web3()); // We need a fully-featured new Web3 for signature verification - EthereumContractIdentityProvider.setContractAddress(contractAddress); - - return await OrbitDB.createInstance(ipfs); -} - -export async function getPeerDatabases(orbit, userAddresses) { - const peerDBs = []; - for (const userAddress of userAddresses) { - peerDBs.push(await determineKVAddress({ orbit, dbName:'user', userAddress })); - peerDBs.push(await determineKVAddress({ orbit, dbName:'posts', userAddress })); - peerDBs.push(await determineKVAddress({ orbit, dbName:'topics', userAddress })); - } - return peerDBs; -} - -export async function openKVDBs(orbit, databases) { - for (const db of databases){ - const store = await orbit.keyvalue(db); - store.events.on('replicated', (address) => console.log(`Replicated ${address}`)); - console.log(`Opened ${db}`); - } -} +import { ORBIT_DIRECTORY_DEFAULT } from '../constants'; // TODO: share code below with frontend (?) -async function determineDBAddress({ - orbit, dbName, type, identityId, -}) { - const ipfsMultihash = (await orbit.determineAddress(dbName, type, { - accessController: { write: [identityId] }, - })).root; +const determineDBAddress = async ({ + orbit, dbName, type, identityId, +}) => orbit.determineAddress(dbName, type, { accessController: { write: [identityId] } }) + .then((orbitAddress) => { + const ipfsMultihash = orbitAddress.root; return `/orbitdb/${ipfsMultihash}/${dbName}`; -} + }); + +const determineKVAddress = async ({ orbit, dbName, userAddress }) => determineDBAddress({ + orbit, dbName, type: 'keyvalue', identityId: userAddress + EthereumContractIdentityProvider.contractAddress, +}); + +export const createOrbitInstance = async (ipfs, contractAddress) => { + Identities.addIdentityProvider(EthereumContractIdentityProvider); + + EthereumContractIdentityProvider.setWeb3(new Web3()); // We need a fully-featured new Web3 for signature verification + EthereumContractIdentityProvider.setContractAddress(contractAddress); + + const ORBIT_DIRECTORY = process.env.ORBIT_DIRECTORY || ORBIT_DIRECTORY_DEFAULT; + + return OrbitDB.createInstance(ipfs, { directory: ORBIT_DIRECTORY }); +}; + +export const getPeerDatabases = async (orbit, userAddresses) => Promise.all(userAddresses + .flatMap((userAddress) => [ + determineKVAddress({ orbit, dbName: 'user', userAddress }), + determineKVAddress({ orbit, dbName: 'posts', userAddress }), + determineKVAddress({ orbit, dbName: 'topics', userAddress }), + ])); -async function determineKVAddress({ orbit, dbName, userAddress }) { - return determineDBAddress({ - orbit, dbName, type: 'keyvalue', identityId: userAddress + EthereumContractIdentityProvider.contractAddress, +export const openKVDBs = async (orbit, databases) => { + databases + .forEach((database) => { + orbit + .keyvalue(database) + .then((store) => store.events.on('replicated', (address) => console.log(`Replicated ${address}`))); + console.log(`Opened ${database}`); }); -} +}; diff --git a/yarn.lock b/yarn.lock index 5123b75..33dc661 100644 --- a/yarn.lock +++ b/yarn.lock @@ -77,9 +77,9 @@ source-map "^0.5.0" "@babel/generator@^7.12.13", "@babel/generator@^7.4.0", "@babel/generator@^7.9.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.13.tgz#5f6ebe6c85db99886db2d7b044409196f872a503" - integrity sha512-9qQ8Fgo8HaSvHEt6A5+BATP7XktD/AdAnObUeTRz5/e2y3kbrxZgz32qUJJsdmwUvBJzF4AeV21nGTNwv05Mpw== + version "7.12.15" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.15.tgz#4617b5d0b25cc572474cc1aafee1edeaf9b5368f" + integrity sha512-6F2xHxBiFXWNSGb7vyCUTBF8RCLY66rS0zEPcP8t/nQyXjha5EuK4z7H5o7fWG8B4M7y6mqVWq1J+1PuwRhecQ== dependencies: "@babel/types" "^7.12.13" jsesc "^2.5.1" @@ -279,9 +279,9 @@ js-tokens "^4.0.0" "@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.9.0": - version "7.12.14" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.14.tgz#4adb7c5eef1d437ef965ad1569cd826db8c11dc9" - integrity sha512-xcfxDq3OrBnDsA/Z8eK5/2iPcLD8qbOaSSfOw4RA6jp4i7e6dEQ7+wTwxItEwzcXPQcsry5nZk96gmVPKletjQ== + version "7.12.15" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.15.tgz#2b20de7f0b4b332d9b119dd9c33409c538b8aacf" + integrity sha512-AQBOU2Z9kWwSZMd6lNjCX0GUgFonL1wAM1db8L8PMk9UDaGsRCArBkU4Sc+UCM3AE4hjbXx+h58Lb3QT4oRmrA== "@babel/plugin-proposal-async-generator-functions@^7.12.13", "@babel/plugin-proposal-async-generator-functions@^7.8.3": version "7.12.13" @@ -1148,10 +1148,10 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" -"@ethersproject/abi@5.0.11", "@ethersproject/abi@^5.0.10": - version "5.0.11" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.11.tgz#d3b6fd955d3172214603d4d123055b3b0b06376b" - integrity sha512-ibZswQsjdFuLSfY2lbRTZM2Uk+ci7tp+mjVK0kjxVol2V32cb7va1r6B4AJU/Ac/VTstCjxtn0KKMfbkPc002w== +"@ethersproject/abi@5.0.12", "@ethersproject/abi@^5.0.10": + version "5.0.12" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.12.tgz#9aebe6aedc05ce45bb6c41b06d80bd195b7de77c" + integrity sha512-Ujr/3bwyYYjXLDQfebeiiTuvOw9XtUKM8av6YkoBeMXyGQM9GkjrQlwJMNwGTmqjATH/ZNbRgCh98GjOLiIB1Q== dependencies: "@ethersproject/address" "^5.0.9" "@ethersproject/bignumber" "^5.0.13" @@ -1546,9 +1546,9 @@ react-is "^16.6.3" "@hapi/accept@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@hapi/accept/-/accept-5.0.1.tgz#068553e867f0f63225a506ed74e899441af53e10" - integrity sha512-fMr4d7zLzsAXo28PRRQPXR1o2Wmu+6z+VY1UzDp0iFo13Twj8WePakwXBiqn3E1aAlTpSNzCXdnnQXFhst8h8Q== + version "5.0.2" + resolved "https://registry.yarnpkg.com/@hapi/accept/-/accept-5.0.2.tgz#ab7043b037e68b722f93f376afb05e85c0699523" + integrity sha512-CmzBx/bXUR8451fnZRuZAJRlzgm0Jgu5dltTX/bszmR2lheb9BpyN47Q1RbaGTsvFzn0PXAEs+lXDKfshccYZw== dependencies: "@hapi/boom" "9.x.x" "@hapi/hoek" "9.x.x" @@ -1987,6 +1987,18 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^13.0.0" +"@motrix/nat-api@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@motrix/nat-api/-/nat-api-0.3.1.tgz#de18e7101cc6ed82e9e1e7b5720cb2b40f490246" + integrity sha512-mUsW8BlSK4bE5kjC5H4oQPjnXXuiRtE2V26tzW/AOroXl5CuhMEr9EDrr+wUFvDHlDwK4B0uSOBa8yILr6AfbQ== + dependencies: + async "^3.2.0" + debug "^4.1.1" + default-gateway "^6.0.1" + request "^2.88.2" + unordered-array-remove "^1.0.2" + xml2js "^0.4.23" + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -2005,10 +2017,10 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== -"@openzeppelin/contracts@~3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.2.0.tgz#3e6b3a7662d8ed64271ade96ef42655db983fd9d" - integrity sha512-bUOmkSoPkjnUyMiKo6RYnb0VHBk5D9KKDAgNLzF41aqAM3TeE0yGdFF5dVRcV60pZdJLlyFT/jjXIZCWyyEzAQ== +"@openzeppelin/contracts@~3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.3.0.tgz#ffdb693c5c349fc33bba420248dd3ac0a2d7c408" + integrity sha512-AemZEsQYtUp1WRkcmZm1div5ORfTpLquLaziCIrSagjxyKdmObxuaY1yjQ5SHFMctR8rLwp706NXTbiIRJg7pw== "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" @@ -2152,6 +2164,11 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== +"@sindresorhus/is@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.0.0.tgz#2ff674e9611b45b528896d820d3d7a812de2f0e4" + integrity sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ== + "@sinonjs/commons@^1.6.0", "@sinonjs/commons@^1.7.0", "@sinonjs/commons@^1.8.1": version "1.8.2" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.2.tgz#858f5c4b48d80778fde4b9d541f27edc0d56488b" @@ -2295,6 +2312,13 @@ dependencies: defer-to-connect "^1.0.1" +"@szmarczak/http-timer@^4.0.5": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.5.tgz#bfbd50211e9dfa51ba07da58a14cdfd333205152" + integrity sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ== + dependencies: + defer-to-connect "^2.0.0" + "@tokenizer/token@^0.1.1": version "0.1.1" resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.1.1.tgz#f0d92c12f87079ddfd1b29f614758b9696bc29e3" @@ -2347,6 +2371,16 @@ dependencies: "@types/node" "*" +"@types/cacheable-request@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.1.tgz#5d22f3dded1fd3a84c0bbeb5039a7419c2c91976" + integrity sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "*" + "@types/node" "*" + "@types/responselike" "*" + "@types/debug@^4.1.5": version "4.1.5" resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.5.tgz#b14efa8852b7768d898906613c23f688713e02cd" @@ -2365,6 +2399,11 @@ "@types/minimatch" "*" "@types/node" "*" +"@types/http-cache-semantics@*": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz#9140779736aa2655635ee756e2467d787cfe8a2a" + integrity sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A== + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" @@ -2395,6 +2434,13 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= +"@types/keyv@*": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.1.tgz#e45a45324fca9dab716ab1230ee249c9fb52cfa7" + integrity sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw== + dependencies: + "@types/node" "*" + "@types/long@^4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9" @@ -2413,19 +2459,19 @@ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*": - version "14.14.22" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.22.tgz#0d29f382472c4ccf3bd96ff0ce47daf5b7b84b18" - integrity sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw== + version "14.14.25" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.25.tgz#15967a7b577ff81383f9b888aa6705d43fbbae93" + integrity sha512-EPpXLOVqDvisVxtlbvzfyqSsFeQxltFbluZNRndIb8tr9KiBnYNLzrc1N3pyKUCww2RNrfHDViqDWWE1LCJQtQ== "@types/node@^12.12.6": - version "12.19.15" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.15.tgz#0de7e978fb43db62da369db18ea088a63673c182" - integrity sha512-lowukE3GUI+VSYSu6VcBXl14d61Rp5hA1D+61r16qnwC0lYNSqdxcvRh0pswejorHfS+HgwBasM8jLXz0/aOsw== + version "12.19.16" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.16.tgz#15753af35cbef636182d8d8ca55b37c8583cecb3" + integrity sha512-7xHmXm/QJ7cbK2laF+YYD7gb5MggHIIQwqyjin3bpEGiSuvScMQ5JZZXPvRipi1MwckTQbJZROMns/JxdnIL1Q== "@types/node@^13.7.0": - version "13.13.40" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.40.tgz#f655ef327362cc83912f2e69336ddc62a24a9f88" - integrity sha512-eKaRo87lu1yAXrzEJl0zcJxfUMDT5/mZalFyOkT44rnQps41eS2pfWzbaulSPpQLFNy29bFqn+Y5lOTL8ATlEQ== + version "13.13.41" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.41.tgz#045a4981318d31a581650ce70f340a32c3461198" + integrity sha512-qLT9IvHiXJfdrje9VmsLzun7cQ65obsBTmtU3EOnCSLFOoSHx1hpiRHoBnpdbyFqnzqdUUIv81JcEJQCB8un9g== "@types/parse-json@^4.0.0": version "4.0.0" @@ -2452,6 +2498,18 @@ "@types/node" "*" safe-buffer "*" +"@types/responselike@*", "@types/responselike@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" + integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + dependencies: + "@types/node" "*" + +"@types/retry@^0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== + "@types/secp256k1@^4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.1.tgz#fb3aa61a1848ad97d7425ff9dcba784549fca5a4" @@ -2822,7 +2880,7 @@ after@0.8.2: resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= -aggregate-error@^3.0.0, aggregate-error@^3.0.1: +aggregate-error@^3.0.0, aggregate-error@^3.0.1, aggregate-error@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== @@ -3148,6 +3206,11 @@ arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + asap@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" @@ -3240,6 +3303,11 @@ async@^2.6.1, async@^2.6.2: dependencies: lodash "^4.17.14" +async@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" + integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -3570,9 +3638,9 @@ bip66@^1.1.5: safe-buffer "^5.0.1" bl@^4.0.0, bl@^4.0.1, bl@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489" - integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg== + version "4.0.4" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.4.tgz#f4fda39f81a811d0df6368c1ed91dae499d1c900" + integrity sha512-7tdr4EpSd7jJ6tuQ21vu2ke8w7pNEstzj1O8wwq6sNNzO3UDi5MA8Gny/gquCj7r2C6fHudg8tKRGyjRgmvNxQ== dependencies: buffer "^5.5.0" inherits "^2.0.4" @@ -4005,6 +4073,11 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + cacheable-request@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" @@ -4018,6 +4091,19 @@ cacheable-request@^6.0.0: normalize-url "^4.1.0" responselike "^1.0.2" +cacheable-request@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.1.tgz#062031c2856232782ed694a257fa35da93942a58" + integrity sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^2.0.0" + call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -4089,9 +4175,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001181: - version "1.0.30001183" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001183.tgz#7a57ba9d6584119bb5f2bc76d3cc47ba9356b3e2" - integrity sha512-7JkwTEE1hlRKETbCFd8HDZeLiQIUcl8rC6JgNjvHCNaxOeNmQ9V4LvQXRUsKIV2CC73qKxljwVhToaA3kLRqTw== + version "1.0.30001185" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001185.tgz#3482a407d261da04393e2f0d61eefbc53be43b95" + integrity sha512-Fpi4kVNtNvJ15H0F6vwmXtb3tukv3Zg3qhKkOGUq7KJ1J6b9kf4dnNgtEAFXhRsJo0gNj9W60+wBvn0JcTvdTg== capture-exit@^2.0.0: version "2.0.0" @@ -4132,9 +4218,9 @@ chai-checkmark@^1.0.1: integrity sha1-n7s8mtkQHwl+8ogyjTD0In10//s= chai@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5" - integrity sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw== + version "4.3.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.0.tgz#5523a5faf7f819c8a92480d70a8cccbadacfc25f" + integrity sha512-/BFd2J30EcOwmdOgXvVsmM48l0Br0nmZPlO0uOW4XKh6kpsUumRXBgPV+IlaqFaqr9cYbeoZAM1Npx0i4A+aiA== dependencies: assertion-error "^1.1.0" check-error "^1.0.2" @@ -5215,6 +5301,13 @@ decompress-response@^3.2.0, decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + deep-eql@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" @@ -5257,11 +5350,23 @@ default-gateway@^4.2.0: execa "^1.0.0" ip-regex "^2.1.0" +default-gateway@^6.0.1: + version "6.0.3" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== + dependencies: + execa "^5.0.0" + defer-to-connect@^1.0.1: version "1.1.3" resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== +defer-to-connect@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.0.tgz#83d6b199db041593ac84d781b5222308ccf4c2c1" + integrity sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg== + deferred-leveldown@~5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.1.0.tgz#c21e40641a8e48530255a4ad31371cc7fe76b332" @@ -5671,9 +5776,9 @@ electron-fetch@^1.7.2: encoding "^0.1.13" electron-to-chromium@^1.3.378, electron-to-chromium@^1.3.649: - version "1.3.652" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.652.tgz#9465d884d609acffd131ba71096de7bfabd63670" - integrity sha512-85J5D0Ksxjq2MIHfgwOURRej72UMlexbaa7t+oKTJan3Pa/RBE8vJ4/JzwaQjLCElPvd0XeLWi7+xYTVrq96aA== + version "1.3.657" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.657.tgz#a9c307f2612681245738bb8d36d997cbb568d481" + integrity sha512-/9ROOyvEflEbaZFUeGofD+Tqs/WynbSTbNgNF+/TJJxH1ePD/e6VjZlDJpW3FFFd3nj5l3Hd8ki2vRwy+gyRFw== elliptic@6.5.3: version "6.5.3" @@ -5826,10 +5931,10 @@ err-code@^2.0.0, err-code@^2.0.1, err-code@^2.0.3: resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== -err-code@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-3.0.0.tgz#8d5af04379f18eeb31e9dce0ca82be8386039c23" - integrity sha512-+oiZkhFGx8PLWbQM/Noi9arR8MAs4ZLEJlzhjSsqsb5lgiSlByIt3aL8TSp/AZ8g95lIDcJeBErlERg9Q9a4ow== +err-code@^3.0.0, err-code@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-3.0.1.tgz#a444c7b992705f2b120ee320b09972eef331c920" + integrity sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA== errno@^0.1.3, errno@~0.1.1, errno@~0.1.7: version "0.1.8" @@ -6357,9 +6462,9 @@ esprima@^4.0.0, esprima@^4.0.1: integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.0.1, esquery@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" - integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== dependencies: estraverse "^5.1.0" @@ -6474,11 +6579,11 @@ ethereumjs-util@^6.0.0: rlp "^2.2.3" ethers@^5.0.8: - version "5.0.28" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.0.28.tgz#3c2a3d41b3639a427a822814870990cfcdd5e0a8" - integrity sha512-prYYCmZMGbrhP2PEXA2re5BpNPjaCP2y5gO1dh1i+fPxdkldQOk+0c0l8KlnxwUztKq4E40xpB0gyURdcAOaAg== + version "5.0.29" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.0.29.tgz#37034758b31e6545926e400ffbe7222a39e39e7b" + integrity sha512-uNMOIbr9dXzBrHwcdelYlkvkPuL8chlPE8i++aNPCCAgI4agl0e9l/FRdToqu/cCQG8uNwmJlJp2eq4wU0oAMA== dependencies: - "@ethersproject/abi" "5.0.11" + "@ethersproject/abi" "5.0.12" "@ethersproject/abstract-provider" "5.0.9" "@ethersproject/abstract-signer" "5.0.12" "@ethersproject/address" "5.0.10" @@ -6545,7 +6650,7 @@ eventemitter3@^4.0.0, eventemitter3@^4.0.4: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -events@^3.0.0, events@^3.1.0: +events@^3.0.0, events@^3.1.0, events@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== @@ -6864,9 +6969,9 @@ file-uri-to-path@1.0.0: integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== filelist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.1.tgz#f10d1a3ae86c1694808e8f20906f43d4c9132dbb" - integrity sha512-8zSK6Nu0DQIC08mUC46sWGXi+q3GGpKydAG36k+JDba6VRpkevvOWUW5a/PhShij4+vHT9M+ghgG7eM+a9JDUQ== + version "1.0.2" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.2.tgz#80202f21462d4d1c2e214119b1807c1bc0380e5b" + integrity sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ== dependencies: minimatch "^3.0.4" @@ -7230,9 +7335,9 @@ fsevents@~2.1.2: integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== fsevents@~2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.1.tgz#b209ab14c61012636c8863507edf7fb68cc54e9f" - integrity sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw== + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== function-bind@^1.1.1: version "1.1.1" @@ -7429,7 +7534,7 @@ globals@^12.1.0: dependencies: type-fest "^0.8.1" -globalthis@^1.0.0, globalthis@^1.0.1: +globalthis@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.1.tgz#40116f5d9c071f9e8fb0037654df1ab3a83b7ef9" integrity sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw== @@ -7477,6 +7582,23 @@ got@9.6.0, got@^9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" +got@^11.7.0: + version "11.8.1" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.1.tgz#df04adfaf2e782babb3daabc79139feec2f7e85d" + integrity sha512-9aYdZL+6nHmvJwHALLwKSUZ0hMwGaJGYv3hoPLPgnT8BoBXm1SjnZeky+91tfwJaDzun2s4RsBRy48IEYv2q2Q== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.1" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + got@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" @@ -7498,9 +7620,9 @@ got@^7.1.0: url-to-options "^1.0.1" graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + version "4.2.5" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.5.tgz#bc18864a6c9fc7b303f2e2abdb9155ad178fbe29" + integrity sha512-kBBSQbz2K0Nyn+31j/w36fUfxkBW9/gfwRWdUY1ULReH3iokVJgddZAFcD1D0xlgTmFxJCbUkUclAlc6/IDJkw== growl@1.10.5: version "1.10.5" @@ -7946,6 +8068,14 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.0-beta.5.2" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.0-beta.5.2.tgz#8b923deb90144aea65cf834b016a340fc98556f3" + integrity sha512-xYz9goEyBnC8XwXDTuC/MZ6t+MrKVQZOk4s7+PaDkwIsQd8IwqvM+0M6bA/2lvG8GHXcPdf+MejTUeO2LCPCeQ== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" @@ -8239,11 +8369,11 @@ interface-datastore@^2.0.0: nanoid "^3.0.2" interface-datastore@^3.0.1, interface-datastore@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/interface-datastore/-/interface-datastore-3.0.3.tgz#a994f22b5a74e91dc4575d20f32b71dcecf282ff" - integrity sha512-T7CFAoJptmFgBuVYjDAHiSlFjZRlabLBL1n/zp8bG7Xq7K3uicbHIRvKaWE2bR74IqtECdjWovdeKtZccCmV6w== + version "3.0.4" + resolved "https://registry.yarnpkg.com/interface-datastore/-/interface-datastore-3.0.4.tgz#7c02d393fb0372bc86c03de1095e15ae70912771" + integrity sha512-WEO09j/VRF866je3UXfk64GTWi0ag5mH+jbTbOYX7rkhcNnvAvYvvtysOu2vzUXaM1nBmtI9SjMpp4dqXOE+LA== dependencies: - err-code "^2.0.1" + err-code "^3.0.1" ipfs-utils "^6.0.0" iso-random-stream "^1.1.1" it-all "^1.0.2" @@ -8902,7 +9032,7 @@ ipfs-utils@^6.0.0: stream-to-it "^0.2.2" web-encoding "^1.0.6" -ipfs@~0.52.0: +ipfs@~0.52.0, ipfs@~0.52.1: version "0.52.3" resolved "https://registry.yarnpkg.com/ipfs/-/ipfs-0.52.3.tgz#4a1e1651da197fb8dfdcd01abd20308198059b66" integrity sha512-zCd2Ziq1GYDJizXdoAj5nof325i3mx2kzOhG6E+xdEK6FcK6kQwKendaBlQHwTbzHLqLI7ITxsepQzFWNopI2g== @@ -9375,11 +9505,30 @@ is-plain-object@~5.0.0: resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== +is-port-reachable@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-port-reachable/-/is-port-reachable-3.0.0.tgz#edf721e7d354e6e00cbeb0fc174ad89bdf6056b3" + integrity sha512-056IzLiWHdgVd6Eq1F9HtJl+cIkvi5X2MJ/A1fjQtByHkzQE1wGardnPhqrarOGDF88BOW+297X7PDvZ2vcyVg== + is-promise@~1, is-promise@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-1.0.1.tgz#31573761c057e33c2e91aab9e96da08cefbe76e5" integrity sha1-MVc3YcBX4zwukaq56W2gjO++duU= +is-reachable@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-reachable/-/is-reachable-5.0.0.tgz#caa3a4d1c6368fdafb85cdb7d1e219e5b8fded6b" + integrity sha512-frRPbdrQWEqbnF1il9Dyrf52Q40exkHdo4/grWMjHrBn4G1DKC9sbuQihgANkJPNi2eosU4AXBsrITdXmc3IQg== + dependencies: + arrify "^2.0.1" + got "^11.7.0" + is-port-reachable "^3.0.0" + p-any "^3.0.0" + p-timeout "^3.2.0" + prepend-http "^3.0.1" + router-ips "^1.0.0" + url-parse "^1.4.7" + is-regex@^1.0.4, is-regex@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" @@ -9628,6 +9777,11 @@ it-drain@^1.0.1, it-drain@^1.0.3: resolved "https://registry.yarnpkg.com/it-drain/-/it-drain-1.0.3.tgz#2a3e6e667f65f5711faedb40ffb5358927609e93" integrity sha512-KxwHBEpWW+0/EkGCOPR2MaHanvBW2A76tOC5CiitoJGLd8J56FxM6jJX3uow20v5qMidX5lnKgwH5oCIyYDszQ== +it-filter@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/it-filter/-/it-filter-1.0.1.tgz#073517f0bf7dd23afadbdbe90d97e5247cc3b9c9" + integrity sha512-emxG4SEhhk9O2TCCTBd23NDjd5641e2hAwaGBQ5jZrUAtBTjkqit5FW423fSc1H+OOQk2wBiKU4y/JrEpkxFiA== + it-first@^1.0.1, it-first@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/it-first/-/it-first-1.0.4.tgz#359f2bf216686ec7498827991dc7fd503283b32b" @@ -9690,6 +9844,13 @@ it-map@^1.0.2, it-map@^1.0.4: resolved "https://registry.yarnpkg.com/it-map/-/it-map-1.0.4.tgz#d413d2b0c3d8d9703df9e8a915ad96cb74a837ac" integrity sha512-LZgYdb89XMo8cFUp6jF0cn5j3gF7wcZnKRVFS3qHHn0bPB2rpToh2vIkTBKduZLZxRRjWx1VW/udd98x+j2ulg== +it-merge@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/it-merge/-/it-merge-1.0.0.tgz#b12310933ee79381eca2288245572a4f8d252030" + integrity sha512-bs40LMjG/9JMOcJ7pgyGLoOeWBpw28ZoMmZIk/1NCa5SUxd4elXCuadAr2qSjPiHz2GxrqoWGFAP7SePGddatw== + dependencies: + it-pushable "^1.4.0" + it-multipart@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/it-multipart/-/it-multipart-1.0.6.tgz#afe6722932e11e87108edc26f10d703410207948" @@ -9759,6 +9920,11 @@ it-reader@^2.0.0, it-reader@^2.1.0: dependencies: bl "^4.0.0" +it-take@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/it-take/-/it-take-1.0.0.tgz#2319a39d91463b4bf6151289126aa44889eda903" + integrity sha512-zfr2iAtekTGhHVWzCqqqgDnHhmzdzfCW92L0GvbaSFlvc3n2Ep/sponzmlNl2Kg39N5Py+02v+Aypc+i2c+9og== + it-tar@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/it-tar/-/it-tar-1.2.2.tgz#8d79863dad27726c781a4bcc491f53c20f2866cf" @@ -10368,6 +10534,11 @@ json-buffer@3.0.0: resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -10517,11 +10688,11 @@ just-safe-set@^2.1.0: integrity sha512-wSTg/2bQpzyivBYbWPqQgafdfxW0tr3hX9qYGDRS2ws+AXwc7tvn8ABqkp8iPQHChjj4F5JvL3t0FQLbcNuKig== k-bucket@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/k-bucket/-/k-bucket-5.0.0.tgz#ef7a401fcd4c37cd31dceaa6ae4440ca91055e01" - integrity sha512-r/q+wV/Kde62/tk+rqyttEJn6h0jR7x+incdMVSYTqK73zVxVrzJa70kJL49cIKen8XjIgUZKSvk8ktnrQbK4w== + version "5.1.0" + resolved "https://registry.yarnpkg.com/k-bucket/-/k-bucket-5.1.0.tgz#db2c9e72bd168b432e3f3e8fc092e2ccb61bff89" + integrity sha512-Fac7iINEovXIWU20GPnOMLUbjctiS+cnmyjC4zAUgvs3XPf1vo9akfCHkigftSic/jiKqKl+KA3a/vFcJbHyCg== dependencies: - randombytes "^2.0.3" + randombytes "^2.1.0" keccak@^3.0.0: version "3.0.1" @@ -10548,6 +10719,13 @@ keyv@^3.0.0: dependencies: json-buffer "3.0.0" +keyv@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.3.tgz#4f3aa98de254803cafcd2896734108daa35e4254" + integrity sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA== + dependencies: + json-buffer "3.0.1" + killable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" @@ -10793,7 +10971,7 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -libp2p-bootstrap@^0.12.1: +libp2p-bootstrap@^0.12.1, libp2p-bootstrap@~0.12.1: version "0.12.1" resolved "https://registry.yarnpkg.com/libp2p-bootstrap/-/libp2p-bootstrap-0.12.1.tgz#216322e2d682935c8ee1c7b672acf69241178c3c" integrity sha512-atHXxfxE8isHb+XKHsJ5UgFMteqfi0Xal94h+2EAJmobXcIq1mBMUeIgmkHMsaZZNwJwQxq6MKFthJngWJ8vEw== @@ -10923,6 +11101,22 @@ libp2p-gossipsub@^0.6.1: time-cache "^0.3.0" uint8arrays "^1.1.0" +libp2p-gossipsub@~0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/libp2p-gossipsub/-/libp2p-gossipsub-0.8.0.tgz#b9c961560dc02afa079790f44882854a19a94abf" + integrity sha512-nR5XGN6E5n2ukPR9aa/rtegwluxiK+vT9j5Oulp+P1h6T9vEqDvFAEe9cqA3FiT7apI5gk44SE0aZFTMpxz6EA== + dependencies: + "@types/debug" "^4.1.5" + debug "^4.1.1" + denque "^1.4.1" + err-code "^2.0.0" + it-pipe "^1.0.1" + libp2p-interfaces "^0.8.0" + peer-id "^0.14.0" + protons "^2.0.0" + time-cache "^0.3.0" + uint8arrays "^1.1.0" + libp2p-interfaces@^0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/libp2p-interfaces/-/libp2p-interfaces-0.5.2.tgz#8794f0753b26c98270d03d63d753f456c5d0a766" @@ -10989,7 +11183,7 @@ libp2p-interfaces@^0.6.0: streaming-iterables "^5.0.2" uint8arrays "^1.1.0" -libp2p-interfaces@^0.8.2, libp2p-interfaces@^0.8.3: +libp2p-interfaces@^0.8.0, libp2p-interfaces@^0.8.1, libp2p-interfaces@^0.8.2, libp2p-interfaces@^0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/libp2p-interfaces/-/libp2p-interfaces-0.8.3.tgz#6f8ec391f9f5129be4d470a58bb88e556890d2ba" integrity sha512-Q8YM2oS4gvlPOuespYRp3jZryxYF5RyuyF+SLUhwjFh3yT6HbiKcxTtMmhOEnyyRgawj0NIDdARJ7h5aUcsA5w== @@ -11023,7 +11217,7 @@ libp2p-interfaces@^0.8.2, libp2p-interfaces@^0.8.3: streaming-iterables "^5.0.4" uint8arrays "^2.0.5" -libp2p-kad-dht@^0.20.1: +libp2p-kad-dht@^0.20.1, libp2p-kad-dht@~0.20.1: version "0.20.6" resolved "https://registry.yarnpkg.com/libp2p-kad-dht/-/libp2p-kad-dht-0.20.6.tgz#18bcc903f614d3397f523a2ab8d122ef5ba3d5e0" integrity sha512-hRClzJP+NK3zBU0/pYkoDUhZcviqmPu4czFaftcl3cCGasjxSaWNEZNKsf65QwoINZD9jFrYkQuXW9/gWQwuOA== @@ -11058,7 +11252,7 @@ libp2p-kad-dht@^0.20.1: varint "^5.0.0" xor-distance "^2.0.0" -libp2p-mdns@^0.15.0: +libp2p-mdns@^0.15.0, libp2p-mdns@~0.15.0: version "0.15.0" resolved "https://registry.yarnpkg.com/libp2p-mdns/-/libp2p-mdns-0.15.0.tgz#c4e71e162ef2ea817d9d745376a1acac1271fe51" integrity sha512-wuILE+mwC6ww/0TMkR3k2h53D5Ma9TXpz0siacbsACcGukkS+mIpsvruaf9U1Uxe0F1aC8+Y+Vi5lP8C3YR9Lg== @@ -11068,7 +11262,7 @@ libp2p-mdns@^0.15.0: multicast-dns "^7.2.0" peer-id "^0.14.0" -libp2p-mplex@^0.10.0: +libp2p-mplex@^0.10.0, libp2p-mplex@~0.10.0: version "0.10.2" resolved "https://registry.yarnpkg.com/libp2p-mplex/-/libp2p-mplex-0.10.2.tgz#99f1381b43258269bab2425ff5ebd500512cacb4" integrity sha512-fNdlPTts2MmGalPTYdQtzeGeuM73je9mP+2OvB6Gdn5vP9LeutUzUV4wvD9ISDVi8Gru5BzCsIBiS3WjxQqjdw== @@ -11082,7 +11276,7 @@ libp2p-mplex@^0.10.0: it-pushable "^1.4.1" varint "^6.0.0" -libp2p-noise@^2.0.1: +libp2p-noise@^2.0.1, libp2p-noise@~2.0.1: version "2.0.4" resolved "https://registry.yarnpkg.com/libp2p-noise/-/libp2p-noise-2.0.4.tgz#dc915dd80a5158848ababdc6ad650a86537dd887" integrity sha512-BE+bf4cXii1kcJQ50ZcoVSmqt2ab76p5EyL3praDGkQznjQ6+VKUMR8yNPCbxkQ7CxM1wpUA3Jj5m6FKM9nPZA== @@ -11111,7 +11305,7 @@ libp2p-record@^0.9.0: protons "^2.0.0" uint8arrays "^1.1.0" -libp2p-tcp@^0.15.0, libp2p-tcp@^0.15.1: +libp2p-tcp@^0.15.0, libp2p-tcp@^0.15.1, libp2p-tcp@~0.15.1: version "0.15.3" resolved "https://registry.yarnpkg.com/libp2p-tcp/-/libp2p-tcp-0.15.3.tgz#dbcca2be5ff22ef5f7ebd1a403081d0360834c8c" integrity sha512-j9efQ0aAbcCmVnnF0UqWH1r+qjNc0TpC3bV+QJDxBIe6v92a8l3kZ04G/QkP3vmzDT5Z4ayzMGjrOAas8hJIBA== @@ -11125,7 +11319,7 @@ libp2p-tcp@^0.15.0, libp2p-tcp@^0.15.1: multiaddr "^8.0.0" stream-to-it "^0.2.2" -libp2p-utils@^0.2.0, libp2p-utils@^0.2.1: +libp2p-utils@^0.2.0, libp2p-utils@^0.2.1, libp2p-utils@^0.2.2: version "0.2.3" resolved "https://registry.yarnpkg.com/libp2p-utils/-/libp2p-utils-0.2.3.tgz#4eb2a59a9eda342bed73cb94553c87a63c95848a" integrity sha512-9BoMCgvJF7LJ+JVMaHtqfCqhZN4i/sx0DrY6lf9U0Rq9uUgQ9qTai2O9LXcfr1LOS3OMMeRLsKk25MMgsf7W3w== @@ -11150,7 +11344,7 @@ libp2p-webrtc-peer@^10.0.1: randombytes "^2.0.3" readable-stream "^3.4.0" -libp2p-webrtc-star@^0.20.1, libp2p-webrtc-star@~0.20.5: +libp2p-webrtc-star@^0.20.1, libp2p-webrtc-star@~0.20.2, libp2p-webrtc-star@~0.20.5: version "0.20.8" resolved "https://registry.yarnpkg.com/libp2p-webrtc-star/-/libp2p-webrtc-star-0.20.8.tgz#57a599e236704177b709580dcc429ae8f6055c54" integrity sha512-SvcPu4be/EfMXPbR3I+SemIuGNWmQiAAtUsire5M5Bomb2aSp7yeO1DKvl8+rZbhjn3YsSr8GlB+Wk9vRDm7tA== @@ -11238,6 +11432,64 @@ libp2p@^0.29.3: varint "^5.0.0" xsalsa20 "^1.0.2" +libp2p@~0.30.0: + version "0.30.7" + resolved "https://registry.yarnpkg.com/libp2p/-/libp2p-0.30.7.tgz#965fe05a9045b7614d268c4050918182d8ca81f3" + integrity sha512-W+uaMY7K9KJh9L9LFw/D2NjH63TS6skjlNRqzhG99b//IJqdNQoVWeGNGsjgMPqKu+BMngtMn+iH3+Jjz2Bk2w== + dependencies: + "@motrix/nat-api" "^0.3.1" + abort-controller "^3.0.0" + aggregate-error "^3.1.0" + any-signal "^2.1.1" + bignumber.js "^9.0.1" + cids "^1.1.5" + class-is "^1.1.0" + debug "^4.3.1" + err-code "^2.0.0" + events "^3.2.0" + hashlru "^2.3.0" + interface-datastore "^3.0.3" + ipfs-utils "^6.0.0" + it-all "^1.0.4" + it-buffer "^0.1.2" + it-drain "^1.0.3" + it-filter "^1.0.1" + it-first "^1.0.4" + it-handshake "^1.0.2" + it-length-prefixed "^3.1.0" + it-map "^1.0.4" + it-merge "1.0.0" + it-pipe "^1.1.0" + it-protocol-buffers "^0.2.0" + it-take "1.0.0" + libp2p-crypto "^0.19.0" + libp2p-interfaces "^0.8.1" + libp2p-utils "^0.2.2" + mafmt "^8.0.0" + merge-options "^3.0.4" + moving-average "^1.0.0" + multiaddr "^8.1.0" + multicodec "^2.1.0" + multihashing-async "^2.0.1" + multistream-select "^1.0.0" + mutable-proxy "^1.0.0" + node-forge "^0.10.0" + p-any "^3.0.0" + p-fifo "^1.0.0" + p-retry "^4.2.0" + p-settle "^4.0.1" + peer-id "^0.14.2" + private-ip "^2.0.0" + promisify-es6 "^1.0.3" + protons "^2.0.0" + retimer "^2.0.0" + sanitize-filename "^1.6.3" + set-delayed-interval "^1.0.0" + streaming-iterables "^5.0.2" + timeout-abort-controller "^1.1.1" + varint "^6.0.0" + xsalsa20 "^1.0.2" + lines-and-columns@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" @@ -11673,9 +11925,9 @@ microevent.ts@~0.1.1: integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== micromark@~2.11.0: - version "2.11.3" - resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.11.3.tgz#648e1e7970ea66a946cc2cbc678093ed814f29ed" - integrity sha512-oph5YYkVqR2U9OtWBcXYysZMtrdIvi8dfSeyEdr1wFr3Bk6YwI6THosX2AzKnhdps7mVUbXiqhmosu9DcA+xlQ== + version "2.11.4" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a" + integrity sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA== dependencies: debug "^4.0.0" parse-entities "^2.0.0" @@ -11756,6 +12008,11 @@ mimic-response@^1.0.0, mimic-response@^1.0.1: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" @@ -11934,15 +12191,14 @@ mock-fs@^4.1.0: integrity sha512-DD0vOdofJdoaRNtnWcrXe6RQbpHkPPmtqGq14uRX0F8ZKJ5nv89CVTYl/BZdppDxBDaV0hl75htg3abpEWlPZA== mortice@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mortice/-/mortice-2.0.0.tgz#7be171409c2115561ba3fc035e4527f9082eefde" - integrity sha512-rXcjRgv2MRhpwGHErxKcDcp5IoA9CPvPFLXmmseQYIuQ2fSVu8tsMKi/eYUXzp/HH1s6y3IID/GwRqlSglDdRA== + version "2.0.1" + resolved "https://registry.yarnpkg.com/mortice/-/mortice-2.0.1.tgz#047b83c8c57d49e90e586f1f9e7d63e1f80d4a2b" + integrity sha512-9gsXmjq+5LZmXDIoyC/crf2i/7CUwDGSBEwSEsr1i/WfKmJ6DVt38B5kg6BE/WF/1/yfGJYiB1Wyiu423iI3nQ== dependencies: - globalthis "^1.0.0" + nanoid "^3.1.20" observable-webworkers "^1.0.0" p-queue "^6.0.0" promise-timeout "^1.3.0" - shortid "^2.2.8" move-concurrently@^1.0.1: version "1.0.1" @@ -12209,11 +12465,6 @@ nano-json-stream-parser@^0.1.2: resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" integrity sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18= -nanoid@^2.1.0: - version "2.1.11" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280" - integrity sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA== - nanoid@^3.0.2, nanoid@^3.1.12, nanoid@^3.1.20, nanoid@^3.1.3: version "3.1.20" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" @@ -13139,6 +13390,14 @@ p-retry@^3.0.1: dependencies: retry "^0.12.0" +p-retry@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.3.0.tgz#a31679a66b0261a51fa6c43b19b6f4471a54021e" + integrity sha512-Pow4yaHpOiJou1QcpGcBJhGHiS4782LdDa6GhU91hlaNh3ExOOupjSJcxPQZYmUSZk3Pl2ARz/LRvW8Qu0+3mQ== + dependencies: + "@types/retry" "^0.12.0" + retry "^0.12.0" + p-series@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-series/-/p-series-1.1.0.tgz#f2d8522cdfd58b464eb9685651d465037ee3c957" @@ -14329,6 +14588,11 @@ prepend-http@^2.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= +prepend-http@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-3.0.1.tgz#3e724d58fd5867465b300bb9615009fa2f8ee3b6" + integrity sha512-BLxfZh+m6UiAiCPZFJ4+vYoL7NrRs5XgCTRrjseATAggXhdZKKxn+JUNmuVYWY23bDHgaEHodxw8mnmtVEDtHw== + prettier@^1.14.3: version "1.19.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" @@ -14357,7 +14621,7 @@ pretty-format@^24.9.0: ansi-styles "^3.2.0" react-is "^16.8.4" -private-ip@^2.1.1: +private-ip@^2.0.0, private-ip@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/private-ip/-/private-ip-2.1.1.tgz#cd4ac7481099991e211706f411aede9725c1712f" integrity sha512-csxTtREJ7254nnUF14hjOrnd/vZH78vTS5opec6IDVZRwY3omKDcNL/r+vfxFZnCRsrBWVA8B0Q95lgMGrFuZQ== @@ -14453,6 +14717,11 @@ promise@~1.3.0: dependencies: is-promise "~1" +promisify-es6@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/promisify-es6/-/promisify-es6-1.0.3.tgz#b012668c4df3c965ce13daac2b3a4d1726a96346" + integrity sha512-N9iVG+CGJsI4b4ZGazjwLnxErD2d9Pe4DPvvXSxYA9tFNu8ymXME4Qs5HIQ0LMJpNM7zj+m0NlNnNeqFpKzqnA== + prompts@^2.0.1: version "2.4.0" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" @@ -14662,6 +14931,11 @@ quick-format-unescaped@^4.0.1: resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz#437a5ea1a0b61deb7605f8ab6a8fd3858dbeb701" integrity sha512-RyYpQ6Q5/drsJyOhrWHYMWTedvjTIat+FTwv0K4yoUxzvekw2aRHMQJLlnvt8UantkZg2++bEzD9EdxXqkWf4A== +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + rabin-wasm@^0.1.1: version "0.1.4" resolved "https://registry.yarnpkg.com/rabin-wasm/-/rabin-wasm-0.1.4.tgz#062310686acfc9e05c13c7156a2339af148c78f2" @@ -14784,9 +15058,9 @@ react-dom@~16.13.1: scheduler "^0.19.1" react-error-overlay@^6.0.7: - version "6.0.8" - resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.8.tgz#474ed11d04fc6bda3af643447d85e9127ed6b5de" - integrity sha512-HvPuUQnLp5H7TouGq3kzBeioJmXms1wHy9EGjz2OURWBp4qZO6AfGEcnxts1D/CbwPLRAgTMPCEgYhA3sEM4vw== + version "6.0.9" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" + integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== react-i18next@^11.7.3: version "11.8.5" @@ -15247,7 +15521,7 @@ request-promise-native@^1.0.5: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.79.0, request@^2.87.0, request@^2.88.0: +request@^2.79.0, request@^2.87.0, request@^2.88.0, request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -15303,6 +15577,11 @@ reset@^0.1.0: resolved "https://registry.yarnpkg.com/reset/-/reset-0.1.0.tgz#9fc7314171995ae6cb0b7e58b06ce7522af4bafb" integrity sha1-n8cxQXGZWubLC35YsGznUir0uvs= +resolve-alpn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.0.0.tgz#745ad60b3d6aff4b4a48e01b8c0bdc70959e0e8c" + integrity sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA== + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -15373,6 +15652,13 @@ responselike@^1.0.2: dependencies: lowercase-keys "^1.0.0" +responselike@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723" + integrity sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw== + dependencies: + lowercase-keys "^2.0.0" + restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -15441,7 +15727,7 @@ rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3, rimraf@^2.7.1: dependencies: glob "^7.1.3" -rimraf@^3.0.2: +rimraf@^3.0.2, rimraf@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -15463,6 +15749,11 @@ rlp@^2.2.3: dependencies: bn.js "^4.11.1" +router-ips@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/router-ips/-/router-ips-1.0.0.tgz#44e00858ebebc0133d58e40b2cd8a1fbb04203f5" + integrity sha1-ROAIWOvrwBM9WOQLLNih+7BCA/U= + rsa-pem-to-jwk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/rsa-pem-to-jwk/-/rsa-pem-to-jwk-1.1.3.tgz#245e76bdb7e7234cfee7ca032d31b54c38fab98e" @@ -15569,7 +15860,7 @@ sass-loader@8.0.2: schema-utils "^2.6.1" semver "^6.3.0" -sax@^1.2.4, sax@~1.2.4: +sax@>=0.6.0, sax@^1.2.4, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== @@ -15765,6 +16056,11 @@ set-blocking@^2.0.0, set-blocking@~2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= +set-delayed-interval@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/set-delayed-interval/-/set-delayed-interval-1.0.0.tgz#1f7c065780a365f10250f8a80e2be10175ea0388" + integrity sha512-29fhAwuZlLcuBnW/EwxvLcg2D3ELX+VBDNhnavs3YYkab72qmrcSeQNVdzl8EcPPahGQXhBM6MKdPLCQGMDakw== + set-immediate-shim@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" @@ -15864,13 +16160,6 @@ shellwords@^0.1.1: resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== -shortid@^2.2.8: - version "2.2.16" - resolved "https://registry.yarnpkg.com/shortid/-/shortid-2.2.16.tgz#b742b8f0cb96406fd391c76bfc18a67a57fe5608" - integrity sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g== - dependencies: - nanoid "^2.1.0" - side-channel@^1.0.3, side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -16089,9 +16378,9 @@ solhint@~3.3.2: prettier "^1.14.3" sonic-boom@^1.0.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-1.3.0.tgz#5c77c846ce6c395dddf2eb8e8e65f9cc576f2e76" - integrity sha512-4nX6OYvOYr6R76xfQKi6cZpTO3YSWe/vd+QdIfoH0lBy0MnPkeAbb2rRWgmgADkXUeCKPwO1FZAKlAVWAadELw== + version "1.3.1" + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-1.3.1.tgz#6b990fa01f2d7c42e9a3efc90014d6e4337faccb" + integrity sha512-h214kmhZulOKwYQCC9ABv5DQBfOT5oXQ7UdIKMQXcx/F2FLBw1QchiAQJVdPV8MC80toQLd5VLdIQedf7RTEYA== dependencies: atomic-sleep "^1.0.0" flatstr "^1.0.12" @@ -16939,10 +17228,10 @@ trough@^1.0.0: resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== -truffle@~5.1.55: - version "5.1.64" - resolved "https://registry.yarnpkg.com/truffle/-/truffle-5.1.64.tgz#f89dcd3711a8c872c8c5dfd5527e49dcded4c175" - integrity sha512-qobAgDRRK8rUr6SjH8gmacp1a50XJFD2zX1tCtxdk3RXl3yCSEBxHP1srW+jPoPzL6Ua6C0vbbbjVbemrTrtAQ== +truffle@~5.1.58: + version "5.1.65" + resolved "https://registry.yarnpkg.com/truffle/-/truffle-5.1.65.tgz#2f31dc9481c74d04c4d72cfb3085f6ee9752d0d2" + integrity sha512-MT7kTrMP1tleqwEzGWj/4wKU3pIOR63cVGsrP0MgEDrXOrpM5XNHnCAp9YBrYsDXqiVPZiEK38385qoJdTk6yA== dependencies: app-module-path "^2.2.0" mocha "8.1.2" @@ -16986,9 +17275,9 @@ tslib@^2.0.3: integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== tsparticles@^1.18.10: - version "1.18.11" - resolved "https://registry.yarnpkg.com/tsparticles/-/tsparticles-1.18.11.tgz#924d74cf40656727f5df047b53c4761463a4f6e7" - integrity sha512-F5czk8foRoywWHDYDT0eZhQwCXOHz7OGhJCsoybThTUIT+nwc1Eclltm/TMrnnxZZghF3Fo0VL8nN4inf+pQbA== + version "1.18.12" + resolved "https://registry.yarnpkg.com/tsparticles/-/tsparticles-1.18.12.tgz#b6fb441c90b99ab1177c7db2ac9b09e9c24d9ca1" + integrity sha512-7WY31HckCzzaiuudQlIeCE3Y5C4AslnJsuM/aeSDMErx7p7GjXzfUIO5qpzwyoJ7KRNURxIhADTXSDEtqkJFxw== optionalDependencies: pathseg "^1.2.0" @@ -17130,9 +17419,9 @@ uint8arrays@1.1.0, uint8arrays@^1.0.0, uint8arrays@^1.1.0: web-encoding "^1.0.2" uint8arrays@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-2.0.5.tgz#763d0c3dd8e1d05b656d2e60c8a9a53096a47d9e" - integrity sha512-1HSktgwqtYIwVn1mg3GcnqKhHH9oC4kVgdD/43cxMWwhP8rihKcFPmToDzS1XtbvVvlR8XxTk/DUBf0C83qNIg== + version "2.1.2" + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-2.1.2.tgz#7b4ff064e0d033bae3ecbf15860dd60458d6aebd" + integrity sha512-/VcLZbPMs/dk23u22IZlPWycfBxntpwrvISHQs93/OdRlUTnQw9Uzmzaoq7DgJAZl1SlP/kw+NhbjFAEED42rQ== dependencies: multibase "^3.0.0" web-encoding "^1.0.5" @@ -17276,6 +17565,11 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== +unordered-array-remove@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unordered-array-remove/-/unordered-array-remove-1.0.2.tgz#c546e8f88e317a0cf2644c97ecb57dba66d250ef" + integrity sha1-xUbo+I4xegzyZEyX7LV9umbSUO8= + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -17362,7 +17656,7 @@ url-parse-lax@^3.0.0: dependencies: prepend-http "^2.0.0" -url-parse@^1.4.3: +url-parse@^1.4.3, url-parse@^1.4.7: version "1.4.7" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== @@ -17738,7 +18032,7 @@ web3-eth-accounts@1.3.4: web3-core-method "1.3.4" web3-utils "1.3.4" -web3-eth-contract@1.3.4: +web3-eth-contract@1.3.4, web3-eth-contract@^1.3.1: version "1.3.4" resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.3.4.tgz#1ea2dd71be0c4a9cf4772d4f75dbb2fa99751472" integrity sha512-Fvy8ZxUksQY2ePt+XynFfOiSqxgQtMn4m2NJs6VXRl2Inl17qyRi/nIJJVKTcENLocm+GmZ/mxq2eOE5u02nPg== @@ -18326,6 +18620,15 @@ write@1.0.3: dependencies: mkdirp "^0.5.1" +wrtc@~0.4.6: + version "0.4.7" + resolved "https://registry.yarnpkg.com/wrtc/-/wrtc-0.4.7.tgz#c61530cd662713e50bffe64b7a78673ce070426c" + integrity sha512-P6Hn7VT4lfSH49HxLHcHhDq+aFf/jd9dPY7lDHeFhZ22N3858EKuwm2jmnlPzpsRGEPaoF6XwkcxY5SYnt4f/g== + dependencies: + node-pre-gyp "^0.13.0" + optionalDependencies: + domexception "^1.0.1" + ws@7.2.3: version "7.2.3" resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46" @@ -18406,6 +18709,19 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== +xml2js@^0.4.23: + version "0.4.23" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" + integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + xmlchars@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" From e77a63f85c80749eee6e56e7805f78a3513e80cd Mon Sep 17 00:00:00 2001 From: apostolof Date: Sun, 7 Feb 2021 16:25:39 +0200 Subject: [PATCH 7/7] feat: init shared package --- .gitignore | 2 + packages/concordia-app/package.json | 1 + ...3-eth+1.3.3.patch => web3-eth+1.3.4.patch} | 0 .../components/InitializationScreen/index.jsx | 2 +- .../src/components/PostCreate/index.jsx | 6 +- .../components/PostList/PostListRow/index.jsx | 4 +- .../src/components/PostList/index.jsx | 2 +- .../TopicList/TopicListRow/index.jsx | 4 +- .../src/components/TopicList/index.jsx | 2 +- .../src/components/UsernameSelector.jsx | 2 +- .../src/constants/configuration/defaults.js | 16 +---- .../src/constants/contracts/ContractNames.js | 11 ---- .../contracts/events/ForumContractEvents.js | 13 ---- .../src/constants/contracts/events/index.js | 8 --- .../src/options/breezeOptions.js | 42 ------------- .../src/options/drizzleOptions.js | 9 +-- .../concordia-app/src/options/web3Options.js | 29 --------- .../src/redux/actions/contractEventActions.js | 2 +- .../src/redux/sagas/orbitSaga.js | 2 +- .../src/redux/sagas/peerDbReplicationSaga.js | 2 +- .../concordia-app/src/redux/sagas/userSaga.js | 2 +- packages/concordia-app/src/redux/store.js | 9 ++- .../concordia-app/src/utils/drizzleUtils.js | 28 ++++----- .../concordia-app/src/views/Home/index.jsx | 2 +- .../GeneralTab/EditInformationModal/index.jsx | 4 +- .../src/views/Profile/GeneralTab/index.jsx | 2 +- .../concordia-app/src/views/Profile/index.jsx | 2 +- .../PersonalInformationStep/index.jsx | 2 +- .../src/views/Register/SignUpStep/index.jsx | 2 +- .../src/views/Topic/TopicCreate/index.jsx | 6 +- .../src/views/Topic/TopicView/index.jsx | 4 +- .../concordia-contracts-provider/package.json | 4 +- .../src/constants.js | 2 - .../concordia-contracts-provider/src/index.js | 6 +- packages/concordia-contracts/.eslintrc.js | 2 +- .../constants/config/defaults.js | 21 ------- packages/concordia-contracts/package.json | 1 + .../concordia-contracts/truffle-config.js | 19 +++--- .../utils/contractsProviderUtils.js | 8 +-- packages/concordia-pinner/package.json | 5 +- packages/concordia-pinner/src/app.js | 16 ++--- packages/concordia-pinner/src/constants.js | 15 +---- packages/concordia-pinner/src/index.js | 8 +-- packages/concordia-shared/.eslintrc.js | 60 +++++++++++++++++++ packages/concordia-shared/package.json | 16 +++++ .../src/configuration/breezeConfiguration.js | 33 ++++++++++ .../src/configuration/web3Configuration.js | 25 ++++++++ .../src/constants/configuration/defaults.js | 46 ++++++++++++++ .../src/constants/contracts/ContractNames.js | 16 +++++ .../contracts/events/ForumContractEvents.js | 19 ++++++ .../src/constants/contracts/events/index.js | 8 +++ .../src/constants/orbit/OrbitDatabases.js | 13 ++-- .../src/environment/contractsProviderEnv.js | 14 +++++ .../interpolated/contractsProvider.js | 21 +++++++ .../src/environment/interpolated/pinner.js | 12 ++++ .../environment/interpolated/rendezvous.js | 15 +++++ .../src/environment/interpolated/shared.js | 9 +++ .../src/environment/interpolated/web3.js | 37 ++++++++++++ .../src/environment/pinnerEnv.js | 7 +++ .../src/environment/rendezvousEnv.js | 9 +++ .../src/environment/sharedEnv.js | 9 +++ .../src/environment/web3Env.js | 24 ++++++++ .../concordia-shared/src/utils/rendezvous.js | 5 ++ packages/concordia-shared/src/utils/web3.js | 6 ++ yarn.lock | 6 +- 65 files changed, 496 insertions(+), 243 deletions(-) rename packages/concordia-app/patches/{web3-eth+1.3.3.patch => web3-eth+1.3.4.patch} (100%) delete mode 100644 packages/concordia-app/src/constants/contracts/ContractNames.js delete mode 100644 packages/concordia-app/src/constants/contracts/events/ForumContractEvents.js delete mode 100644 packages/concordia-app/src/constants/contracts/events/index.js delete mode 100644 packages/concordia-app/src/options/breezeOptions.js delete mode 100644 packages/concordia-app/src/options/web3Options.js delete mode 100644 packages/concordia-contracts/constants/config/defaults.js create mode 100644 packages/concordia-shared/.eslintrc.js create mode 100644 packages/concordia-shared/package.json create mode 100644 packages/concordia-shared/src/configuration/breezeConfiguration.js create mode 100644 packages/concordia-shared/src/configuration/web3Configuration.js create mode 100644 packages/concordia-shared/src/constants/configuration/defaults.js create mode 100644 packages/concordia-shared/src/constants/contracts/ContractNames.js create mode 100644 packages/concordia-shared/src/constants/contracts/events/ForumContractEvents.js create mode 100644 packages/concordia-shared/src/constants/contracts/events/index.js rename packages/{concordia-app => concordia-shared}/src/constants/orbit/OrbitDatabases.js (50%) create mode 100644 packages/concordia-shared/src/environment/contractsProviderEnv.js create mode 100644 packages/concordia-shared/src/environment/interpolated/contractsProvider.js create mode 100644 packages/concordia-shared/src/environment/interpolated/pinner.js create mode 100644 packages/concordia-shared/src/environment/interpolated/rendezvous.js create mode 100644 packages/concordia-shared/src/environment/interpolated/shared.js create mode 100644 packages/concordia-shared/src/environment/interpolated/web3.js create mode 100644 packages/concordia-shared/src/environment/pinnerEnv.js create mode 100644 packages/concordia-shared/src/environment/rendezvousEnv.js create mode 100644 packages/concordia-shared/src/environment/sharedEnv.js create mode 100644 packages/concordia-shared/src/environment/web3Env.js create mode 100644 packages/concordia-shared/src/utils/rendezvous.js create mode 100644 packages/concordia-shared/src/utils/web3.js diff --git a/.gitignore b/.gitignore index 31c619d..6d57d54 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,5 @@ docker/env/contracts.env # Lerna *.lerna_backup + +yarn-clean.sh diff --git a/packages/concordia-app/package.json b/packages/concordia-app/package.json index bbe624a..8727d5a 100644 --- a/packages/concordia-app/package.json +++ b/packages/concordia-app/package.json @@ -30,6 +30,7 @@ "@reduxjs/toolkit": "~1.4.0", "@welldone-software/why-did-you-render": "^6.0.0-rc.1", "concordia-contracts": "~0.1.0", + "concordia-shared": "~0.1.0", "i18next": "^19.8.3", "i18next-browser-languagedetector": "^6.0.1", "i18next-http-backend": "^1.0.21", diff --git a/packages/concordia-app/patches/web3-eth+1.3.3.patch b/packages/concordia-app/patches/web3-eth+1.3.4.patch similarity index 100% rename from packages/concordia-app/patches/web3-eth+1.3.3.patch rename to packages/concordia-app/patches/web3-eth+1.3.4.patch diff --git a/packages/concordia-app/src/components/InitializationScreen/index.jsx b/packages/concordia-app/src/components/InitializationScreen/index.jsx index 7a2dc5a..6ada2b8 100644 --- a/packages/concordia-app/src/components/InitializationScreen/index.jsx +++ b/packages/concordia-app/src/components/InitializationScreen/index.jsx @@ -1,11 +1,11 @@ import React, { Children } from 'react'; import { breezeConstants } from '@ezerous/breeze'; import { useSelector } from 'react-redux'; +import { FORUM_CONTRACT } from 'concordia-shared/src/constants/contracts/ContractNames'; import CustomLoader from './CustomLoader'; // CSS import '../../assets/css/loading-component.css'; -import { FORUM_CONTRACT } from '../../constants/contracts/ContractNames'; const InitializationLoader = ({ children }) => { const initializing = useSelector((state) => state.drizzleStatus.initializing); diff --git a/packages/concordia-app/src/components/PostCreate/index.jsx b/packages/concordia-app/src/components/PostCreate/index.jsx index 27d966a..b912417 100644 --- a/packages/concordia-app/src/components/PostCreate/index.jsx +++ b/packages/concordia-app/src/components/PostCreate/index.jsx @@ -7,16 +7,16 @@ import { import PropTypes from 'prop-types'; import { useTranslation } from 'react-i18next'; import { useDispatch, useSelector } from 'react-redux'; +import { FORUM_CONTRACT } from 'concordia-shared/src/constants/contracts/ContractNames'; +import { POSTS_DATABASE, USER_DATABASE } from 'concordia-shared/src/constants/orbit/OrbitDatabases'; +import { POST_CREATED_EVENT } from 'concordia-shared/src/constants/contracts/events/ForumContractEvents'; import determineKVAddress from '../../utils/orbitUtils'; -import { POSTS_DATABASE, USER_DATABASE } from '../../constants/orbit/OrbitDatabases'; import { FETCH_USER_DATABASE } from '../../redux/actions/peerDbReplicationActions'; import { USER_PROFILE_PICTURE } from '../../constants/orbit/UserDatabaseKeys'; import { breeze, drizzle } from '../../redux/store'; import './styles.css'; import { TRANSACTION_ERROR, TRANSACTION_SUCCESS } from '../../constants/TransactionStatus'; import { POST_CONTENT } from '../../constants/orbit/PostsDatabaseKeys'; -import { FORUM_CONTRACT } from '../../constants/contracts/ContractNames'; -import { POST_CREATED_EVENT } from '../../constants/contracts/events/ForumContractEvents'; const { contracts: { [FORUM_CONTRACT]: { methods: { createPost } } } } = drizzle; const { orbit } = breeze; diff --git a/packages/concordia-app/src/components/PostList/PostListRow/index.jsx b/packages/concordia-app/src/components/PostList/PostListRow/index.jsx index 8814374..de93824 100644 --- a/packages/concordia-app/src/components/PostList/PostListRow/index.jsx +++ b/packages/concordia-app/src/components/PostList/PostListRow/index.jsx @@ -9,14 +9,14 @@ import { useTranslation } from 'react-i18next'; import TimeAgo from 'react-timeago'; import { useDispatch, useSelector } from 'react-redux'; import { Link } from 'react-router-dom'; +import { FORUM_CONTRACT } from 'concordia-shared/src/constants/contracts/ContractNames'; +import { POSTS_DATABASE, USER_DATABASE } from 'concordia-shared/src/constants/orbit/OrbitDatabases'; import { FETCH_USER_DATABASE } from '../../../redux/actions/peerDbReplicationActions'; import { breeze } from '../../../redux/store'; import './styles.css'; -import { POSTS_DATABASE, USER_DATABASE } from '../../../constants/orbit/OrbitDatabases'; import determineKVAddress from '../../../utils/orbitUtils'; import { USER_PROFILE_PICTURE } from '../../../constants/orbit/UserDatabaseKeys'; import { POST_CONTENT } from '../../../constants/orbit/PostsDatabaseKeys'; -import { FORUM_CONTRACT } from '../../../constants/contracts/ContractNames'; const { orbit } = breeze; diff --git a/packages/concordia-app/src/components/PostList/index.jsx b/packages/concordia-app/src/components/PostList/index.jsx index a967ccd..504a3a7 100644 --- a/packages/concordia-app/src/components/PostList/index.jsx +++ b/packages/concordia-app/src/components/PostList/index.jsx @@ -4,9 +4,9 @@ import React, { import PropTypes from 'prop-types'; import { useSelector } from 'react-redux'; import { Dimmer, Feed, Loader } from 'semantic-ui-react'; +import { FORUM_CONTRACT } from 'concordia-shared/src/constants/contracts/ContractNames'; import PostListRow from './PostListRow'; import { drizzle } from '../../redux/store'; -import { FORUM_CONTRACT } from '../../constants/contracts/ContractNames'; const { contracts: { [FORUM_CONTRACT]: { methods: { getPost: { cacheCall: getPostChainData } } } } } = drizzle; diff --git a/packages/concordia-app/src/components/TopicList/TopicListRow/index.jsx b/packages/concordia-app/src/components/TopicList/TopicListRow/index.jsx index fd96bf4..1a50ba9 100644 --- a/packages/concordia-app/src/components/TopicList/TopicListRow/index.jsx +++ b/packages/concordia-app/src/components/TopicList/TopicListRow/index.jsx @@ -10,14 +10,14 @@ import TimeAgo from 'react-timeago'; import { useHistory } from 'react-router'; import { useDispatch, useSelector } from 'react-redux'; import { Link } from 'react-router-dom'; +import { FORUM_CONTRACT } from 'concordia-shared/src/constants/contracts/ContractNames'; +import { TOPICS_DATABASE, USER_DATABASE } from 'concordia-shared/src/constants/orbit/OrbitDatabases'; import { FETCH_USER_DATABASE } from '../../../redux/actions/peerDbReplicationActions'; import { breeze } from '../../../redux/store'; import './styles.css'; -import { TOPICS_DATABASE, USER_DATABASE } from '../../../constants/orbit/OrbitDatabases'; import determineKVAddress from '../../../utils/orbitUtils'; import { USER_PROFILE_PICTURE } from '../../../constants/orbit/UserDatabaseKeys'; import { TOPIC_SUBJECT } from '../../../constants/orbit/TopicsDatabaseKeys'; -import { FORUM_CONTRACT } from '../../../constants/contracts/ContractNames'; const { orbit } = breeze; diff --git a/packages/concordia-app/src/components/TopicList/index.jsx b/packages/concordia-app/src/components/TopicList/index.jsx index 8a85f4e..8a6b9fd 100644 --- a/packages/concordia-app/src/components/TopicList/index.jsx +++ b/packages/concordia-app/src/components/TopicList/index.jsx @@ -4,9 +4,9 @@ import React, { import PropTypes from 'prop-types'; import { useSelector } from 'react-redux'; import { List } from 'semantic-ui-react'; +import { FORUM_CONTRACT } from 'concordia-shared/src/constants/contracts/ContractNames'; import TopicListRow from './TopicListRow'; import { drizzle } from '../../redux/store'; -import { FORUM_CONTRACT } from '../../constants/contracts/ContractNames'; const { contracts: { [FORUM_CONTRACT]: { methods: { getTopic: { cacheCall: getTopicChainData } } } } } = drizzle; diff --git a/packages/concordia-app/src/components/UsernameSelector.jsx b/packages/concordia-app/src/components/UsernameSelector.jsx index 8323757..72d9eb3 100644 --- a/packages/concordia-app/src/components/UsernameSelector.jsx +++ b/packages/concordia-app/src/components/UsernameSelector.jsx @@ -6,8 +6,8 @@ import throttle from 'lodash/throttle'; import { useTranslation } from 'react-i18next'; import { useSelector } from 'react-redux'; import PropTypes from 'prop-types'; +import { FORUM_CONTRACT } from 'concordia-shared/src/constants/contracts/ContractNames'; import { drizzle } from '../redux/store'; -import { FORUM_CONTRACT } from '../constants/contracts/ContractNames'; const { contracts: { [FORUM_CONTRACT]: { methods: { isUserNameTaken } } } } = drizzle; diff --git a/packages/concordia-app/src/constants/configuration/defaults.js b/packages/concordia-app/src/constants/configuration/defaults.js index c288c9c..5c94c7b 100644 --- a/packages/concordia-app/src/constants/configuration/defaults.js +++ b/packages/concordia-app/src/constants/configuration/defaults.js @@ -1,14 +1,2 @@ -export const WEB3_HOST_DEFAULT = '127.0.0.1'; -export const WEB3_PORT_DEFAULT = '8545'; -export const WEB3_PORT_SOCKET_TIMEOUT_DEFAULT = 30000; -export const WEB3_PORT_SOCKET_CONNECT_MAX_ATTEMPTS_DEFAULT = 3; - -export const REACT_APP_CONCORDIA_HOST_DEFAULT = '127.0.0.1'; -export const REACT_APP_CONCORDIA_PORT_DEFAULT = '7000'; - -export const REACT_APP_RENDEZVOUS_HOST_DEFAULT = '127.0.0.1'; -export const REACT_APP_RENDEZVOUS_PORT_DEFAULT = '9090'; - -export const REACT_APP_CONTRACTS_SUPPLIER_HOST_DEFAULT = '127.0.0.1'; -export const REACT_APP_CONTRACTS_SUPPLIER_PORT_DEFAULT = '8400'; -export const REACT_APP_CONTRACTS_VERSION_HASH_DEFAULT = 'latest'; +export const CONCORDIA_HOST_DEFAULT = '127.0.0.1'; +export const CONCORDIA_PORT_DEFAULT = '7000'; diff --git a/packages/concordia-app/src/constants/contracts/ContractNames.js b/packages/concordia-app/src/constants/contracts/ContractNames.js deleted file mode 100644 index 52990a1..0000000 --- a/packages/concordia-app/src/constants/contracts/ContractNames.js +++ /dev/null @@ -1,11 +0,0 @@ -export const FORUM_CONTRACT = 'Forum'; -export const POST_VOTING_CONTRACT = 'PostVoting'; -export const VOTING_CONTRACT = 'Voting'; - -const CONTRACTS = [ - FORUM_CONTRACT, - POST_VOTING_CONTRACT, - VOTING_CONTRACT, -]; - -export default CONTRACTS; diff --git a/packages/concordia-app/src/constants/contracts/events/ForumContractEvents.js b/packages/concordia-app/src/constants/contracts/events/ForumContractEvents.js deleted file mode 100644 index f0f9a34..0000000 --- a/packages/concordia-app/src/constants/contracts/events/ForumContractEvents.js +++ /dev/null @@ -1,13 +0,0 @@ -export const USER_SIGNED_UP_EVENT = 'UserSignedUp'; -export const USERNAME_UPDATED_EVENT = 'UsernameUpdated'; -export const TOPIC_CREATED_EVENT = 'TopicCreated'; -export const POST_CREATED_EVENT = 'PostCreated'; - -const forumContractEvents = [ - USER_SIGNED_UP_EVENT, - USERNAME_UPDATED_EVENT, - TOPIC_CREATED_EVENT, - POST_CREATED_EVENT, -]; - -export default forumContractEvents; diff --git a/packages/concordia-app/src/constants/contracts/events/index.js b/packages/concordia-app/src/constants/contracts/events/index.js deleted file mode 100644 index 870bd36..0000000 --- a/packages/concordia-app/src/constants/contracts/events/index.js +++ /dev/null @@ -1,8 +0,0 @@ -import { FORUM_CONTRACT } from '../ContractNames'; -import forumContractEvents from './ForumContractEvents'; - -const appEvents = { - [FORUM_CONTRACT]: forumContractEvents, -}; - -export default appEvents; diff --git a/packages/concordia-app/src/options/breezeOptions.js b/packages/concordia-app/src/options/breezeOptions.js deleted file mode 100644 index ea38e82..0000000 --- a/packages/concordia-app/src/options/breezeOptions.js +++ /dev/null @@ -1,42 +0,0 @@ -import { EthereumContractIdentityProvider } from '@ezerous/eth-identity-provider'; -import databases from '../constants/orbit/OrbitDatabases'; -import { - REACT_APP_RENDEZVOUS_HOST_DEFAULT, - REACT_APP_RENDEZVOUS_PORT_DEFAULT, -} from '../constants/configuration/defaults'; - -const REACT_APP_RENDEZVOUS_HOST = process.env.REACT_APP_RENDEZVOUS_HOST || REACT_APP_RENDEZVOUS_HOST_DEFAULT; -const REACT_APP_RENDEZVOUS_PORT = process.env.REACT_APP_RENDEZVOUS_PORT || REACT_APP_RENDEZVOUS_PORT_DEFAULT; - -export const RENDEZVOUS_URL = `http://${REACT_APP_RENDEZVOUS_HOST}:${REACT_APP_RENDEZVOUS_PORT}`; - -const breezeOptions = { - ipfs: { - repo: 'concordia', - config: { - Addresses: { - Swarm: [ - // Use local signaling server (see also rendezvous script in package.json) - // For more information: https://github.com/libp2p/js-libp2p-webrtc-star - `/ip4/${REACT_APP_RENDEZVOUS_HOST}/tcp/${REACT_APP_RENDEZVOUS_PORT}/wss/p2p-webrtc-star`, - - // Use the following public servers if needed - // '/dns4/wrtc-star1.par.dwebops.pub/tcp/443/wss/p2p-webrtc-star', - // '/dns4/ wrtc-star2.sjc.dwebops.pub/tcp/443/wss/p2p-webrtc-star' - ], - }, - }, - preload: { - enabled: false, - }, - init: { - emptyRepo: true, - }, - }, - orbit: { - identityProvider: EthereumContractIdentityProvider, - databases, - }, -}; - -export default breezeOptions; diff --git a/packages/concordia-app/src/options/drizzleOptions.js b/packages/concordia-app/src/options/drizzleOptions.js index 9bb664d..ba6b211 100644 --- a/packages/concordia-app/src/options/drizzleOptions.js +++ b/packages/concordia-app/src/options/drizzleOptions.js @@ -1,17 +1,18 @@ // Check out the documentation: https://truffleframework.com/docs/drizzle/reference/drizzle-options import { contracts } from 'concordia-contracts'; -import web3Options from './web3Options'; -import appEvents from '../constants/contracts/events'; +import { getWeb3Configuration } from 'concordia-shared/src/configuration/web3Configuration'; +import Web3 from 'web3'; +import appEvents from 'concordia-shared/src/constants/contracts/events'; import downloadContractArtifactsSync from '../utils/drizzleUtils'; const drizzleOptions = { - web3: web3Options, + web3: getWeb3Configuration(Web3), events: { ...appEvents }, reloadWindowOnNetworkChange: true, reloadWindowOnAccountChange: true, // We need it to reinitialize breeze and create new Orbit databases }; -if (process.env.REACT_APP_USE_EXTERNAL_CONTRACTS_SUPPLIER) { +if (process.env.REACT_APP_USE_EXTERNAL_CONTRACTS_PROVIDER) { drizzleOptions.contracts = downloadContractArtifactsSync(); } else { drizzleOptions.contracts = contracts; diff --git a/packages/concordia-app/src/options/web3Options.js b/packages/concordia-app/src/options/web3Options.js deleted file mode 100644 index ded958c..0000000 --- a/packages/concordia-app/src/options/web3Options.js +++ /dev/null @@ -1,29 +0,0 @@ -import Web3 from 'web3'; -import { - WEB3_HOST_DEFAULT, - WEB3_PORT_DEFAULT, - WEB3_PORT_SOCKET_CONNECT_MAX_ATTEMPTS_DEFAULT, - WEB3_PORT_SOCKET_TIMEOUT_DEFAULT, -} from '../constants/configuration/defaults'; - -const { WEB3_HOST, WEB3_PORT, WEBSOCKET_TIMEOUT } = process.env; - -const web3WebsocketOptions = { - keepAlive: true, - timeout: WEBSOCKET_TIMEOUT !== undefined ? WEBSOCKET_TIMEOUT : WEB3_PORT_SOCKET_TIMEOUT_DEFAULT, - reconnect: { - maxAttempts: WEB3_PORT_SOCKET_CONNECT_MAX_ATTEMPTS_DEFAULT, - }, -}; - -const web3 = (WEB3_HOST !== undefined && WEB3_PORT !== undefined) - ? new Web3(new Web3.providers.WebsocketProvider(`ws://${WEB3_HOST}:${WEB3_PORT}`)) - : new Web3(Web3.givenProvider || new Web3.providers.WebsocketProvider( - `ws://${WEB3_HOST_DEFAULT}:${WEB3_PORT_DEFAULT}`, web3WebsocketOptions, - )); - -const web3Options = { - customProvider: web3, -}; - -export default web3Options; diff --git a/packages/concordia-app/src/redux/actions/contractEventActions.js b/packages/concordia-app/src/redux/actions/contractEventActions.js index a7b250e..36a7aea 100644 --- a/packages/concordia-app/src/redux/actions/contractEventActions.js +++ b/packages/concordia-app/src/redux/actions/contractEventActions.js @@ -3,7 +3,7 @@ import { TOPIC_CREATED_EVENT, USER_SIGNED_UP_EVENT, USERNAME_UPDATED_EVENT, -} from '../../constants/contracts/events/ForumContractEvents'; +} from 'concordia-shared/src/constants/contracts/events/ForumContractEvents'; export const FORUM_EVENT_USER_SIGNED_UP = 'FORUM_EVENT_USER_SIGNED_UP'; export const FORUM_EVENT_USERNAME_UPDATED = 'FORUM_EVENT_USERNAME_UPDATED'; diff --git a/packages/concordia-app/src/redux/sagas/orbitSaga.js b/packages/concordia-app/src/redux/sagas/orbitSaga.js index 385295b..1e3a8c4 100644 --- a/packages/concordia-app/src/redux/sagas/orbitSaga.js +++ b/packages/concordia-app/src/redux/sagas/orbitSaga.js @@ -7,7 +7,7 @@ import { drizzleActions } from '@ezerous/drizzle'; import { contracts } from 'concordia-contracts'; import { EthereumContractIdentityProvider } from '@ezerous/eth-identity-provider'; -import { FORUM_CONTRACT } from '../../constants/contracts/ContractNames'; +import { FORUM_CONTRACT } from 'concordia-shared/src/constants/contracts/ContractNames'; function* initOrbitDatabases(action) { const { account, breeze } = action; diff --git a/packages/concordia-app/src/redux/sagas/peerDbReplicationSaga.js b/packages/concordia-app/src/redux/sagas/peerDbReplicationSaga.js index 0ed1896..969195d 100644 --- a/packages/concordia-app/src/redux/sagas/peerDbReplicationSaga.js +++ b/packages/concordia-app/src/redux/sagas/peerDbReplicationSaga.js @@ -7,9 +7,9 @@ import { ORBIT_DB_REPLICATED, ORBIT_DB_WRITE, } from '@ezerous/breeze/src/orbit/orbitActions'; +import { POSTS_DATABASE, TOPICS_DATABASE, USER_DATABASE } from 'concordia-shared/src/constants/orbit/OrbitDatabases'; import determineKVAddress from '../../utils/orbitUtils'; import { FETCH_USER_DATABASE, UPDATE_ORBIT_DATA } from '../actions/peerDbReplicationActions'; -import { POSTS_DATABASE, TOPICS_DATABASE, USER_DATABASE } from '../../constants/orbit/OrbitDatabases'; import userDatabaseKeys from '../../constants/orbit/UserDatabaseKeys'; import { TOPIC_SUBJECT } from '../../constants/orbit/TopicsDatabaseKeys'; import { POST_CONTENT } from '../../constants/orbit/PostsDatabaseKeys'; diff --git a/packages/concordia-app/src/redux/sagas/userSaga.js b/packages/concordia-app/src/redux/sagas/userSaga.js index ac06fd2..ed7ae8b 100644 --- a/packages/concordia-app/src/redux/sagas/userSaga.js +++ b/packages/concordia-app/src/redux/sagas/userSaga.js @@ -3,9 +3,9 @@ import { all, call, put, take, takeLatest, } from 'redux-saga/effects'; import { drizzleActions } from '@ezerous/drizzle'; +import { FORUM_CONTRACT } from 'concordia-shared/src/constants/contracts/ContractNames'; import { USER_DATA_UPDATED, USER_DATA_ERROR } from '../actions/userActions'; import { FORUM_EVENT_USER_SIGNED_UP } from '../actions/contractEventActions'; -import { FORUM_CONTRACT } from '../../constants/contracts/ContractNames'; function* fetchUserData({ drizzle, account }) { const contract = drizzle.contracts[FORUM_CONTRACT]; diff --git a/packages/concordia-app/src/redux/store.js b/packages/concordia-app/src/redux/store.js index 8ed1b9e..34dedbe 100644 --- a/packages/concordia-app/src/redux/store.js +++ b/packages/concordia-app/src/redux/store.js @@ -4,11 +4,12 @@ import { } from '@ezerous/drizzle'; import { Breeze, breezeReducers } from '@ezerous/breeze'; import createSagaMiddleware from 'redux-saga'; +import getBreezeConfiguration from 'concordia-shared/src/configuration/breezeConfiguration'; +import { EthereumContractIdentityProvider } from '@ezerous/eth-identity-provider'; import userReducer from './reducers/userReducer'; import rootSaga from './sagas/rootSaga'; import drizzleOptions from '../options/drizzleOptions'; import peerDbReplicationReducer from './reducers/peerDbReplicationReducer'; -import breezeOptions from '../options/breezeOptions'; const initialState = { contracts: generateContractsInitialState(drizzleOptions), @@ -27,8 +28,12 @@ const store = configureStore({ preloadedState: initialState, }); +const breezeConfiguration = getBreezeConfiguration(EthereumContractIdentityProvider, + process.env.REACT_APP_RENDEZVOUS_HOST, + process.env.REACT_APP_RENDEZVOUS_PORT); + export const drizzle = new Drizzle(drizzleOptions, store); -export const breeze = new Breeze(breezeOptions, store); +export const breeze = new Breeze(breezeConfiguration, store); sagaMiddleware.run(rootSaga); export default store; diff --git a/packages/concordia-app/src/utils/drizzleUtils.js b/packages/concordia-app/src/utils/drizzleUtils.js index 5496d85..59208f2 100755 --- a/packages/concordia-app/src/utils/drizzleUtils.js +++ b/packages/concordia-app/src/utils/drizzleUtils.js @@ -1,26 +1,22 @@ +import { CONTRACTS } from 'concordia-shared/src/constants/contracts/ContractNames'; import { - REACT_APP_CONCORDIA_HOST_DEFAULT, - REACT_APP_CONCORDIA_PORT_DEFAULT, - REACT_APP_CONTRACTS_SUPPLIER_HOST_DEFAULT, - REACT_APP_CONTRACTS_SUPPLIER_PORT_DEFAULT, - REACT_APP_CONTRACTS_VERSION_HASH_DEFAULT, + contractsProviderHost, + contractsProviderPort, + contractsVersionHash, +} from 'concordia-shared/src/environment/interpolated/contractsProvider'; +import { + CONCORDIA_HOST_DEFAULT, + CONCORDIA_PORT_DEFAULT, } from '../constants/configuration/defaults'; -import CONTRACTS from '../constants/contracts/ContractNames'; function getContractsDownloadRequest() { - const CONTRACTS_SUPPLIER_HOST = process.env.REACT_APP_CONTRACTS_SUPPLIER_HOST - || REACT_APP_CONTRACTS_SUPPLIER_HOST_DEFAULT; - const CONTRACTS_SUPPLIER_PORT = process.env.REACT_APP_CONTRACTS_SUPPLIER_PORT - || REACT_APP_CONTRACTS_SUPPLIER_PORT_DEFAULT; - const CONTRACTS_VERSION_HASH = process.env.REACT_APP_CONTRACTS_VERSION_HASH - || REACT_APP_CONTRACTS_VERSION_HASH_DEFAULT; - const HOST = process.env.REACT_APP_CONCORDIA_HOST || REACT_APP_CONCORDIA_HOST_DEFAULT; - const PORT = process.env.REACT_APP_CONCORDIA_PORT || REACT_APP_CONCORDIA_PORT_DEFAULT; + const HOST = process.env.REACT_APP_CONCORDIA_HOST || CONCORDIA_HOST_DEFAULT; + const PORT = process.env.REACT_APP_CONCORDIA_PORT || CONCORDIA_PORT_DEFAULT; const xhrRequest = new XMLHttpRequest(); xhrRequest.open('GET', - `http://${CONTRACTS_SUPPLIER_HOST}:${CONTRACTS_SUPPLIER_PORT}/contracts/${CONTRACTS_VERSION_HASH}`, + `http://${contractsProviderHost}:${contractsProviderPort}/contracts/${contractsVersionHash}`, false); xhrRequest.setRequestHeader('Access-Control-Allow-Origin', `${HOST}:${PORT}`); xhrRequest.setRequestHeader('Access-Control-Allow-Credentials', 'true'); @@ -40,7 +36,7 @@ function validateRemoteContracts(remoteContracts) { })); if (contractsPresentStatus.reduce((accumulator, contract) => accumulator && contract.present, true)) { - throw new Error(`Contracts missing from artifacts. Supplier didn't bring ${contractsPresentStatus + throw new Error(`Contracts missing from artifacts. Provider didn't bring ${contractsPresentStatus .filter((contractPresentStatus) => contractPresentStatus.present === false) .map((contractPresentStatus) => contractPresentStatus.contract) .join(', ')}.`); diff --git a/packages/concordia-app/src/views/Home/index.jsx b/packages/concordia-app/src/views/Home/index.jsx index 989d684..73613d5 100644 --- a/packages/concordia-app/src/views/Home/index.jsx +++ b/packages/concordia-app/src/views/Home/index.jsx @@ -3,10 +3,10 @@ import React, { } from 'react'; import { Container } from 'semantic-ui-react'; import { useSelector } from 'react-redux'; +import { FORUM_CONTRACT } from 'concordia-shared/src/constants/contracts/ContractNames'; import Board from './Board'; import './styles.css'; import { drizzle } from '../../redux/store'; -import { FORUM_CONTRACT } from '../../constants/contracts/ContractNames'; const { contracts: { [FORUM_CONTRACT]: { methods: { numTopics } } } } = drizzle; diff --git a/packages/concordia-app/src/views/Profile/GeneralTab/EditInformationModal/index.jsx b/packages/concordia-app/src/views/Profile/GeneralTab/EditInformationModal/index.jsx index 1290c7e..d86f395 100644 --- a/packages/concordia-app/src/views/Profile/GeneralTab/EditInformationModal/index.jsx +++ b/packages/concordia-app/src/views/Profile/GeneralTab/EditInformationModal/index.jsx @@ -6,12 +6,12 @@ import { } from 'semantic-ui-react'; import PropTypes from 'prop-types'; import { useTranslation } from 'react-i18next'; +import { FORUM_CONTRACT } from 'concordia-shared/src/constants/contracts/ContractNames'; +import { USER_DATABASE } from 'concordia-shared/src/constants/orbit/OrbitDatabases'; import checkUrlValid from '../../../../utils/urlUtils'; import { USER_LOCATION, USER_PROFILE_PICTURE } from '../../../../constants/orbit/UserDatabaseKeys'; -import { USER_DATABASE } from '../../../../constants/orbit/OrbitDatabases'; import { breeze, drizzle } from '../../../../redux/store'; import UsernameSelector from '../../../../components/UsernameSelector'; -import { FORUM_CONTRACT } from '../../../../constants/contracts/ContractNames'; const { orbit: { stores } } = breeze; const { contracts: { [FORUM_CONTRACT]: { methods: { updateUsername } } } } = drizzle; diff --git a/packages/concordia-app/src/views/Profile/GeneralTab/index.jsx b/packages/concordia-app/src/views/Profile/GeneralTab/index.jsx index 2515bea..74fd9ef 100644 --- a/packages/concordia-app/src/views/Profile/GeneralTab/index.jsx +++ b/packages/concordia-app/src/views/Profile/GeneralTab/index.jsx @@ -5,8 +5,8 @@ import { import PropTypes from 'prop-types'; import { useDispatch, useSelector } from 'react-redux'; import { useTranslation } from 'react-i18next'; +import { USER_DATABASE, databases } from 'concordia-shared/src/constants/orbit/OrbitDatabases'; import determineKVAddress from '../../../utils/orbitUtils'; -import databases, { USER_DATABASE } from '../../../constants/orbit/OrbitDatabases'; import { FETCH_USER_DATABASE } from '../../../redux/actions/peerDbReplicationActions'; import { breeze } from '../../../redux/store'; import { USER_LOCATION, USER_PROFILE_PICTURE } from '../../../constants/orbit/UserDatabaseKeys'; diff --git a/packages/concordia-app/src/views/Profile/index.jsx b/packages/concordia-app/src/views/Profile/index.jsx index 2126536..7751e51 100644 --- a/packages/concordia-app/src/views/Profile/index.jsx +++ b/packages/concordia-app/src/views/Profile/index.jsx @@ -5,8 +5,8 @@ import { Container, Header, Tab } from 'semantic-ui-react'; import { useSelector } from 'react-redux'; import { useHistory, useRouteMatch } from 'react-router'; import { useTranslation } from 'react-i18next'; +import { FORUM_CONTRACT } from 'concordia-shared/src/constants/contracts/ContractNames'; import { drizzle } from '../../redux/store'; -import { FORUM_CONTRACT } from '../../constants/contracts/ContractNames'; import CustomLoadingTabPane from '../../components/CustomLoadingTabPane'; import TopicList from '../../components/TopicList'; import PostList from '../../components/PostList'; diff --git a/packages/concordia-app/src/views/Register/PersonalInformationStep/index.jsx b/packages/concordia-app/src/views/Register/PersonalInformationStep/index.jsx index 1ac1cdb..5cf10d9 100644 --- a/packages/concordia-app/src/views/Register/PersonalInformationStep/index.jsx +++ b/packages/concordia-app/src/views/Register/PersonalInformationStep/index.jsx @@ -7,10 +7,10 @@ import { import { useTranslation } from 'react-i18next'; import PropTypes from 'prop-types'; import { useHistory } from 'react-router'; +import { USER_DATABASE } from 'concordia-shared/src/constants/orbit/OrbitDatabases'; import checkUrlValid from '../../../utils/urlUtils'; import { breeze } from '../../../redux/store'; import './styles.css'; -import { USER_DATABASE } from '../../../constants/orbit/OrbitDatabases'; import { USER_LOCATION, USER_PROFILE_PICTURE } from '../../../constants/orbit/UserDatabaseKeys'; const { orbit: { stores } } = breeze; diff --git a/packages/concordia-app/src/views/Register/SignUpStep/index.jsx b/packages/concordia-app/src/views/Register/SignUpStep/index.jsx index 7e8cb8b..e4d494c 100644 --- a/packages/concordia-app/src/views/Register/SignUpStep/index.jsx +++ b/packages/concordia-app/src/views/Register/SignUpStep/index.jsx @@ -6,9 +6,9 @@ import { useTranslation } from 'react-i18next'; import { useSelector } from 'react-redux'; import { useHistory } from 'react-router'; import PropTypes from 'prop-types'; +import { FORUM_CONTRACT } from 'concordia-shared/src/constants/contracts/ContractNames'; import { drizzle } from '../../../redux/store'; import { TRANSACTION_ERROR, TRANSACTION_SUCCESS } from '../../../constants/TransactionStatus'; -import { FORUM_CONTRACT } from '../../../constants/contracts/ContractNames'; import UsernameSelector from '../../../components/UsernameSelector'; const { contracts: { [FORUM_CONTRACT]: { methods: { signUp } } } } = drizzle; diff --git a/packages/concordia-app/src/views/Topic/TopicCreate/index.jsx b/packages/concordia-app/src/views/Topic/TopicCreate/index.jsx index 9fa5759..d43157b 100644 --- a/packages/concordia-app/src/views/Topic/TopicCreate/index.jsx +++ b/packages/concordia-app/src/views/Topic/TopicCreate/index.jsx @@ -8,13 +8,13 @@ import { useTranslation } from 'react-i18next'; import { useHistory } from 'react-router'; import { useSelector } from 'react-redux'; import './styles.css'; +import { FORUM_CONTRACT } from 'concordia-shared/src/constants/contracts/ContractNames'; +import { TOPIC_CREATED_EVENT } from 'concordia-shared/src/constants/contracts/events/ForumContractEvents'; +import { POSTS_DATABASE, TOPICS_DATABASE } from 'concordia-shared/src/constants/orbit/OrbitDatabases'; import { drizzle, breeze } from '../../../redux/store'; import { TRANSACTION_ERROR, TRANSACTION_SUCCESS } from '../../../constants/TransactionStatus'; -import { POSTS_DATABASE, TOPICS_DATABASE } from '../../../constants/orbit/OrbitDatabases'; import { TOPIC_SUBJECT } from '../../../constants/orbit/TopicsDatabaseKeys'; import { POST_CONTENT } from '../../../constants/orbit/PostsDatabaseKeys'; -import { FORUM_CONTRACT } from '../../../constants/contracts/ContractNames'; -import { TOPIC_CREATED_EVENT } from '../../../constants/contracts/events/ForumContractEvents'; const { contracts: { [FORUM_CONTRACT]: { methods: { createTopic } } } } = drizzle; const { orbit: { stores } } = breeze; diff --git a/packages/concordia-app/src/views/Topic/TopicView/index.jsx b/packages/concordia-app/src/views/Topic/TopicView/index.jsx index c0ca6c8..406bb2e 100644 --- a/packages/concordia-app/src/views/Topic/TopicView/index.jsx +++ b/packages/concordia-app/src/views/Topic/TopicView/index.jsx @@ -7,16 +7,16 @@ import { import { Link } from 'react-router-dom'; import { useHistory } from 'react-router'; import TimeAgo from 'react-timeago'; +import { FORUM_CONTRACT } from 'concordia-shared/src/constants/contracts/ContractNames'; +import { TOPICS_DATABASE, USER_DATABASE } from 'concordia-shared/src/constants/orbit/OrbitDatabases'; import { breeze, drizzle } from '../../../redux/store'; import { FETCH_USER_DATABASE } from '../../../redux/actions/peerDbReplicationActions'; import './styles.css'; import PostList from '../../../components/PostList'; -import { TOPICS_DATABASE, USER_DATABASE } from '../../../constants/orbit/OrbitDatabases'; import determineKVAddress from '../../../utils/orbitUtils'; import { USER_PROFILE_PICTURE } from '../../../constants/orbit/UserDatabaseKeys'; import { TOPIC_SUBJECT } from '../../../constants/orbit/TopicsDatabaseKeys'; import PostCreate from '../../../components/PostCreate'; -import { FORUM_CONTRACT } from '../../../constants/contracts/ContractNames'; const { contracts: { [FORUM_CONTRACT]: { methods: { getTopic: { cacheCall: getTopicChainData } } } } } = drizzle; const { orbit } = breeze; diff --git a/packages/concordia-contracts-provider/package.json b/packages/concordia-contracts-provider/package.json index 7bdc166..9dd2629 100755 --- a/packages/concordia-contracts-provider/package.json +++ b/packages/concordia-contracts-provider/package.json @@ -5,10 +5,12 @@ "private": true, "main": "src/index.js", "scripts": { - "start": "node -r esm src/index.js" + "start": "node -r esm src/index.js", + "lint": "eslint --ext js,jsx . --format table" }, "license": "MIT", "dependencies": { + "concordia-shared": "~0.1.0", "cors": "^2.8.5", "esm": "~3.2.25", "express": "^4.17.1", diff --git a/packages/concordia-contracts-provider/src/constants.js b/packages/concordia-contracts-provider/src/constants.js index fbe54de..4c65196 100755 --- a/packages/concordia-contracts-provider/src/constants.js +++ b/packages/concordia-contracts-provider/src/constants.js @@ -1,11 +1,9 @@ import path from 'path'; -const PROVIDER_PORT = '8400'; const UPLOAD_CONTRACTS_DIRECTORY = path.join(__dirname, '..', 'contracts-uploads'); const CORS_ALLOWED_ORIGINS = ['http://127.0.0.1:7000', 'http://localhost:7000']; export default { - port: PROVIDER_PORT, uploadsDirectory: UPLOAD_CONTRACTS_DIRECTORY, corsAllowedOrigins: CORS_ALLOWED_ORIGINS, }; diff --git a/packages/concordia-contracts-provider/src/index.js b/packages/concordia-contracts-provider/src/index.js index 0d8ddf4..0b2f2a6 100755 --- a/packages/concordia-contracts-provider/src/index.js +++ b/packages/concordia-contracts-provider/src/index.js @@ -1,9 +1,9 @@ import express from 'express'; import cors from 'cors'; +import { contractsProviderPort } from 'concordia-shared/src/environment/interpolated/contractsProvider'; import initRoutes from './routes/web'; import constants from './constants'; -const PROVIDER_PORT = process.env.CONTRACTS_PROVIDER_PORT || constants.port; const ALLOWED_ORIGINS = process.env.CORS_ALLOWED_ORIGINS ? process.env.CORS_ALLOWED_ORIGINS.split(';') : constants.corsAllowedOrigins; @@ -20,6 +20,6 @@ app.use(cors(corsOptions)); initRoutes(app); -app.listen(PROVIDER_PORT, () => { - console.log(`Contracts provider listening at http://127.0.0.1:${PROVIDER_PORT}`); +app.listen(contractsProviderPort, () => { + console.log(`Contracts provider listening at http://127.0.0.1:${contractsProviderPort}`); }); diff --git a/packages/concordia-contracts/.eslintrc.js b/packages/concordia-contracts/.eslintrc.js index f4fd0dd..eb1cf53 100644 --- a/packages/concordia-contracts/.eslintrc.js +++ b/packages/concordia-contracts/.eslintrc.js @@ -32,7 +32,7 @@ module.exports = { 'no-console': 'warn', 'no-shadow': 'warn', 'no-multi-str': 'warn', - 'one-var': ["error", { "uninitialized": "always" }], + 'one-var': ["error", {"uninitialized": "always"}], 'one-var-declaration-per-line': ['error', 'initializations'] }, 'settings': { diff --git a/packages/concordia-contracts/constants/config/defaults.js b/packages/concordia-contracts/constants/config/defaults.js deleted file mode 100644 index 10941e0..0000000 --- a/packages/concordia-contracts/constants/config/defaults.js +++ /dev/null @@ -1,21 +0,0 @@ -const DEVELOP_CHAIN_HOST_DEFAULT = '127.0.0.1'; -const DEVELOP_CHAIN_PORT_DEFAULT = '8545'; - -const TEST_CHAIN_HOST_DEFAULT = '127.0.0.1'; -const TEST_CHAIN_PORT_DEFAULT = '8546'; - -const CONTRACTS_PROVIDER_HOST_DEFAULT = '127.0.0.1'; -const CONTRACTS_PROVIDER_PORT_DEFAULT = '8400'; - -module.exports = { - develop: { - chainHost: DEVELOP_CHAIN_HOST_DEFAULT, - chainPort: DEVELOP_CHAIN_PORT_DEFAULT, - }, - test: { - chainHost: TEST_CHAIN_HOST_DEFAULT, - chainPort: TEST_CHAIN_PORT_DEFAULT, - }, - contractsProviderHost: CONTRACTS_PROVIDER_HOST_DEFAULT, - contractsProviderPort: CONTRACTS_PROVIDER_PORT_DEFAULT, -}; diff --git a/packages/concordia-contracts/package.json b/packages/concordia-contracts/package.json index 37a9028..6c46a16 100644 --- a/packages/concordia-contracts/package.json +++ b/packages/concordia-contracts/package.json @@ -17,6 +17,7 @@ }, "dependencies": { "@openzeppelin/contracts": "~3.3.0", + "concordia-shared": "~0.1.0", "truffle": "~5.1.58", "unirest": "^0.6.0" }, diff --git a/packages/concordia-contracts/truffle-config.js b/packages/concordia-contracts/truffle-config.js index 6d07a9f..2467673 100644 --- a/packages/concordia-contracts/truffle-config.js +++ b/packages/concordia-contracts/truffle-config.js @@ -1,9 +1,6 @@ const path = require('path'); -const defaults = require('./constants/config/defaults'); - -const { - CHAIN_HOST, CHAIN_PORT, -} = process.env; +const web3EnvInterpolated = require('concordia-shared/src/environment/interpolated/web3'); +const configurationDefaults = require('concordia-shared/src/constants/configuration/defaults'); module.exports = { // See @@ -16,18 +13,18 @@ module.exports = { contracts_build_directory: path.join(__dirname, 'build/'), networks: { develop: { - host: defaults.develop.chainHost, - port: defaults.develop.chainPort, + host: configurationDefaults.web3.develop.chainHost, + port: configurationDefaults.web3.develop.chainPort, network_id: '*', }, test: { - host: defaults.test.chainHost, - port: defaults.test.chainPort, + host: configurationDefaults.web3.test.chainHost, + port: configurationDefaults.web3.test.chainPort, network_id: '*', }, env: { - host: CHAIN_HOST, - port: CHAIN_PORT, + host: web3EnvInterpolated.web3Host, + port: web3EnvInterpolated.web3Port, network_id: '*', }, }, diff --git a/packages/concordia-contracts/utils/contractsProviderUtils.js b/packages/concordia-contracts/utils/contractsProviderUtils.js index 2bd52a3..5777da1 100644 --- a/packages/concordia-contracts/utils/contractsProviderUtils.js +++ b/packages/concordia-contracts/utils/contractsProviderUtils.js @@ -1,13 +1,11 @@ const path = require('path'); const unirest = require('unirest'); +const { contractsProviderHost } = require('concordia-shared/src/environment/interpolated/contractsProvider'); +const { contractsProviderPort } = require('concordia-shared/src/environment/interpolated/contractsProvider'); const { contracts } = require('../index'); -const defaults = require('../constants/config/defaults'); const uploadContractsToProviderUnirest = (versionHash, tag) => { - const CONTRACTS_PROVIDER_HOST = process.env.CONTRACTS_PROVIDER_HOST || defaults.contractsProviderHost; - const CONTRACTS_PROVIDER_PORT = process.env.CONTRACTS_PROVIDER_PORT || defaults.contractsProviderPort; - - const uploadPath = `http://${CONTRACTS_PROVIDER_HOST}:${CONTRACTS_PROVIDER_PORT}/contracts/${versionHash}`; + const uploadPath = `http://${contractsProviderHost}:${contractsProviderPort}/contracts/${versionHash}`; const request = unirest('POST', uploadPath) .field('tag', tag); diff --git a/packages/concordia-pinner/package.json b/packages/concordia-pinner/package.json index 65fa4f8..d5b0ccc 100644 --- a/packages/concordia-pinner/package.json +++ b/packages/concordia-pinner/package.json @@ -6,13 +6,14 @@ "main": "src/index.js", "scripts": { "start": "node -r esm src/index.js", - "clean": "rimraf ipfs orbitdb" + "clean": "rimraf ipfs orbitdb", + "lint": "eslint --ext js,jsx . --format table" }, "license": "MIT", "dependencies": { "@ezerous/eth-identity-provider": "~0.1.2", - "concordia-app": "~0.1.0", "concordia-contracts": "~0.1.0", + "concordia-shared": "~0.1.0", "esm": "~3.2.25", "express": "^4.17.1", "ipfs": "~0.52.1", diff --git a/packages/concordia-pinner/src/app.js b/packages/concordia-pinner/src/app.js index f0eb924..690e450 100644 --- a/packages/concordia-pinner/src/app.js +++ b/packages/concordia-pinner/src/app.js @@ -1,7 +1,9 @@ import express from 'express'; import _ from 'lodash'; import isReachable from 'is-reachable'; -import { API_PORT, RENDEZVOUS_URL, WEB3_PROVIDER_URL } from './constants'; +import { pinnerApiPort } from 'concordia-shared/src/environment/interpolated/pinner'; +import getWeb3ProviderUrl from 'concordia-shared/src/utils/web3'; +import getRendezvousUrl from 'concordia-shared/src/utils/rendezvous'; const POLLING_INTERVAL = 1000; @@ -10,8 +12,8 @@ const responseBody = { id: '', localAddresses: [], peers: [], totalPeers: 0, repoStats: {}, }, orbit: { identity: {}, databases: [] }, - web3: { url: WEB3_PROVIDER_URL, reachable: false }, - rendezvous: { url: RENDEZVOUS_URL, reachable: false }, + web3: { url: getWeb3ProviderUrl(), reachable: false }, + rendezvous: { url: getRendezvousUrl(), reachable: false }, timestamp: 0, }; @@ -26,8 +28,8 @@ async function getStats(orbit) { const uniquePeers = _.uniqBy(peers, 'peer'); const orbitIdentity = orbit.identity; const databases = Object.keys(orbit.stores); - const isWeb3Reachable = await isReachable(WEB3_PROVIDER_URL); - const isRendezvousReachable = await isReachable(RENDEZVOUS_URL); + const isWeb3Reachable = await isReachable(getWeb3ProviderUrl()); + const isRendezvousReachable = await isReachable(getRendezvousUrl()); const timestamp = +new Date(); responseBody.ipfs.id = id; @@ -51,8 +53,8 @@ const startAPI = (orbit) => { res.send(responseBody); }); - app.listen(API_PORT, () => { - console.log(`Pinner API at http://localhost:${API_PORT}!`); + app.listen(pinnerApiPort, () => { + console.log(`Pinner API at http://localhost:${pinnerApiPort}!`); }); setInterval(getStats, POLLING_INTERVAL, orbit); diff --git a/packages/concordia-pinner/src/constants.js b/packages/concordia-pinner/src/constants.js index e837f85..6a8055f 100644 --- a/packages/concordia-pinner/src/constants.js +++ b/packages/concordia-pinner/src/constants.js @@ -1,17 +1,6 @@ -import breezeOptions, { RENDEZVOUS_URL } from 'concordia-app/src/options/breezeOptions'; -import { WEB3_HOST_DEFAULT, WEB3_PORT_DEFAULT } from 'concordia-app/src/constants/configuration/defaults'; import path from 'path'; +import getBreezeConfiguration from 'concordia-shared/src/configuration/breezeConfiguration'; -const { WEB3_HOST, WEB3_PORT } = process.env; - -const API_PORT = process.env.PINNER_API_PORT || 4444; - -const WEB3_PROVIDER_URL = (WEB3_HOST !== undefined && WEB3_PORT !== undefined) - ? `ws://${WEB3_HOST}:${WEB3_PORT}` - : `ws://${WEB3_HOST_DEFAULT}:${WEB3_PORT_DEFAULT}`; - -export const swarmAddresses = breezeOptions.ipfs.config.Addresses.Swarm; +export const swarmAddresses = getBreezeConfiguration().ipfs.config.Addresses.Swarm; export const ORBIT_DIRECTORY_DEFAULT = path.join(__dirname, '..', 'orbitdb'); - -export { API_PORT, WEB3_PROVIDER_URL, RENDEZVOUS_URL }; diff --git a/packages/concordia-pinner/src/index.js b/packages/concordia-pinner/src/index.js index 57566b8..401bced 100644 --- a/packages/concordia-pinner/src/index.js +++ b/packages/concordia-pinner/src/index.js @@ -2,10 +2,10 @@ import Web3 from 'web3'; import Contract from 'web3-eth-contract'; import IPFS from 'ipfs'; import { contracts } from 'concordia-contracts'; -import { FORUM_CONTRACT } from 'concordia-app/src/constants/contracts/ContractNames'; +import { FORUM_CONTRACT } from 'concordia-shared/src/constants/contracts/ContractNames'; +import getWeb3ProviderUrl from 'concordia-shared/src/utils/web3'; import { createOrbitInstance, getPeerDatabases, openKVDBs } from './utils/orbitUtils'; import ipfsOptions from './options/ipfsOptions'; -import { WEB3_PROVIDER_URL } from './constants'; import startAPI from './app'; process.on('unhandledRejection', (error) => { @@ -26,7 +26,7 @@ const getDeployedContract = async (web3) => { return web3.eth.net.getId() .then((networkId) => forumContract.networks[networkId].address) .then((contractAddress) => { - Contract.setProvider(WEB3_PROVIDER_URL); + Contract.setProvider(getWeb3ProviderUrl()); const contract = new Contract(forumContract.abi, contractAddress); return { contract, contractAddress }; @@ -54,7 +54,7 @@ const handleWeb3LogEvent = (web3, eventJsonInterface, orbit) => (error, result) const main = async () => { console.log('Initializing...'); - const web3 = new Web3(new Web3.providers.WebsocketProvider(WEB3_PROVIDER_URL)); + const web3 = new Web3(new Web3.providers.WebsocketProvider(getWeb3ProviderUrl())); getDeployedContract(web3) .then(({ contract, contractAddress }) => IPFS.create(ipfsOptions) diff --git a/packages/concordia-shared/.eslintrc.js b/packages/concordia-shared/.eslintrc.js new file mode 100644 index 0000000..96481bd --- /dev/null +++ b/packages/concordia-shared/.eslintrc.js @@ -0,0 +1,60 @@ +module.exports = { + 'env': { + 'browser': true, + 'es6': true, + 'jest': true + }, + 'extends': [ + 'plugin:react/recommended', + 'airbnb' + ], + 'globals': { + 'Atomics': 'readonly', + 'SharedArrayBuffer': 'readonly' + }, + parser: 'babel-eslint', + 'parserOptions': { + 'ecmaFeatures': { + 'jsx': true + }, + 'ecmaVersion': 2018, + 'sourceType': 'module' + }, + 'plugins': [ + 'react', + 'react-hooks', + ], + 'rules': { + 'react/jsx-props-no-spreading': 'off', + 'import/extensions': 'off', + "react/jsx-indent": [ + 'error', + 4, + { + checkAttributes: true, + indentLogicalExpressions: true + } + ], + 'react/require-default-props': 'off', + 'react/prop-types': 'off', + 'react-hooks/rules-of-hooks': 'error', + 'react-hooks/exhaustive-deps': 'error', + 'max-len': ['warn', {'code': 120, 'tabWidth': 4}], + 'no-unused-vars': 'warn', + 'no-console': 'warn', + 'no-shadow': 'warn', + "no-multi-str": "warn", + "jsx-a11y/label-has-associated-control": [ 2, { + "labelAttributes": ["label"], + "controlComponents": ["Input"], + "depth": 3, + }], + }, + 'settings': { + 'import/resolver': { + 'node': { + 'extensions': ['.js', '.jsx'] + } + } + }, +}; diff --git a/packages/concordia-shared/package.json b/packages/concordia-shared/package.json new file mode 100644 index 0000000..a57542d --- /dev/null +++ b/packages/concordia-shared/package.json @@ -0,0 +1,16 @@ +{ + "name": "concordia-shared", + "version": "0.1.0", + "private": true, + "scripts": { + "lint": "eslint --ext js,jsx . --format table" + }, + "devDependencies": { + "eslint": "^6.8.0", + "eslint-config-airbnb": "^18.1.0", + "eslint-plugin-import": "^2.20.2", + "eslint-plugin-jsx-a11y": "^6.2.3", + "eslint-plugin-react": "^7.19.0", + "eslint-plugin-react-hooks": "^4.2.0" + } +} diff --git a/packages/concordia-shared/src/configuration/breezeConfiguration.js b/packages/concordia-shared/src/configuration/breezeConfiguration.js new file mode 100644 index 0000000..e1ab0e0 --- /dev/null +++ b/packages/concordia-shared/src/configuration/breezeConfiguration.js @@ -0,0 +1,33 @@ +const { databases } = require('../constants/orbit/OrbitDatabases'); +const { rendezvousHost, rendezvousPort } = require('../environment/interpolated/rendezvous'); + +const getBreezeConfiguration = (identityProvider) => ({ + ipfs: { + repo: 'concordia', + config: { + Addresses: { + Swarm: [ + // Use local signaling server (see also rendezvous script in package.json) + // For more information: https://github.com/libp2p/js-libp2p-webrtc-star + `/ip4/${rendezvousHost}/tcp/${rendezvousPort}/wss/p2p-webrtc-star`, + + // Use the following public servers if needed + // '/dns4/wrtc-star1.par.dwebops.pub/tcp/443/wss/p2p-webrtc-star', + // '/dns4/ wrtc-star2.sjc.dwebops.pub/tcp/443/wss/p2p-webrtc-star' + ], + }, + }, + preload: { + enabled: false, + }, + init: { + emptyRepo: true, + }, + }, + orbit: { + identityProvider, + databases, + }, +}); + +module.exports = getBreezeConfiguration; diff --git a/packages/concordia-shared/src/configuration/web3Configuration.js b/packages/concordia-shared/src/configuration/web3Configuration.js new file mode 100644 index 0000000..91a10a8 --- /dev/null +++ b/packages/concordia-shared/src/configuration/web3Configuration.js @@ -0,0 +1,25 @@ +const getWeb3ProviderUrl = require('../utils/web3'); +const { web3PortSocketConnectMaxAttempts, web3PortSocketTimeout } = require('../environment/interpolated/web3'); +const { web3HostEnv, web3PortEnv } = require('../environment/web3Env'); + +const getWeb3Configuration = (Web3) => { + const web3WebsocketOptions = { + keepAlive: true, + timeout: web3PortSocketTimeout, + reconnect: { + maxAttempts: web3PortSocketConnectMaxAttempts, + }, + }; + + const web3 = (web3HostEnv !== undefined && web3PortEnv !== undefined) + ? new Web3(new Web3.providers.WebsocketProvider(getWeb3ProviderUrl())) + : new Web3(Web3.givenProvider || new Web3.providers.WebsocketProvider(getWeb3ProviderUrl(), web3WebsocketOptions)); + + return { + customProvider: web3, + }; +}; + +module.exports = { + getWeb3Configuration, +}; diff --git a/packages/concordia-shared/src/constants/configuration/defaults.js b/packages/concordia-shared/src/constants/configuration/defaults.js new file mode 100644 index 0000000..07ee374 --- /dev/null +++ b/packages/concordia-shared/src/constants/configuration/defaults.js @@ -0,0 +1,46 @@ +// Contracts provider +const CONTRACTS_PROVIDER_HOST_DEFAULT = '127.0.0.1'; +const CONTRACTS_PROVIDER_PORT_DEFAULT = '8400'; +const CONTRACTS_VERSION_HASH_DEFAULT = 'latest'; + +// Pinner +const PINNER_API_PORT_DEFAULT = 4444; + +// Rendezvous +const RENDEZVOUS_HOST_DEFAULT = '127.0.0.1'; +const RENDEZVOUS_PORT_DEFAULT = '9090'; + +// Web3 (probably ganache) +const WEB3_HOST_DEFAULT = '127.0.0.1'; +const WEB3_PORT_DEFAULT = '8545'; +const WEB3_HOST_TEST_DEFAULT = '127.0.0.1'; +const WEB3_PORT_TEST_DEFAULT = '8546'; +const WEB3_PORT_SOCKET_TIMEOUT_DEFAULT = 30000; +const WEB3_PORT_SOCKET_CONNECT_MAX_ATTEMPTS_DEFAULT = 3; + +module.exports = Object.freeze({ + contractsProvider: { + host: CONTRACTS_PROVIDER_HOST_DEFAULT, + port: CONTRACTS_PROVIDER_PORT_DEFAULT, + hash: CONTRACTS_VERSION_HASH_DEFAULT, + }, + pinner: { + port: PINNER_API_PORT_DEFAULT, + }, + rendezvous: { + host: RENDEZVOUS_HOST_DEFAULT, + port: RENDEZVOUS_PORT_DEFAULT, + }, + web3: { + develop: { + chainHost: WEB3_HOST_DEFAULT, + chainPort: WEB3_PORT_DEFAULT, + }, + test: { + chainHost: WEB3_HOST_TEST_DEFAULT, + chainPort: WEB3_PORT_TEST_DEFAULT, + }, + socketTimeout: WEB3_PORT_SOCKET_TIMEOUT_DEFAULT, + socketConnectMaxAttempts: WEB3_PORT_SOCKET_CONNECT_MAX_ATTEMPTS_DEFAULT, + }, +}); diff --git a/packages/concordia-shared/src/constants/contracts/ContractNames.js b/packages/concordia-shared/src/constants/contracts/ContractNames.js new file mode 100644 index 0000000..1e6751d --- /dev/null +++ b/packages/concordia-shared/src/constants/contracts/ContractNames.js @@ -0,0 +1,16 @@ +const FORUM_CONTRACT = 'Forum'; +const POST_VOTING_CONTRACT = 'PostVoting'; +const VOTING_CONTRACT = 'Voting'; + +const CONTRACTS = [ + FORUM_CONTRACT, + POST_VOTING_CONTRACT, + VOTING_CONTRACT, +]; + +module.exports = Object.freeze({ + FORUM_CONTRACT, + POST_VOTING_CONTRACT, + VOTING_CONTRACT, + CONTRACTS, +}); diff --git a/packages/concordia-shared/src/constants/contracts/events/ForumContractEvents.js b/packages/concordia-shared/src/constants/contracts/events/ForumContractEvents.js new file mode 100644 index 0000000..4a741db --- /dev/null +++ b/packages/concordia-shared/src/constants/contracts/events/ForumContractEvents.js @@ -0,0 +1,19 @@ +const USER_SIGNED_UP_EVENT = 'UserSignedUp'; +const USERNAME_UPDATED_EVENT = 'UsernameUpdated'; +const TOPIC_CREATED_EVENT = 'TopicCreated'; +const POST_CREATED_EVENT = 'PostCreated'; + +const forumContractEvents = Object.freeze([ + USER_SIGNED_UP_EVENT, + USERNAME_UPDATED_EVENT, + TOPIC_CREATED_EVENT, + POST_CREATED_EVENT, +]); + +module.exports = { + USER_SIGNED_UP_EVENT, + USERNAME_UPDATED_EVENT, + TOPIC_CREATED_EVENT, + POST_CREATED_EVENT, + forumContractEvents, +}; diff --git a/packages/concordia-shared/src/constants/contracts/events/index.js b/packages/concordia-shared/src/constants/contracts/events/index.js new file mode 100644 index 0000000..09e71a3 --- /dev/null +++ b/packages/concordia-shared/src/constants/contracts/events/index.js @@ -0,0 +1,8 @@ +const forumContractEvents = require('./ForumContractEvents'); +const { FORUM_CONTRACT } = require('../ContractNames'); + +const appEvents = Object.freeze({ + [FORUM_CONTRACT]: forumContractEvents, +}); + +module.exports = appEvents; diff --git a/packages/concordia-app/src/constants/orbit/OrbitDatabases.js b/packages/concordia-shared/src/constants/orbit/OrbitDatabases.js similarity index 50% rename from packages/concordia-app/src/constants/orbit/OrbitDatabases.js rename to packages/concordia-shared/src/constants/orbit/OrbitDatabases.js index bf85018..75048f6 100644 --- a/packages/concordia-app/src/constants/orbit/OrbitDatabases.js +++ b/packages/concordia-shared/src/constants/orbit/OrbitDatabases.js @@ -1,6 +1,6 @@ -export const USER_DATABASE = 'user'; -export const TOPICS_DATABASE = 'topics'; -export const POSTS_DATABASE = 'posts'; +const USER_DATABASE = 'user'; +const TOPICS_DATABASE = 'topics'; +const POSTS_DATABASE = 'posts'; const databases = [ { @@ -17,4 +17,9 @@ const databases = [ }, ]; -export default databases; +module.exports = Object.freeze({ + USER_DATABASE, + TOPICS_DATABASE, + POSTS_DATABASE, + databases, +}); diff --git a/packages/concordia-shared/src/environment/contractsProviderEnv.js b/packages/concordia-shared/src/environment/contractsProviderEnv.js new file mode 100644 index 0000000..3a545ca --- /dev/null +++ b/packages/concordia-shared/src/environment/contractsProviderEnv.js @@ -0,0 +1,14 @@ +// Depending on the package user (app in contrast to any of the other packages) the env var names should either include +// the REACT_APP_ prefix or not +const contractsProviderHostEnv = process.env.REACT_APP_CONTRACTS_PROVIDER_HOST + || process.env.CONTRACTS_PROVIDER_HOST; +const contractsProviderPortEnv = process.env.REACT_APP_CONTRACTS_PROVIDER_PORT + || process.env.CONTRACTS_PROVIDER_PORT; +const contractsVersionHashEnv = process.env.REACT_APP_CONTRACTS_VERSION_HASH + || process.env.CONTRACTS_VERSION_HASH; + +module.exports = { + contractsProviderHostEnv, + contractsProviderPortEnv, + contractsVersionHashEnv, +}; diff --git a/packages/concordia-shared/src/environment/interpolated/contractsProvider.js b/packages/concordia-shared/src/environment/interpolated/contractsProvider.js new file mode 100644 index 0000000..ea4537e --- /dev/null +++ b/packages/concordia-shared/src/environment/interpolated/contractsProvider.js @@ -0,0 +1,21 @@ +const { + contractsProviderHostEnv, contractsProviderPortEnv, contractsVersionHashEnv, +} = require('../contractsProviderEnv'); + +const { + contractsProvider: { + host: CONTRACTS_PROVIDER_HOST_DEFAULT, + port: CONTRACTS_PROVIDER_PORT_DEFAULT, + hash: CONTRACTS_VERSION_HASH_DEFAULT, + }, +} = require('../../constants/configuration/defaults'); + +const contractsProviderHost = contractsProviderHostEnv || CONTRACTS_PROVIDER_HOST_DEFAULT; +const contractsProviderPort = contractsProviderPortEnv || CONTRACTS_PROVIDER_PORT_DEFAULT; +const contractsVersionHash = contractsVersionHashEnv || CONTRACTS_VERSION_HASH_DEFAULT; + +module.exports = { + contractsProviderHost, + contractsProviderPort, + contractsVersionHash, +}; diff --git a/packages/concordia-shared/src/environment/interpolated/pinner.js b/packages/concordia-shared/src/environment/interpolated/pinner.js new file mode 100644 index 0000000..5c81a88 --- /dev/null +++ b/packages/concordia-shared/src/environment/interpolated/pinner.js @@ -0,0 +1,12 @@ +const { + pinner: { + port: PINNER_API_PORT_DEFAULT, + }, +} = require('../../constants/configuration/defaults'); +const { pinnerApiPortEnv } = require('../pinnerEnv'); + +const pinnerApiPort = pinnerApiPortEnv || PINNER_API_PORT_DEFAULT; + +module.exports = { + pinnerApiPort, +}; diff --git a/packages/concordia-shared/src/environment/interpolated/rendezvous.js b/packages/concordia-shared/src/environment/interpolated/rendezvous.js new file mode 100644 index 0000000..d683408 --- /dev/null +++ b/packages/concordia-shared/src/environment/interpolated/rendezvous.js @@ -0,0 +1,15 @@ +const { rendezvousHostEnv, rendezvousPortEnv } = require('../rendezvousEnv'); +const { + rendezvous: { + host: RENDEZVOUS_HOST_DEFAULT, + port: RENDEZVOUS_PORT_DEFAULT, + }, +} = require('../../constants/configuration/defaults'); + +const rendezvousHost = rendezvousHostEnv || RENDEZVOUS_HOST_DEFAULT; +const rendezvousPort = rendezvousPortEnv || RENDEZVOUS_PORT_DEFAULT; + +module.exports = { + rendezvousHost, + rendezvousPort, +}; diff --git a/packages/concordia-shared/src/environment/interpolated/shared.js b/packages/concordia-shared/src/environment/interpolated/shared.js new file mode 100644 index 0000000..6cf342a --- /dev/null +++ b/packages/concordia-shared/src/environment/interpolated/shared.js @@ -0,0 +1,9 @@ +const contractsProvider = require('./contractsProvider'); +const rendezvous = require('./rendezvous'); +const web3 = require('./web3'); + +module.exports = { + contractsProvider, + rendezvous, + web3, +}; diff --git a/packages/concordia-shared/src/environment/interpolated/web3.js b/packages/concordia-shared/src/environment/interpolated/web3.js new file mode 100644 index 0000000..4fe1e9d --- /dev/null +++ b/packages/concordia-shared/src/environment/interpolated/web3.js @@ -0,0 +1,37 @@ +const { + web3: { + develop: { + chainHost: WEB3_HOST_DEFAULT, + chainPort: WEB3_PORT_DEFAULT, + }, + test: { + chainHost: WEB3_HOST_TEST_DEFAULT, + chainPort: WEB3_PORT_TEST_DEFAULT, + }, + socketConnectMaxAttempts: WEB3_PORT_SOCKET_CONNECT_MAX_ATTEMPTS_DEFAULT, + socketTimeout: WEB3_PORT_SOCKET_TIMEOUT_DEFAULT, + }, +} = require('../../constants/configuration/defaults'); +const { + web3HostEnv, web3HostTestEnv, web3PortEnv, web3PortSocketConnectMaxAttemptsEnv, web3PortSocketTimeoutEnv, + web3PortTestEnv, +} = require('../web3Env'); + +const web3Host = web3HostEnv || WEB3_HOST_DEFAULT; +const web3Port = web3PortEnv || WEB3_PORT_DEFAULT; + +const web3HostTest = web3HostTestEnv || WEB3_HOST_TEST_DEFAULT; +const web3PortTest = web3PortTestEnv || WEB3_PORT_TEST_DEFAULT; + +const web3PortSocketTimeout = web3PortSocketTimeoutEnv || WEB3_PORT_SOCKET_TIMEOUT_DEFAULT; +const web3PortSocketConnectMaxAttempts = web3PortSocketConnectMaxAttemptsEnv + || WEB3_PORT_SOCKET_CONNECT_MAX_ATTEMPTS_DEFAULT; + +module.exports = { + web3Host, + web3Port, + web3HostTest, + web3PortTest, + web3PortSocketTimeout, + web3PortSocketConnectMaxAttempts, +}; diff --git a/packages/concordia-shared/src/environment/pinnerEnv.js b/packages/concordia-shared/src/environment/pinnerEnv.js new file mode 100644 index 0000000..2ab5cbf --- /dev/null +++ b/packages/concordia-shared/src/environment/pinnerEnv.js @@ -0,0 +1,7 @@ +// Depending on the package user (app in contrast to any of the other packages) the env var names should either include +// the REACT_APP_ prefix or not +const pinnerApiPortEnv = process.env.REACT_APP_PINNER_API_PORT || process.env.PINNER_API_PORT; + +module.exports = { + pinnerApiPortEnv, +}; diff --git a/packages/concordia-shared/src/environment/rendezvousEnv.js b/packages/concordia-shared/src/environment/rendezvousEnv.js new file mode 100644 index 0000000..44f8965 --- /dev/null +++ b/packages/concordia-shared/src/environment/rendezvousEnv.js @@ -0,0 +1,9 @@ +// Depending on the package user (app in contrast to any of the other packages) the env var names should either include +// the REACT_APP_ prefix or not +const rendezvousHostEnv = process.env.REACT_APP_RENDEZVOUS_HOST || process.env.RENDEZVOUS_HOST; +const rendezvousPortEnv = process.env.REACT_APP_RENDEZVOUS_PORT || process.env.RENDEZVOUS_PORT; + +module.exports = { + rendezvousHostEnv, + rendezvousPortEnv, +}; diff --git a/packages/concordia-shared/src/environment/sharedEnv.js b/packages/concordia-shared/src/environment/sharedEnv.js new file mode 100644 index 0000000..28c2920 --- /dev/null +++ b/packages/concordia-shared/src/environment/sharedEnv.js @@ -0,0 +1,9 @@ +const contractsProvider = require('./contractsProviderEnv'); +const rendezvous = require('./rendezvousEnv'); +const web3 = require('./web3Env'); + +module.exports = { + contractsProvider, + rendezvous, + web3, +}; diff --git a/packages/concordia-shared/src/environment/web3Env.js b/packages/concordia-shared/src/environment/web3Env.js new file mode 100644 index 0000000..7bc2041 --- /dev/null +++ b/packages/concordia-shared/src/environment/web3Env.js @@ -0,0 +1,24 @@ +// Depending on the package user (app in contrast to any of the other packages) the env var names should either include +// the REACT_APP_ prefix or not +const web3HostEnv = process.env.REACT_APP_WEB3_HOST + || process.env.WEB3_HOST; +const web3PortEnv = process.env.REACT_APP_WEB3_PORT + || process.env.WEB3_PORT; + +// Web3 test environment shouldn't be available to the react app +const web3HostTestEnv = process.env.WEB3_HOST_TEST; +const web3PortTestEnv = process.env.WEB3_PORT_TEST; + +const web3PortSocketTimeoutEnv = process.env.REACT_APP_WEB3_PORT_SOCKET_TIMEOUT + || process.env.WEB3_PORT_SOCKET_TIMEOUT; +const web3PortSocketConnectMaxAttemptsEnv = process.env.REACT_APP_WEB3_PORT_SOCKET_CONNECT_MAX_ATTEMPTS + || process.env.WEB3_PORT_SOCKET_CONNECT_MAX_ATTEMPTS; + +module.exports = { + web3HostEnv, + web3PortEnv, + web3HostTestEnv, + web3PortTestEnv, + web3PortSocketTimeoutEnv, + web3PortSocketConnectMaxAttemptsEnv, +}; diff --git a/packages/concordia-shared/src/utils/rendezvous.js b/packages/concordia-shared/src/utils/rendezvous.js new file mode 100644 index 0000000..8d862fc --- /dev/null +++ b/packages/concordia-shared/src/utils/rendezvous.js @@ -0,0 +1,5 @@ +const { rendezvousHost, rendezvousPort } = require('../environment/interpolated/rendezvous'); + +const getRendezvousUrl = () => `http://${rendezvousHost}:${rendezvousPort}`; + +module.exports = getRendezvousUrl; diff --git a/packages/concordia-shared/src/utils/web3.js b/packages/concordia-shared/src/utils/web3.js new file mode 100644 index 0000000..4c7adc8 --- /dev/null +++ b/packages/concordia-shared/src/utils/web3.js @@ -0,0 +1,6 @@ +const { web3Port } = require('../environment/interpolated/web3'); +const { web3Host } = require('../environment/interpolated/web3'); + +const getWeb3ProviderUrl = () => `ws://${web3Host}:${web3Port}`; + +module.exports = getWeb3ProviderUrl; diff --git a/yarn.lock b/yarn.lock index 33dc661..9f8b3cd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5762,9 +5762,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= ejs@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.5.tgz#aed723844dc20acb4b170cd9ab1017e476a0d93b" - integrity sha512-dldq3ZfFtgVTJMLjOe+/3sROTzALlL9E34V4/sDtUd/KlBSS0s6U1/+WPE1B4sj9CXHJpL1M6rhNJnc9Wbal9w== + version "3.1.6" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.6.tgz#5bfd0a0689743bb5268b3550cceeebbc1702822a" + integrity sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw== dependencies: jake "^10.6.1"