From 3c048587a58802123e7b0fe68771c69638b0140f Mon Sep 17 00:00:00 2001 From: Marcin Rataj Date: Tue, 3 Sep 2019 14:59:36 +0200 Subject: [PATCH 01/16] feat: enable TCP transport and TCP Bootstrappers --- .../lib/ipfs-client/embedded-chromesockets.js | 23 ++++- add-on/src/lib/options.js | 31 +++++++ yarn.lock | 93 ++++++++----------- 3 files changed, 89 insertions(+), 58 deletions(-) diff --git a/add-on/src/lib/ipfs-client/embedded-chromesockets.js b/add-on/src/lib/ipfs-client/embedded-chromesockets.js index 8b62ed18f..1e8dd68e1 100644 --- a/add-on/src/lib/ipfs-client/embedded-chromesockets.js +++ b/add-on/src/lib/ipfs-client/embedded-chromesockets.js @@ -2,6 +2,11 @@ /* eslint-env browser, webextensions */ const browser = require('webextension-polyfill') +/* ********************************************************* + This file is a wip sandbox. + Code will be refactored when kinks are ironed out. + ********************************************************* */ + const debug = require('debug') const log = debug('ipfs-companion:client:embedded') log.error = debug('ipfs-companion:client:embedded:error') @@ -18,6 +23,12 @@ const multiaddr = require('multiaddr') const maToUri = require('multiaddr-to-uri') const getPort = require('get-port') +// libp2p +// const WS = require('libp2p-websockets') +// const WSM = require('libp2p-websocket-star-multi') +const TCP = require('libp2p-tcp') +const Bootstrap = require('libp2p-bootstrap') + const { optionDefaults } = require('../options') // js-ipfs with embedded hapi HTTP server @@ -26,7 +37,15 @@ let nodeHttpApi = null async function buildConfig (opts) { const defaultOpts = JSON.parse(optionDefaults.ipfsNodeConfig) - defaultOpts.libp2p = { + const userOpts = JSON.parse(opts.ipfsNodeConfig) + + const ipfsNodeConfig = mergeOptions.call({ concatArrays: true }, defaultOpts, userOpts, { start: false }) + + ipfsNodeConfig.libp2p = { + modules: { + transport: [new TCP()], + peerDiscovery: [new Bootstrap({ list: ipfsNodeConfig.config.Bootstrap })] + }, config: { dht: { // TODO: check if below is needed after js-ipfs is released with DHT disabled @@ -34,8 +53,6 @@ async function buildConfig (opts) { } } } - const userOpts = JSON.parse(opts.ipfsNodeConfig) - const ipfsNodeConfig = mergeOptions.call({ concatArrays: true }, defaultOpts, userOpts, { start: false }) // Detect when API or Gateway port is not available (taken by something else) // We find the next free port and update configuration to use it instead diff --git a/add-on/src/lib/options.js b/add-on/src/lib/options.js index 32a242b46..4541350f6 100644 --- a/add-on/src/lib/options.js +++ b/add-on/src/lib/options.js @@ -49,6 +49,33 @@ function buildDefaultIpfsNodeConfig () { config: { Addresses: { Swarm: [] + }, + Bootstrap: [ + '/ip4/104.236.176.52/tcp/4001/ipfs/QmSoLnSGccFuZQJzRadHn95W2CrSFmZuTdDWP8HXaHca9z', + '/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ', + '/ip4/104.236.179.241/tcp/4001/ipfs/QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM', + '/ip4/162.243.248.213/tcp/4001/ipfs/QmSoLueR4xBeUbY9WZ9xGUUxunbKWcrNFTDAadQJmocnWm', + '/ip4/128.199.219.111/tcp/4001/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu', + '/ip4/104.236.76.40/tcp/4001/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64', + '/ip4/178.62.158.247/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd', + '/ip4/178.62.61.185/tcp/4001/ipfs/QmSoLMeWqB7YGVLJN3pNLQpmmEk35v6wYtsMGLzSr5QBU3', + '/ip4/104.236.151.122/tcp/4001/ipfs/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx', + '/ip6/2604:a880:1:20::1f9:9001/tcp/4001/ipfs/QmSoLnSGccFuZQJzRadHn95W2CrSFmZuTdDWP8HXaHca9z', + '/ip6/2604:a880:1:20::203:d001/tcp/4001/ipfs/QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM', + '/ip6/2604:a880:0:1010::23:d001/tcp/4001/ipfs/QmSoLueR4xBeUbY9WZ9xGUUxunbKWcrNFTDAadQJmocnWm', + '/ip6/2400:6180:0:d0::151:6001/tcp/4001/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu', + '/ip6/2604:a880:800:10::4a:5001/tcp/4001/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64', + '/ip6/2a03:b0c0:0:1010::23:1001/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd', + '/ip6/2a03:b0c0:1:d0::e7:1/tcp/4001/ipfs/QmSoLMeWqB7YGVLJN3pNLQpmmEk35v6wYtsMGLzSr5QBU3', + '/ip6/2604:a880:1:20::1d9:6001/tcp/4001/ipfs/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx', + '/dns4/node0.preload.ipfs.io/tcp/443/wss/ipfs/QmZMxNdpMkewiVZLMRxaNxUeZpDUb34pWjZ1kZvsd16Zic', + '/dns4/node1.preload.ipfs.io/tcp/443/wss/ipfs/Qmbut9Ywz9YEDrz8ySBSgWyJk41Uvm2QJPhwDJzJyGFsD6' + ], + Swarm: { + ConnMgr: { + LowWater: 50, + HighWater: 100 + } } } } @@ -61,9 +88,11 @@ function buildDefaultIpfsNodeConfig () { // Until we have MulticastDNS+DNS, peer discovery is done over ws-star config.config.Addresses.Swarm = [ + '/ip4/0.0.0.0/tcp/0', '/dns4/ws-star1.par.dwebops.pub/tcp/443/wss/p2p-websocket-star', '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star' ] + /* // Until DHT and p2p transport are ready, delegate + preload // Note: we use .preload.ipfs.io and .delegate.ipfs.io as means of http sharding (12 instead of 6 concurrent requests) const delegates = [ @@ -80,6 +109,8 @@ function buildDefaultIpfsNodeConfig () { '/dns4/node0.preload.ipfs.io/tcp/443/https' ] } + */ + config.preload = { enabled: false } /* (Sidenote on why we need API for Web UI) Gateway can run without API port, diff --git a/yarn.lock b/yarn.lock index 60bb52ed2..c6c6af1ba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -729,13 +729,20 @@ resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.0.0.tgz#9f05469c88cb2fd3dcd624776b54ee95c312126a" integrity sha512-mV6T0IYqb0xL1UALPFplXYQmR0twnXG0M6jUswpquqT2sD12BOiCiLy3EvMp/Fy7s3DZElC4/aPjEjo2jeZpvw== -"@hapi/ammo@3.x.x", "@hapi/ammo@^3.1.0": +"@hapi/ammo@3.x.x": version "3.1.0" resolved "https://registry.yarnpkg.com/@hapi/ammo/-/ammo-3.1.0.tgz#a3281ecb68bf7af2ffa6d0f7656536a7d23700ed" integrity sha512-iFQBEfm3WwWy8JdPQ8l6qXVLPtzmjITVfaxwl6dfoP8kKv6i2Uk43Ax+ShkNfOVyfEnNggqL2IyZTY3DaaRGNg== dependencies: "@hapi/hoek" "6.x.x" +"@hapi/ammo@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@hapi/ammo/-/ammo-3.1.1.tgz#ab700dac10f0b7fc5b7168c550c6be45ec3b981b" + integrity sha512-NYFK27VSPGyQ/KmOQedpQH4PSjE7awLntepX68vrYtRvuJO21W1kX0bK2p3C+6ltUwtCQSvmNT8a4uMVAysC6Q== + dependencies: + "@hapi/hoek" "8.x.x" + "@hapi/boom@7.x.x", "@hapi/boom@^7.4.2": version "7.4.2" resolved "https://registry.yarnpkg.com/@hapi/boom/-/boom-7.4.2.tgz#c16957cd09796f6c1bfb4031bdc39d66d6d750c3" @@ -6933,7 +6940,7 @@ ipfs-css@0.13.1: resolved "https://registry.yarnpkg.com/ipfs-css/-/ipfs-css-0.13.1.tgz#f751be9cc89e30c34c50325848233f6da6b6728e" integrity sha512-hofJSYVBE3VC3/MOYZKfF66SKuHgnYkhXUmPDS8PISI8ygcljGOyBSSU4Je3dfgZX5UHDBEnzq5XyrTU822EDg== -ipfs-http-client@33.1.1, ipfs-http-client@^33.0.1, ipfs-http-client@^33.0.2: +ipfs-http-client@33.1.1, ipfs-http-client@^33.0.1, ipfs-http-client@^33.0.2, ipfs-http-client@^33.1.0: version "33.1.1" resolved "https://registry.yarnpkg.com/ipfs-http-client/-/ipfs-http-client-33.1.1.tgz#6ddc13e86f8db768093290b19537d2388c74dd45" integrity sha512-iwtLL3lOIzxXJFwLnOEtFUv1cYTuWJ0NauD7rpMEd/y4C7z6fuN6TSF4h547lxMh7sJWv+6Z0PmOA5N8FzUHJw== @@ -6984,57 +6991,6 @@ ipfs-http-client@33.1.1, ipfs-http-client@^33.0.1, ipfs-http-client@^33.0.2: tar-stream "^2.0.1" through2 "^3.0.1" -ipfs-http-client@^33.1.0: - version "33.1.0" - resolved "https://registry.yarnpkg.com/ipfs-http-client/-/ipfs-http-client-33.1.0.tgz#4d3beceba27fcef26cf1940375a5f8c9d609f0dd" - integrity sha512-hkS8nXay3DGKb/KXU1RDvTyxnvkAdhS5enlXxNXaS7yKvADlf5SEuQGYjW+VknkPPQ4FNbY3JttQ3YW+LTuoRA== - dependencies: - async "^2.6.1" - bignumber.js "^9.0.0" - bl "^3.0.0" - bs58 "^4.0.1" - buffer "^5.2.1" - cids "~0.7.1" - concat-stream "github:hugomrdias/concat-stream#feat/smaller" - debug "^4.1.0" - detect-node "^2.0.4" - end-of-stream "^1.4.1" - err-code "^1.1.2" - flatmap "0.0.3" - glob "^7.1.3" - ipfs-block "~0.8.1" - ipfs-utils "~0.0.3" - ipld-dag-cbor "~0.15.0" - ipld-dag-pb "~0.17.3" - ipld-raw "^4.0.0" - is-ipfs "~0.6.1" - is-pull-stream "0.0.0" - is-stream "^2.0.0" - iso-stream-http "~0.1.2" - iso-url "~0.4.6" - just-kebab-case "^1.1.0" - just-map-keys "^1.1.0" - kind-of "^6.0.2" - lru-cache "^5.1.1" - multiaddr "^6.0.6" - multibase "~0.6.0" - multicodec "~0.5.1" - multihashes "~0.4.14" - ndjson "github:hugomrdias/ndjson#feat/readable-stream3" - once "^1.4.0" - peer-id "~0.12.2" - peer-info "~0.15.1" - promisify-es6 "^1.0.3" - pull-defer "~0.2.3" - pull-stream "^3.6.9" - pull-to-stream "~0.1.1" - pump "^3.0.0" - qs "^6.5.2" - readable-stream "^3.1.1" - stream-to-pull-stream "^1.7.2" - tar-stream "^2.0.1" - through2 "^3.0.1" - ipfs-http-response@0.3.1, ipfs-http-response@~0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/ipfs-http-response/-/ipfs-http-response-0.3.1.tgz#5cc351f8abf5f77dae47a41781fd7bc0c88fcaf8" @@ -9036,7 +8992,7 @@ libp2p-websocket-star@~0.10.2: socket.io-client "^2.1.1" socket.io-pull-stream "~0.1.5" -libp2p-websockets@^0.12.2, libp2p-websockets@~0.12.2: +libp2p-websockets@^0.12.2: version "0.12.2" resolved "https://registry.yarnpkg.com/libp2p-websockets/-/libp2p-websockets-0.12.2.tgz#eecf25564cbe6b0e9017bb411c2a8abec8c9f29b" integrity sha512-K/Jg/fWFfP5NyiLx01EJcoAcYQO00RSHpZfPQDR3May6ABvOseAjq45SrUDdDCW5mCS0502Vz1VjRrZdOXw8zQ== @@ -9048,6 +9004,18 @@ libp2p-websockets@^0.12.2, libp2p-websockets@~0.12.2: multiaddr-to-uri "^4.0.1" pull-ws hugomrdias/pull-ws#fix/bundle-size +libp2p-websockets@~0.12.2: + version "0.12.3" + resolved "https://registry.yarnpkg.com/libp2p-websockets/-/libp2p-websockets-0.12.3.tgz#f4bc201b0f381bd6b53f5e92446394761f29ceb3" + integrity sha512-qA5YZv7RoxGUtMlcD8JwquonM0/19MCV0UPDRihCjzTi4wRgGKhIXZSwd/fs+8RRTKHMEUngAxit7ZLSlYgdQQ== + dependencies: + class-is "^1.1.0" + debug "^4.1.1" + interface-connection "~0.3.3" + mafmt "^6.0.7" + multiaddr-to-uri "^5.0.0" + pull-ws hugomrdias/pull-ws#fix/bundle-size + libp2p@~0.25.4: version "0.25.5" resolved "https://registry.yarnpkg.com/libp2p/-/libp2p-0.25.5.tgz#f7153064cb64555c4520b086a79b787bd2de2161" @@ -9952,6 +9920,13 @@ multiaddr-to-uri@4.0.1, multiaddr-to-uri@^4.0.1: dependencies: multiaddr "^6.0.3" +multiaddr-to-uri@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/multiaddr-to-uri/-/multiaddr-to-uri-5.0.0.tgz#f62421bd905d2690030acdae09b0719f60b6a91c" + integrity sha512-aVc52fdGXso3DwvVKUTjMddhLyuFBXcpGSbsIju0lKiYKFBUEREXSLpcqTOZlO8w1G1TivVmDe4CBUKQ/xMm5A== + dependencies: + multiaddr "^6.1.0" + multiaddr@6.1.0, multiaddr@^4.0.0, multiaddr@^5.0.0, multiaddr@^6.0.3, multiaddr@^6.0.4, multiaddr@^6.0.6, multiaddr@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/multiaddr/-/multiaddr-6.1.0.tgz#1f93afce58a33db5cc32a5917d8a14105d94330e" @@ -14075,7 +14050,7 @@ superagent@^3.1.0, superagent@~3.8.1: qs "^6.5.1" readable-stream "^2.3.5" -superstruct@^0.6.0, superstruct@~0.6.0, superstruct@~0.6.1: +superstruct@^0.6.0, superstruct@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.6.1.tgz#148fc3d627bb59fcfe24aa1bd2a1b8c51b1db072" integrity sha512-LDbOKL5sNbOJ00Q36iYRhSexKIptZje0/mhNznnz04wT9CmsPDZg/K/UV1dgYuCwNMuOBHTbVROZsGB9EhhK4w== @@ -14083,6 +14058,14 @@ superstruct@^0.6.0, superstruct@~0.6.0, superstruct@~0.6.1: clone-deep "^2.0.1" kind-of "^6.0.1" +superstruct@~0.6.0: + version "0.6.2" + resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.6.2.tgz#c5eb034806a17ff98d036674169ef85e4c7f6a1c" + integrity sha512-lvA97MFAJng3rfjcafT/zGTSWm6Tbpk++DP6It4Qg7oNaeM+2tdJMuVgGje21/bIpBEs6iQql1PJH6dKTjl4Ig== + dependencies: + clone-deep "^2.0.1" + kind-of "^6.0.1" + supports-color@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" From 080232112f2ecccf7c91647a547ba970dadb28a0 Mon Sep 17 00:00:00 2001 From: Marcin Rataj Date: Tue, 3 Sep 2019 15:00:18 +0200 Subject: [PATCH 02/16] feat: enable local discovery via libp2p-mdns --- .../lib/ipfs-client/embedded-chromesockets.js | 18 +++++++++++++++++- add-on/src/lib/options.js | 2 +- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/add-on/src/lib/ipfs-client/embedded-chromesockets.js b/add-on/src/lib/ipfs-client/embedded-chromesockets.js index 1e8dd68e1..43f15e816 100644 --- a/add-on/src/lib/ipfs-client/embedded-chromesockets.js +++ b/add-on/src/lib/ipfs-client/embedded-chromesockets.js @@ -27,6 +27,7 @@ const getPort = require('get-port') // const WS = require('libp2p-websockets') // const WSM = require('libp2p-websocket-star-multi') const TCP = require('libp2p-tcp') +const MulticastDNS = require('libp2p-mdns') const Bootstrap = require('libp2p-bootstrap') const { optionDefaults } = require('../options') @@ -44,9 +45,24 @@ async function buildConfig (opts) { ipfsNodeConfig.libp2p = { modules: { transport: [new TCP()], - peerDiscovery: [new Bootstrap({ list: ipfsNodeConfig.config.Bootstrap })] + peerDiscovery: [ + MulticastDNS, + new Bootstrap({ list: ipfsNodeConfig.config.Bootstrap }) + ] }, config: { + peerDiscovery: { + autoDial: true, + mdns: { + enabled: true + }, + bootstrap: { + enabled: true + }, + websocketStar: { + enabled: true + } + }, dht: { // TODO: check if below is needed after js-ipfs is released with DHT disabled enabled: false diff --git a/add-on/src/lib/options.js b/add-on/src/lib/options.js index 4541350f6..11ed8a624 100644 --- a/add-on/src/lib/options.js +++ b/add-on/src/lib/options.js @@ -24,7 +24,7 @@ exports.optionDefaults = Object.freeze({ ipfsApiUrl: buildIpfsApiUrl(), ipfsApiPollMs: 3000, ipfsProxy: true, // window.ipfs - logNamespaces: 'jsipfs*,ipfs*,libp2p-delegated*,-*:ipns*,-ipfs:preload*,-ipfs-http-client:request*' + logNamespaces: 'jsipfs*,ipfs*,libp2p:mdns*,libp2p-delegated*,-*:ipns*,-ipfs:preload*,-ipfs-http-client:request*' }) function buildCustomGatewayUrl () { From 79ebbeec37a78a3e97699a401999554045e0574b Mon Sep 17 00:00:00 2001 From: Marcin Rataj Date: Tue, 3 Sep 2019 15:10:33 +0200 Subject: [PATCH 03/16] feat: connect to preload nodes, but over tcp --- add-on/src/lib/options.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/add-on/src/lib/options.js b/add-on/src/lib/options.js index 11ed8a624..f7182f9e6 100644 --- a/add-on/src/lib/options.js +++ b/add-on/src/lib/options.js @@ -68,13 +68,14 @@ function buildDefaultIpfsNodeConfig () { '/ip6/2a03:b0c0:0:1010::23:1001/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd', '/ip6/2a03:b0c0:1:d0::e7:1/tcp/4001/ipfs/QmSoLMeWqB7YGVLJN3pNLQpmmEk35v6wYtsMGLzSr5QBU3', '/ip6/2604:a880:1:20::1d9:6001/tcp/4001/ipfs/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx', - '/dns4/node0.preload.ipfs.io/tcp/443/wss/ipfs/QmZMxNdpMkewiVZLMRxaNxUeZpDUb34pWjZ1kZvsd16Zic', - '/dns4/node1.preload.ipfs.io/tcp/443/wss/ipfs/Qmbut9Ywz9YEDrz8ySBSgWyJk41Uvm2QJPhwDJzJyGFsD6' + // connect to preload nodes, but over tcp :) + '/dns4/node0.preload.ipfs.io/tcp/4001/ipfs/QmZMxNdpMkewiVZLMRxaNxUeZpDUb34pWjZ1kZvsd16Zic', + '/dns4/node1.preload.ipfs.io/tcp/4001/ipfs/Qmbut9Ywz9YEDrz8ySBSgWyJk41Uvm2QJPhwDJzJyGFsD6' ], Swarm: { ConnMgr: { - LowWater: 50, - HighWater: 100 + LowWater: 100, + HighWater: 200 } } } From 0d28d6680ae392e08b366d88654683e1d93ca727 Mon Sep 17 00:00:00 2001 From: Marcin Rataj Date: Tue, 3 Sep 2019 20:30:03 +0200 Subject: [PATCH 04/16] feat(brave): use TCP Bootstrappers --- .../lib/ipfs-client/embedded-chromesockets.js | 22 +++++++++++++++---- add-on/src/lib/options.js | 16 +++++++++++--- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/add-on/src/lib/ipfs-client/embedded-chromesockets.js b/add-on/src/lib/ipfs-client/embedded-chromesockets.js index 43f15e816..a9f5d6063 100644 --- a/add-on/src/lib/ipfs-client/embedded-chromesockets.js +++ b/add-on/src/lib/ipfs-client/embedded-chromesockets.js @@ -24,7 +24,7 @@ const maToUri = require('multiaddr-to-uri') const getPort = require('get-port') // libp2p -// const WS = require('libp2p-websockets') +const WS = require('libp2p-websockets') // const WSM = require('libp2p-websocket-star-multi') const TCP = require('libp2p-tcp') const MulticastDNS = require('libp2p-mdns') @@ -42,9 +42,19 @@ async function buildConfig (opts) { const ipfsNodeConfig = mergeOptions.call({ concatArrays: true }, defaultOpts, userOpts, { start: false }) + // TODO: replace object with function that builds the bundle + // See defaultBundle in js-ipfs/src/core/components/libp2p.js ipfsNodeConfig.libp2p = { + // node defaults instead of browser ones + switch: { + blacklistTTL: 2 * 60 * 1e3, // 2 minute base + blackListAttempts: 5, // back off 5 times + maxParallelDials: 150, + maxColdCalls: 50, + dialTimeout: 10e3 // Be strict with dial time + }, modules: { - transport: [new TCP()], + transport: [new TCP(), new WS()], peerDiscovery: [ MulticastDNS, new Bootstrap({ list: ipfsNodeConfig.config.Bootstrap }) @@ -64,8 +74,12 @@ async function buildConfig (opts) { } }, dht: { - // TODO: check if below is needed after js-ipfs is released with DHT disabled - enabled: false + // TODO: KadDHT seems to be CPU-bound in browser context, needs investigation + kBucketSize: 20, + enabled: false, + randomWalk: { + enabled: false + } } } } diff --git a/add-on/src/lib/options.js b/add-on/src/lib/options.js index f7182f9e6..f41c5c4a1 100644 --- a/add-on/src/lib/options.js +++ b/add-on/src/lib/options.js @@ -51,6 +51,7 @@ function buildDefaultIpfsNodeConfig () { Swarm: [] }, Bootstrap: [ + // TCP Bootstrappers from https://github.com/ipfs/js-ipfs/blob/v0.37.1/src/core/runtime/config-nodejs.js#L22 '/ip4/104.236.176.52/tcp/4001/ipfs/QmSoLnSGccFuZQJzRadHn95W2CrSFmZuTdDWP8HXaHca9z', '/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ', '/ip4/104.236.179.241/tcp/4001/ipfs/QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM', @@ -68,14 +69,23 @@ function buildDefaultIpfsNodeConfig () { '/ip6/2a03:b0c0:0:1010::23:1001/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd', '/ip6/2a03:b0c0:1:d0::e7:1/tcp/4001/ipfs/QmSoLMeWqB7YGVLJN3pNLQpmmEk35v6wYtsMGLzSr5QBU3', '/ip6/2604:a880:1:20::1d9:6001/tcp/4001/ipfs/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx', - // connect to preload nodes, but over tcp :) + // Twist: connect to preload nodes, but over tcp :) '/dns4/node0.preload.ipfs.io/tcp/4001/ipfs/QmZMxNdpMkewiVZLMRxaNxUeZpDUb34pWjZ1kZvsd16Zic', - '/dns4/node1.preload.ipfs.io/tcp/4001/ipfs/Qmbut9Ywz9YEDrz8ySBSgWyJk41Uvm2QJPhwDJzJyGFsD6' + '/dns4/node1.preload.ipfs.io/tcp/4001/ipfs/Qmbut9Ywz9YEDrz8ySBSgWyJk41Uvm2QJPhwDJzJyGFsD6', + // WebSockets versions from https://github.com/ipfs/js-ipfs/blob/v0.37.1/src/core/runtime/config-browser.js#L20 + '/dns4/ams-1.bootstrap.libp2p.io/tcp/443/wss/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd', + '/dns4/lon-1.bootstrap.libp2p.io/tcp/443/wss/ipfs/QmSoLMeWqB7YGVLJN3pNLQpmmEk35v6wYtsMGLzSr5QBU3', + '/dns4/sfo-3.bootstrap.libp2p.io/tcp/443/wss/ipfs/QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM', + '/dns4/sgp-1.bootstrap.libp2p.io/tcp/443/wss/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu', + '/dns4/nyc-1.bootstrap.libp2p.io/tcp/443/wss/ipfs/QmSoLueR4xBeUbY9WZ9xGUUxunbKWcrNFTDAadQJmocnWm', + '/dns4/nyc-2.bootstrap.libp2p.io/tcp/443/wss/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64', + '/dns4/node0.preload.ipfs.io/tcp/443/wss/ipfs/QmZMxNdpMkewiVZLMRxaNxUeZpDUb34pWjZ1kZvsd16Zic', + '/dns4/node1.preload.ipfs.io/tcp/443/wss/ipfs/Qmbut9Ywz9YEDrz8ySBSgWyJk41Uvm2QJPhwDJzJyGFsD6' ], Swarm: { ConnMgr: { LowWater: 100, - HighWater: 200 + HighWater: 250 } } } From 2896eda070ca3c2e44c777098ddbaff209489d3b Mon Sep 17 00:00:00 2001 From: Marcin Rataj Date: Sun, 8 Sep 2019 22:08:25 +0200 Subject: [PATCH 05/16] refactor(brave): dedicated libp2p bundle --- .../chrome-sockets/libp2p-bundle.js | 107 +++++ .../lib/ipfs-client/chrome-sockets/libp2p.js | 85 ++++ .../lib/ipfs-client/embedded-chromesockets.js | 54 +-- add-on/src/lib/options.js | 4 +- package.json | 2 +- yarn.lock | 453 ++++++++++++------ 6 files changed, 513 insertions(+), 192 deletions(-) create mode 100644 add-on/src/lib/ipfs-client/chrome-sockets/libp2p-bundle.js create mode 100644 add-on/src/lib/ipfs-client/chrome-sockets/libp2p.js diff --git a/add-on/src/lib/ipfs-client/chrome-sockets/libp2p-bundle.js b/add-on/src/lib/ipfs-client/chrome-sockets/libp2p-bundle.js new file mode 100644 index 000000000..b37474000 --- /dev/null +++ b/add-on/src/lib/ipfs-client/chrome-sockets/libp2p-bundle.js @@ -0,0 +1,107 @@ +'use strict' + +const get = require('dlv') +const mergeOptions = require('merge-options') +const errCode = require('err-code') + +const ipns = require('ipns') +const multiaddr = require('multiaddr') +const DelegatedPeerRouter = require('libp2p-delegated-peer-routing') +const DelegatedContentRouter = require('libp2p-delegated-content-routing') +const PubsubRouters = { gossipsub: require('libp2p-gossipsub') } +const Libp2pChromeSockets = require('./libp2p') + +// libp2p bundle customized for chrome.sockets +// Loosely follows https://github.com/ipfs/js-ipfs/blob/master/src/core/components/libp2p.js +module.exports = function chromeSocketsBundle ({ datastore, peerInfo, peerBook, options, config }) { + // TODO: Set up Delegate Routing based on the presence of Delegates in the config? + let contentRouting + let peerRouting + + const delegateHosts = get(options, 'config.Addresses.Delegates', + get(config, 'Addresses.Delegates', []) + ) + if (delegateHosts.length > 0) { + // Pick a random delegate host + const delegateString = delegateHosts[Math.floor(Math.random() * delegateHosts.length)] + const delegateAddr = multiaddr(delegateString).toOptions() + const delegatedApiOptions = { + host: delegateAddr.host, + // port is a string atm, so we need to convert for the check + protocol: parseInt(delegateAddr.port) === 443 ? 'https' : 'http', + port: delegateAddr.port + } + contentRouting = [new DelegatedContentRouter(peerInfo.id, delegatedApiOptions)] + peerRouting = [new DelegatedPeerRouter(delegatedApiOptions)] + } + + const getPubsubRouter = () => { + const router = get(config, 'Pubsub.Router', 'gossipsub') + + if (!PubsubRouters[router]) { + throw errCode(new Error(`Router unavailable. Configure libp2p.modules.pubsub to use the ${router} router.`), 'ERR_NOT_SUPPORTED') + } + + return PubsubRouters[router] + } + + const libp2pDefaults = { + datastore, + peerInfo, + peerBook, + modules: { + contentRouting, + peerRouting, + pubsub: getPubsubRouter() + }, + config: { + peerDiscovery: { + bootstrap: { + list: get(options, 'config.Bootstrap', + get(config, 'Bootstrap', [])) + } + }, + relay: { + enabled: get(options, 'relay.enabled', + get(config, 'relay.enabled', true)), + hop: { + enabled: get(options, 'relay.hop.enabled', + get(config, 'relay.hop.enabled', false)), + active: get(options, 'relay.hop.active', + get(config, 'relay.hop.active', false)) + } + }, + dht: { + kBucketSize: get(options, 'dht.kBucketSize', 20), + // enabled: !get(options, 'offline', false), // disable if offline, on by default + enabled: false, + randomWalk: { + enabled: false // disabled waiting for https://github.com/libp2p/js-libp2p-kad-dht/issues/86 + }, + validators: { + ipns: { + func: (key, record, cb) => ipns.validator.validate(record, key, cb) + } + }, + selectors: { + ipns: (k, records) => ipns.validator.select(records[0], records[1]) + } + }, + pubsub: { + enabled: get(config, 'Pubsub.Enabled', true) + } + }, + connectionManager: get(options, 'connectionManager', + { + maxPeers: get(config, 'Swarm.ConnMgr.HighWater'), + minPeers: get(config, 'Swarm.ConnMgr.LowWater') + }) + } + let libp2pOptions + if (typeof options.libp2p !== 'function') { + libp2pOptions = mergeOptions(libp2pDefaults, get(options, 'libp2p', {})) + } else { + libp2pOptions = libp2pDefaults + } + return new Libp2pChromeSockets(libp2pOptions) +} diff --git a/add-on/src/lib/ipfs-client/chrome-sockets/libp2p.js b/add-on/src/lib/ipfs-client/chrome-sockets/libp2p.js new file mode 100644 index 000000000..58c3b8572 --- /dev/null +++ b/add-on/src/lib/ipfs-client/chrome-sockets/libp2p.js @@ -0,0 +1,85 @@ +const TCP = require('libp2p-tcp') +const MulticastDNS = require('libp2p-mdns') +const WS = require('libp2p-websockets') +const WebSocketStarMulti = require('libp2p-websocket-star-multi') +const Bootstrap = require('libp2p-bootstrap') +const KadDHT = require('libp2p-kad-dht') +const GossipSub = require('libp2p-gossipsub') +const Multiplex = require('pull-mplex') +const SECIO = require('libp2p-secio') +const libp2p = require('libp2p') +const mergeOptions = require('merge-options') +const multiaddr = require('multiaddr') + +// libp2p class with constructor tweaked for use with chrome.sockets +// loosely follows: +// - https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js +// - https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js +class Libp2pChromeSockets extends libp2p { + constructor (_options) { + // this can be replaced once optional listening is supported with the below code. ref: https://github.com/libp2p/interface-transport/issues/41 + // const wsstar = new WebSocketStar({ id: _options.peerInfo.id }) + const wsstarServers = _options.peerInfo.multiaddrs.toArray().map(String).filter(addr => addr.includes('p2p-websocket-star')) + _options.peerInfo.multiaddrs.replace(wsstarServers.map(multiaddr), '/p2p-websocket-star') // the ws-star-multi module will replace this with the chosen ws-star servers + const wsstar = new WebSocketStarMulti({ servers: wsstarServers, id: _options.peerInfo.id, ignore_no_online: !wsstarServers.length || _options.wsStarIgnoreErrors }) + + const defaults = { + switch: { + denyTTL: 2 * 60 * 1e3, // 2 minute base + denyAttempts: 5, // back off 5 times + maxParallelDials: 150, + maxColdCalls: 50, + dialTimeout: 10e3 // Be strict with dial time + }, + modules: { + transport: [ + TCP, + WS, + wsstar + ], + streamMuxer: [ + Multiplex + ], + connEncryption: [ + SECIO + ], + peerDiscovery: [ + MulticastDNS, + Bootstrap, + wsstar.discovery + ], + dht: KadDHT, + pubsub: GossipSub + }, + config: { + peerDiscovery: { + autoDial: true, + mdns: { + enabled: true + }, + bootstrap: { + enabled: true + }, + websocketStar: { + enabled: true + } + }, + dht: { + kBucketSize: 20, + enabled: false, + randomWalk: { + enabled: false + } + }, + pubsub: { + enabled: true, + emitSelf: true + } + } + } + + super(mergeOptions(defaults, _options)) + } +} + +module.exports = Libp2pChromeSockets diff --git a/add-on/src/lib/ipfs-client/embedded-chromesockets.js b/add-on/src/lib/ipfs-client/embedded-chromesockets.js index a9f5d6063..b84c13a43 100644 --- a/add-on/src/lib/ipfs-client/embedded-chromesockets.js +++ b/add-on/src/lib/ipfs-client/embedded-chromesockets.js @@ -24,14 +24,16 @@ const maToUri = require('multiaddr-to-uri') const getPort = require('get-port') // libp2p -const WS = require('libp2p-websockets') +// const WS = require('libp2p-websockets') // const WSM = require('libp2p-websocket-star-multi') -const TCP = require('libp2p-tcp') -const MulticastDNS = require('libp2p-mdns') -const Bootstrap = require('libp2p-bootstrap') +// const TCP = require('libp2p-tcp') +// const MulticastDNS = require('libp2p-mdns') +// const Bootstrap = require('libp2p-bootstrap') const { optionDefaults } = require('../options') +const chromeSocketsBundle = require('./chrome-sockets/libp2p-bundle') + // js-ipfs with embedded hapi HTTP server let node = null let nodeHttpApi = null @@ -40,49 +42,7 @@ async function buildConfig (opts) { const defaultOpts = JSON.parse(optionDefaults.ipfsNodeConfig) const userOpts = JSON.parse(opts.ipfsNodeConfig) - const ipfsNodeConfig = mergeOptions.call({ concatArrays: true }, defaultOpts, userOpts, { start: false }) - - // TODO: replace object with function that builds the bundle - // See defaultBundle in js-ipfs/src/core/components/libp2p.js - ipfsNodeConfig.libp2p = { - // node defaults instead of browser ones - switch: { - blacklistTTL: 2 * 60 * 1e3, // 2 minute base - blackListAttempts: 5, // back off 5 times - maxParallelDials: 150, - maxColdCalls: 50, - dialTimeout: 10e3 // Be strict with dial time - }, - modules: { - transport: [new TCP(), new WS()], - peerDiscovery: [ - MulticastDNS, - new Bootstrap({ list: ipfsNodeConfig.config.Bootstrap }) - ] - }, - config: { - peerDiscovery: { - autoDial: true, - mdns: { - enabled: true - }, - bootstrap: { - enabled: true - }, - websocketStar: { - enabled: true - } - }, - dht: { - // TODO: KadDHT seems to be CPU-bound in browser context, needs investigation - kBucketSize: 20, - enabled: false, - randomWalk: { - enabled: false - } - } - } - } + const ipfsNodeConfig = mergeOptions.call({ concatArrays: true }, defaultOpts, userOpts, { start: false, libp2p: chromeSocketsBundle }) // Detect when API or Gateway port is not available (taken by something else) // We find the next free port and update configuration to use it instead diff --git a/add-on/src/lib/options.js b/add-on/src/lib/options.js index f41c5c4a1..dfff209e7 100644 --- a/add-on/src/lib/options.js +++ b/add-on/src/lib/options.js @@ -100,8 +100,8 @@ function buildDefaultIpfsNodeConfig () { // Until we have MulticastDNS+DNS, peer discovery is done over ws-star config.config.Addresses.Swarm = [ '/ip4/0.0.0.0/tcp/0', - '/dns4/ws-star1.par.dwebops.pub/tcp/443/wss/p2p-websocket-star', - '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star' + '/dns4/ws-star1.par.dwebops.pub/tcp/443/wss/p2p-websocket-star' + // '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star' ] /* // Until DHT and p2p transport are ready, delegate + preload diff --git a/package.json b/package.json index ba7463759..b61744335 100644 --- a/package.json +++ b/package.json @@ -126,7 +126,7 @@ "get-port": "5.0.0", "http-dns": "3.0.1", "http-node": "1.2.0", - "ipfs": "https://github.com/ipfs/js-ipfs/tarball/6fa8f88310a4f7f451f0f6846e435134376703e6/js-ipfs.tar.gz", + "ipfs": "https://github.com/ipfs/js-ipfs/tarball/af208c3fe33168bac9573fab06e5728cf09b124c/js-ipfs.tar.gz", "ipfs-css": "0.13.1", "ipfs-http-client": "33.1.1", "ipfs-http-response": "0.3.1", diff --git a/yarn.lock b/yarn.lock index c6c6af1ba..8e79021da 100644 --- a/yarn.lock +++ b/yarn.lock @@ -736,7 +736,7 @@ dependencies: "@hapi/hoek" "6.x.x" -"@hapi/ammo@^3.1.0": +"@hapi/ammo@^3.1.1": version "3.1.1" resolved "https://registry.yarnpkg.com/@hapi/ammo/-/ammo-3.1.1.tgz#ab700dac10f0b7fc5b7168c550c6be45ec3b981b" integrity sha512-NYFK27VSPGyQ/KmOQedpQH4PSjE7awLntepX68vrYtRvuJO21W1kX0bK2p3C+6ltUwtCQSvmNT8a4uMVAysC6Q== @@ -750,6 +750,13 @@ dependencies: "@hapi/hoek" "6.x.x" +"@hapi/boom@^7.4.3": + version "7.4.3" + resolved "https://registry.yarnpkg.com/@hapi/boom/-/boom-7.4.3.tgz#79ffed6ef8c625046a3bd069abed5a9d35fc50c1" + integrity sha512-3di+R+BcGS7HKy67Zi6mIga8orf67GdR0ubDEVBG1oqz3y9B70LewsuCMCSvWWLKlI6V1+266zqhYzjMrPGvZw== + dependencies: + "@hapi/hoek" "8.x.x" + "@hapi/bounce@1.x.x": version "1.3.1" resolved "https://registry.yarnpkg.com/@hapi/bounce/-/bounce-1.3.1.tgz#7e0017300fa92b21bc6706590cac08f6085899e1" @@ -765,7 +772,7 @@ dependencies: "@hapi/boom" "7.x.x" -"@hapi/hapi@^18.3.1", "@hapi/hapi@https://github.com/lidel/hapi/tarball/ccbf84ba5edc9b24564fdd166e3ee6d81c4c02d8/hapi.tar.gz": +"@hapi/hapi@^18.3.1", "@hapi/hapi@^18.3.2", "@hapi/hapi@https://github.com/lidel/hapi/tarball/ccbf84ba5edc9b24564fdd166e3ee6d81c4c02d8/hapi.tar.gz": version "18.1.0" resolved "https://github.com/lidel/hapi/tarball/ccbf84ba5edc9b24564fdd166e3ee6d81c4c02d8/hapi.tar.gz#644804c04d27a5051d96a8168b492bf342bc8a30" dependencies: @@ -930,6 +937,13 @@ dependencies: type-detect "4.0.8" +"@sinonjs/commons@^1.3.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.6.0.tgz#ec7670432ae9c8eb710400d112c201a362d83393" + integrity sha512-w4/WHG7C4WWFyE5geCieFJF6MZkbW4VAriol5KlmQXpAQdxvV0p26sqNZOW6Qyw6Y0l9K4g+cHvvczR2sEEpqg== + dependencies: + type-detect "4.0.8" + "@sinonjs/formatio@^3.1.0", "@sinonjs/formatio@^3.2.1": version "3.2.1" resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-3.2.1.tgz#52310f2f9bcbc67bdac18c94ad4901b95fde267e" @@ -947,6 +961,15 @@ array-from "^2.1.1" lodash "^4.17.11" +"@sinonjs/samsam@^3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-3.3.3.tgz#46682efd9967b259b81136b9f120fd54585feb4a" + integrity sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ== + dependencies: + "@sinonjs/commons" "^1.3.0" + array-from "^2.1.1" + lodash "^4.17.15" + "@sinonjs/text-encoding@^0.7.1": version "0.7.1" resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz#8da5c6530915653f3a1f38fd5f101d8c3f8079c5" @@ -1879,7 +1902,7 @@ async-iterator-last@^1.0.0: resolved "https://registry.yarnpkg.com/async-iterator-last/-/async-iterator-last-1.0.0.tgz#a352b2efd839c37dd3f497ad0b27ad17f9a9176b" integrity sha512-girbg1o/OdnszY9vbkIphzx71Gu0DNm+5DjGe32S1/bMLotPf52XFRRMVw/LE9/4Gn9xmL3H9tWftZ+JJWV4ig== -async-iterator-to-pull-stream@^1.1.0: +async-iterator-to-pull-stream@^1.1.0, async-iterator-to-pull-stream@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/async-iterator-to-pull-stream/-/async-iterator-to-pull-stream-1.3.0.tgz#3a6b9f3cceadff972ca20eb480e3cb43f8789732" integrity sha512-NjyhAEz/sx32olqgKIk/2xbWEM6o8qef1yetIgb0U/R3oBgndP1kE/0CslowH3jvnA94BO4I6OXpOkTKH7Z1AA== @@ -1918,7 +1941,7 @@ async@^2.6.3: dependencies: lodash "^4.17.14" -async@^3.0.1, async@^3.1.0: +async@^3.0.1: version "3.1.0" resolved "https://registry.yarnpkg.com/async/-/async-3.1.0.tgz#42b3b12ae1b74927b5217d8c0016baaf62463772" integrity sha512-4vx/aaY6j/j3Lw3fbCHNWP0pPaTCew3F6F3hYyl/tHs/ndmV1q7NW9T5yuJ2XAGwdQrP+6Wu20x06U4APo/iQQ== @@ -2652,6 +2675,14 @@ buffer@^5.0.2, buffer@^5.1.0, buffer@^5.2.1: base64-js "^1.0.2" ieee754 "^1.1.4" +buffer@^5.4.2: + version "5.4.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.4.2.tgz#2012872776206182480eccb2c0fba5f672a2efef" + integrity sha512-iy9koArjAFCzGnx3ZvNA6Z0clIbbFgbdWQ0mKD3hO0krOrZh8UgA6qMKcZvwLJxS+D6iVR76+5/pV56yMNYTag== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + buffers@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" @@ -5692,6 +5723,15 @@ fs-extra@^2.0.0: graceful-fs "^4.1.2" jsonfile "^2.1.0" +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-extra@~4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" @@ -6182,6 +6222,11 @@ graceful-fs@^4.1.0, graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.1 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b" integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg== +graceful-fs@^4.2.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" + integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== + graceful-fs@~3.0.2: version "3.0.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" @@ -6237,7 +6282,7 @@ handlebars@^4.1.2: optionalDependencies: uglify-js "^3.1.4" -hapi-pino@^6.0.2, "hapi-pino@https://github.com/pinojs/hapi-pino/tarball/3767ed6b67601831e176e084ed82ba4ed9f726e6/hapi-pino.tar.gz": +hapi-pino@^6.1.0, "hapi-pino@https://github.com/pinojs/hapi-pino/tarball/3767ed6b67601831e176e084ed82ba4ed9f726e6/hapi-pino.tar.gz": version "5.4.0" resolved "https://github.com/pinojs/hapi-pino/tarball/3767ed6b67601831e176e084ed82ba4ed9f726e6/hapi-pino.tar.gz#3a8f286bdb50b8dc3a6c949be22df2cd192dc317" dependencies: @@ -6877,6 +6922,15 @@ ip-address@^5.8.9: lodash "^4.17.11" sprintf-js "1.1.2" +ip-address@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-6.1.0.tgz#3c3335bc90f22b3545a6eca5bffefabeb2ea6fd2" + integrity sha512-u9YYtb1p2fWSbzpKmZ/b3QXWA+diRYPxc2c4y5lFB/MMk5WZ7wNZv8S3CFcIGVJ5XtlaCAl/FQy/D3eQ2XtdOA== + dependencies: + jsbn "1.1.0" + lodash "^4.17.15" + sprintf-js "1.1.2" + ip-regex@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" @@ -6940,7 +6994,7 @@ ipfs-css@0.13.1: resolved "https://registry.yarnpkg.com/ipfs-css/-/ipfs-css-0.13.1.tgz#f751be9cc89e30c34c50325848233f6da6b6728e" integrity sha512-hofJSYVBE3VC3/MOYZKfF66SKuHgnYkhXUmPDS8PISI8ygcljGOyBSSU4Je3dfgZX5UHDBEnzq5XyrTU822EDg== -ipfs-http-client@33.1.1, ipfs-http-client@^33.0.1, ipfs-http-client@^33.0.2, ipfs-http-client@^33.1.0: +ipfs-http-client@33.1.1, ipfs-http-client@^33.0.1, ipfs-http-client@^33.0.2: version "33.1.1" resolved "https://registry.yarnpkg.com/ipfs-http-client/-/ipfs-http-client-33.1.1.tgz#6ddc13e86f8db768093290b19537d2388c74dd45" integrity sha512-iwtLL3lOIzxXJFwLnOEtFUv1cYTuWJ0NauD7rpMEd/y4C7z6fuN6TSF4h547lxMh7sJWv+6Z0PmOA5N8FzUHJw== @@ -6991,6 +7045,63 @@ ipfs-http-client@33.1.1, ipfs-http-client@^33.0.1, ipfs-http-client@^33.0.2, ipf tar-stream "^2.0.1" through2 "^3.0.1" +ipfs-http-client@^34.0.0: + version "34.0.0" + resolved "https://registry.yarnpkg.com/ipfs-http-client/-/ipfs-http-client-34.0.0.tgz#8804d06a11c22306332a8ffa0949b6f672a0c9c8" + integrity sha512-4RCkk8ix4Dqn6sxqFVwuXWCZ1eLFPsVaj6Ijvu1fs9VYgxgVudsW9PWwarlr4mw1xUCmPWYyXnEbGgzBrfMy0Q== + dependencies: + abort-controller "^3.0.0" + async "^2.6.1" + bignumber.js "^9.0.0" + bl "^3.0.0" + bs58 "^4.0.1" + buffer "^5.4.2" + cids "~0.7.1" + concat-stream "github:hugomrdias/concat-stream#feat/smaller" + debug "^4.1.0" + detect-node "^2.0.4" + end-of-stream "^1.4.1" + err-code "^2.0.0" + explain-error "^1.0.4" + flatmap "0.0.3" + glob "^7.1.3" + ipfs-block "~0.8.1" + ipfs-utils "~0.0.3" + ipld-dag-cbor "~0.15.0" + ipld-dag-pb "~0.17.3" + ipld-raw "^4.0.0" + is-ipfs "~0.6.1" + is-pull-stream "0.0.0" + is-stream "^2.0.0" + iso-stream-http "~0.1.2" + iso-url "~0.4.6" + iterable-ndjson "^1.1.0" + just-kebab-case "^1.1.0" + just-map-keys "^1.1.0" + kind-of "^6.0.2" + ky "^0.11.2" + ky-universal "^0.2.2" + lru-cache "^5.1.1" + multiaddr "^6.0.6" + multibase "~0.6.0" + multicodec "~0.5.1" + multihashes "~0.4.14" + ndjson "github:hugomrdias/ndjson#feat/readable-stream3" + once "^1.4.0" + peer-id "~0.12.3" + peer-info "~0.15.1" + promise-nodeify "^3.0.1" + promisify-es6 "^1.0.3" + pull-defer "~0.2.3" + pull-stream "^3.6.9" + pull-to-stream "~0.1.1" + pump "^3.0.0" + qs "^6.5.2" + readable-stream "^3.1.1" + stream-to-pull-stream "^1.7.2" + tar-stream "^2.0.1" + through2 "^3.0.1" + ipfs-http-response@0.3.1, ipfs-http-response@~0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/ipfs-http-response/-/ipfs-http-response-0.3.1.tgz#5cc351f8abf5f77dae47a41781fd7bc0c88fcaf8" @@ -7128,23 +7239,26 @@ ipfs-unixfs@~0.1.16: dependencies: protons "^1.0.1" -ipfs-utils@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/ipfs-utils/-/ipfs-utils-0.0.3.tgz#b56e0f2294ea627c61af11f1a169370609797226" - integrity sha512-x3X8Q7gDPR0Zta/3Zftx2JUP3lNfrWqHgExD6aSLTBcxHKQViaOgKCsGr0SMiMYeyXNCrbI8nKlpusQyusTUrg== +"ipfs-utils@https://github.com/ipfs/js-ipfs-utils/tarball/136b0e6e99b7df735e7cc8238825d51efaffb443/js-ipfs-utils.tar.gz": + version "0.1.0" + resolved "https://github.com/ipfs/js-ipfs-utils/tarball/136b0e6e99b7df735e7cc8238825d51efaffb443/js-ipfs-utils.tar.gz#bcb3272e2dc1425c9f6b3aa50edba40c3764224f" dependencies: buffer "^5.2.1" + err-code "^2.0.0" + fs-extra "^8.1.0" is-buffer "^2.0.3" is-electron "^2.2.0" is-pull-stream "0.0.0" is-stream "^2.0.0" + it-glob "0.0.4" kind-of "^6.0.2" - readable-stream "^3.3.0" + pull-stream-to-async-iterator "^1.0.2" + readable-stream "^3.4.0" -ipfs-utils@~0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/ipfs-utils/-/ipfs-utils-0.0.4.tgz#946114cfeb6afb4454b4ccb10d2327cd323b0cce" - integrity sha512-7cZf6aGj2FG3XJWhCNwn4mS93Q0GEWjtBZvEHqzgI43U2qzNDCyzfS1pei1Y5F+tw/zDJ5U4XG0G9reJxR53Ig== +ipfs-utils@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/ipfs-utils/-/ipfs-utils-0.0.3.tgz#b56e0f2294ea627c61af11f1a169370609797226" + integrity sha512-x3X8Q7gDPR0Zta/3Zftx2JUP3lNfrWqHgExD6aSLTBcxHKQViaOgKCsGr0SMiMYeyXNCrbI8nKlpusQyusTUrg== dependencies: buffer "^5.2.1" is-buffer "^2.0.3" @@ -7152,20 +7266,20 @@ ipfs-utils@~0.0.4: is-pull-stream "0.0.0" is-stream "^2.0.0" kind-of "^6.0.2" - readable-stream "^3.4.0" + readable-stream "^3.3.0" -"ipfs@https://github.com/ipfs/js-ipfs/tarball/6fa8f88310a4f7f451f0f6846e435134376703e6/js-ipfs.tar.gz": - version "0.37.0" - resolved "https://github.com/ipfs/js-ipfs/tarball/6fa8f88310a4f7f451f0f6846e435134376703e6/js-ipfs.tar.gz#5d1582a899ccefd265e0b93e848e9a76619a0888" +"ipfs@https://github.com/ipfs/js-ipfs/tarball/af208c3fe33168bac9573fab06e5728cf09b124c/js-ipfs.tar.gz": + version "0.38.0-pre.1" + resolved "https://github.com/ipfs/js-ipfs/tarball/af208c3fe33168bac9573fab06e5728cf09b124c/js-ipfs.tar.gz#34f1a739408b3b47acab43695695923d718522bb" dependencies: - "@hapi/ammo" "^3.1.0" - "@hapi/boom" "^7.4.2" - "@hapi/hapi" "^18.3.1" + "@hapi/ammo" "^3.1.1" + "@hapi/boom" "^7.4.3" + "@hapi/hapi" "^18.3.2" "@hapi/joi" "^15.0.1" array-shuffle "^1.0.1" async "^2.6.1" async-iterator-all "^1.0.0" - async-iterator-to-pull-stream "^1.1.0" + async-iterator-to-pull-stream "^1.3.0" async-iterator-to-stream "^1.1.0" base32.js "~0.1.0" bignumber.js "^9.0.0" @@ -7174,7 +7288,6 @@ ipfs-utils@~0.0.4: bs58 "^4.0.1" buffer-peek-stream "^1.0.1" byteman "^1.3.5" - callbackify "^1.1.0" cid-tool "~0.3.0" cids "~0.7.1" class-is "^1.1.0" @@ -7183,19 +7296,20 @@ ipfs-utils@~0.0.4: debug "^4.1.0" dlv "^1.1.3" err-code "^2.0.0" + explain-error "^1.0.4" file-type "^12.0.1" fnv1a "^1.0.1" fsm-event "^2.1.0" get-folder-size "^2.0.0" glob "^7.1.3" - hapi-pino "^6.0.2" + hapi-pino "^6.1.0" hashlru "^2.3.0" human-to-milliseconds "^2.0.0" interface-datastore "~0.6.0" ipfs-bitswap "~0.25.1" ipfs-block "~0.8.1" ipfs-block-service "~0.15.2" - ipfs-http-client "^33.1.0" + ipfs-http-client "^34.0.0" ipfs-http-response "~0.3.1" ipfs-mfs "~0.12.0" ipfs-multipart "~0.1.1" @@ -7203,7 +7317,7 @@ ipfs-utils@~0.0.4: ipfs-unixfs "~0.1.16" ipfs-unixfs-exporter "~0.37.7" ipfs-unixfs-importer "~0.39.11" - ipfs-utils "~0.0.4" + ipfs-utils "https://github.com/ipfs/js-ipfs-utils/tarball/136b0e6e99b7df735e7cc8238825d51efaffb443/js-ipfs-utils.tar.gz" ipld "~0.24.1" ipld-bitcoin "~0.3.0" ipld-dag-cbor "~0.15.0" @@ -7218,32 +7332,34 @@ ipfs-utils@~0.0.4: is-pull-stream "~0.0.0" is-stream "^2.0.0" iso-url "~0.4.6" - just-flatten-it "^2.1.0" just-safe-set "^2.1.0" kind-of "^6.0.2" - ky "~0.11.2" - ky-universal "~0.2.2" - libp2p "~0.25.4" + ky "~0.13.0" + ky-universal "~0.3.0" + libp2p "~0.26.1" libp2p-bootstrap "~0.9.3" libp2p-crypto "~0.16.0" libp2p-delegated-content-routing "^0.2.4" libp2p-delegated-peer-routing "^0.2.4" + libp2p-floodsub "^0.17.2" + libp2p-gossipsub "~0.0.5" libp2p-kad-dht "~0.15.3" libp2p-keychain "~0.4.2" libp2p-mdns "~0.12.0" libp2p-record "~0.6.3" libp2p-secio "~0.11.0" - libp2p-tcp "~0.13.0" + libp2p-tcp "~0.13.1" libp2p-webrtc-star "~0.16.0" libp2p-websocket-star-multi "~0.4.3" - libp2p-websockets "~0.12.2" + libp2p-websockets "~0.12.3" lodash "^4.17.15" mafmt "^6.0.2" merge-options "^1.0.1" mime-types "^2.1.21" mkdirp "~0.5.1" + mortice "^1.2.2" multiaddr "^6.1.0" - multiaddr-to-uri "^4.0.1" + multiaddr-to-uri "^5.0.0" multibase "~0.6.0" multicodec "~0.5.5" multihashes "~0.4.14" @@ -7253,7 +7369,7 @@ ipfs-utils@~0.0.4: peer-id "~0.12.3" peer-info "~0.15.0" progress "^2.0.1" - promise-nodeify "3.0.1" + promise-nodeify "^3.0.1" promisify-es6 "^1.0.3" protons "^1.0.1" pull-abortable "^4.1.1" @@ -7272,13 +7388,13 @@ ipfs-utils@~0.0.4: receptacle "^1.3.2" semver "^6.3.0" stream-to-pull-stream "^1.7.3" - superstruct "~0.6.0" + superstruct "~0.6.2" tar-stream "^2.0.0" temp "~0.9.0" update-notifier "^3.0.1" uri-to-multiaddr "^3.0.1" varint "^5.0.0" - yargs "^13.3.0" + yargs "^14.0.0" yargs-promise "^1.1.0" optionalDependencies: prom-client "^11.5.3" @@ -7999,6 +8115,21 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" +it-glob@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/it-glob/-/it-glob-0.0.4.tgz#f437a63bfaca8caa0cbb982bf7a3204670c96a79" + integrity sha512-sTMM62VQWRqlMpgbd+x1uTviQY7a8vMLXYmw+KPiV9vmAYuyIr9Sp1QRQ5B/faybf4O9RzMGyQb7eFpqLwsBhQ== + dependencies: + fs-extra "^8.1.0" + minimatch "^3.0.4" + +iterable-ndjson@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/iterable-ndjson/-/iterable-ndjson-1.1.0.tgz#36f7e8a5bb04fd087d384f29e44fc4280fc014fc" + integrity sha512-OOp1Lb0o3k5MkXHx1YaIY5Z0ELosZfTnBaas9f8opJVcZGBIONA2zY/6CYE+LKkqrSDooIneZbrBGgOZnHPkrg== + dependencies: + string_decoder "^1.2.0" + jed@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/jed/-/jed-1.1.1.tgz#7a549bbd9ffe1585b0cd0a191e203055bee574b4" @@ -8261,11 +8392,6 @@ just-extend@^4.0.2: resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.0.2.tgz#f3f47f7dfca0f989c55410a7ebc8854b07108afc" integrity sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw== -just-flatten-it@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/just-flatten-it/-/just-flatten-it-2.1.0.tgz#2514337cc77ee3462869fee3d939b06ec1fd7986" - integrity sha512-mX3NUt/LF6EzohLJZXhywCwz2zqdhx6wVkEu6UfUx00lVQlSB6SBV1O+/Le15NfsimrWRD82H69ZkSVQZffhmw== - just-kebab-case@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/just-kebab-case/-/just-kebab-case-1.1.0.tgz#ebe854fde84b0afa4e597fcd870b12eb3c026755" @@ -8365,7 +8491,7 @@ klaw@^1.0.0: optionalDependencies: graceful-fs "^4.1.9" -ky-universal@~0.2.2: +ky-universal@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/ky-universal/-/ky-universal-0.2.2.tgz#7a36e1a75641a98f878157463513965f799f5bfe" integrity sha512-fb32o/fKy/ux2ALWa9HU2hvGtfOq7/vn2nH0FpVE+jwNzyTeORlAbj3Fiw+WLMbUlmVqZIWupnLZ2USHvqwZHw== @@ -8373,11 +8499,24 @@ ky-universal@~0.2.2: abort-controller "^3.0.0" node-fetch "^2.3.0" -ky@~0.11.2: +ky-universal@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/ky-universal/-/ky-universal-0.3.0.tgz#3fcbb0dd03da39b5f05100d9362a630d5e1d402e" + integrity sha512-CM4Bgb2zZZpsprcjI6DNYTaH3oGHXL2u7BU4DK+lfCuC4snkt9/WRpMYeKbBbXscvKkeqBwzzjFX2WwmKY5K/A== + dependencies: + abort-controller "^3.0.0" + node-fetch "^2.6.0" + +ky@^0.11.2: version "0.11.2" resolved "https://registry.yarnpkg.com/ky/-/ky-0.11.2.tgz#4ffe6621d9d9ab61bf0f5500542e3a96d1ba0815" integrity sha512-5Aou5BWue5/mkPqIRqzSWW+0Hkl403pr/2AIrCKYw7cVl/Xoe8Xe4KLBO0PRjbz7GnRe1/8wW1KhqQNFFE7/GQ== +ky@~0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/ky/-/ky-0.13.0.tgz#354c3d209f26d772415cbfe4f5d02ccbcb5ed536" + integrity sha512-qmyUE2IvwLveZEHiLmFzUIrW4EsSX18ItZgEfgx8JXFxSEPKrnXvWrjQDP6zi4mwcie3MWBEHyUg0aNF8OS9oA== + labeled-stream-splicer@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz#42a41a16abcd46fd046306cf4f2c3576fffb1c21" @@ -8616,33 +8755,6 @@ libp2p-bootstrap@~0.9.3: peer-id "~0.12.2" peer-info "~0.15.1" -libp2p-circuit@~0.3.6: - version "0.3.7" - resolved "https://registry.yarnpkg.com/libp2p-circuit/-/libp2p-circuit-0.3.7.tgz#f2eb7a7250d968fa3844dcfeb718ac4735b78f5b" - integrity sha512-Z14T3D1YYE1W2k9QtheyxzfwGpEi4Tk4gDofSmAhKqlfCQcctNvKdv0udgjnwzZjXRBtAmNzVJfxZ2WagtZotA== - dependencies: - async "^2.6.2" - debug "^4.1.1" - interface-connection "~0.3.3" - mafmt "^6.0.7" - multiaddr "^6.0.6" - once "^1.4.0" - peer-id "~0.12.2" - peer-info "~0.15.1" - protons "^1.0.1" - pull-handshake "^1.1.4" - pull-length-prefixed "^1.3.2" - pull-pair "^1.1.0" - pull-stream "^3.6.9" - -libp2p-connection-manager@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/libp2p-connection-manager/-/libp2p-connection-manager-0.1.0.tgz#1807d8dcdb27619d69899a38c43f842f66b25652" - integrity sha512-Md5UERlkD+KUsdUQRJE+B+UBq/KwOTo650z8Bl0zEfKjfnv/yMeFhucnf14suYBnzIIdGsckYn66xbeki31BLw== - dependencies: - debug "^4.1.1" - latency-monitor "~0.2.1" - libp2p-crypto-secp256k1@~0.2.2: version "0.2.3" resolved "https://registry.yarnpkg.com/libp2p-crypto-secp256k1/-/libp2p-crypto-secp256k1-0.2.3.tgz#212fc171d39dae7be3eaf4d9d311e0a8e9619c78" @@ -8748,33 +8860,37 @@ libp2p-delegated-peer-routing@0.2.4, libp2p-delegated-peer-routing@^0.2.4: peer-id "^0.12.2" peer-info "^0.15.1" -libp2p-floodsub@^0.16.1: - version "0.16.1" - resolved "https://registry.yarnpkg.com/libp2p-floodsub/-/libp2p-floodsub-0.16.1.tgz#ce9ee5be742d97fefa111649edc6fa1e70bc47a7" - integrity sha512-3Y+BMwlgit5LGKFUwEn5hNH9+WvhK4mkSEKe7mu0xtQ0KmFvwUpYt+UO/By1iZRpYDyEhQ8rya0ZJtYcqFkxvg== +libp2p-floodsub@^0.17.2, libp2p-floodsub@~0.17.1: + version "0.17.2" + resolved "https://registry.yarnpkg.com/libp2p-floodsub/-/libp2p-floodsub-0.17.2.tgz#c789bcd55cfb513a4d2f5291bd28d6aa2be271d1" + integrity sha512-xOljtBcNTerBwRYFnXlJVmTwdYla9YTvBux6HaBE0GvVjPHqOI7gO5WJQ1Nul/7h5qLX5tJqZ4OY5CVn+mcuUQ== dependencies: async "^2.6.2" bs58 "^4.0.1" debug "^4.1.1" length-prefixed-stream "^2.0.0" libp2p-crypto "~0.16.1" - libp2p-pubsub "~0.1.0" + libp2p-pubsub "~0.2.0" protons "^1.0.1" pull-length-prefixed "^1.3.2" pull-pushable "^2.2.0" pull-stream "^3.6.9" -libp2p-identify@~0.7.6: - version "0.7.6" - resolved "https://registry.yarnpkg.com/libp2p-identify/-/libp2p-identify-0.7.6.tgz#b17fad2ec0df76d6ca6b5b0a7e58b04620b8dbe9" - integrity sha512-QleYqI6f8ah6G6sQU9uaIa9FVOtyp6LtiqopfjrmAIO5Oz22Zw+dpT7FcEXvYP7kL036Es2vzZm0js0pOWw1MA== +libp2p-gossipsub@~0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/libp2p-gossipsub/-/libp2p-gossipsub-0.0.5.tgz#0206f96cd5f9e74221fb68ce6730f86e2d529294" + integrity sha512-7IM9hcSkc7pBWEju/a5ZGcUrEHclgVoUU7XPrMsMB7s5QNXziSbLjJvIBlgU7WOxoTmgmZldEtHPkrsPEb1C9A== dependencies: - multiaddr "^6.0.4" + async "^2.6.2" + err-code "^1.1.2" + libp2p-floodsub "~0.17.1" + libp2p-pubsub "~0.2.0" + multistream-select "~0.14.6" peer-id "~0.12.2" peer-info "~0.15.1" protons "^1.0.1" - pull-length-prefixed "^1.3.1" - pull-stream "^3.6.9" + pull-length-prefixed "^1.3.3" + pull-stream "^3.6.13" libp2p-kad-dht@~0.15.3: version "0.15.3" @@ -8839,19 +8955,10 @@ libp2p-mdns@~0.12.0: peer-id "~0.12.2" peer-info "~0.15.1" -libp2p-ping@^0.8.5: - version "0.8.5" - resolved "https://registry.yarnpkg.com/libp2p-ping/-/libp2p-ping-0.8.5.tgz#e7fb9fb32d9ff0d6b51be52caef4395ce1a17613" - integrity sha512-BzCN3+jp1SvJQZlXq2G3TMkyK5UOOf3JO+CZMnaUEHYlRgQf2zShYta5XU2IGx0EJA/23iCdCL+LjBP/DOvbkQ== - dependencies: - libp2p-crypto "~0.16.0" - pull-handshake "^1.1.4" - pull-stream "^3.6.9" - -libp2p-pubsub@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/libp2p-pubsub/-/libp2p-pubsub-0.1.0.tgz#cf7b5bd389a0a6879a814d5e6519b13ad361b4fa" - integrity sha512-oppDCIZLmqODAgt1r625yO0j9wy7auro7B6/5bw2WN5ctqTsG791dn3SGVRLV8Dvd7uSfMlOaZ/Bkw8jle0Ytg== +libp2p-pubsub@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/libp2p-pubsub/-/libp2p-pubsub-0.2.0.tgz#28f11af5190e9f5cebbb40a3943488b8f2d6dbdf" + integrity sha512-H1UIvJqYWEopb3EJluEoanU/cLgQF9aEzhTwmvH00GmJkyxQ5f/KMmVMCU0WxtEKTpQE9IA2W9vtX41nvlzo0w== dependencies: async "^2.6.2" bs58 "^4.0.1" @@ -8863,6 +8970,7 @@ libp2p-pubsub@~0.1.0: pull-length-prefixed "^1.3.1" pull-pushable "^2.2.0" pull-stream "^3.6.9" + sinon "^7.3.2" time-cache "~0.3.0" libp2p-record@~0.6.2, libp2p-record@~0.6.3: @@ -8895,30 +9003,6 @@ libp2p-secio@~0.11.0: pull-length-prefixed "^1.3.1" pull-stream "^3.6.9" -libp2p-switch@^0.42.12: - version "0.42.12" - resolved "https://registry.yarnpkg.com/libp2p-switch/-/libp2p-switch-0.42.12.tgz#672ab3b249121e876231d9fef9a143a5ed2c41da" - integrity sha512-aNjJQpP9kSClXXKIliSqIowIoxAy0JQ8hnw6BoqOHUIG9Eov4GVyuOdU6lQKl1ym4uKMsnF2G49qpZJ47O01XA== - dependencies: - async "^2.6.2" - bignumber.js "^8.1.1" - class-is "^1.1.0" - debug "^4.1.1" - err-code "^1.1.2" - fsm-event "^2.1.0" - hashlru "^2.3.0" - interface-connection "~0.3.3" - libp2p-circuit "~0.3.6" - libp2p-identify "~0.7.6" - moving-average "^1.0.0" - multiaddr "^6.0.6" - multistream-select "~0.14.4" - once "^1.4.0" - peer-id "~0.12.2" - peer-info "~0.15.1" - pull-stream "^3.6.9" - retimer "^2.0.0" - libp2p-tcp@~0.13.0: version "0.13.0" resolved "https://registry.yarnpkg.com/libp2p-tcp/-/libp2p-tcp-0.13.0.tgz#597f0f837890ca07b062b75593a4d58b755122b2" @@ -8935,6 +9019,22 @@ libp2p-tcp@~0.13.0: once "^1.4.0" stream-to-pull-stream "^1.7.2" +libp2p-tcp@~0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/libp2p-tcp/-/libp2p-tcp-0.13.1.tgz#170bc283fb7b7afa1554dd5f4ab9e57b0097e4b2" + integrity sha512-gb9C6u+ax11+2ntXnaBPRveb/dyQ36j0dU6FLXcUSIO9ovkWWXduCZC0Fi/Uyc/CZAUYUsu/ACKSvEX+ELS9AQ== + dependencies: + class-is "^1.1.0" + debug "^4.1.1" + interface-connection "~0.3.3" + ip-address "^6.1.0" + lodash.includes "^4.3.0" + lodash.isfunction "^3.0.9" + mafmt "^6.0.7" + multiaddr "^6.1.0" + once "^1.4.0" + stream-to-pull-stream "^1.7.3" + libp2p-webrtc-star@~0.16.0: version "0.16.1" resolved "https://registry.yarnpkg.com/libp2p-webrtc-star/-/libp2p-webrtc-star-0.16.1.tgz#d160a157d033f1ad915cf460776a1ca32f352b75" @@ -9004,7 +9104,7 @@ libp2p-websockets@^0.12.2: multiaddr-to-uri "^4.0.1" pull-ws hugomrdias/pull-ws#fix/bundle-size -libp2p-websockets@~0.12.2: +libp2p-websockets@~0.12.3: version "0.12.3" resolved "https://registry.yarnpkg.com/libp2p-websockets/-/libp2p-websockets-0.12.3.tgz#f4bc201b0f381bd6b53f5e92446394761f29ceb3" integrity sha512-qA5YZv7RoxGUtMlcD8JwquonM0/19MCV0UPDRihCjzTi4wRgGKhIXZSwd/fs+8RRTKHMEUngAxit7ZLSlYgdQQ== @@ -9016,27 +9116,41 @@ libp2p-websockets@~0.12.2: multiaddr-to-uri "^5.0.0" pull-ws hugomrdias/pull-ws#fix/bundle-size -libp2p@~0.25.4: - version "0.25.5" - resolved "https://registry.yarnpkg.com/libp2p/-/libp2p-0.25.5.tgz#f7153064cb64555c4520b086a79b787bd2de2161" - integrity sha512-vkUGFkPcY7t/LyyIbjKbF7KE4O+gPmJXvv363TjmNSZX/ph0aP8KtCpurxwo82ztxec3w5XCZUyNGrjEliSshw== +libp2p@~0.26.1: + version "0.26.1" + resolved "https://registry.yarnpkg.com/libp2p/-/libp2p-0.26.1.tgz#9b4143c07ac1ebd5318167964564de3815f26c2d" + integrity sha512-nndg8kEp18PW5L5h6GPDAv/xtTI5YgHik5Uwoiw3FvVKyfpm4A+HZ1INmL3PeI+wR7fZa7uQ6J5udywZ4FYEMw== dependencies: async "^2.6.2" + bignumber.js "^9.0.0" + class-is "^1.1.0" debug "^4.1.1" err-code "^1.1.2" fsm-event "^2.1.0" - libp2p-connection-manager "^0.1.0" - libp2p-floodsub "^0.16.1" - libp2p-ping "^0.8.5" - libp2p-switch "^0.42.12" + hashlru "^2.3.0" + interface-connection "~0.3.3" + latency-monitor "~0.2.1" + libp2p-crypto "~0.16.1" libp2p-websockets "^0.12.2" mafmt "^6.0.7" + merge-options "^1.0.1" + moving-average "^1.0.0" multiaddr "^6.1.0" + multistream-select "~0.14.6" once "^1.4.0" peer-book "^0.9.1" peer-id "^0.12.2" - peer-info "^0.15.1" + peer-info "~0.15.1" + promisify-es6 "^1.0.3" + protons "^1.0.1" + pull-cat "^1.1.11" + pull-defer "~0.2.3" + pull-handshake "^1.1.4" + pull-reader "^1.3.1" + pull-stream "^3.6.9" + retimer "^2.0.0" superstruct "^0.6.0" + xsalsa20 "^1.0.2" lie@~3.3.0: version "3.3.0" @@ -9866,6 +9980,16 @@ mortice@^1.2.1: promise-timeout "^1.3.0" shortid "^2.2.8" +mortice@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/mortice/-/mortice-1.2.3.tgz#8e92963d67708dc229a98d5b65ebaa1fc4afb7fd" + integrity sha512-m285eSxSrbNieKgWWzGSbWO2oSoFHb2fdZX306afMVJ8p8boeAmUW5hCyZBC/gHuBMizR7wO9sXH74kZmf0ZbA== + dependencies: + 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" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -10033,12 +10157,12 @@ multimatch@4.0.0: arrify "^2.0.1" minimatch "^3.0.4" -multistream-select@~0.14.4: - version "0.14.5" - resolved "https://registry.yarnpkg.com/multistream-select/-/multistream-select-0.14.5.tgz#6b8e91079149e6b33f628730382780810b3e122d" - integrity sha512-vu5CbuXZEv2GjJgXC9VOcXesNxGykI0lqYC900xwQPeALiiIK4stVyjlpb/UowtmSZ4KELsRQYb7/gvC1lA37Q== +multistream-select@~0.14.6: + version "0.14.6" + resolved "https://registry.yarnpkg.com/multistream-select/-/multistream-select-0.14.6.tgz#a3998eeb3fed83be2e8cd1eac5053825899f8d4b" + integrity sha512-oRxaStv2thLDZi3eojRgolS9DHbH5WENV2NwN6VwubEwsuwSEALbmSyxQ7PSzB7rSjgX2LGpuMzZ9O+ZptbEyA== dependencies: - async "^3.1.0" + async "^2.6.3" debug "^4.1.1" err-code "^1.1.2" interface-connection "~0.3.3" @@ -10354,6 +10478,17 @@ nise@^1.5.1: lolex "^4.1.0" path-to-regexp "^1.7.0" +nise@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/nise/-/nise-1.5.2.tgz#b6d29af10e48b321b307e10e065199338eeb2652" + integrity sha512-/6RhOUlicRCbE9s+94qCUsyE+pKlVJ5AhIv+jEE7ESKwnbXqulKZ1FYU+XAtHHWE9TinYvAxDUJAb912PwPoWA== + dependencies: + "@sinonjs/formatio" "^3.2.1" + "@sinonjs/text-encoding" "^0.7.1" + just-extend "^4.0.2" + lolex "^4.1.0" + path-to-regexp "^1.7.0" + no-case@^2.2.0: version "2.3.2" resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" @@ -10987,6 +11122,14 @@ p-queue@^5.0.0: dependencies: eventemitter3 "^3.1.0" +p-queue@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.1.1.tgz#eedbaf7335b4931ef857e2e58063fed461b97e80" + integrity sha512-R9gq36Th88xZ+rWAptN5IXLwqkwA1gagCQhT6ZXQ6RxEfmjb9ZW+UBzRVqv9sm5TQmbbI/TsKgGLbOaA61xR5w== + dependencies: + eventemitter3 "^4.0.0" + p-timeout "^3.1.0" + p-timeout@^1.1.1: version "1.2.1" resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" @@ -11655,7 +11798,7 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= -promise-nodeify@3.0.1: +promise-nodeify@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/promise-nodeify/-/promise-nodeify-3.0.1.tgz#f0f5d9720ee9ec71dd2bfa92667be504c10229c2" integrity sha512-ghsSuzZXJX8iO7WVec2z7GI+Xk/EyiD+JZK7AZKhUqYfpLa/Zs4ylUD+CwwnKlG6G3HnkUPMAi6PO7zeqGKssg== @@ -12749,7 +12892,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1, safe-buffer@~5.1.2: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== @@ -13146,6 +13289,19 @@ sinon@^7.2.3: nise "^1.4.10" supports-color "^5.5.0" +sinon@^7.3.2: + version "7.4.2" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-7.4.2.tgz#ecd54158fef2fcfbdb231a3fa55140e8cb02ad6c" + integrity sha512-pY5RY99DKelU3pjNxcWo6XqeB1S118GBcVIIdDi6V+h6hevn1izcg2xv1hTHW/sViRXU7sUOxt4wTUJ3gsW2CQ== + dependencies: + "@sinonjs/commons" "^1.4.0" + "@sinonjs/formatio" "^3.2.1" + "@sinonjs/samsam" "^3.3.3" + diff "^3.5.0" + lolex "^4.2.0" + nise "^1.5.2" + supports-color "^5.5.0" + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -13902,6 +14058,13 @@ string_decoder@^1.0.0, string_decoder@^1.1.1: dependencies: safe-buffer "~5.1.0" +string_decoder@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" @@ -14058,7 +14221,7 @@ superstruct@^0.6.0, superstruct@~0.6.1: clone-deep "^2.0.1" kind-of "^6.0.1" -superstruct@~0.6.0: +superstruct@~0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.6.2.tgz#c5eb034806a17ff98d036674169ef85e4c7f6a1c" integrity sha512-lvA97MFAJng3rfjcafT/zGTSWm6Tbpk++DP6It4Qg7oNaeM+2tdJMuVgGje21/bIpBEs6iQql1PJH6dKTjl4Ig== @@ -15402,6 +15565,11 @@ xregexp@^4.2.4: dependencies: "@babel/runtime-corejs2" "^7.2.0" +xsalsa20@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/xsalsa20/-/xsalsa20-1.0.2.tgz#46cc53439d543d88782e42dfada5c5a69ab6314d" + integrity sha512-g1DFmZ5JJ9Qzvt4dMw6m9IydqoCSP381ucU5zm46Owbk3bwmqAr8eEJirOPc7PrXRn45drzOpAyDp8jsnoyXyw== + xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -15531,12 +15699,13 @@ yargs@^12.0.5: y18n "^3.2.1 || ^4.0.0" yargs-parser "^11.1.1" -yargs@^13.3.0: - version "13.3.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" - integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== +yargs@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.0.0.tgz#ba4cacc802b3c0b3e36a9e791723763d57a85066" + integrity sha512-ssa5JuRjMeZEUjg7bEL99AwpitxU/zWGAGpdj0di41pOEmJti8NR6kyUIJBkR78DTYNPZOU08luUo0GTHuB+ow== dependencies: cliui "^5.0.0" + decamelize "^1.2.0" find-up "^3.0.0" get-caller-file "^2.0.1" require-directory "^2.1.1" From c717420d9fb05219fdac62a33ee7ddf97db987f9 Mon Sep 17 00:00:00 2001 From: Marcin Rataj Date: Sun, 8 Sep 2019 22:09:07 +0200 Subject: [PATCH 06/16] fix: chrome-dgram in firefox/chrome Improved detection of chrome.sockets.udp https://github.com/feross/chrome-dgram/pull/16 --- package.json | 2 +- yarn.lock | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index b61744335..0ce298684 100644 --- a/package.json +++ b/package.json @@ -116,7 +116,7 @@ "@material/switch": "3.1.0", "browser-process-hrtime": "1.0.0", "choo": "7.0.0", - "chrome-dgram": "3.0.2", + "chrome-dgram": "https://github.com/lidel/chrome-dgram/tarball/2bd217a29ea91b313fe5f46828621bb27d69cb06/chrome-dgram.tar.gz", "chrome-net": "3.3.2", "debug": "4.1.1", "doc-sniff": "1.0.1", diff --git a/yarn.lock b/yarn.lock index 8e79021da..38143f01d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3050,10 +3050,9 @@ chownr@^1.1.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== -chrome-dgram@3.0.2: +"chrome-dgram@https://github.com/lidel/chrome-dgram/tarball/2bd217a29ea91b313fe5f46828621bb27d69cb06/chrome-dgram.tar.gz": version "3.0.2" - resolved "https://registry.yarnpkg.com/chrome-dgram/-/chrome-dgram-3.0.2.tgz#7e0e00084b57971714214372368ad18a7785ad52" - integrity sha512-Ay741EHF/Ib18un+LUtBNK43NrabD6GOuwVaka7uUbV0gFRLEPULm2Q05YSzRNBtSrbaO4eErmDdniiy/u8Lig== + resolved "https://github.com/lidel/chrome-dgram/tarball/2bd217a29ea91b313fe5f46828621bb27d69cb06/chrome-dgram.tar.gz#a0ecacafc6ef22a58e11d6664037ef6734db8024" dependencies: inherits "^2.0.1" run-series "^1.1.2" From 4188058c9e6eacc460e6d7c8d3f98fe899a20189 Mon Sep 17 00:00:00 2001 From: Marcin Rataj Date: Mon, 9 Sep 2019 16:40:25 +0200 Subject: [PATCH 07/16] chore: update js-ipfs https://github.com/ipfs/js-ipfs/pull/2304 --- package.json | 2 +- yarn.lock | 272 +++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 200 insertions(+), 74 deletions(-) diff --git a/package.json b/package.json index 0ce298684..7519ac2f4 100644 --- a/package.json +++ b/package.json @@ -126,7 +126,7 @@ "get-port": "5.0.0", "http-dns": "3.0.1", "http-node": "1.2.0", - "ipfs": "https://github.com/ipfs/js-ipfs/tarball/af208c3fe33168bac9573fab06e5728cf09b124c/js-ipfs.tar.gz", + "ipfs": "https://github.com/ipfs/js-ipfs/tarball/ddd49ce41f6f9abd48b1e54bc4c7dd3e58fd0ee9/js-ipfs.tar.gz", "ipfs-css": "0.13.1", "ipfs-http-client": "33.1.1", "ipfs-http-response": "0.3.1", diff --git a/yarn.lock b/yarn.lock index 38143f01d..f2583c602 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2626,6 +2626,11 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== +buffer-indexof@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + buffer-indexof@~0.0.0: version "0.0.2" resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-0.0.2.tgz#ed0f36b7ae166a66a7cd174c0467ae8dedf008f5" @@ -4127,13 +4132,6 @@ detective@^5.0.2: defined "^1.0.0" minimist "^1.1.1" -dicer@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.3.0.tgz#eacd98b3bfbf92e8ab5c2fdb71aaac44bb06b872" - integrity sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA== - dependencies: - streamsearch "0.1.2" - diff@3.5.0, diff@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -4568,6 +4566,22 @@ es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.4.3, es-abstract@^1.5.1 is-regex "^1.0.4" object-keys "^1.0.12" +es-abstract@^1.13.0: + version "1.14.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.14.2.tgz#7ce108fad83068c8783c3cdf62e504e084d8c497" + integrity sha512-DgoQmbpFNOofkjJtKwr87Ma5EW4Dc8fWhD0R+ndq7Oc456ivUfGOOP6oAZTTKl5/CcNMP+EN+e3/iUzgE0veZg== + dependencies: + es-to-primitive "^1.2.0" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.0" + is-callable "^1.1.4" + is-regex "^1.0.4" + object-inspect "^1.6.0" + object-keys "^1.1.1" + string.prototype.trimleft "^2.0.0" + string.prototype.trimright "^2.0.0" + es-to-primitive@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" @@ -5304,6 +5318,11 @@ fast-deep-equal@^2.0.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-fifo@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.0.0.tgz#9bc72e6860347bb045a876d1c5c0af11e9b984e7" + integrity sha512-4VEXmjxLj7sbs8J//cn2qhRap50dGzF5n8fjay8mau+Jn4hxSeR3xPFwxMaQq/pDaq7+KQk0PAbC2+nWDkJrmQ== + fast-json-parse@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/fast-json-parse/-/fast-json-parse-1.0.3.tgz#43e5c61ee4efa9265633046b770fb682a7577c4d" @@ -5615,6 +5634,13 @@ fnv1a@^1.0.1: resolved "https://registry.yarnpkg.com/fnv1a/-/fnv1a-1.0.1.tgz#915e2d6d023c43d5224ad9f6d2a3c4156f5712f5" integrity sha1-kV4tbQI8Q9UiStn20qPEFW9XEvU= +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + for-in@^0.1.3: version "0.1.8" resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" @@ -6157,6 +6183,15 @@ globals@^9.14.0: resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== +globalthis@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.0.tgz#c5fb98213a9b4595f59cf3e7074f141b4169daae" + integrity sha512-vcCAZTJ3r5Qcu5l8/2oyVdoFwxKgfYnMTR2vwWeux/NAVZK3PwcMaWkdUIn4GJbmKuRK7xcvDsLuK+CKcXyodg== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + object-keys "^1.0.12" + got@^6.7.1: version "6.7.1" resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" @@ -7044,13 +7079,15 @@ ipfs-http-client@33.1.1, ipfs-http-client@^33.0.1, ipfs-http-client@^33.0.2: tar-stream "^2.0.1" through2 "^3.0.1" -ipfs-http-client@^34.0.0: - version "34.0.0" - resolved "https://registry.yarnpkg.com/ipfs-http-client/-/ipfs-http-client-34.0.0.tgz#8804d06a11c22306332a8ffa0949b6f672a0c9c8" - integrity sha512-4RCkk8ix4Dqn6sxqFVwuXWCZ1eLFPsVaj6Ijvu1fs9VYgxgVudsW9PWwarlr4mw1xUCmPWYyXnEbGgzBrfMy0Q== +ipfs-http-client@^35.1.0: + version "35.1.0" + resolved "https://registry.yarnpkg.com/ipfs-http-client/-/ipfs-http-client-35.1.0.tgz#53ee45c745840112c137ebe0d254dfba49c35283" + integrity sha512-C2726d79vydHRc1GdwIWsWnm29zhV568pmQdNru63StXdaDWeijexL4BwcLQi18/JPudT4s9iLTYU1ixIJIHCQ== dependencies: abort-controller "^3.0.0" async "^2.6.1" + async-iterator-all "^1.0.0" + async-iterator-to-pull-stream "^1.3.0" bignumber.js "^9.0.0" bl "^3.0.0" bs58 "^4.0.1" @@ -7063,9 +7100,10 @@ ipfs-http-client@^34.0.0: err-code "^2.0.0" explain-error "^1.0.4" flatmap "0.0.3" + fs-extra "^8.1.0" glob "^7.1.3" ipfs-block "~0.8.1" - ipfs-utils "~0.0.3" + ipfs-utils "^0.1.0" ipld-dag-cbor "~0.15.0" ipld-dag-pb "~0.17.3" ipld-raw "^4.0.0" @@ -7074,12 +7112,14 @@ ipfs-http-client@^34.0.0: is-stream "^2.0.0" iso-stream-http "~0.1.2" iso-url "~0.4.6" + it-glob "0.0.4" + it-to-stream "^0.1.1" iterable-ndjson "^1.1.0" just-kebab-case "^1.1.0" just-map-keys "^1.1.0" kind-of "^6.0.2" - ky "^0.11.2" - ky-universal "^0.2.2" + ky "^0.13.0" + ky-universal "^0.3.0" lru-cache "^5.1.1" multiaddr "^6.0.6" multibase "~0.6.0" @@ -7093,6 +7133,7 @@ ipfs-http-client@^34.0.0: promisify-es6 "^1.0.3" pull-defer "~0.2.3" pull-stream "^3.6.9" + pull-stream-to-async-iterator "^1.0.2" pull-to-stream "~0.1.1" pump "^3.0.0" qs "^6.5.2" @@ -7118,10 +7159,10 @@ ipfs-http-response@0.3.1, ipfs-http-response@~0.3.1: promisify-es6 "^1.0.3" stream-to-blob "^1.0.1" -ipfs-mfs@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/ipfs-mfs/-/ipfs-mfs-0.12.0.tgz#fa1efbd24a74d8340762716cb5d43eb1fe00683e" - integrity sha512-EY+At/kw2Lsyfd/AFInmvR2O6MQvQ87RWhAnN3GXSy/tXaopaS5CqT9SSUVAx3we87/pAUbusxQ1pK7HYtrXSw== +ipfs-mfs@^0.12.2: + version "0.12.2" + resolved "https://registry.yarnpkg.com/ipfs-mfs/-/ipfs-mfs-0.12.2.tgz#2e8d548aa0da699f6b11a3e1f1798c253a5a43cf" + integrity sha512-o9vGKEdUI4HwQV67DQnC1AVSSs7i/yaIHrKPEb6Oe6vGeobLGuEGMReWjTcnMi5KAKUECFESEVtDuNJDr8BW5Q== dependencies: "@hapi/boom" "^7.4.2" "@hapi/joi" "^15.1.0" @@ -7131,26 +7172,26 @@ ipfs-mfs@~0.12.0: err-code "^1.1.2" hamt-sharding "~0.0.2" interface-datastore "~0.6.0" - ipfs-multipart "~0.1.0" + ipfs-multipart "~0.2.0" ipfs-unixfs "~0.1.16" ipfs-unixfs-exporter "~0.37.6" ipfs-unixfs-importer "~0.39.9" ipld-dag-pb "~0.17.2" joi-browser "^13.4.0" - mortice "^1.2.1" + mortice "^2.0.0" multicodec "~0.5.3" multihashes "~0.4.14" once "^1.4.0" promisify-es6 "^1.0.3" pull-stream "^3.6.9" -ipfs-multipart@~0.1.0, ipfs-multipart@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ipfs-multipart/-/ipfs-multipart-0.1.1.tgz#a8c2ad93c3732c00558f50f254ba88a6aeaac6ae" - integrity sha512-NAmCxgBkZ0usWXf8lMwYYEXvyzrqa65uy/1caVKm5yOKFoqXNrNOt4Ev99Pb+B0RMRqGSdfSvtnZM1cfhSSk2A== +ipfs-multipart@^0.2.0, ipfs-multipart@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/ipfs-multipart/-/ipfs-multipart-0.2.0.tgz#f9bc27856dd94a2b4ca1d7f60311775b22638d9c" + integrity sha512-pDCr7xtOW7KCqgeGmejfWjm5xPH516Kx4OU/PdbtIZu68/cFPW4jftJy9idQHdf0C/NnKHnqntMY93rbc+qrQg== dependencies: "@hapi/content" "^4.1.0" - dicer "~0.3.0" + it-multipart "~0.0.2" ipfs-postmsg-proxy@3.1.1: version "3.1.1" @@ -7238,9 +7279,10 @@ ipfs-unixfs@~0.1.16: dependencies: protons "^1.0.1" -"ipfs-utils@https://github.com/ipfs/js-ipfs-utils/tarball/136b0e6e99b7df735e7cc8238825d51efaffb443/js-ipfs-utils.tar.gz": +ipfs-utils@^0.1.0: version "0.1.0" - resolved "https://github.com/ipfs/js-ipfs-utils/tarball/136b0e6e99b7df735e7cc8238825d51efaffb443/js-ipfs-utils.tar.gz#bcb3272e2dc1425c9f6b3aa50edba40c3764224f" + resolved "https://registry.yarnpkg.com/ipfs-utils/-/ipfs-utils-0.1.0.tgz#f756297d157c1d4d62a74e27791b2edc5ae1e311" + integrity sha512-ukL46N8nxURmTAWC2fUKPLFaHQEvCuMn6mrM/6izEbthB6TCkFTqmUl/dhx5cRJFkYOUTvBzKNo9dnvo+8oAwQ== dependencies: buffer "^5.2.1" err-code "^2.0.0" @@ -7267,9 +7309,26 @@ ipfs-utils@~0.0.3: kind-of "^6.0.2" readable-stream "^3.3.0" -"ipfs@https://github.com/ipfs/js-ipfs/tarball/af208c3fe33168bac9573fab06e5728cf09b124c/js-ipfs.tar.gz": +ipfs-utils@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/ipfs-utils/-/ipfs-utils-0.2.0.tgz#e9ccda585450eebb62944436c0fa45bbc464b869" + integrity sha512-rb3YSOQrSuS6NO4oCsgxM1+uQz21c4ZB3F5iMajftmBFd/wrySjDpl/slQ++EiPWp4DweByKt8IQqZD5eU1zfQ== + dependencies: + buffer "^5.2.1" + err-code "^2.0.0" + fs-extra "^8.1.0" + is-buffer "^2.0.3" + is-electron "^2.2.0" + is-pull-stream "0.0.0" + is-stream "^2.0.0" + it-glob "0.0.4" + kind-of "^6.0.2" + pull-stream-to-async-iterator "^1.0.2" + readable-stream "^3.4.0" + +"ipfs@https://github.com/ipfs/js-ipfs/tarball/ddd49ce41f6f9abd48b1e54bc4c7dd3e58fd0ee9/js-ipfs.tar.gz": version "0.38.0-pre.1" - resolved "https://github.com/ipfs/js-ipfs/tarball/af208c3fe33168bac9573fab06e5728cf09b124c/js-ipfs.tar.gz#34f1a739408b3b47acab43695695923d718522bb" + resolved "https://github.com/ipfs/js-ipfs/tarball/ddd49ce41f6f9abd48b1e54bc4c7dd3e58fd0ee9/js-ipfs.tar.gz#ce05cb0f16fdcabbc7482e13637ebcff8a322c4f" dependencies: "@hapi/ammo" "^3.1.1" "@hapi/boom" "^7.4.3" @@ -7308,15 +7367,15 @@ ipfs-utils@~0.0.3: ipfs-bitswap "~0.25.1" ipfs-block "~0.8.1" ipfs-block-service "~0.15.2" - ipfs-http-client "^34.0.0" + ipfs-http-client "^35.1.0" ipfs-http-response "~0.3.1" - ipfs-mfs "~0.12.0" - ipfs-multipart "~0.1.1" + ipfs-mfs "^0.12.2" + ipfs-multipart "^0.2.0" ipfs-repo "~0.26.6" ipfs-unixfs "~0.1.16" ipfs-unixfs-exporter "~0.37.7" ipfs-unixfs-importer "~0.39.11" - ipfs-utils "https://github.com/ipfs/js-ipfs-utils/tarball/136b0e6e99b7df735e7cc8238825d51efaffb443/js-ipfs-utils.tar.gz" + ipfs-utils "~0.2.0" ipld "~0.24.1" ipld-bitcoin "~0.3.0" ipld-dag-cbor "~0.15.0" @@ -7331,6 +7390,8 @@ ipfs-utils@~0.0.3: is-pull-stream "~0.0.0" is-stream "^2.0.0" iso-url "~0.4.6" + it-pipe "^1.0.1" + it-to-stream "^0.1.1" just-safe-set "^2.1.0" kind-of "^6.0.2" ky "~0.13.0" @@ -7340,7 +7401,7 @@ ipfs-utils@~0.0.3: libp2p-crypto "~0.16.0" libp2p-delegated-content-routing "^0.2.4" libp2p-delegated-peer-routing "^0.2.4" - libp2p-floodsub "^0.17.2" + libp2p-floodsub "^0.18.0" libp2p-gossipsub "~0.0.5" libp2p-kad-dht "~0.15.3" libp2p-keychain "~0.4.2" @@ -7356,7 +7417,7 @@ ipfs-utils@~0.0.3: merge-options "^1.0.1" mime-types "^2.1.21" mkdirp "~0.5.1" - mortice "^1.2.2" + mortice "^2.0.0" multiaddr "^6.1.0" multiaddr-to-uri "^5.0.0" multibase "~0.6.0" @@ -7621,7 +7682,7 @@ is-buffer@^2.0.0, is-buffer@^2.0.3, is-buffer@~2.0.3: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725" integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw== -is-callable@^1.1.4: +is-callable@^1.1.3, is-callable@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== @@ -8122,6 +8183,31 @@ it-glob@0.0.4: fs-extra "^8.1.0" minimatch "^3.0.4" +it-multipart@~0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/it-multipart/-/it-multipart-0.0.2.tgz#83e8d55aec54026340e94ea9f7928266597adb20" + integrity sha512-Mlvf1Tt+gLyk5EkE9njjfDCuvf5+3rx1vDt271MT7Ye08/3yJL/h+M/EWhPBPLebmNrkfXUQOGl8ud4T9PzuWA== + dependencies: + buffer-indexof "^1.1.1" + parse-headers "^2.0.2" + +it-pipe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/it-pipe/-/it-pipe-1.0.1.tgz#6443f12e2a24dd71728c172eb58a159bb957095e" + integrity sha512-clx7NMIf4eXe3rp4dKLmT5vMYv/hvZv4lNi1/xx4ZJ8CFmpGod9rTKisyBNBTurbCEa3a7503COankdBj/uUCA== + +it-to-stream@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/it-to-stream/-/it-to-stream-0.1.1.tgz#3fb4a9c4df868cd8f4aaf2071eba5ada5a3fad2a" + integrity sha512-QQx/58JBvT189imr6fD234F8aVf8EdyQHJR0MxXAOShEWK1NWyahPYIQt/tQG7PId0ZG/6/3tUiVCfw2cq+e1w== + dependencies: + buffer "^5.2.1" + fast-fifo "^1.0.0" + get-iterator "^1.0.2" + p-defer "^3.0.0" + p-fifo "^1.0.0" + readable-stream "^3.4.0" + iterable-ndjson@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/iterable-ndjson/-/iterable-ndjson-1.1.0.tgz#36f7e8a5bb04fd087d384f29e44fc4280fc014fc" @@ -8490,15 +8576,7 @@ klaw@^1.0.0: optionalDependencies: graceful-fs "^4.1.9" -ky-universal@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/ky-universal/-/ky-universal-0.2.2.tgz#7a36e1a75641a98f878157463513965f799f5bfe" - integrity sha512-fb32o/fKy/ux2ALWa9HU2hvGtfOq7/vn2nH0FpVE+jwNzyTeORlAbj3Fiw+WLMbUlmVqZIWupnLZ2USHvqwZHw== - dependencies: - abort-controller "^3.0.0" - node-fetch "^2.3.0" - -ky-universal@~0.3.0: +ky-universal@^0.3.0, ky-universal@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/ky-universal/-/ky-universal-0.3.0.tgz#3fcbb0dd03da39b5f05100d9362a630d5e1d402e" integrity sha512-CM4Bgb2zZZpsprcjI6DNYTaH3oGHXL2u7BU4DK+lfCuC4snkt9/WRpMYeKbBbXscvKkeqBwzzjFX2WwmKY5K/A== @@ -8506,12 +8584,7 @@ ky-universal@~0.3.0: abort-controller "^3.0.0" node-fetch "^2.6.0" -ky@^0.11.2: - version "0.11.2" - resolved "https://registry.yarnpkg.com/ky/-/ky-0.11.2.tgz#4ffe6621d9d9ab61bf0f5500542e3a96d1ba0815" - integrity sha512-5Aou5BWue5/mkPqIRqzSWW+0Hkl403pr/2AIrCKYw7cVl/Xoe8Xe4KLBO0PRjbz7GnRe1/8wW1KhqQNFFE7/GQ== - -ky@~0.13.0: +ky@^0.13.0, ky@~0.13.0: version "0.13.0" resolved "https://registry.yarnpkg.com/ky/-/ky-0.13.0.tgz#354c3d209f26d772415cbfe4f5d02ccbcb5ed536" integrity sha512-qmyUE2IvwLveZEHiLmFzUIrW4EsSX18ItZgEfgx8JXFxSEPKrnXvWrjQDP6zi4mwcie3MWBEHyUg0aNF8OS9oA== @@ -8859,7 +8932,23 @@ libp2p-delegated-peer-routing@0.2.4, libp2p-delegated-peer-routing@^0.2.4: peer-id "^0.12.2" peer-info "^0.15.1" -libp2p-floodsub@^0.17.2, libp2p-floodsub@~0.17.1: +libp2p-floodsub@^0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/libp2p-floodsub/-/libp2p-floodsub-0.18.0.tgz#49efd1a9936e898f62abbf041fa2f62049b796e0" + integrity sha512-4OihLP5A4LsxNPlfb0mq6vkjAaNu4YxuyYeoj2nNgrRSzr4H8Dz0YtA+DzEDXIgP2RBANSzS+KG9oDeUXDHa/Q== + dependencies: + async "^2.6.2" + bs58 "^4.0.1" + debug "^4.1.1" + length-prefixed-stream "^2.0.0" + libp2p-crypto "~0.16.1" + libp2p-pubsub "~0.2.0" + protons "^1.0.1" + pull-length-prefixed "^1.3.2" + pull-pushable "^2.2.0" + pull-stream "^3.6.9" + +libp2p-floodsub@~0.17.1: version "0.17.2" resolved "https://registry.yarnpkg.com/libp2p-floodsub/-/libp2p-floodsub-0.17.2.tgz#c789bcd55cfb513a4d2f5291bd28d6aa2be271d1" integrity sha512-xOljtBcNTerBwRYFnXlJVmTwdYla9YTvBux6HaBE0GvVjPHqOI7gO5WJQ1Nul/7h5qLX5tJqZ4OY5CVn+mcuUQ== @@ -9969,21 +10058,12 @@ moment@^2.10.6: resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== -mortice@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/mortice/-/mortice-1.2.2.tgz#a388dcb24bb984da86c4edb04ed29d70d352882b" - integrity sha512-zECpP0bCFVxlAbIJST7ZHQPm5ECKsJRaw4JfSmu5XQeSkO+UB8i+1GUxkskqLHHQfj/wGRWNDd8KBkWfHaZZkw== - dependencies: - observable-webworkers "^1.0.0" - p-queue "^5.0.0" - promise-timeout "^1.3.0" - shortid "^2.2.8" - -mortice@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/mortice/-/mortice-1.2.3.tgz#8e92963d67708dc229a98d5b65ebaa1fc4afb7fd" - integrity sha512-m285eSxSrbNieKgWWzGSbWO2oSoFHb2fdZX306afMVJ8p8boeAmUW5hCyZBC/gHuBMizR7wO9sXH74kZmf0ZbA== +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== dependencies: + globalthis "^1.0.0" observable-webworkers "^1.0.0" p-queue "^6.0.0" promise-timeout "^1.3.0" @@ -10503,7 +10583,7 @@ node-environment-flags@1.0.5: object.getownpropertydescriptors "^2.0.3" semver "^5.7.0" -node-fetch@^2.2.0, node-fetch@^2.3.0, node-fetch@^2.6.0: +node-fetch@^2.2.0, node-fetch@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== @@ -10793,7 +10873,12 @@ object-hash@^1.3.1: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== -object-keys@^1.0.11, object-keys@^1.0.12: +object-inspect@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" + integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== @@ -11044,6 +11129,11 @@ p-defer@^1.0.0: resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= +p-defer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-3.0.0.tgz#d1dceb4ee9b2b604b1d94ffec83760175d4e6f83" + integrity sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw== + p-event@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-event/-/p-event-1.3.0.tgz#8e6b4f4f65c72bc5b6fe28b75eda874f96a4a085" @@ -11051,6 +11141,14 @@ p-event@^1.0.0: dependencies: p-timeout "^1.1.1" +p-fifo@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-fifo/-/p-fifo-1.0.0.tgz#e29d5cf17c239ba87f51dde98c1d26a9cfe20a63" + integrity sha512-IjoCxXW48tqdtDFz6fqo5q1UfFVjjVZe8TC1QRflvNUJtNfCUhxOUw6MOVZhDPjqhSzc26xKdugsO17gmzd5+A== + dependencies: + fast-fifo "^1.0.0" + p-defer "^3.0.0" + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -11255,6 +11353,14 @@ parse-asn1@^5.0.0: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" +parse-headers@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.2.tgz#9545e8a4c1ae5eaea7d24992bca890281ed26e34" + integrity sha512-/LypJhzFmyBIDYP9aDVgeyEb5sQfbfY5mnDq4hVhlQ69js87wXfmEI5V3xI6vvXasqebp0oCytYFLxsBVfCzSg== + dependencies: + for-each "^0.3.3" + string.prototype.trim "^1.1.2" + parse-json@4.0.0, parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -13996,11 +14102,6 @@ stream-to-pull-stream@^1.7.2, stream-to-pull-stream@^1.7.3: looper "^3.0.0" pull-stream "^3.2.3" -streamsearch@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" - integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo= - strftime@~0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/strftime/-/strftime-0.10.0.tgz#b3f0fa419295202a5a289f6d6be9f4909a617193" @@ -14050,6 +14151,31 @@ string.prototype.padend@^3.0.0: es-abstract "^1.4.3" function-bind "^1.0.2" +string.prototype.trim@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.0.tgz#75a729b10cfc1be439543dae442129459ce61e3d" + integrity sha512-9EIjYD/WdlvLpn987+ctkLf0FfvBefOCuiEr2henD8X+7jfwPnyvTdmW8OJhj5p+M0/96mBdynLWkxUr+rHlpg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.13.0" + function-bind "^1.1.1" + +string.prototype.trimleft@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.0.0.tgz#68b6aa8e162c6a80e76e3a8a0c2e747186e271ff" + integrity sha1-aLaqjhYsaoDnbjqKDC50cYbicf8= + dependencies: + define-properties "^1.1.2" + function-bind "^1.0.2" + +string.prototype.trimright@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.0.0.tgz#ab4a56d802a01fbe7293e11e84f24dc8164661dd" + integrity sha1-q0pW2AKgH75yk+EehPJNyBZGYd0= + dependencies: + define-properties "^1.1.2" + function-bind "^1.0.2" + string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" From 4eff7b069b48661992bdb910626f843c73d8e15b Mon Sep 17 00:00:00 2001 From: Marcin Rataj Date: Wed, 11 Sep 2019 01:27:49 +0200 Subject: [PATCH 08/16] feat(brave): delegated DHT + preload - enabled delegated DHT - disabled -star as it crash boot if server is down - enabled preload (best-effort) - enabled mdns - simplified configuration --- add-on/_locales/en/messages.json | 2 +- .../lib/ipfs-client/chrome-sockets/config.js | 140 ++++++++++++++++++ .../lib/ipfs-client/embedded-chromesockets.js | 78 +--------- add-on/src/lib/ipfs-client/embedded.js | 2 +- add-on/src/lib/options.js | 85 +---------- package.json | 4 +- yarn.lock | 11 +- 7 files changed, 158 insertions(+), 164 deletions(-) create mode 100644 add-on/src/lib/ipfs-client/chrome-sockets/config.js diff --git a/add-on/_locales/en/messages.json b/add-on/_locales/en/messages.json index e94a84f29..beded5dcf 100644 --- a/add-on/_locales/en/messages.json +++ b/add-on/_locales/en/messages.json @@ -236,7 +236,7 @@ "description": "An option title on the Preferences screen (option_ipfsNodeConfig_title)" }, "option_ipfsNodeConfig_description": { - "message": "Additional configuration for the embedded IPFS node (arrays will be merged). Must be valid JSON.", + "message": "Additional configuration for the embedded JS IPFS node. Must be valid JSON.", "description": "An option description on the Preferences screen (option_ipfsNodeConfig_description)" }, "option_ipfsNodeType_external": { diff --git a/add-on/src/lib/ipfs-client/chrome-sockets/config.js b/add-on/src/lib/ipfs-client/chrome-sockets/config.js new file mode 100644 index 000000000..1c5ac020b --- /dev/null +++ b/add-on/src/lib/ipfs-client/chrome-sockets/config.js @@ -0,0 +1,140 @@ +'use strict' +/* eslint-env browser, webextensions */ + +const browser = require('webextension-polyfill') + +const { optionDefaults } = require('../../options') +const chromeSocketsBundle = require('./libp2p-bundle') +const mergeOptions = require('merge-options') +const getPort = require('get-port') + +const multiaddr = require('multiaddr') +const maToUri = require('multiaddr-to-uri') +const multiaddr2httpUrl = (ma) => maToUri(ma.includes('/http') ? ma : multiaddr(ma).encapsulate('/http')) + +const chromeSocketsOpts = { + config: { + Addresses: { + API: '/ip4/127.0.0.1/tcp/5003', + Gateway: '/ip4/127.0.0.1/tcp/9091', + /* Sidenote on API & Gateway: + Gateway can run without API port, + but Web UI needs API (can't use window.ipfs due to sandboxing) + */ + Swarm: [ + // TODO: listening on TCP (override IP and port at runtime in buildConfig()?) + '/ip4/0.0.0.0/tcp/0' + // TODO: disabled -star signaling: it makes a backup non-LAN peer discovery, but break the boot if server is down + // '/dns4/ws-star1.par.dwebops.pub.com/tcp/443/wss/p2p-websocket-star' + ], + // Delegated Content and Peer Routing: https://github.com/ipfs/js-ipfs/pull/2195 + Delegates: // [] // TODO: enable delegates + [ + '/dns4/node1.delegate.ipfs.io/tcp/443/https', + '/dns4/node0.delegate.ipfs.io/tcp/443/https' + ] + }, + Discovery: { + MDNS: { + Enabled: true, + Interval: 10 + } + }, + Swarm: { + ConnMgr: { + LowWater: 100, + HighWater: 250 + } + }, + Bootstrap: [ + // Prioritize TCP Bootstrappers from https://github.com/ipfs/js-ipfs/blob/v0.37.1/src/core/runtime/config-nodejs.js#L22 + '/ip4/104.236.176.52/tcp/4001/ipfs/QmSoLnSGccFuZQJzRadHn95W2CrSFmZuTdDWP8HXaHca9z', + '/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ', + '/ip4/104.236.179.241/tcp/4001/ipfs/QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM', + '/ip4/162.243.248.213/tcp/4001/ipfs/QmSoLueR4xBeUbY9WZ9xGUUxunbKWcrNFTDAadQJmocnWm', + '/ip4/128.199.219.111/tcp/4001/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu', + '/ip4/104.236.76.40/tcp/4001/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64', + '/ip4/178.62.158.247/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd', + '/ip4/178.62.61.185/tcp/4001/ipfs/QmSoLMeWqB7YGVLJN3pNLQpmmEk35v6wYtsMGLzSr5QBU3', + '/ip4/104.236.151.122/tcp/4001/ipfs/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx', + '/ip6/2604:a880:1:20::1f9:9001/tcp/4001/ipfs/QmSoLnSGccFuZQJzRadHn95W2CrSFmZuTdDWP8HXaHca9z', + '/ip6/2604:a880:1:20::203:d001/tcp/4001/ipfs/QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM', + '/ip6/2604:a880:0:1010::23:d001/tcp/4001/ipfs/QmSoLueR4xBeUbY9WZ9xGUUxunbKWcrNFTDAadQJmocnWm', + '/ip6/2400:6180:0:d0::151:6001/tcp/4001/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu', + '/ip6/2604:a880:800:10::4a:5001/tcp/4001/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64', + '/ip6/2a03:b0c0:0:1010::23:1001/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd', + '/ip6/2a03:b0c0:1:d0::e7:1/tcp/4001/ipfs/QmSoLMeWqB7YGVLJN3pNLQpmmEk35v6wYtsMGLzSr5QBU3', + '/ip6/2604:a880:1:20::1d9:6001/tcp/4001/ipfs/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx', + // Twist: connect to preload nodes, but over tcp :) + '/dns4/node0.preload.ipfs.io/tcp/4001/ipfs/QmZMxNdpMkewiVZLMRxaNxUeZpDUb34pWjZ1kZvsd16Zic', + '/dns4/node1.preload.ipfs.io/tcp/4001/ipfs/Qmbut9Ywz9YEDrz8ySBSgWyJk41Uvm2QJPhwDJzJyGFsD6', + // WebSockets versions from https://github.com/ipfs/js-ipfs/blob/v0.37.1/src/core/runtime/config-browser.js#L20 + '/dns4/ams-1.bootstrap.libp2p.io/tcp/443/wss/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd', + '/dns4/lon-1.bootstrap.libp2p.io/tcp/443/wss/ipfs/QmSoLMeWqB7YGVLJN3pNLQpmmEk35v6wYtsMGLzSr5QBU3', + '/dns4/sfo-3.bootstrap.libp2p.io/tcp/443/wss/ipfs/QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM', + '/dns4/sgp-1.bootstrap.libp2p.io/tcp/443/wss/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu', + '/dns4/nyc-1.bootstrap.libp2p.io/tcp/443/wss/ipfs/QmSoLueR4xBeUbY9WZ9xGUUxunbKWcrNFTDAadQJmocnWm', + '/dns4/nyc-2.bootstrap.libp2p.io/tcp/443/wss/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64', + '/dns4/node0.preload.ipfs.io/tcp/443/wss/ipfs/QmZMxNdpMkewiVZLMRxaNxUeZpDUb34pWjZ1kZvsd16Zic', + '/dns4/node1.preload.ipfs.io/tcp/443/wss/ipfs/Qmbut9Ywz9YEDrz8ySBSgWyJk41Uvm2QJPhwDJzJyGFsD6' + ] + }, + // preload: { enabled: false, addresses: [] } + /* TODO: when we have p2p transport, are preloads still needed? should Brave have own nodes? */ + preload: { + enabled: true, + addresses: [ + '/dns4/node1.preload.ipfs.io/tcp/443/https', + '/dns4/node0.preload.ipfs.io/tcp/443/https' + ] + } +} + +async function buildConfig (opts, log) { + const defaultOpts = JSON.parse(optionDefaults.ipfsNodeConfig) + const userOpts = JSON.parse(opts.ipfsNodeConfig) + const ipfsNodeConfig = mergeOptions(defaultOpts, userOpts, chromeSocketsOpts, { start: false, libp2p: chromeSocketsBundle }) + + // Detect when API or Gateway port is not available (taken by something else) + // We find the next free port and update configuration to use it instead + const multiaddr2port = (ma) => parseInt(new URL(multiaddr2httpUrl(ma)).port, 10) + const gatewayPort = multiaddr2port(ipfsNodeConfig.config.Addresses.Gateway) + const apiPort = multiaddr2port(ipfsNodeConfig.config.Addresses.API) + log(`checking if ports are available: api: ${apiPort}, gateway: ${gatewayPort}`) + const freeGatewayPort = await getPort({ port: getPort.makeRange(gatewayPort, gatewayPort + 100) }) + const freeApiPort = await getPort({ port: getPort.makeRange(apiPort, apiPort + 100) }) + if (gatewayPort !== freeGatewayPort || apiPort !== freeApiPort) { + log(`updating config to available ports: api: ${freeApiPort}, gateway: ${freeGatewayPort}`) + const addrs = ipfsNodeConfig.config.Addresses + addrs.Gateway = addrs.Gateway.replace(gatewayPort.toString(), freeGatewayPort.toString()) + addrs.API = addrs.API.replace(apiPort.toString(), freeApiPort.toString()) + } + + return ipfsNodeConfig +} + +async function syncConfig (ipfs, opts, log) { + const localConfig = await browser.storage.local.get('ipfsNodeConfig') + if (localConfig && localConfig.ipfsNodeConfig) { + const gwMa = await ipfs.config.get('Addresses.Gateway') + const apiMa = await ipfs.config.get('Addresses.API') + const httpGateway = multiaddr2httpUrl(gwMa) + const httpApi = multiaddr2httpUrl(apiMa) + // update config in browser.storage to ports from js-ipfs instance + const ipfsNodeConfig = JSON.parse(localConfig.ipfsNodeConfig) + ipfsNodeConfig.config.Addresses.Gateway = gwMa + ipfsNodeConfig.config.Addresses.API = apiMa + const configChanges = { + customGatewayUrl: httpGateway, + ipfsApiUrl: httpApi, + ipfsNodeConfig: JSON.stringify(ipfsNodeConfig, null, 2) + } + // update runtime config in place + Object.assign(opts, configChanges) + // update config in browser.storage (triggers async client restart if ports changed) + log(`synchronizing ipfsNodeConfig with customGatewayUrl (${configChanges.customGatewayUrl}) and ipfsApiUrl (${configChanges.ipfsApiUrl})`) + await browser.storage.local.set(configChanges) + } +} + +module.exports = { buildConfig, syncConfig } diff --git a/add-on/src/lib/ipfs-client/embedded-chromesockets.js b/add-on/src/lib/ipfs-client/embedded-chromesockets.js index b84c13a43..814c38304 100644 --- a/add-on/src/lib/ipfs-client/embedded-chromesockets.js +++ b/add-on/src/lib/ipfs-client/embedded-chromesockets.js @@ -1,6 +1,5 @@ 'use strict' /* eslint-env browser, webextensions */ -const browser = require('webextension-polyfill') /* ********************************************************* This file is a wip sandbox. @@ -16,56 +15,18 @@ const uptimeStart = Date.now() process.uptime = () => Math.floor((Date.now() - uptimeStart) / 1000) process.hrtime = require('browser-process-hrtime') -const mergeOptions = require('merge-options') const Ipfs = require('ipfs') const HttpApi = require('ipfs/src/http') -const multiaddr = require('multiaddr') -const maToUri = require('multiaddr-to-uri') -const getPort = require('get-port') +const { buildConfig, syncConfig } = require('./chrome-sockets/config') -// libp2p -// const WS = require('libp2p-websockets') -// const WSM = require('libp2p-websocket-star-multi') -// const TCP = require('libp2p-tcp') -// const MulticastDNS = require('libp2p-mdns') -// const Bootstrap = require('libp2p-bootstrap') - -const { optionDefaults } = require('../options') - -const chromeSocketsBundle = require('./chrome-sockets/libp2p-bundle') - -// js-ipfs with embedded hapi HTTP server -let node = null -let nodeHttpApi = null - -async function buildConfig (opts) { - const defaultOpts = JSON.parse(optionDefaults.ipfsNodeConfig) - const userOpts = JSON.parse(opts.ipfsNodeConfig) - - const ipfsNodeConfig = mergeOptions.call({ concatArrays: true }, defaultOpts, userOpts, { start: false, libp2p: chromeSocketsBundle }) - - // Detect when API or Gateway port is not available (taken by something else) - // We find the next free port and update configuration to use it instead - const multiaddr2port = (ma) => parseInt(new URL(multiaddr2httpUrl(ma)).port, 10) - const gatewayPort = multiaddr2port(ipfsNodeConfig.config.Addresses.Gateway) - const apiPort = multiaddr2port(ipfsNodeConfig.config.Addresses.API) - log(`checking if ports are available: api: ${apiPort}, gateway: ${gatewayPort}`) - const freeGatewayPort = await getPort({ port: getPort.makeRange(gatewayPort, gatewayPort + 100) }) - const freeApiPort = await getPort({ port: getPort.makeRange(apiPort, apiPort + 100) }) - if (gatewayPort !== freeGatewayPort || apiPort !== freeApiPort) { - log(`updating config to available ports: api: ${freeApiPort}, gateway: ${freeGatewayPort}`) - const addrs = ipfsNodeConfig.config.Addresses - addrs.Gateway = addrs.Gateway.replace(gatewayPort.toString(), freeGatewayPort.toString()) - addrs.API = addrs.API.replace(apiPort.toString(), freeApiPort.toString()) - } - - return ipfsNodeConfig -} +// js-ipfs + embedded hapi HTTP server +let node +let nodeHttpApi exports.init = async function init (opts) { log('init embedded:chromesockets') - const ipfsOpts = await buildConfig(opts) + const ipfsOpts = await buildConfig(opts, log) log('creating js-ipfs with opts: ', ipfsOpts) node = new Ipfs(ipfsOpts) @@ -80,7 +41,7 @@ exports.init = async function init (opts) { try { const httpServers = new HttpApi(node, ipfsOpts) nodeHttpApi = await httpServers.start() - await updateConfigWithHttpEndpoints(node, opts) + await syncConfig(node, opts, log) resolve(node) } catch (err) { reject(err) @@ -98,33 +59,6 @@ exports.init = async function init (opts) { }) } -const multiaddr2httpUrl = (ma) => maToUri(ma.includes('/http') ? ma : multiaddr(ma).encapsulate('/http')) - -// Update internal configuration to HTTP Endpoints from js-ipfs instance -async function updateConfigWithHttpEndpoints (ipfs, opts) { - const localConfig = await browser.storage.local.get('ipfsNodeConfig') - if (localConfig && localConfig.ipfsNodeConfig) { - const gwMa = await ipfs.config.get('Addresses.Gateway') - const apiMa = await ipfs.config.get('Addresses.API') - const httpGateway = multiaddr2httpUrl(gwMa) - const httpApi = multiaddr2httpUrl(apiMa) - // update ports in JSON configuration for embedded js-ipfs - const ipfsNodeConfig = JSON.parse(localConfig.ipfsNodeConfig) - ipfsNodeConfig.config.Addresses.Gateway = gwMa - ipfsNodeConfig.config.Addresses.API = apiMa - const configChanges = { - customGatewayUrl: httpGateway, - ipfsApiUrl: httpApi, - ipfsNodeConfig: JSON.stringify(ipfsNodeConfig, null, 2) - } - // update current runtime config (in place) - Object.assign(opts, configChanges) - // update user config in storage (triggers async client restart if ports changed) - log(`synchronizing ipfsNodeConfig with customGatewayUrl (${configChanges.customGatewayUrl}) and ipfsApiUrl (${configChanges.ipfsApiUrl})`) - await browser.storage.local.set(configChanges) - } -} - exports.destroy = async function () { log('destroy: embedded:chromesockets') diff --git a/add-on/src/lib/ipfs-client/embedded.js b/add-on/src/lib/ipfs-client/embedded.js index 535c2fd72..631149151 100644 --- a/add-on/src/lib/ipfs-client/embedded.js +++ b/add-on/src/lib/ipfs-client/embedded.js @@ -15,7 +15,7 @@ exports.init = function init (opts) { const defaultOpts = JSON.parse(optionDefaults.ipfsNodeConfig) const userOpts = JSON.parse(opts.ipfsNodeConfig) - const ipfsOpts = mergeOptions.call({ concatArrays: true }, defaultOpts, userOpts, { start: false }) + const ipfsOpts = mergeOptions(defaultOpts, userOpts, { start: false }) node = new Ipfs(ipfsOpts) diff --git a/add-on/src/lib/options.js b/add-on/src/lib/options.js index dfff209e7..ee26c6cdf 100644 --- a/add-on/src/lib/options.js +++ b/add-on/src/lib/options.js @@ -45,94 +45,13 @@ function buildDefaultIpfsNodeType () { } function buildDefaultIpfsNodeConfig () { - const config = { + return JSON.stringify({ config: { Addresses: { Swarm: [] - }, - Bootstrap: [ - // TCP Bootstrappers from https://github.com/ipfs/js-ipfs/blob/v0.37.1/src/core/runtime/config-nodejs.js#L22 - '/ip4/104.236.176.52/tcp/4001/ipfs/QmSoLnSGccFuZQJzRadHn95W2CrSFmZuTdDWP8HXaHca9z', - '/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ', - '/ip4/104.236.179.241/tcp/4001/ipfs/QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM', - '/ip4/162.243.248.213/tcp/4001/ipfs/QmSoLueR4xBeUbY9WZ9xGUUxunbKWcrNFTDAadQJmocnWm', - '/ip4/128.199.219.111/tcp/4001/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu', - '/ip4/104.236.76.40/tcp/4001/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64', - '/ip4/178.62.158.247/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd', - '/ip4/178.62.61.185/tcp/4001/ipfs/QmSoLMeWqB7YGVLJN3pNLQpmmEk35v6wYtsMGLzSr5QBU3', - '/ip4/104.236.151.122/tcp/4001/ipfs/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx', - '/ip6/2604:a880:1:20::1f9:9001/tcp/4001/ipfs/QmSoLnSGccFuZQJzRadHn95W2CrSFmZuTdDWP8HXaHca9z', - '/ip6/2604:a880:1:20::203:d001/tcp/4001/ipfs/QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM', - '/ip6/2604:a880:0:1010::23:d001/tcp/4001/ipfs/QmSoLueR4xBeUbY9WZ9xGUUxunbKWcrNFTDAadQJmocnWm', - '/ip6/2400:6180:0:d0::151:6001/tcp/4001/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu', - '/ip6/2604:a880:800:10::4a:5001/tcp/4001/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64', - '/ip6/2a03:b0c0:0:1010::23:1001/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd', - '/ip6/2a03:b0c0:1:d0::e7:1/tcp/4001/ipfs/QmSoLMeWqB7YGVLJN3pNLQpmmEk35v6wYtsMGLzSr5QBU3', - '/ip6/2604:a880:1:20::1d9:6001/tcp/4001/ipfs/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx', - // Twist: connect to preload nodes, but over tcp :) - '/dns4/node0.preload.ipfs.io/tcp/4001/ipfs/QmZMxNdpMkewiVZLMRxaNxUeZpDUb34pWjZ1kZvsd16Zic', - '/dns4/node1.preload.ipfs.io/tcp/4001/ipfs/Qmbut9Ywz9YEDrz8ySBSgWyJk41Uvm2QJPhwDJzJyGFsD6', - // WebSockets versions from https://github.com/ipfs/js-ipfs/blob/v0.37.1/src/core/runtime/config-browser.js#L20 - '/dns4/ams-1.bootstrap.libp2p.io/tcp/443/wss/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd', - '/dns4/lon-1.bootstrap.libp2p.io/tcp/443/wss/ipfs/QmSoLMeWqB7YGVLJN3pNLQpmmEk35v6wYtsMGLzSr5QBU3', - '/dns4/sfo-3.bootstrap.libp2p.io/tcp/443/wss/ipfs/QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM', - '/dns4/sgp-1.bootstrap.libp2p.io/tcp/443/wss/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu', - '/dns4/nyc-1.bootstrap.libp2p.io/tcp/443/wss/ipfs/QmSoLueR4xBeUbY9WZ9xGUUxunbKWcrNFTDAadQJmocnWm', - '/dns4/nyc-2.bootstrap.libp2p.io/tcp/443/wss/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64', - '/dns4/node0.preload.ipfs.io/tcp/443/wss/ipfs/QmZMxNdpMkewiVZLMRxaNxUeZpDUb34pWjZ1kZvsd16Zic', - '/dns4/node1.preload.ipfs.io/tcp/443/wss/ipfs/Qmbut9Ywz9YEDrz8ySBSgWyJk41Uvm2QJPhwDJzJyGFsD6' - ], - Swarm: { - ConnMgr: { - LowWater: 100, - HighWater: 250 - } } } - } - if (hasChromeSocketsForTcp()) { - // TODO: make more robust (sync with buildCustomGatewayUrl and buildIpfsApiUrl) - // embedded node should use different ports to make it easier - // for people already running regular go-ipfs and js-ipfs on standard ports - config.config.Addresses.API = '/ip4/127.0.0.1/tcp/5003' - config.config.Addresses.Gateway = '/ip4/127.0.0.1/tcp/9091' - - // Until we have MulticastDNS+DNS, peer discovery is done over ws-star - config.config.Addresses.Swarm = [ - '/ip4/0.0.0.0/tcp/0', - '/dns4/ws-star1.par.dwebops.pub/tcp/443/wss/p2p-websocket-star' - // '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star' - ] - /* - // Until DHT and p2p transport are ready, delegate + preload - // Note: we use .preload.ipfs.io and .delegate.ipfs.io as means of http sharding (12 instead of 6 concurrent requests) - const delegates = [ - '/dns4/node1.delegate.ipfs.io/tcp/443/https', - '/dns4/node0.delegate.ipfs.io/tcp/443/https' - ] - // Delegated Content and Peer Routing: https://github.com/ipfs/js-ipfs/pull/2195 - config.config.Addresses.Delegates = delegates - // TODO: when we have p2p transport, are preloads still needed? should Brave have own nodes? - config.preload = { - enabled: true, - addresses: [ - '/dns4/node1.preload.ipfs.io/tcp/443/https', - '/dns4/node0.preload.ipfs.io/tcp/443/https' - ] - } - */ - config.preload = { enabled: false } - /* - (Sidenote on why we need API for Web UI) - Gateway can run without API port, - but Web UI does not use window.ipfs due to sandboxing atm. - - If Web UI is able to use window.ipfs, then we can remove API port. - Disabling API is as easy as: - config.config.Addresses.API = '' - */ - } - return JSON.stringify(config, null, 2) + }, null, 2) } // `storage` should be a browser.storage.local or similar diff --git a/package.json b/package.json index 7519ac2f4..e92366efc 100644 --- a/package.json +++ b/package.json @@ -116,7 +116,7 @@ "@material/switch": "3.1.0", "browser-process-hrtime": "1.0.0", "choo": "7.0.0", - "chrome-dgram": "https://github.com/lidel/chrome-dgram/tarball/2bd217a29ea91b313fe5f46828621bb27d69cb06/chrome-dgram.tar.gz", + "chrome-dgram": "3.0.3", "chrome-net": "3.3.2", "debug": "4.1.1", "doc-sniff": "1.0.1", @@ -126,7 +126,7 @@ "get-port": "5.0.0", "http-dns": "3.0.1", "http-node": "1.2.0", - "ipfs": "https://github.com/ipfs/js-ipfs/tarball/ddd49ce41f6f9abd48b1e54bc4c7dd3e58fd0ee9/js-ipfs.tar.gz", + "ipfs": "https://github.com/ipfs/js-ipfs/tarball/cf38aead2b0cb0b5f269daf265a2b868c50a81f8/js-ipfs.tar.gz", "ipfs-css": "0.13.1", "ipfs-http-client": "33.1.1", "ipfs-http-response": "0.3.1", diff --git a/yarn.lock b/yarn.lock index f2583c602..0abca414a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3055,9 +3055,10 @@ chownr@^1.1.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== -"chrome-dgram@https://github.com/lidel/chrome-dgram/tarball/2bd217a29ea91b313fe5f46828621bb27d69cb06/chrome-dgram.tar.gz": - version "3.0.2" - resolved "https://github.com/lidel/chrome-dgram/tarball/2bd217a29ea91b313fe5f46828621bb27d69cb06/chrome-dgram.tar.gz#a0ecacafc6ef22a58e11d6664037ef6734db8024" +chrome-dgram@3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/chrome-dgram/-/chrome-dgram-3.0.3.tgz#121935a81d52d4012273e17bcd6079f31a3fa30c" + integrity sha512-rktbTuXuzriInBm9qESjTqRhnscp26gAdsQnUSWIY4a3miF9gnFOBGib+DO0zcJ0ZF2wj6wwQrPgyWfT4+as3g== dependencies: inherits "^2.0.1" run-series "^1.1.2" @@ -7326,9 +7327,9 @@ ipfs-utils@~0.2.0: pull-stream-to-async-iterator "^1.0.2" readable-stream "^3.4.0" -"ipfs@https://github.com/ipfs/js-ipfs/tarball/ddd49ce41f6f9abd48b1e54bc4c7dd3e58fd0ee9/js-ipfs.tar.gz": +"ipfs@https://github.com/ipfs/js-ipfs/tarball/cf38aead2b0cb0b5f269daf265a2b868c50a81f8/js-ipfs.tar.gz": version "0.38.0-pre.1" - resolved "https://github.com/ipfs/js-ipfs/tarball/ddd49ce41f6f9abd48b1e54bc4c7dd3e58fd0ee9/js-ipfs.tar.gz#ce05cb0f16fdcabbc7482e13637ebcff8a322c4f" + resolved "https://github.com/ipfs/js-ipfs/tarball/cf38aead2b0cb0b5f269daf265a2b868c50a81f8/js-ipfs.tar.gz#90189b730a6e5123807891a606de7bf7a86c9538" dependencies: "@hapi/ammo" "^3.1.1" "@hapi/boom" "^7.4.3" From 38a55a3790ef782b24472f76e05eda961d3a482c Mon Sep 17 00:00:00 2001 From: Marcin Rataj Date: Wed, 11 Sep 2019 11:24:44 +0200 Subject: [PATCH 09/16] refactor(brave): cleanup - move everything to separate dir - disable debug ipfs:http-api* logs --- .../{chrome-sockets => embedded-chromesockets}/config.js | 0 .../index.js} | 2 +- .../{chrome-sockets => embedded-chromesockets}/libp2p-bundle.js | 0 .../{chrome-sockets => embedded-chromesockets}/libp2p.js | 0 add-on/src/lib/options.js | 2 +- webpack.config.js | 2 +- 6 files changed, 3 insertions(+), 3 deletions(-) rename add-on/src/lib/ipfs-client/{chrome-sockets => embedded-chromesockets}/config.js (100%) rename add-on/src/lib/ipfs-client/{embedded-chromesockets.js => embedded-chromesockets/index.js} (97%) rename add-on/src/lib/ipfs-client/{chrome-sockets => embedded-chromesockets}/libp2p-bundle.js (100%) rename add-on/src/lib/ipfs-client/{chrome-sockets => embedded-chromesockets}/libp2p.js (100%) diff --git a/add-on/src/lib/ipfs-client/chrome-sockets/config.js b/add-on/src/lib/ipfs-client/embedded-chromesockets/config.js similarity index 100% rename from add-on/src/lib/ipfs-client/chrome-sockets/config.js rename to add-on/src/lib/ipfs-client/embedded-chromesockets/config.js diff --git a/add-on/src/lib/ipfs-client/embedded-chromesockets.js b/add-on/src/lib/ipfs-client/embedded-chromesockets/index.js similarity index 97% rename from add-on/src/lib/ipfs-client/embedded-chromesockets.js rename to add-on/src/lib/ipfs-client/embedded-chromesockets/index.js index 814c38304..6d61768c9 100644 --- a/add-on/src/lib/ipfs-client/embedded-chromesockets.js +++ b/add-on/src/lib/ipfs-client/embedded-chromesockets/index.js @@ -17,7 +17,7 @@ process.hrtime = require('browser-process-hrtime') const Ipfs = require('ipfs') const HttpApi = require('ipfs/src/http') -const { buildConfig, syncConfig } = require('./chrome-sockets/config') +const { buildConfig, syncConfig } = require('./config') // js-ipfs + embedded hapi HTTP server let node diff --git a/add-on/src/lib/ipfs-client/chrome-sockets/libp2p-bundle.js b/add-on/src/lib/ipfs-client/embedded-chromesockets/libp2p-bundle.js similarity index 100% rename from add-on/src/lib/ipfs-client/chrome-sockets/libp2p-bundle.js rename to add-on/src/lib/ipfs-client/embedded-chromesockets/libp2p-bundle.js diff --git a/add-on/src/lib/ipfs-client/chrome-sockets/libp2p.js b/add-on/src/lib/ipfs-client/embedded-chromesockets/libp2p.js similarity index 100% rename from add-on/src/lib/ipfs-client/chrome-sockets/libp2p.js rename to add-on/src/lib/ipfs-client/embedded-chromesockets/libp2p.js diff --git a/add-on/src/lib/options.js b/add-on/src/lib/options.js index ee26c6cdf..1bb01861b 100644 --- a/add-on/src/lib/options.js +++ b/add-on/src/lib/options.js @@ -24,7 +24,7 @@ exports.optionDefaults = Object.freeze({ ipfsApiUrl: buildIpfsApiUrl(), ipfsApiPollMs: 3000, ipfsProxy: true, // window.ipfs - logNamespaces: 'jsipfs*,ipfs*,libp2p:mdns*,libp2p-delegated*,-*:ipns*,-ipfs:preload*,-ipfs-http-client:request*' + logNamespaces: 'jsipfs*,ipfs*,libp2p:mdns*,libp2p-delegated*,-*:ipns*,-ipfs:preload*,-ipfs-http-client:request*,-ipfs:http-api*' }) function buildCustomGatewayUrl () { diff --git a/webpack.config.js b/webpack.config.js index efaa9c8fd..37edc3057 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -41,7 +41,7 @@ const commonConfig = { 'process.env': { NODE_ENV: '"production"', IPFS_MONITORING: false, - DEBUG: true // controls verbosity of Hapi HTTP server in js-ipfs + DEBUG: false // controls verbosity of Hapi HTTP server in js-ipfs } }) ], From 8ed1a6da4482f931691961c7267cb937e448e009 Mon Sep 17 00:00:00 2001 From: Marcin Rataj Date: Wed, 11 Sep 2019 13:12:19 +0200 Subject: [PATCH 10/16] fix: allow scenario when all ws-stars are offline ws-star is optional, should not break boot process --- .../src/lib/ipfs-client/embedded-chromesockets/config.js | 6 +++--- .../src/lib/ipfs-client/embedded-chromesockets/libp2p.js | 8 ++++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/add-on/src/lib/ipfs-client/embedded-chromesockets/config.js b/add-on/src/lib/ipfs-client/embedded-chromesockets/config.js index 1c5ac020b..180f2207c 100644 --- a/add-on/src/lib/ipfs-client/embedded-chromesockets/config.js +++ b/add-on/src/lib/ipfs-client/embedded-chromesockets/config.js @@ -23,9 +23,9 @@ const chromeSocketsOpts = { */ Swarm: [ // TODO: listening on TCP (override IP and port at runtime in buildConfig()?) - '/ip4/0.0.0.0/tcp/0' - // TODO: disabled -star signaling: it makes a backup non-LAN peer discovery, but break the boot if server is down - // '/dns4/ws-star1.par.dwebops.pub.com/tcp/443/wss/p2p-websocket-star' + '/ip4/0.0.0.0/tcp/0', + // optional ws-star signaling provides a backup non-LAN peer discovery + '/dns4/ws-star1.par.dwebops.pub.com/tcp/443/wss/p2p-websocket-star' ], // Delegated Content and Peer Routing: https://github.com/ipfs/js-ipfs/pull/2195 Delegates: // [] // TODO: enable delegates diff --git a/add-on/src/lib/ipfs-client/embedded-chromesockets/libp2p.js b/add-on/src/lib/ipfs-client/embedded-chromesockets/libp2p.js index 58c3b8572..88a6abb2b 100644 --- a/add-on/src/lib/ipfs-client/embedded-chromesockets/libp2p.js +++ b/add-on/src/lib/ipfs-client/embedded-chromesockets/libp2p.js @@ -18,10 +18,14 @@ const multiaddr = require('multiaddr') class Libp2pChromeSockets extends libp2p { constructor (_options) { // this can be replaced once optional listening is supported with the below code. ref: https://github.com/libp2p/interface-transport/issues/41 - // const wsstar = new WebSocketStar({ id: _options.peerInfo.id }) + // const wsstar = new WebSocketStar({ id: _options.peerInfo.id, ignore_no_online: true }) const wsstarServers = _options.peerInfo.multiaddrs.toArray().map(String).filter(addr => addr.includes('p2p-websocket-star')) _options.peerInfo.multiaddrs.replace(wsstarServers.map(multiaddr), '/p2p-websocket-star') // the ws-star-multi module will replace this with the chosen ws-star servers - const wsstar = new WebSocketStarMulti({ servers: wsstarServers, id: _options.peerInfo.id, ignore_no_online: !wsstarServers.length || _options.wsStarIgnoreErrors }) + const wsstar = new WebSocketStarMulti({ + servers: wsstarServers, + id: _options.peerInfo.id, + ignore_no_online: true // allow scenario when all ws-stars are offline + }) const defaults = { switch: { From 4b6e787d4a7cb4e5594bf4d270bc1e4b5ace1360 Mon Sep 17 00:00:00 2001 From: Marcin Rataj Date: Thu, 12 Sep 2019 17:54:01 +0200 Subject: [PATCH 11/16] chore: dependency bump --- package.json | 42 +- yarn.lock | 1146 +++++++++++++++++++++++++++++--------------------- 2 files changed, 696 insertions(+), 492 deletions(-) diff --git a/package.json b/package.json index e92366efc..d1e2fb12d 100644 --- a/package.json +++ b/package.json @@ -68,27 +68,25 @@ "resolutions": { "libp2p-delegated-content-routing": "0.2.4", "libp2p-delegated-peer-routing": "0.2.4", - "@hapi/hapi": "https://github.com/lidel/hapi/tarball/ccbf84ba5edc9b24564fdd166e3ee6d81c4c02d8/hapi.tar.gz", - "pino": "5.12.3", - "hapi-pino": "https://github.com/pinojs/hapi-pino/tarball/3767ed6b67601831e176e084ed82ba4ed9f726e6/hapi-pino.tar.gz", + "@hapi/hapi": "https://github.com/lidel/hapi/tarball/fb8626fac0522f49fe29e2f4f686dfd8926204b6/hapi.tar.gz", "iso-stream-http": "0.1.2", "stream-http": "npm:iso-stream-http@0.1.2", "pull-to-stream": "0.1.1", "multiaddr": "6.1.0" }, "devDependencies": { - "@babel/core": "7.5.5", - "@babel/preset-env": "7.5.5", + "@babel/core": "7.6.0", + "@babel/preset-env": "7.6.0", "babel-loader": "8.0.6", "babel-plugin-syntax-async-generators": "6.13.0", "chai": "4.2.0", - "cross-env": "5.2.0", + "cross-env": "5.2.1", "download-cli": "1.1.1", "fakefile": "0.0.9", "firefox-addons-add-update-version": "https://github.com/lidel/firefox-addons-add-update-version/tarball/7901bf69b4ed122a20cd5e10ed7f8dae9b00dde7/firefox-addons-add-update-version.tar.gz", "fs-promise": "2.0.3", "get-firefox": "2.2.1", - "husky": "3.0.3", + "husky": "3.0.5", "ignore-styles": "5.0.1", "json": "9.0.6", "mem-storage-area": "1.0.3", @@ -99,36 +97,36 @@ "request-progress": "3.0.0", "shx": "0.3.2", "simple-progress-webpack-plugin": "1.1.2", - "sinon": "7.4.1", + "sinon": "7.4.2", "sinon-chrome": "3.0.1", - "standard": "13.1.0", + "standard": "14.2.0", "tar": "4.4.10", - "terser": "4.1.4", - "terser-webpack-plugin": "1.4.1", + "terser": "4.3.1", + "terser-webpack-plugin": "2.0.1", "transform-loader": "0.2.4", "web-ext": "3.1.1", - "webpack": "4.39.1", - "webpack-bundle-analyzer": "3.4.1", - "webpack-cli": "3.3.6", - "webpack-merge": "4.2.1" + "webpack": "4.39.3", + "webpack-bundle-analyzer": "3.5.0", + "webpack-cli": "3.3.8", + "webpack-merge": "4.2.2" }, "dependencies": { "@material/switch": "3.1.0", "browser-process-hrtime": "1.0.0", "choo": "7.0.0", "chrome-dgram": "3.0.3", - "chrome-net": "3.3.2", + "chrome-net": "3.3.3", "debug": "4.1.1", "doc-sniff": "1.0.1", "drag-and-drop-files": "0.0.1", - "file-type": "12.1.0", - "filesize": "4.1.2", + "file-type": "12.3.0", + "filesize": "4.2.0", "get-port": "5.0.0", "http-dns": "3.0.1", "http-node": "1.2.0", "ipfs": "https://github.com/ipfs/js-ipfs/tarball/cf38aead2b0cb0b5f269daf265a2b868c50a81f8/js-ipfs.tar.gz", "ipfs-css": "0.13.1", - "ipfs-http-client": "33.1.1", + "ipfs-http-client": "36.0.0", "ipfs-http-response": "0.3.1", "ipfs-postmsg-proxy": "3.1.1", "ipfsx": "0.17.0", @@ -138,9 +136,9 @@ "lru-cache": "5.1.1", "merge-options": "1.0.1", "mime-types": "2.1.24", - "multiaddr": "6.1.0", - "multiaddr-to-uri": "4.0.1", - "p-queue": "6.1.0", + "multiaddr": "7.1.0", + "multiaddr-to-uri": "5.0.0", + "p-queue": "6.1.1", "path-browserify": "1.0.0", "piggybacker": "2.0.0", "postmsg-rpc": "2.4.0", diff --git a/yarn.lock b/yarn.lock index 0abca414a..85470837e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16,18 +16,18 @@ dependencies: "@babel/highlight" "^7.0.0" -"@babel/core@7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.5.5.tgz#17b2686ef0d6bc58f963dddd68ab669755582c30" - integrity sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg== +"@babel/core@7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.0.tgz#9b00f73554edd67bebc86df8303ef678be3d7b48" + integrity sha512-FuRhDRtsd6IptKpHXAa+4WPZYY2ZzgowkbLBecEDDSje1X/apG7jQM33or3NdOmjXBKWGOg4JmSiRfUfuTtHXw== dependencies: "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.5.5" - "@babel/helpers" "^7.5.5" - "@babel/parser" "^7.5.5" - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.5.5" - "@babel/types" "^7.5.5" + "@babel/generator" "^7.6.0" + "@babel/helpers" "^7.6.0" + "@babel/parser" "^7.6.0" + "@babel/template" "^7.6.0" + "@babel/traverse" "^7.6.0" + "@babel/types" "^7.6.0" convert-source-map "^1.1.0" debug "^4.1.0" json5 "^2.1.0" @@ -58,6 +58,17 @@ source-map "^0.5.0" trim-right "^1.0.1" +"@babel/generator@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.0.tgz#e2c21efbfd3293ad819a2359b448f002bfdfda56" + integrity sha512-Ms8Mo7YBdMMn1BYuNtKuP/z0TgEIhbcyB8HVR6PPNYp4P61lMsABiS4A3VG1qznjXVCf3r+fVHhm4efTYVsySA== + dependencies: + "@babel/types" "^7.6.0" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + trim-right "^1.0.1" + "@babel/helper-annotate-as-pure@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" @@ -213,14 +224,14 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.2.0" -"@babel/helpers@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.5.5.tgz#63908d2a73942229d1e6685bc2a0e730dde3b75e" - integrity sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g== +"@babel/helpers@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.6.0.tgz#21961d16c6a3c3ab597325c34c465c0887d31c6e" + integrity sha512-W9kao7OBleOjfXtFGgArGRX6eCP0UEcA2ZWEWNkJdRZnHhW4eEbeswbG3EwaRsnQUAEGWYgMq1HsIXuNNNy2eQ== dependencies: - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.5.5" - "@babel/types" "^7.5.5" + "@babel/template" "^7.6.0" + "@babel/traverse" "^7.6.0" + "@babel/types" "^7.6.0" "@babel/highlight@^7.0.0": version "7.5.0" @@ -241,6 +252,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b" integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g== +"@babel/parser@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.0.tgz#3e05d0647432a8326cb28d0de03895ae5a57f39b" + integrity sha512-+o2q111WEx4srBs7L9eJmcwi655eD8sXniLqMB93TBK9GrNzGrxDWSjiqz2hLU0Ha8MTXFIP0yd9fNdP+m43ZQ== + "@babel/plugin-proposal-async-generator-functions@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" @@ -349,10 +365,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-block-scoping@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.5.5.tgz#a35f395e5402822f10d2119f6f8e045e3639a2ce" - integrity sha512-82A3CLRRdYubkG85lKwhZB0WZoHxLGsJdux/cOVaJCJpvYFl1LVzAIFyRsa7CvXqW8rBM4Zf3Bfn8PHt5DP0Sg== +"@babel/plugin-transform-block-scoping@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.0.tgz#c49e21228c4bbd4068a35667e6d951c75439b1dc" + integrity sha512-tIt4E23+kw6TgL/edACZwP1OUKrjOTyMrFMLoT5IOFrfMRabCgekjqFd5o6PaAMildBu46oFkekIdMuGkkPEpA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" lodash "^4.17.13" @@ -378,10 +394,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-destructuring@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz#f6c09fdfe3f94516ff074fe877db7bc9ef05855a" - integrity sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ== +"@babel/plugin-transform-destructuring@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz#44bbe08b57f4480094d57d9ffbcd96d309075ba6" + integrity sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -447,10 +463,10 @@ "@babel/helper-plugin-utils" "^7.0.0" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-commonjs@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz#425127e6045231360858eeaa47a71d75eded7a74" - integrity sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ== +"@babel/plugin-transform-modules-commonjs@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz#39dfe957de4420445f1fcf88b68a2e4aa4515486" + integrity sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g== dependencies: "@babel/helper-module-transforms" "^7.4.4" "@babel/helper-plugin-utils" "^7.0.0" @@ -474,12 +490,12 @@ "@babel/helper-module-transforms" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-named-capturing-groups-regex@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz#9d269fd28a370258199b4294736813a60bbdd106" - integrity sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg== +"@babel/plugin-transform-named-capturing-groups-regex@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.0.tgz#1e6e663097813bb4f53d42df0750cf28ad3bb3f1" + integrity sha512-jem7uytlmrRl3iCAuQyw8BpB4c4LWvSpvIeXKpMb+7j84lkx4m4mYr5ErAcmN5KM7B6BqrAvRGjBIbbzqCczew== dependencies: - regexp-tree "^0.1.6" + regexp-tree "^0.1.13" "@babel/plugin-transform-new-target@^7.4.4": version "7.4.4" @@ -580,10 +596,10 @@ core-js "^2.6.5" regenerator-runtime "^0.13.2" -"@babel/preset-env@7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.5.5.tgz#bc470b53acaa48df4b8db24a570d6da1fef53c9a" - integrity sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A== +"@babel/preset-env@7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.0.tgz#aae4141c506100bb2bfaa4ac2a5c12b395619e50" + integrity sha512-1efzxFv/TcPsNXlRhMzRnkBFMeIqBBgzwmZwlFDw5Ubj0AGLeufxugirwZmkkX/ayi3owsSqoQ4fw8LkfK9SYg== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -601,10 +617,10 @@ "@babel/plugin-transform-arrow-functions" "^7.2.0" "@babel/plugin-transform-async-to-generator" "^7.5.0" "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.5.5" + "@babel/plugin-transform-block-scoping" "^7.6.0" "@babel/plugin-transform-classes" "^7.5.5" "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.5.0" + "@babel/plugin-transform-destructuring" "^7.6.0" "@babel/plugin-transform-dotall-regex" "^7.4.4" "@babel/plugin-transform-duplicate-keys" "^7.5.0" "@babel/plugin-transform-exponentiation-operator" "^7.2.0" @@ -613,10 +629,10 @@ "@babel/plugin-transform-literals" "^7.2.0" "@babel/plugin-transform-member-expression-literals" "^7.2.0" "@babel/plugin-transform-modules-amd" "^7.5.0" - "@babel/plugin-transform-modules-commonjs" "^7.5.0" + "@babel/plugin-transform-modules-commonjs" "^7.6.0" "@babel/plugin-transform-modules-systemjs" "^7.5.0" "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.5" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.6.0" "@babel/plugin-transform-new-target" "^7.4.4" "@babel/plugin-transform-object-super" "^7.5.5" "@babel/plugin-transform-parameters" "^7.4.4" @@ -629,7 +645,7 @@ "@babel/plugin-transform-template-literals" "^7.4.4" "@babel/plugin-transform-typeof-symbol" "^7.2.0" "@babel/plugin-transform-unicode-regex" "^7.4.4" - "@babel/types" "^7.5.5" + "@babel/types" "^7.6.0" browserslist "^4.6.0" core-js-compat "^3.1.1" invariant "^2.2.2" @@ -660,6 +676,15 @@ "@babel/parser" "^7.4.4" "@babel/types" "^7.4.4" +"@babel/template@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6" + integrity sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.6.0" + "@babel/types" "^7.6.0" + "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4": version "7.5.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.0.tgz#4216d6586854ef5c3c4592dab56ec7eb78485485" @@ -690,6 +715,21 @@ globals "^11.1.0" lodash "^4.17.13" +"@babel/traverse@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.0.tgz#389391d510f79be7ce2ddd6717be66d3fed4b516" + integrity sha512-93t52SaOBgml/xY74lsmt7xOR4ufYvhb5c5qiM6lu4J/dWGMAfAh6eKw4PjLes6DI6nQgearoxnFJk60YchpvQ== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.6.0" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/parser" "^7.6.0" + "@babel/types" "^7.6.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + "@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.0": version "7.5.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.0.tgz#e47d43840c2e7f9105bc4d3a2c371b4d0c7832ab" @@ -708,6 +748,15 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" +"@babel/types@^7.6.0": + version "7.6.1" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.1.tgz#53abf3308add3ac2a2884d539151c57c4b3ac648" + integrity sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g== + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + "@cliqz-oss/firefox-client@0.3.1": version "0.3.1" resolved "https://registry.yarnpkg.com/@cliqz-oss/firefox-client/-/firefox-client-0.3.1.tgz#86479239f060835608b06584afe5e0a1dd91613c" @@ -724,6 +773,14 @@ "@cliqz-oss/firefox-client" "0.3.1" es6-promise "^2.0.1" +"@hapi/accept@3.x.x": + version "3.2.3" + resolved "https://registry.yarnpkg.com/@hapi/accept/-/accept-3.2.3.tgz#6947259928ed28df2736c7daffbfc739b72adfcc" + integrity sha512-qEzsOJkCAJZxwj3iF83bSG9Lxy8Bpbrt8mRLNdvSALT6vlU2cYh6ZEHKEZPy4h/Mo31Su3j0rJgFF91+W1RWDQ== + dependencies: + "@hapi/boom" "7.x.x" + "@hapi/hoek" "8.x.x" + "@hapi/address@2.x.x": version "2.0.0" resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.0.0.tgz#9f05469c88cb2fd3dcd624776b54ee95c312126a" @@ -743,6 +800,13 @@ dependencies: "@hapi/hoek" "8.x.x" +"@hapi/b64@4.x.x": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@hapi/b64/-/b64-4.2.1.tgz#bf8418d7907c5e73463f2e3b5c6fca7e9f2a1357" + integrity sha512-zqHpQuH5CBMw6hADzKfU/IGNrxq1Q+/wTYV+OiZRQN9F3tMyk+9BUMeBvFRMamduuqL8iSp62QAnJ+7ATiYLWA== + dependencies: + "@hapi/hoek" "8.x.x" + "@hapi/boom@7.x.x", "@hapi/boom@^7.4.2": version "7.4.2" resolved "https://registry.yarnpkg.com/@hapi/boom/-/boom-7.4.2.tgz#c16957cd09796f6c1bfb4031bdc39d66d6d750c3" @@ -765,35 +829,87 @@ "@hapi/boom" "7.x.x" "@hapi/hoek" "8.x.x" -"@hapi/content@^4.1.0": +"@hapi/bourne@1.x.x", "@hapi/bourne@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" + integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== + +"@hapi/call@5.x.x": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@hapi/call/-/call-5.1.1.tgz#e0d090483486099589d6a7cd1d08ca0e0e6edb99" + integrity sha512-M6fC+9+K/ZB4hIdVQ8i0kc/6J5PWlW3PEWYKAAZpw0sk+28LiRTSF8BjOWwmiIjZWWs42AnEIiFJA0YrvcDnlw== + dependencies: + "@hapi/boom" "7.x.x" + "@hapi/hoek" "8.x.x" + +"@hapi/catbox-memory@4.x.x": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@hapi/catbox-memory/-/catbox-memory-4.1.1.tgz#263a6f3361f7a200552c5772c98a8e80a1da712f" + integrity sha512-T6Hdy8DExzG0jY7C8yYWZB4XHfc0v+p1EGkwxl2HoaPYAmW7I3E59M/IvmSVpis8RPcIoBp41ZpO2aZPBpM2Ww== + dependencies: + "@hapi/boom" "7.x.x" + "@hapi/hoek" "8.x.x" + +"@hapi/catbox@10.x.x": + version "10.2.2" + resolved "https://registry.yarnpkg.com/@hapi/catbox/-/catbox-10.2.2.tgz#e5c7da6718f5ab5f3a0beefbf352983a3b988626" + integrity sha512-a4KejaKqDOMdwo/PIYoAaObVMmkfkG3RS85kPqNTTURjWnIV1+rrZ938f6RCz5EbrroKbuNC0bcvAt7lAD5LNg== + dependencies: + "@hapi/boom" "7.x.x" + "@hapi/hoek" "8.x.x" + "@hapi/joi" "15.x.x" + "@hapi/podium" "3.x.x" + +"@hapi/content@4.x.x", "@hapi/content@^4.1.0": version "4.1.0" resolved "https://registry.yarnpkg.com/@hapi/content/-/content-4.1.0.tgz#5265516949ca081e85a43e97c1058ff53fc69714" integrity sha512-hv2Czsl49hnWDEfRZOFow/BmYbKyfEknmk3k83gOp6moFn5ceHB4xVcna8OwsGfy8dxO81lhpPy+JgQEaU4SWw== dependencies: "@hapi/boom" "7.x.x" -"@hapi/hapi@^18.3.1", "@hapi/hapi@^18.3.2", "@hapi/hapi@https://github.com/lidel/hapi/tarball/ccbf84ba5edc9b24564fdd166e3ee6d81c4c02d8/hapi.tar.gz": - version "18.1.0" - resolved "https://github.com/lidel/hapi/tarball/ccbf84ba5edc9b24564fdd166e3ee6d81c4c02d8/hapi.tar.gz#644804c04d27a5051d96a8168b492bf342bc8a30" - dependencies: - accept "3.x.x" - ammo "3.x.x" - boom "7.x.x" - bounce "1.x.x" - call "5.x.x" - catbox "10.x.x" - catbox-memory "4.x.x" - heavy "6.x.x" - hoek "6.x.x" - joi "14.x.x" - mimos "4.x.x" - podium "3.x.x" - shot "4.x.x" - somever "2.x.x" - statehood "6.x.x" - subtext "6.x.x" - teamwork "3.x.x" - topo "3.x.x" +"@hapi/cryptiles@4.x.x": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@hapi/cryptiles/-/cryptiles-4.2.0.tgz#d22bd5afa54f3c1a3b944a43dadfd4c5e5747f72" + integrity sha512-P+ioMP1JGhwDOKPRuQls6sT/ln6Fk+Ks6d90mlBi6HcOu5itvdUiFv5Ynq2DvLadPDWaA43lwNxkfZrjE9s2MA== + dependencies: + "@hapi/boom" "7.x.x" + +"@hapi/file@1.x.x": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@hapi/file/-/file-1.0.0.tgz#c91c39fd04db8bed5af82d2e032e7a4e65555b38" + integrity sha512-Bsfp/+1Gyf70eGtnIgmScvrH8sSypO3TcK3Zf0QdHnzn/ACnAkI6KLtGACmNRPEzzIy+W7aJX5E+1fc9GwIABQ== + +"@hapi/hapi@^18.3.1", "@hapi/hapi@^18.3.2", "@hapi/hapi@https://github.com/lidel/hapi/tarball/fb8626fac0522f49fe29e2f4f686dfd8926204b6/hapi.tar.gz": + version "18.3.2" + resolved "https://github.com/lidel/hapi/tarball/fb8626fac0522f49fe29e2f4f686dfd8926204b6/hapi.tar.gz#a2276e2d746f0befd24d44af2d9775e7245aa55b" + dependencies: + "@hapi/accept" "3.x.x" + "@hapi/ammo" "3.x.x" + "@hapi/boom" "7.x.x" + "@hapi/bounce" "1.x.x" + "@hapi/call" "5.x.x" + "@hapi/catbox" "10.x.x" + "@hapi/catbox-memory" "4.x.x" + "@hapi/heavy" "6.x.x" + "@hapi/hoek" "8.x.x" + "@hapi/joi" "15.x.x" + "@hapi/mimos" "4.x.x" + "@hapi/podium" "3.x.x" + "@hapi/shot" "4.x.x" + "@hapi/somever" "2.x.x" + "@hapi/statehood" "6.x.x" + "@hapi/subtext" "6.x.x" + "@hapi/teamwork" "3.x.x" + "@hapi/topo" "3.x.x" + +"@hapi/heavy@6.x.x": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@hapi/heavy/-/heavy-6.2.1.tgz#4f10877707b6c8a6ad1e9dbb6a3d13c24b3a3a29" + integrity sha512-uaEyC4AtGCGKt/LLBbdDQxJP1bFAbxiot6n/fwa4kyo6w8ULpXXCh8FxLlJ5mC06lqbAxQv45JyozIB6P4Dsig== + dependencies: + "@hapi/boom" "7.x.x" + "@hapi/hoek" "8.x.x" + "@hapi/joi" "15.x.x" "@hapi/hoek@6.x.x": version "6.2.4" @@ -805,6 +921,11 @@ resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.0.2.tgz#f63a5ff00e891a4e7aa98f11119f9515c6672032" integrity sha512-O6o6mrV4P65vVccxymuruucb+GhP2zl9NLCG8OdoFRS8BEGw3vwpPp20wpAtpbQQxz1CEUtmxJGgWhjq1XA3qw== +"@hapi/hoek@^8.2.2": + version "8.2.4" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.2.4.tgz#684a14f4ca35d46f44abc87dfc696e5e4fe8a020" + integrity sha512-Ze5SDNt325yZvNO7s5C4fXDscjJ6dcqLFXJQ/M7dZRQCewuDj2iDUuBi6jLQt+APbW9RjjVEvLr35FXuOEqjow== + "@hapi/inert@^5.2.0": version "5.2.1" resolved "https://registry.yarnpkg.com/@hapi/inert/-/inert-5.2.1.tgz#97de7e688f9bd9d681bf3dd14280d09ef2414544" @@ -817,6 +938,16 @@ "@hapi/joi" "15.x.x" lru-cache "4.1.x" +"@hapi/iron@5.x.x": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@hapi/iron/-/iron-5.1.1.tgz#0e819729f26ee76dea68e4c4e4b5c996fd0513a5" + integrity sha512-QYfm6nofZ19pIxm8LR0lsANBabrdxqe0vUYKKI+0w9VdCetoove+dxfbLfduVDM72kh/RNOQG6E5/xyI826PcA== + dependencies: + "@hapi/b64" "4.x.x" + "@hapi/boom" "7.x.x" + "@hapi/cryptiles" "4.x.x" + "@hapi/hoek" "8.x.x" + "@hapi/joi@15.x.x", "@hapi/joi@^15.0.1", "@hapi/joi@^15.1.0": version "15.1.0" resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.0.tgz#940cb749b5c55c26ab3b34ce362e82b6162c8e7a" @@ -832,6 +963,88 @@ resolved "https://registry.yarnpkg.com/@hapi/marker/-/marker-1.0.0.tgz#65b0b2b01d1be06304886ce9b4b77b1bfb21a769" integrity sha512-JOfdekTXnJexfE8PyhZFyHvHjt81rBFSAbTIRAhF2vv/2Y1JzoKsGqxH/GpZJoF7aEfYok8JVcAHmSz1gkBieA== +"@hapi/mimos@4.x.x": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@hapi/mimos/-/mimos-4.1.1.tgz#4dab8ed5c64df0603c204c725963a5faa4687e8a" + integrity sha512-CXoi/zfcTWfKYX756eEea8rXJRIb9sR4d7VwyAH9d3BkDyNgAesZxvqIdm55npQc6S9mU3FExinMAQVlIkz0eA== + dependencies: + "@hapi/hoek" "8.x.x" + mime-db "1.x.x" + +"@hapi/nigel@3.x.x": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@hapi/nigel/-/nigel-3.1.1.tgz#84794021c9ee6e48e854fea9fb76e9f7e78c99ad" + integrity sha512-R9YWx4S8yu0gcCBrMUDCiEFm1SQT895dMlYoeNBp8I6YhF1BFF1iYPueKA2Kkp9BvyHdjmvrxCOns7GMmpl+Fw== + dependencies: + "@hapi/hoek" "8.x.x" + "@hapi/vise" "3.x.x" + +"@hapi/pez@4.x.x": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@hapi/pez/-/pez-4.1.1.tgz#d515ed75bc082cb6da3ab8d7804a3b41a4d63be6" + integrity sha512-TUa2C7Xk6J69HWrm+Ad+O6dFvdVAG0BiFUYaRsmkdWjFIfwHBCaOI1dWT/juNukSb39Lj6/mDVyjN+H4nKB3xg== + dependencies: + "@hapi/b64" "4.x.x" + "@hapi/boom" "7.x.x" + "@hapi/content" "4.x.x" + "@hapi/hoek" "8.x.x" + "@hapi/nigel" "3.x.x" + +"@hapi/podium@3.x.x": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@hapi/podium/-/podium-3.4.1.tgz#05ae4cba21ddc78bd4d026c720ed05d8b4e9474e" + integrity sha512-WbwYr5nK+GIrCdgEbN8R7Mh7z+j9AgntOLQ/YQdeLtBp+uScVmW9FoycKdNS5uweO74xwICr28Ob0DU74a2zmg== + dependencies: + "@hapi/hoek" "8.x.x" + "@hapi/joi" "15.x.x" + +"@hapi/shot@4.x.x": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@hapi/shot/-/shot-4.1.1.tgz#7b5ca71f63a159a0b28a487cd293f35b04164439" + integrity sha512-TrsqCyaq24XcdvD0bSi26hjwyQQy5q/nzpasbPNgPLoGnxW3sCWE7ws3ba6dd6Atb8TEh9QBD7mBQDCrMMz2Ig== + dependencies: + "@hapi/hoek" "8.x.x" + "@hapi/joi" "15.x.x" + +"@hapi/somever@2.x.x": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@hapi/somever/-/somever-2.1.1.tgz#142bddf7cc4d829f678ed4e60618630a9a7ae845" + integrity sha512-cic5Sto4KGd9B0oQSdKTokju+rYhCbdpzbMb0EBnrH5Oc1z048hY8PaZ1lx2vBD7I/XIfTQVQetBH57fU51XRA== + dependencies: + "@hapi/bounce" "1.x.x" + "@hapi/hoek" "8.x.x" + +"@hapi/statehood@6.x.x": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@hapi/statehood/-/statehood-6.1.1.tgz#64e9787163c57201c120b2381ba1982722ad0d8a" + integrity sha512-tMfS6B8QdrqTaKRUhHv6Ur7oPK6kcEZcnnvBK4IuaPZA9ma5UsyprTXkzbiB0V+0E56dMg3RabO1SABeZkzy6g== + dependencies: + "@hapi/boom" "7.x.x" + "@hapi/bounce" "1.x.x" + "@hapi/bourne" "1.x.x" + "@hapi/cryptiles" "4.x.x" + "@hapi/hoek" "8.x.x" + "@hapi/iron" "5.x.x" + "@hapi/joi" "15.x.x" + +"@hapi/subtext@6.x.x": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@hapi/subtext/-/subtext-6.1.1.tgz#3b63b4175a7bd06cd0d21f13912c7d81de90e6d2" + integrity sha512-Y7NjKFRPwlzKRw5IdwRou42hR4IBQZolT+/DlvfSr/CBjGyu38n5+9LKfNKzqB/0AVEk+xynCijsx1o1UVWX8A== + dependencies: + "@hapi/boom" "7.x.x" + "@hapi/bourne" "1.x.x" + "@hapi/content" "4.x.x" + "@hapi/file" "1.x.x" + "@hapi/hoek" "8.x.x" + "@hapi/pez" "4.x.x" + "@hapi/wreck" "15.x.x" + +"@hapi/teamwork@3.x.x": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@hapi/teamwork/-/teamwork-3.3.1.tgz#b52d0ec48682dc793926bd432e22ceb19c915d3f" + integrity sha512-61tiqWCYvMKP7fCTXy0M4VE6uNIwA0qvgFoiDubgfj7uqJ0fdHJFQNnVPGrxhLWlwz0uBPWrQlBH7r8y9vFITQ== + "@hapi/topo@3.x.x": version "3.1.2" resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.2.tgz#57cc1317be1a8c5f47c124f9b0e3c49cd78424d2" @@ -839,6 +1052,22 @@ dependencies: "@hapi/hoek" "8.x.x" +"@hapi/vise@3.x.x": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@hapi/vise/-/vise-3.1.1.tgz#dfc88f2ac90682f48bdc1b3f9b8f1eab4eabe0c8" + integrity sha512-OXarbiCSadvtg+bSdVPqu31Z1JoBL+FwNYz3cYoBKQ5xq1/Cr4A3IkGpAZbAuxU5y4NL5pZFZG3d2a3ZGm/dOQ== + dependencies: + "@hapi/hoek" "8.x.x" + +"@hapi/wreck@15.x.x": + version "15.0.2" + resolved "https://registry.yarnpkg.com/@hapi/wreck/-/wreck-15.0.2.tgz#e3e1b2830237792f8f6a372caee7866a77d8718d" + integrity sha512-D/7sGmx3XxxkaMWHZDKTMai8rIEfIgE+DnoZeKfmxhKGgvIpMu1f8BBmLADbdniccGer79w74IWWdXleNrT1Rw== + dependencies: + "@hapi/boom" "7.x.x" + "@hapi/bourne" "1.x.x" + "@hapi/hoek" "8.x.x" + "@material/animation@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@material/animation/-/animation-3.1.0.tgz#ab04e7c2e92ab370a2b28d12af1b88538d23014f" @@ -952,7 +1181,7 @@ "@sinonjs/commons" "^1" "@sinonjs/samsam" "^3.1.0" -"@sinonjs/samsam@^3.1.0", "@sinonjs/samsam@^3.3.1", "@sinonjs/samsam@^3.3.2": +"@sinonjs/samsam@^3.1.0", "@sinonjs/samsam@^3.3.1": version "3.3.2" resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-3.3.2.tgz#63942e3d5eb0b79f6de3bef9abfad15fb4b6401b" integrity sha512-ILO/rR8LfAb60Y1Yfp9vxfYAASK43NFC2mLzpvLUbCQY/Qu8YwReboseu8aheCEkyElZF2L2T9mHcR2bgdvZyA== @@ -1283,14 +1512,6 @@ abstract-logging@^1.0.0: resolved "https://registry.yarnpkg.com/abstract-logging/-/abstract-logging-1.0.0.tgz#8b7deafd310559bc28f77724dd1bb30177278c1b" integrity sha1-i33q/TEFWbwo93ck3RuzAXcnjBs= -accept@3.x.x: - version "3.1.3" - resolved "https://registry.yarnpkg.com/accept/-/accept-3.1.3.tgz#29c3e2b3a8f4eedbc2b690e472b9ebbdc7385e87" - integrity sha512-OgOEAidVEOKPup+Gv2+2wdH2AgVKI9LxsJ4hicdJ6cY0faUuZdZoi56kkXWlHp9qicN1nWQLmW5ZRGk+SBS5xg== - dependencies: - boom "7.x.x" - hoek "6.x.x" - accepts@~1.3.4, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -1316,6 +1537,11 @@ acorn-jsx@^5.0.0: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== +acorn-jsx@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.2.tgz#84b68ea44b373c4f8686023a551f61a21b7c4a4f" + integrity sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw== + acorn-node@^1.2.0, acorn-node@^1.3.0, acorn-node@^1.5.2, acorn-node@^1.6.1: version "1.7.0" resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.7.0.tgz#aac6a559d27af6176b076ab6fb13c5974c213e3b" @@ -1351,6 +1577,11 @@ acorn@^6.2.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== +acorn@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.0.0.tgz#26b8d1cd9a9b700350b71c0905546f64d1284e7a" + integrity sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ== + adbkit-logcat@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/adbkit-logcat/-/adbkit-logcat-1.1.0.tgz#01d7f9b0cef9093a30bcb3b007efff301508962f" @@ -1515,13 +1746,6 @@ ajv@^6.10.0, ajv@^6.10.2: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ammo@3.x.x: - version "3.0.3" - resolved "https://registry.yarnpkg.com/ammo/-/ammo-3.0.3.tgz#502aafa9d8bfca264143e226e5f322716e746b0c" - integrity sha512-vo76VJ44MkUBZL/BzpGXaKzMfroF4ZR6+haRuw9p+eSWfoNaH2AxVc8xmiEPC08jhzJSeM6w7/iMUGet8b4oBQ== - dependencies: - hoek "6.x.x" - amqplib@^0.5.1: version "0.5.3" resolved "https://registry.yarnpkg.com/amqplib/-/amqplib-0.5.3.tgz#7ccfc85d12ee7cd3c6dc861bb07f0648ec3d7193" @@ -1690,7 +1914,7 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -args@^5.0.0: +args@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/args/-/args-5.0.1.tgz#4bf298df90a4799a09521362c579278cc2fdd761" integrity sha512-1kqmFCFsPffavQFGt8OxJdIcETti99kySRUPMpOhaGjL6mRJn8HFU1OxKY5bMqfZKUwTQc1mZkAjmGYaVOHFtQ== @@ -1983,13 +2207,6 @@ aws4@^1.6.0, aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== -b64@4.x.x: - version "4.1.2" - resolved "https://registry.yarnpkg.com/b64/-/b64-4.1.2.tgz#7015372ba8101f7fb18da070717a93c28c8580d8" - integrity sha512-+GUspBxlH3CJaxMUGUE1EBoWM6RKgWiYwUDal0qdf8m3ArnXNN1KzKVo5HOnE/FSq4HHyWf3TlHLsZI8PKQgrQ== - dependencies: - hoek "6.x.x" - babel-code-frame@^6.16.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" @@ -2324,13 +2541,6 @@ boom@5.x.x: dependencies: hoek "4.x.x" -boom@7.x.x: - version "7.3.0" - resolved "https://registry.yarnpkg.com/boom/-/boom-7.3.0.tgz#733a6d956d33b0b1999da3fe6c12996950d017b9" - integrity sha512-Swpoyi2t5+GhOEGw8rEsKvTxFLIDiiKoUc2gsoV6Lyr43LHBIzch3k2MvYUs8RTROrIkVJ3Al0TkaOGjnb+B6A== - dependencies: - hoek "6.x.x" - borc@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/borc/-/borc-2.1.1.tgz#df1a4ec063b9913f2fff5e07c9377eeeff47914a" @@ -2342,19 +2552,6 @@ borc@^2.1.0: iso-url "~0.4.4" json-text-sequence "~0.1.0" -bounce@1.x.x: - version "1.2.3" - resolved "https://registry.yarnpkg.com/bounce/-/bounce-1.2.3.tgz#2b286d36eb21d5f08fe672dd8cd37a109baad121" - integrity sha512-3G7B8CyBnip5EahCZJjnvQ1HLyArC6P5e+xcolo13BVI9ogFaDOsNMAE7FIWliHtIkYI8/nTRCvCY9tZa3Mu4g== - dependencies: - boom "7.x.x" - hoek "6.x.x" - -bourne@1.x.x: - version "1.1.2" - resolved "https://registry.yarnpkg.com/bourne/-/bourne-1.1.2.tgz#e290b5bd7166635632eaf8ef12b006b2d4a75b83" - integrity sha512-b2dgVkTZhkQirNMohgC00rWfpVqEi9y5tKM1k3JvoNx05ODtfQoPPd4js9CYFQoY0IM8LAmnJulEuWv74zjUOg== - boxen@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" @@ -2739,6 +2936,27 @@ cacache@^12.0.2: unique-filename "^1.1.1" y18n "^4.0.0" +cacache@^12.0.3: + version "12.0.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" + integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -2782,14 +3000,6 @@ caching-transform@^3.0.2: package-hash "^3.0.0" write-file-atomic "^2.4.2" -call@5.x.x: - version "5.0.3" - resolved "https://registry.yarnpkg.com/call/-/call-5.0.3.tgz#5dc82c698141c2d45c51a9c3c7e0697f43ac46a2" - integrity sha512-eX16KHiAYXugbFu6VifstSdwH6aMuWWb4s0qvpq1nR1b+Sf+u68jjttg8ixDBEldPqBi30bDU35OJQWKeTLKxg== - dependencies: - boom "7.x.x" - hoek "6.x.x" - callbackify@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/callbackify/-/callbackify-1.1.0.tgz#d2a36986d28aa69714526c111209beeb9979d31e" @@ -2896,23 +3106,6 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -catbox-memory@4.x.x: - version "4.0.1" - resolved "https://registry.yarnpkg.com/catbox-memory/-/catbox-memory-4.0.1.tgz#3371ae0dd91bbf5d9dd88dcab5332470354cbd1f" - integrity sha512-ZmqNiLsYCIu9qvBJ/MQbznDV2bFH5gFiH67TgIJgSSffJFtTXArT+MM3AvJQlby9NSkLHOX4eH/uuUqnch/Ldw== - dependencies: - boom "7.x.x" - hoek "6.x.x" - -catbox@10.x.x: - version "10.0.6" - resolved "https://registry.yarnpkg.com/catbox/-/catbox-10.0.6.tgz#d8d8dc3c36c965560539f94245904b229a8af428" - integrity sha512-gQWCnF/jbHcfwGbQ4FQxyRiAwLRipqWTTXjpq7rTqqdcsnZosFa0L3LsCZcPTF33QIeMMkS7QmFBHt6QdzGPvg== - dependencies: - boom "7.x.x" - hoek "6.x.x" - joi "14.x.x" - caw@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/caw/-/caw-2.0.1.tgz#6c3ca071fc194720883c2dc5da9b074bfc7e9e95" @@ -2956,7 +3149,7 @@ chalk@2.3.x: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: +chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3063,10 +3256,10 @@ chrome-dgram@3.0.3: inherits "^2.0.1" run-series "^1.1.2" -chrome-net@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/chrome-net/-/chrome-net-3.3.2.tgz#0454c247e908db42a93c6024d8a5ac50e3731445" - integrity sha512-BHxWfA9MDnh0C1By5q1DnF1vRS7vfBi2PrqTHIIt1HA4hM6l2xkHzoazbDlZcrDrMfjNs6fojKG+ZD0JmlnNWg== +chrome-net@3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/chrome-net/-/chrome-net-3.3.3.tgz#09b40337d97fa857ac44ee9a2d82a66e43863401" + integrity sha512-11jL8+Ogna8M5TEdyalE8IG6cpaFEU3YcaxAj3YjZKjRM/PeT70pZbrUY+xoGwqiEJZwJE4Td2CvGxUvS9ytKQ== dependencies: inherits "^2.0.1" @@ -3456,13 +3649,6 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -content@4.x.x: - version "4.0.6" - resolved "https://registry.yarnpkg.com/content/-/content-4.0.6.tgz#76ffd96c5cbccf64fe3923cbb9c48b8bc04b273e" - integrity sha512-lR9ND3dXiMdmsE84K6l02rMdgiBVmtYWu1Vr/gfSGHcIcznBj2QxmSdUgDuNFOA+G9yrb1IIWkZ7aKtB6hDGyA== - dependencies: - boom "7.x.x" - convert-source-map@^1.1.0, convert-source-map@^1.5.1, convert-source-map@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" @@ -3610,13 +3796,12 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.3, create-hmac@^1.1.4, safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-env@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.0.tgz#6ecd4c015d5773e614039ee529076669b9d126f2" - integrity sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg== +cross-env@5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.1.tgz#b2c76c1ca7add66dc874d11798466094f551b34d" + integrity sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ== dependencies: cross-spawn "^6.0.5" - is-windows "^1.0.0" cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" @@ -3658,13 +3843,6 @@ cryptiles@3.x.x: dependencies: boom "5.x.x" -cryptiles@4.x.x: - version "4.1.3" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-4.1.3.tgz#2461d3390ea0b82c643a6ba79f0ed491b0934c25" - integrity sha512-gT9nyTMSUC1JnziQpPbxKGBbUg8VL7Zn2NB4E1cJYvuXdElHrwxrV9bmltZGDzet45zSDGyYceueke1TjynGzw== - dependencies: - boom "7.x.x" - crypto-browserify@^3.0.0, crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -4054,10 +4232,10 @@ degenerator@^1.0.4: escodegen "1.x.x" esprima "3.x.x" -deglob@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/deglob/-/deglob-3.1.0.tgz#1868193193d3432a5326e8fb2052b439a43a454e" - integrity sha512-al10l5QAYaM/PeuXkAr1Y9AQz0LCtWsnJG23pIgh44hDxHFOj36l6qvhfjnIWBYwZOqM1fXUFV9tkjL7JPdGvw== +deglob@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/deglob/-/deglob-4.0.1.tgz#0685c6383992fd6009be10653a2b1116696fad55" + integrity sha512-/g+RDZ7yf2HvoW+E5Cy+K94YhgcFgr6C8LuHZD1O5HoNPkf3KY6RfXJ0DBGlB/NkLi5gml+G9zqRzk9S0mHZCg== dependencies: find-root "^1.0.0" glob "^7.0.5" @@ -4720,15 +4898,15 @@ escope@^3.6.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-config-standard-jsx@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-7.0.0.tgz#05c737d9eab524860fe6853cfd535045c3e07e5b" - integrity sha512-OiKOF3MFVmWOCVfsi8GHlVorOEiBsPzAnUhM3c6HML94O2krbdQ/eMABySHgHHOIBYRls9sR9I3lo6O0vXhVEg== +eslint-config-standard-jsx@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-8.1.0.tgz#314c62a0e6f51f75547f89aade059bec140edfc7" + integrity sha512-ULVC8qH8qCqbU792ZOO6DaiaZyHNS/5CZt3hKqHkEhVlhPEPN3nfBqqxJCyp59XrjIBZPu1chMYe9T2DXZ7TMw== -eslint-config-standard@13.0.1: - version "13.0.1" - resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-13.0.1.tgz#c9c6ffe0cfb8a51535bc5c7ec9f70eafb8c6b2c0" - integrity sha512-zLKp4QOgq6JFgRm1dDCVv1Iu0P5uZ4v5Wa4DTOkg2RFMxdCX/9Qf7lz9ezRj2dBRa955cWQF/O/LWEiYWAHbTw== +eslint-config-standard@14.1.0: + version "14.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-14.1.0.tgz#b23da2b76fe5a2eba668374f246454e7058f15d4" + integrity sha512-EF6XkrrGVbvv8hL/kYa/m6vnvmUT+K82pJJc4JJVMM6+Qgqh0pnwprSxdduDLB9p/7bIxD+YV5O0wfb8lmcPbA== eslint-import-resolver-node@^0.3.2: version "0.3.2" @@ -4746,13 +4924,13 @@ eslint-module-utils@^2.4.0: debug "^2.6.8" pkg-dir "^2.0.0" -eslint-plugin-es@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz#475f65bb20c993fc10e8c8fe77d1d60068072da6" - integrity sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw== +eslint-plugin-es@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-2.0.0.tgz#0f5f5da5f18aa21989feebe8a73eadefb3432976" + integrity sha512-f6fceVtg27BR02EYnBhgWLFQfK6bN4Ll0nQFrBHOlCsAyxeZkn0NHns5O0YZOPrV1B3ramd6cgFwaoFLcSkwEQ== dependencies: - eslint-utils "^1.3.0" - regexpp "^2.0.1" + eslint-utils "^1.4.2" + regexpp "^3.0.0" eslint-plugin-import@~2.18.0: version "2.18.0" @@ -4778,13 +4956,13 @@ eslint-plugin-no-unsafe-innerhtml@1.0.16: dependencies: eslint "^3.7.1" -eslint-plugin-node@~9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-9.1.0.tgz#f2fd88509a31ec69db6e9606d76dabc5adc1b91a" - integrity sha512-ZwQYGm6EoV2cfLpE1wxJWsfnKUIXfM/KM09/TlorkukgCAwmkgajEJnPCmyzoFPQQkmvo5DrW/nyKutNIw36Mw== +eslint-plugin-node@~10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-10.0.0.tgz#fd1adbc7a300cf7eb6ac55cf4b0b6fc6e577f5a6" + integrity sha512-1CSyM/QCjs6PXaT18+zuAXsjXGIGo5Rw630rSKwokSs2jrYURQc4R5JZpoanNCqwNmepg+0eZ9L7YiRUJb8jiQ== dependencies: - eslint-plugin-es "^1.4.0" - eslint-utils "^1.3.1" + eslint-plugin-es "^2.0.0" + eslint-utils "^1.4.2" ignore "^5.1.1" minimatch "^3.0.4" resolve "^1.10.1" @@ -4831,16 +5009,28 @@ eslint-scope@^5.0.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-utils@^1.3.0, eslint-utils@^1.3.1: +eslint-utils@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q== +eslint-utils@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.2.tgz#166a5180ef6ab7eb462f162fd0e6f2463d7309ab" + integrity sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q== + dependencies: + eslint-visitor-keys "^1.0.0" + eslint-visitor-keys@1.0.0, eslint-visitor-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== +eslint-visitor-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" + integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== + eslint@5.16.0: version "5.16.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" @@ -4924,10 +5114,10 @@ eslint@^3.7.1: text-table "~0.2.0" user-home "^2.0.0" -eslint@~6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.1.0.tgz#06438a4a278b1d84fb107d24eaaa35471986e646" - integrity sha512-QhrbdRD7ofuV09IuE2ySWBz0FyXCq0rriLTZXZqaWSI79CVtHVRdkFuFTViiqzZhkCgfOh9USpriuGN2gIpZDQ== +eslint@~6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.3.0.tgz#1f1a902f67bfd4c354e7288b81e40654d927eb6a" + integrity sha512-ZvZTKaqDue+N8Y9g0kp6UPZtS4FSY3qARxBs7p4f0H0iof381XHduqVerFWtK8DPtKmemqbqCFENWSQgPR/Gow== dependencies: "@babel/code-frame" "^7.0.0" ajv "^6.10.0" @@ -4936,9 +5126,9 @@ eslint@~6.1.0: debug "^4.0.1" doctrine "^3.0.0" eslint-scope "^5.0.0" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^6.0.0" + eslint-utils "^1.4.2" + eslint-visitor-keys "^1.1.0" + espree "^6.1.1" esquery "^1.0.1" esutils "^2.0.2" file-entry-cache "^5.0.1" @@ -4984,14 +5174,14 @@ espree@^3.4.0: acorn "^5.5.0" acorn-jsx "^3.0.0" -espree@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.0.0.tgz#716fc1f5a245ef5b9a7fdb1d7b0d3f02322e75f6" - integrity sha512-lJvCS6YbCn3ImT3yKkPe0+tJ+mH6ljhGNjHQH9mRtiO6gjhVAOhVXW1yjnwqGwTkK3bGbye+hb00nFNmu0l/1Q== +espree@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.1.tgz#7f80e5f7257fc47db450022d723e356daeb1e5de" + integrity sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ== dependencies: - acorn "^6.0.7" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" + acorn "^7.0.0" + acorn-jsx "^5.0.2" + eslint-visitor-keys "^1.1.0" esprima@3.x.x, esprima@^3.1.3: version "3.1.3" @@ -5324,11 +5514,6 @@ fast-fifo@^1.0.0: resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.0.0.tgz#9bc72e6860347bb045a876d1c5c0af11e9b984e7" integrity sha512-4VEXmjxLj7sbs8J//cn2qhRap50dGzF5n8fjay8mau+Jn4hxSeR3xPFwxMaQq/pDaq7+KQk0PAbC2+nWDkJrmQ== -fast-json-parse@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/fast-json-parse/-/fast-json-parse-1.0.3.tgz#43e5c61ee4efa9265633046b770fb682a7577c4d" - integrity sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw== - fast-json-patch@^2.0.6: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-patch/-/fast-json-patch-2.1.0.tgz#e348c330a5b2481b14f5fffd707aebfef8b7bef6" @@ -5410,10 +5595,10 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" -file-type@12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-12.1.0.tgz#c2938e303bd0f0b96cd98f0f47d7c114de592350" - integrity sha512-aZkf42yWGiH+vSOpbVgvbnoRuX4JiitMX9pHYqTHemNQ3lrx64iHi33YGAP7TSJSno56kxQY1lHmw8S6ujlFUg== +file-type@12.3.0: + version "12.3.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-12.3.0.tgz#74d755e5dc9c5cbc7ee6f182529b453906ac88c2" + integrity sha512-4E4Esq9KLwjYCY32E7qSmd0h7LefcniZHX+XcdJ4Wfx1uGJX7QCigiqw/U0yT7WOslm28yhxl87DJ0wHYv0RAA== file-type@5.2.0, file-type@^5.2.0: version "5.2.0" @@ -5459,10 +5644,10 @@ filenamify@^2.0.0: strip-outer "^1.0.0" trim-repeated "^1.0.0" -filesize@4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-4.1.2.tgz#fcd570af1353cea97897be64f56183adb995994b" - integrity sha512-iSWteWtfNcrWQTkQw8ble2bnonSl7YJImsn9OZKpE2E4IHhXI78eASpDYUljXZZdYj36QsEKjOs/CsiDqmKMJw== +filesize@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-4.2.0.tgz#a8c989a179ca3a895cc32eab4abc64ebf6d34d44" + integrity sha512-bdS2UP98MZzLyTZzhuSH5ctAWyDt81n5xMti9BSdmgPXjjENLDz5Bmbk2R7ATVw/HRysZzWA2JIPgcSAOimWpw== filesize@^3.6.1: version "3.6.1" @@ -5501,6 +5686,15 @@ find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" +find-cache-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.0.0.tgz#cd4b7dd97b7185b7e17dbfe2d6e4115ee3eeb8fc" + integrity sha512-t7ulV1fmbxh5G9l/492O1p5+EBbr3uwpt6odhFTMc+nWyhmbloe+ja9BZ8pIBtqFWhOmCWVjx+pTW4zDkFoclw== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.0" + pkg-dir "^4.1.0" + find-root@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" @@ -5607,7 +5801,7 @@ flatmap@0.0.3: resolved "https://registry.yarnpkg.com/flatmap/-/flatmap-0.0.3.tgz#1f18a4d938152d495965f9c958d923ab2dd669b4" integrity sha1-Hxik2TgVLUlZZfnJWNkjqy3WabQ= -flatstr@^1.0.9: +flatstr@^1.0.12, flatstr@^1.0.9: version "1.0.12" resolved "https://registry.yarnpkg.com/flatstr/-/flatstr-1.0.12.tgz#c2ba6a08173edbb6c9640e3055b95e287ceb5931" integrity sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw== @@ -6317,14 +6511,15 @@ handlebars@^4.1.2: optionalDependencies: uglify-js "^3.1.4" -hapi-pino@^6.1.0, "hapi-pino@https://github.com/pinojs/hapi-pino/tarball/3767ed6b67601831e176e084ed82ba4ed9f726e6/hapi-pino.tar.gz": - version "5.4.0" - resolved "https://github.com/pinojs/hapi-pino/tarball/3767ed6b67601831e176e084ed82ba4ed9f726e6/hapi-pino.tar.gz#3a8f286bdb50b8dc3a6c949be22df2cd192dc317" +hapi-pino@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/hapi-pino/-/hapi-pino-6.1.0.tgz#95e72251dde7cd49af4a146e2b97ab0b28fbaa33" + integrity sha512-LP/hfRj2WCWg8QRjPt+FZzhnnDP+h28NkdLlNn0RbtAHp28ZynqHzF3hxjl+mJdl8mwo2L4DOw91uMsi+6V7Qg== dependencies: + "@hapi/hoek" "^8.2.2" abstract-logging "^1.0.0" - hoek "^6.1.2" - pino "^5.12.3" - pino-pretty "^2.5.0" + pino "^5.13.2" + pino-pretty "^3.2.1" har-schema@^2.0.0: version "2.0.0" @@ -6489,15 +6684,6 @@ heap@~0.2.6: resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" integrity sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw= -heavy@6.x.x: - version "6.1.2" - resolved "https://registry.yarnpkg.com/heavy/-/heavy-6.1.2.tgz#e5d56f18170a37b01d4381bc07fece5edc68520b" - integrity sha512-cJp884bqhiebNcEHydW0g6V1MUGYOXRPw9c7MFiHQnuGxtbWuSZpsbojwb2kxb3AA1/Rfs8CNiV9MMOF8pFRDg== - dependencies: - boom "7.x.x" - hoek "6.x.x" - joi "14.x.x" - hi-base32@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/hi-base32/-/hi-base32-0.5.0.tgz#61329f76a31f31008533f1c36f2473e259d64571" @@ -6517,11 +6703,6 @@ hoek@4.x.x: resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" integrity sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA== -hoek@6.x.x, hoek@^6.1.2: - version "6.1.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-6.1.3.tgz#73b7d33952e01fe27a38b0457294b79dd8da242c" - integrity sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ== - homedir-polyfill@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" @@ -6645,10 +6826,10 @@ human-to-milliseconds@^2.0.0: resolved "https://registry.yarnpkg.com/human-to-milliseconds/-/human-to-milliseconds-2.0.0.tgz#4790f764bf926d3676f685fed745814010170793" integrity sha512-O9SPpvCfucmYUFz3rr/mzfRBrxhLuKCNKOQ+XoKdLpUlYzvyaZHvsnjrJ0ybsKI03Zbp1KZVZ2C3m1Qm/DJH5A== -husky@3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/husky/-/husky-3.0.3.tgz#6f3fb99f60ef72cdf34e5d78445c2f798c441b1d" - integrity sha512-DBBMPSiBYEMx7EVUTRE/ymXJa/lOL+WplcsV/lZu+/HHGt0gzD+5BIz9EJnCrWyUa7hkMuBh7/9OZ04qDkM+Nw== +husky@3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/husky/-/husky-3.0.5.tgz#d7db27c346645a8dc52df02aa534a377ad7925e0" + integrity sha512-cKd09Jy9cDyNIvAdN2QQAP/oA21sle4FWXjIMDttailpLAYZuBE7WaPmhrkj+afS8Sj9isghAtFvWSQ0JiwOHg== dependencies: chalk "^2.4.2" cosmiconfig "^5.2.1" @@ -6971,6 +7152,11 @@ ip-regex@^2.0.0: resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= +ip-regex@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.1.0.tgz#5ad62f685a14edb421abebc2fff8db94df67b455" + integrity sha512-pKnZpbgCTfH/1NLIlOduP/V+WRXzC2MOz3Qo8xmxk8C5GudJLgK5QyLVXOSWy3ParAH7Eemurl3xjv/WXYFvMA== + ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" @@ -7029,7 +7215,70 @@ ipfs-css@0.13.1: resolved "https://registry.yarnpkg.com/ipfs-css/-/ipfs-css-0.13.1.tgz#f751be9cc89e30c34c50325848233f6da6b6728e" integrity sha512-hofJSYVBE3VC3/MOYZKfF66SKuHgnYkhXUmPDS8PISI8ygcljGOyBSSU4Je3dfgZX5UHDBEnzq5XyrTU822EDg== -ipfs-http-client@33.1.1, ipfs-http-client@^33.0.1, ipfs-http-client@^33.0.2: +ipfs-http-client@36.0.0: + version "36.0.0" + resolved "https://registry.yarnpkg.com/ipfs-http-client/-/ipfs-http-client-36.0.0.tgz#f053bd0592d3143866b18e139075d58c6bc412c4" + integrity sha512-t9CnsABeIHoXYMdGq7gtYAqiUScnv1TGMs3Q+M9SuTGBQyRdzJERm20OW9/BE2jtbBLGvrDmq+5k6bW6A6eQTw== + dependencies: + abort-controller "^3.0.0" + async "^2.6.1" + async-iterator-all "^1.0.0" + async-iterator-to-pull-stream "^1.3.0" + bignumber.js "^9.0.0" + bl "^3.0.0" + bs58 "^4.0.1" + buffer "^5.4.2" + cids "~0.7.1" + concat-stream "github:hugomrdias/concat-stream#feat/smaller" + debug "^4.1.0" + detect-node "^2.0.4" + end-of-stream "^1.4.1" + err-code "^2.0.0" + explain-error "^1.0.4" + flatmap "0.0.3" + fs-extra "^8.1.0" + glob "^7.1.3" + ipfs-block "~0.8.1" + ipfs-utils "^0.1.0" + ipld-dag-cbor "~0.15.0" + ipld-dag-pb "~0.17.3" + ipld-raw "^4.0.0" + is-ipfs "~0.6.1" + is-pull-stream "0.0.0" + is-stream "^2.0.0" + iso-stream-http "~0.1.2" + iso-url "~0.4.6" + it-glob "0.0.4" + it-to-stream "^0.1.1" + iterable-ndjson "^1.1.0" + just-kebab-case "^1.1.0" + just-map-keys "^1.1.0" + kind-of "^6.0.2" + ky "^0.13.0" + ky-universal "^0.3.0" + lru-cache "^5.1.1" + multiaddr "^7.1.0" + multibase "~0.6.0" + multicodec "~0.5.1" + multihashes "~0.4.14" + ndjson "github:hugomrdias/ndjson#feat/readable-stream3" + once "^1.4.0" + peer-id "~0.12.3" + peer-info "~0.15.1" + promise-nodeify "^3.0.1" + promisify-es6 "^1.0.3" + pull-defer "~0.2.3" + pull-stream "^3.6.9" + pull-stream-to-async-iterator "^1.0.2" + pull-to-stream "~0.1.1" + pump "^3.0.0" + qs "^6.5.2" + readable-stream "^3.1.1" + stream-to-pull-stream "^1.7.2" + tar-stream "^2.0.1" + through2 "^3.0.1" + +ipfs-http-client@^33.0.1, ipfs-http-client@^33.0.2: version "33.1.1" resolved "https://registry.yarnpkg.com/ipfs-http-client/-/ipfs-http-client-33.1.1.tgz#6ddc13e86f8db768093290b19537d2388c74dd45" integrity sha512-iwtLL3lOIzxXJFwLnOEtFUv1cYTuWJ0NauD7rpMEd/y4C7z6fuN6TSF4h547lxMh7sJWv+6Z0PmOA5N8FzUHJw== @@ -7625,16 +7874,6 @@ ipns@~0.5.2: protons "^1.0.1" timestamp-nano "^1.0.0" -iron@5.x.x: - version "5.0.6" - resolved "https://registry.yarnpkg.com/iron/-/iron-5.0.6.tgz#7121d4a6e3ac2f65e4d02971646fea1995434744" - integrity sha512-zYUMOSkEXGBdwlV/AXF9zJC0aLuTJUKHkGeYS5I2g225M5i6SrxQyGJGhPgOR8BK1omL6N5i6TcwfsXbP8/Exw== - dependencies: - b64 "4.x.x" - boom "7.x.x" - cryptiles "4.x.x" - hoek "6.x.x" - is-absolute@^0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.1.7.tgz#847491119fccb5fb436217cc737f7faad50f603f" @@ -7844,6 +8083,13 @@ is-ip@^2.0.0: dependencies: ip-regex "^2.0.0" +is-ip@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-ip/-/is-ip-3.1.0.tgz#2ae5ddfafaf05cb8008a62093cf29734f657c5d8" + integrity sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q== + dependencies: + ip-regex "^4.0.0" + is-ipfs@0.6.1, is-ipfs@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/is-ipfs/-/is-ipfs-0.6.1.tgz#c85069c73275dc6a60673c791a9be731e2b4bfc4" @@ -8033,7 +8279,7 @@ is-utf8@^0.2.0, is-utf8@^0.2.1: resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= -is-windows@^1.0.0, is-windows@^1.0.1, is-windows@^1.0.2: +is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== @@ -8063,13 +8309,6 @@ isarray@2.0.1: resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= -isemail@3.x.x: - version "3.2.0" - resolved "https://registry.yarnpkg.com/isemail/-/isemail-3.2.0.tgz#59310a021931a9fb06bbb51e155ce0b3f236832c" - integrity sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg== - dependencies: - punycode "2.x.x" - isexe@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" @@ -8221,6 +8460,14 @@ jed@1.1.1: resolved "https://registry.yarnpkg.com/jed/-/jed-1.1.1.tgz#7a549bbd9ffe1585b0cd0a191e203055bee574b4" integrity sha1-elSbvZ/+FYWwzQoZHiAwVb7ldLQ= +jest-worker@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" + integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== + dependencies: + merge-stream "^2.0.0" + supports-color "^6.1.0" + jetpack-id@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/jetpack-id/-/jetpack-id-1.0.0.tgz#2cf9fbae46d8074fc16b7de0071c8efebca473a6" @@ -8236,15 +8483,6 @@ joi-browser@^13.4.0: resolved "https://registry.yarnpkg.com/joi-browser/-/joi-browser-13.4.0.tgz#b72ba61b610e3f58e51b563a14e0f5225cfb6896" integrity sha512-TfzJd2JaJ/lg/gU+q5j9rLAjnfUNF9DUmXTP9w+GfmG79LjFOXFeM7hIFuXCBcZCivUDFwd9l1btTV9rhHumtQ== -joi@14.x.x: - version "14.3.1" - resolved "https://registry.yarnpkg.com/joi/-/joi-14.3.1.tgz#164a262ec0b855466e0c35eea2a885ae8b6c703c" - integrity sha512-LQDdM+pkOrpAn4Lp+neNIFV3axv1Vna3j38bisbQhETPMANYRbFJFUyOZcOClYvM/hppMhGWuKSFEK9vjrB+bQ== - dependencies: - hoek "6.x.x" - isemail "3.x.x" - topo "3.x.x" - js-levenshtein@^1.1.3: version "1.1.6" resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" @@ -9628,6 +9866,13 @@ make-dir@^2.0.0, make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" +make-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.0.tgz#1b5f39f6b9270ed33f9f054c5c0f84304989f801" + integrity sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw== + dependencies: + semver "^6.0.0" + mamacro@^0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" @@ -9799,6 +10044,11 @@ merge-source-map@^1.1.0: dependencies: source-map "^0.6.1" +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + merkle-lib@^2.0.10: version "2.0.10" resolved "https://registry.yarnpkg.com/merkle-lib/-/merkle-lib-2.0.10.tgz#82b8dbae75e27a7785388b73f9d7725d0f6f3326" @@ -9895,14 +10145,6 @@ 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== -mimos@4.x.x: - version "4.0.2" - resolved "https://registry.yarnpkg.com/mimos/-/mimos-4.0.2.tgz#f2762d7c60118ce51c2231afa090bc335d21d0f8" - integrity sha512-5XBsDqBqzSN88XPPH/TFpOalWOjHJM5Z2d3AMx/30iq+qXvYKd/8MPhqBwZDOLtoaIWInR3nLzMQcxfGK9djXA== - dependencies: - hoek "6.x.x" - mime-db "1.x.x" - min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" @@ -10117,21 +10359,21 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -multiaddr-to-uri@4.0.1, multiaddr-to-uri@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/multiaddr-to-uri/-/multiaddr-to-uri-4.0.1.tgz#3b89d2a460a96602a16f3bfe296ee771ecb2558b" - integrity sha512-RVHKm5NXcMWMIhrwF4B4Q34JtMXt1/2wgnDTnKRE+AGAiXfqFika0bIfCsAtLp+gZJOWeDLeT1vR6P0gGyVAtg== - dependencies: - multiaddr "^6.0.3" - -multiaddr-to-uri@^5.0.0: +multiaddr-to-uri@5.0.0, multiaddr-to-uri@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/multiaddr-to-uri/-/multiaddr-to-uri-5.0.0.tgz#f62421bd905d2690030acdae09b0719f60b6a91c" integrity sha512-aVc52fdGXso3DwvVKUTjMddhLyuFBXcpGSbsIju0lKiYKFBUEREXSLpcqTOZlO8w1G1TivVmDe4CBUKQ/xMm5A== dependencies: multiaddr "^6.1.0" -multiaddr@6.1.0, multiaddr@^4.0.0, multiaddr@^5.0.0, multiaddr@^6.0.3, multiaddr@^6.0.4, multiaddr@^6.0.6, multiaddr@^6.1.0: +multiaddr-to-uri@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/multiaddr-to-uri/-/multiaddr-to-uri-4.0.1.tgz#3b89d2a460a96602a16f3bfe296ee771ecb2558b" + integrity sha512-RVHKm5NXcMWMIhrwF4B4Q34JtMXt1/2wgnDTnKRE+AGAiXfqFika0bIfCsAtLp+gZJOWeDLeT1vR6P0gGyVAtg== + dependencies: + multiaddr "^6.0.3" + +multiaddr@6.1.0, multiaddr@^4.0.0, multiaddr@^5.0.0, multiaddr@^6.0.3, multiaddr@^6.0.4, multiaddr@^6.0.6, multiaddr@^6.1.0, multiaddr@^7.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/multiaddr/-/multiaddr-6.1.0.tgz#1f93afce58a33db5cc32a5917d8a14105d94330e" integrity sha512-+XTP3OzG2m6JVcjxA9QBmGDr0Vk8WwnohC/fCC3puXb5qJqfJwLVJLEtdTc6vK7ri/hw+Nn4wyT4LkZaPnvGfQ== @@ -10143,6 +10385,18 @@ multiaddr@6.1.0, multiaddr@^4.0.0, multiaddr@^5.0.0, multiaddr@^6.0.3, multiaddr is-ip "^2.0.0" varint "^5.0.0" +multiaddr@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/multiaddr/-/multiaddr-7.1.0.tgz#e74d69b10cff2840c4c36eb2ecef94a6b933a977" + integrity sha512-XQS/KsvlsnlTs2krhSYP8Nzin3S8vKBBQcaQO2K4gd/4Oq56kfxiPeAOWEvloB5gY8iv9wSorZ3WOA9yYqf9+A== + dependencies: + bs58 "^4.0.1" + class-is "^1.1.0" + hi-base32 "~0.5.0" + ip "^1.1.5" + is-ip "^3.1.0" + varint "^5.0.0" + multibase@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.0.tgz#0216e350614c7456da5e8e5b20d3fcd4c9104f56" @@ -10528,14 +10782,6 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -nigel@3.x.x: - version "3.0.4" - resolved "https://registry.yarnpkg.com/nigel/-/nigel-3.0.4.tgz#edcd82f2e9387fe34ba21e3127ae4891547c7945" - integrity sha512-3SZCCS/duVDGxFpTROHEieC+itDo4UqL9JNUyQJv3rljudQbK6aqus5B4470OxhESPJLN93Qqxg16rH7DUjbfQ== - dependencies: - hoek "6.x.x" - vise "3.x.x" - nise@^1.4.10: version "1.5.0" resolved "https://registry.yarnpkg.com/nise/-/nise-1.5.0.tgz#d03ea0e6c1b75c638015aa3585eddc132949a50d" @@ -10547,17 +10793,6 @@ nise@^1.4.10: lolex "^4.1.0" path-to-regexp "^1.7.0" -nise@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/nise/-/nise-1.5.1.tgz#de61d99a1d3b46b5233be4531569b9a8e27372b2" - integrity sha512-edFWm0fsFG2n318rfEnKlTZTkjlbVOFF9XIA+fj+Ed+Qz1laYW2lobwavWoMzGrYDHH1EpiNJgDfvGnkZztR/g== - dependencies: - "@sinonjs/formatio" "^3.2.1" - "@sinonjs/text-encoding" "^0.7.1" - just-extend "^4.0.2" - lolex "^4.1.0" - path-to-regexp "^1.7.0" - nise@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/nise/-/nise-1.5.2.tgz#b6d29af10e48b321b307e10e065199338eeb2652" @@ -11205,10 +11440,10 @@ p-map@^2.0.0: resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== -p-queue@6.1.0, p-queue@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.1.0.tgz#3f546275073b41e4af460e41459524b15c2753f3" - integrity sha512-907vNz/cY+JEsqGglo7o/Ia9E/wisahJGOp9HPfbAyCVGERQVmFGA4IyknxY1v+QRBiMKedL3ToOBXNEy9MKQA== +p-queue@6.1.1, p-queue@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.1.1.tgz#eedbaf7335b4931ef857e2e58063fed461b97e80" + integrity sha512-R9gq36Th88xZ+rWAptN5IXLwqkwA1gagCQhT6ZXQ6RxEfmjb9ZW+UBzRVqv9sm5TQmbbI/TsKgGLbOaA61xR5w== dependencies: eventemitter3 "^4.0.0" p-timeout "^3.1.0" @@ -11220,10 +11455,10 @@ p-queue@^5.0.0: dependencies: eventemitter3 "^3.1.0" -p-queue@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.1.1.tgz#eedbaf7335b4931ef857e2e58063fed461b97e80" - integrity sha512-R9gq36Th88xZ+rWAptN5IXLwqkwA1gagCQhT6ZXQ6RxEfmjb9ZW+UBzRVqv9sm5TQmbbI/TsKgGLbOaA61xR5w== +p-queue@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.1.0.tgz#3f546275073b41e4af460e41459524b15c2753f3" + integrity sha512-907vNz/cY+JEsqGglo7o/Ia9E/wisahJGOp9HPfbAyCVGERQVmFGA4IyknxY1v+QRBiMKedL3ToOBXNEy9MKQA== dependencies: eventemitter3 "^4.0.0" p-timeout "^3.1.0" @@ -11642,17 +11877,6 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -pez@4.x.x: - version "4.0.5" - resolved "https://registry.yarnpkg.com/pez/-/pez-4.0.5.tgz#a975c49deff330d298d82851b39f81c2710556df" - integrity sha512-HvL8uiFIlkXbx/qw4B8jKDCWzo7Pnnd65Uvanf9OOCtb20MRcb9gtTVBf9NCnhETif1/nzbDHIjAWC/sUp7LIQ== - dependencies: - b64 "4.x.x" - boom "7.x.x" - content "4.x.x" - hoek "6.x.x" - nigel "3.x.x" - pidtree@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.0.tgz#f6fada10fccc9f99bf50e90d0b23d72c9ebc2e6b" @@ -11690,27 +11914,51 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= -pino-pretty@^2.5.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-2.6.1.tgz#b5a8e28137deb1629428931d98c708b51f0e9555" - integrity sha512-e/CWtKLidqkr7sinfIVVcsfcHgnFVlGvuEfKuuPFnxBo+9dZZsmgF8a9Rj7SYJ5LMZ8YBxNY9Ca46eam4ajKtQ== +pino-pretty@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-3.2.1.tgz#db13b793f7074f25051306ee625b6feabae056d9" + integrity sha512-PGdcRYw7HCF7ovMhrnepOUmEVh5+tATydRrBICEbP37oRasXV+lo2HA9gg8b7cE7LG6G1OZGVXTZ7MLd946k1Q== dependencies: - args "^5.0.0" - chalk "^2.3.2" + "@hapi/bourne" "^1.3.2" + args "^5.0.1" + chalk "^2.4.2" dateformat "^3.0.3" - fast-json-parse "^1.0.3" fast-safe-stringify "^2.0.6" jmespath "^0.15.0" pump "^3.0.0" - readable-stream "^3.0.6" - split2 "^3.0.0" + readable-stream "^3.3.0" + split2 "^3.1.1" pino-std-serializers@^2.3.0: version "2.4.2" resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-2.4.2.tgz#cb5e3e58c358b26f88969d7e619ae54bdfcc1ae1" integrity sha512-WaL504dO8eGs+vrK+j4BuQQq6GLKeCCcHaMB2ItygzVURcL1CycwNEUHTD/lHFHs/NL5qAz2UKrjYWXKSf4aMQ== -pino@5.12.3, pino@5.12.6, pino@^5.12.3, pino@~5.12.0: +pino@5.12.6: + version "5.12.6" + resolved "https://registry.yarnpkg.com/pino/-/pino-5.12.6.tgz#04a668278d7616db71871f1bd3e26f6918e05feb" + integrity sha512-LM5ug2b27uymIIkaBw54ncF+9DSf8S4z1uzw+Y5I94dRu3Z+lFuB13j0kg1InAeyxy+CsLGnWHKy9+zgTreFOg== + dependencies: + fast-redact "^1.4.4" + fast-safe-stringify "^2.0.6" + flatstr "^1.0.9" + pino-std-serializers "^2.3.0" + quick-format-unescaped "^3.0.2" + sonic-boom "^0.7.3" + +pino@^5.13.2: + version "5.13.2" + resolved "https://registry.yarnpkg.com/pino/-/pino-5.13.2.tgz#773416c9764634276e7b2ae021357679ff7b5634" + integrity sha512-WwOSCy36/gWhinsqWqAnuwIi2WtcH+jvoyeLm3bjUALIrzWIst0AovQjK4jVvSN2l64KFPfi3gd2fjsTovjdLQ== + dependencies: + fast-redact "^1.4.4" + fast-safe-stringify "^2.0.6" + flatstr "^1.0.9" + pino-std-serializers "^2.3.0" + quick-format-unescaped "^3.0.2" + sonic-boom "^0.7.5" + +pino@~5.12.0: version "5.12.3" resolved "https://registry.yarnpkg.com/pino/-/pino-5.12.3.tgz#5ebc7d15b3584b91de8d3cdae01ef3a10e7fb977" integrity sha512-/PiX7QXOMZz7edRVGm/apt22nkdRByB6ki0ftWcDpHjjNmjnE7UubNd7NeDX7cBey27obxvBvZy3oQuJbz1+Ag== @@ -11753,7 +12001,7 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -pkg-dir@^4.2.0: +pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== @@ -11780,14 +12028,6 @@ po2json@0.4.5: gettext-parser "1.1.0" nomnom "1.8.1" -podium@3.x.x: - version "3.2.0" - resolved "https://registry.yarnpkg.com/podium/-/podium-3.2.0.tgz#2a7c579ddd5408f412d014c9ffac080c41d83477" - integrity sha512-rbwvxwVkI6gRRlxZQ1zUeafrpGxZ7QPHIheinehAvGATvGIPfWRkaTeWedc5P4YjXJXEV8ZbBxPtglNylF9hjw== - dependencies: - hoek "6.x.x" - joi "14.x.x" - posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" @@ -12273,16 +12513,16 @@ punycode@1.3.2: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= -punycode@2.x.x, punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - punycode@^1.2.4, punycode@^1.3.2, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + pushdata-bitcoin@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/pushdata-bitcoin/-/pushdata-bitcoin-1.0.1.tgz#15931d3cd967ade52206f523aa7331aef7d43af7" @@ -12609,16 +12849,21 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp-tree@^0.1.6: - version "0.1.11" - resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.11.tgz#c9c7f00fcf722e0a56c7390983a7a63dd6c272f3" - integrity sha512-7/l/DgapVVDzZobwMCCgMlqiqyLFJ0cduo/j+3BcDJIB+yJdsYCfKuI3l/04NV+H/rfNRdPIDbXNZHM9XvQatg== +regexp-tree@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.13.tgz#5b19ab9377edc68bc3679256840bb29afc158d7f" + integrity sha512-hwdV/GQY5F8ReLZWO+W1SRoN5YfpOKY6852+tBFcma72DKBIcHjPRIlIvQN35bCOljuAfP2G2iB0FC/w236mUw== regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== +regexpp@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e" + integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g== + regexpu-core@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae" @@ -13049,6 +13294,14 @@ schema-utils@^2.0.1: ajv "^6.1.0" ajv-keywords "^3.1.0" +schema-utils@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.2.0.tgz#48a065ce219e0cacf4631473159037b2c1ae82da" + integrity sha512-5EwsCNhfFTZvUreQhx/4vVQpJ/lnCAkgoIHLhSpp4ZirE+4hzFvdJi0FMub6hxbFVBJYSpeVVmon+2e7uEGRrA== + dependencies: + ajv "^6.10.2" + ajv-keywords "^3.4.1" + scroll-to-anchor@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/scroll-to-anchor/-/scroll-to-anchor-1.1.0.tgz#c99b8d2e5d95056752787ca78095ab75b520b3fd" @@ -13146,6 +13399,11 @@ serialize-javascript@^1.7.0: resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65" integrity sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA== +serialize-javascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.0.tgz#9310276819efd0eb128258bb341957f6eb2fc570" + integrity sha512-a/mxFfU00QT88umAJQsNWOnUKckhNCqOl028N48e7wFmo2/EHpTo9Wso+iJJCMrQnmFvcjto5RJdAHEvVhcyUQ== + serve-static@1.14.1: version "1.14.1" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" @@ -13290,14 +13548,6 @@ shortid@^2.2.8: dependencies: nanoid "^2.0.0" -shot@4.x.x: - version "4.0.7" - resolved "https://registry.yarnpkg.com/shot/-/shot-4.0.7.tgz#b05d2858634fedc18ece99e8f638fab7c9f9d4c4" - integrity sha512-RKaKAGKxJ11EjJl0cf2fYVSsd4KB5Cncb9J0v7w+0iIaXpxNqFWTYNDNhBX7f0XSyDrjOH9a4OWZ9Gp/ZML+ew== - dependencies: - hoek "6.x.x" - joi "14.x.x" - shx@0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/shx/-/shx-0.3.2.tgz#40501ce14eb5e0cbcac7ddbd4b325563aad8c123" @@ -13369,17 +13619,17 @@ sinon-chrome@3.0.1: sinon "^7.2.3" urijs "^1.18.2" -sinon@7.4.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-7.4.1.tgz#bcd0c63953893e87fa0cc502f52489c32a83d4d9" - integrity sha512-7s9buHGHN/jqoy/v4bJgmt0m1XEkCEd/tqdHXumpBp0JSujaT4Ng84JU5wDdK4E85ZMq78NuDe0I3NAqXY8TFg== +sinon@7.4.2, sinon@^7.3.2: + version "7.4.2" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-7.4.2.tgz#ecd54158fef2fcfbdb231a3fa55140e8cb02ad6c" + integrity sha512-pY5RY99DKelU3pjNxcWo6XqeB1S118GBcVIIdDi6V+h6hevn1izcg2xv1hTHW/sViRXU7sUOxt4wTUJ3gsW2CQ== dependencies: "@sinonjs/commons" "^1.4.0" "@sinonjs/formatio" "^3.2.1" - "@sinonjs/samsam" "^3.3.2" + "@sinonjs/samsam" "^3.3.3" diff "^3.5.0" lolex "^4.2.0" - nise "^1.5.1" + nise "^1.5.2" supports-color "^5.5.0" sinon@^7.2.3: @@ -13395,19 +13645,6 @@ sinon@^7.2.3: nise "^1.4.10" supports-color "^5.5.0" -sinon@^7.3.2: - version "7.4.2" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-7.4.2.tgz#ecd54158fef2fcfbdb231a3fa55140e8cb02ad6c" - integrity sha512-pY5RY99DKelU3pjNxcWo6XqeB1S118GBcVIIdDi6V+h6hevn1izcg2xv1hTHW/sViRXU7sUOxt4wTUJ3gsW2CQ== - dependencies: - "@sinonjs/commons" "^1.4.0" - "@sinonjs/formatio" "^3.2.1" - "@sinonjs/samsam" "^3.3.3" - diff "^3.5.0" - lolex "^4.2.0" - nise "^1.5.2" - supports-color "^5.5.0" - slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -13781,14 +14018,6 @@ socks@~2.3.2: ip "^1.1.5" smart-buffer "4.0.2" -somever@2.x.x: - version "2.0.0" - resolved "https://registry.yarnpkg.com/somever/-/somever-2.0.0.tgz#7bdbed3bee8ece2c7c8a2e7d9a1c022bd98d6c89" - integrity sha512-9JaIPP+HxwYGqCDqqK3tRaTqdtQHoK6Qy3IrXhIt2q5x8fs8RcfU7BMWlFTCOgFazK8p88zIv1tHQXvAwtXMyw== - dependencies: - bounce "1.x.x" - hoek "6.x.x" - sonic-boom@^0.7.3: version "0.7.4" resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-0.7.4.tgz#dc1740a900cf8646471f6ac1f4933a5c66c0ca60" @@ -13796,6 +14025,13 @@ sonic-boom@^0.7.3: dependencies: flatstr "^1.0.9" +sonic-boom@^0.7.5: + version "0.7.5" + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-0.7.5.tgz#b383d92cdaaa8e66d1f77bdec71b49806d01b5f1" + integrity sha512-1pKrnAV6RfvntPnarY71tpthFTM3pWZWWQdghZY8ARjtDPGzG/inxqSuRwQY/7V1woUjfyxPb437zn4p5phgnQ== + dependencies: + flatstr "^1.0.12" + sort-keys-length@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188" @@ -13926,7 +14162,7 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" -split2@^3.0.0, split2@^3.1.0: +split2@^3.1.0, split2@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/split2/-/split2-3.1.1.tgz#c51f18f3e06a8c4469aaab487687d8d956160bb6" integrity sha512-emNzr1s7ruq4N+1993yht631/JH+jaj0NYBosuKmLcq+JkGQ9MmTw1RB1fGaTCzUuseRIClrlSLHRNYGwWQ58Q== @@ -13977,43 +14213,30 @@ stable@~0.1.8: resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== -standard-engine@~11.0.1: - version "11.0.1" - resolved "https://registry.yarnpkg.com/standard-engine/-/standard-engine-11.0.1.tgz#943d710be54537dbedaf8a90367d271f4023fe7c" - integrity sha512-WZQ5PpEDfRzPFk+H9xvKVQPQIxKnAQB2cb2Au4NyTCtdw5R0pyMBUZLbPXyFjnlhe8Ae+zfNrWU4m6H5b7cEAg== +standard-engine@^12.0.0: + version "12.0.0" + resolved "https://registry.yarnpkg.com/standard-engine/-/standard-engine-12.0.0.tgz#1643dceba96ca9c04c535a1fb28d79bfb21b3572" + integrity sha512-gJIIRb0LpL7AHyGbN9+hJ4UJns37lxmNTnMGRLC8CFrzQ+oB/K60IQjKNgPBCB2VP60Ypm6f8DFXvhVWdBOO+g== dependencies: - deglob "^3.0.0" + deglob "^4.0.0" get-stdin "^7.0.0" minimist "^1.1.0" pkg-conf "^3.1.0" -standard@13.1.0: - version "13.1.0" - resolved "https://registry.yarnpkg.com/standard/-/standard-13.1.0.tgz#3de68ac1248d563a445edc806504987a11ea7496" - integrity sha512-h3NaMzsa88+/xtjXCMvdn6EWWdlodsI/HvtsQF+EGwrF9kVNwNha9TkFABU6bSBoNfC79YDyIAq9ekxOMBFkuw== +standard@14.2.0: + version "14.2.0" + resolved "https://registry.yarnpkg.com/standard/-/standard-14.2.0.tgz#7abb64d63095b41c4cd56ef25bbd04f7364af10f" + integrity sha512-qVXM+iVRBJn7f9HhlH4MxioeCzevLSyMqVLTb48MXcwEtQwjhXKg4MVlWLfQtHxaNACRbtmr5l4D4/Ao1oNgYA== dependencies: - eslint "~6.1.0" - eslint-config-standard "13.0.1" - eslint-config-standard-jsx "7.0.0" + eslint "~6.3.0" + eslint-config-standard "14.1.0" + eslint-config-standard-jsx "8.1.0" eslint-plugin-import "~2.18.0" - eslint-plugin-node "~9.1.0" + eslint-plugin-node "~10.0.0" eslint-plugin-promise "~4.2.1" eslint-plugin-react "~7.14.2" eslint-plugin-standard "~4.0.0" - standard-engine "~11.0.1" - -statehood@6.x.x: - version "6.0.9" - resolved "https://registry.yarnpkg.com/statehood/-/statehood-6.0.9.tgz#b347ae19818aec7fc26645fe1ec6a61928a57a3c" - integrity sha512-jbFg1+MYEqfC7ABAoWZoeF4cQUtp3LUvMDUGExL76cMmleBHG7I6xlZFsE8hRi7nEySIvutHmVlLmBe9+2R5LQ== - dependencies: - boom "7.x.x" - bounce "1.x.x" - bourne "1.x.x" - cryptiles "4.x.x" - hoek "6.x.x" - iron "5.x.x" - joi "14.x.x" + standard-engine "^12.0.0" static-extend@^0.1.1: version "0.1.2" @@ -14311,18 +14534,6 @@ subarg@^1.0.0: dependencies: minimist "^1.1.0" -subtext@6.x.x: - version "6.0.12" - resolved "https://registry.yarnpkg.com/subtext/-/subtext-6.0.12.tgz#ac09be3eac1eca3396933adeadd65fc781f64fc1" - integrity sha512-yT1wCDWVgqvL9BIkWzWqgj5spUSYo/Enu09iUV8t2ZvHcr2tKGTGg2kc9tUpVEsdhp1ihsZeTAiDqh0TQciTPQ== - dependencies: - boom "7.x.x" - bourne "1.x.x" - content "4.x.x" - hoek "6.x.x" - pez "4.x.x" - wreck "14.x.x" - superagent@^3.1.0, superagent@~3.8.1: version "3.8.3" resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.8.3.tgz#460ea0dbdb7d5b11bc4f78deba565f86a178e128" @@ -14488,11 +14699,6 @@ tdigest@^0.1.1: dependencies: bintrees "1.0.1" -teamwork@3.x.x: - version "3.2.0" - resolved "https://registry.yarnpkg.com/teamwork/-/teamwork-3.2.0.tgz#27916edab815459c1a4686252eb18fb5925f49fa" - integrity sha512-xAmJ8PIVjRZMXAHgUuOP8ITsv0SedyWAit2UWiNImXgg/F+BxrsG46ZegElNBM0Dwp+iMfbigg/Ll/M2oDRYww== - temp-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" @@ -14520,7 +14726,21 @@ term-size@^1.2.0: dependencies: execa "^0.7.0" -terser-webpack-plugin@1.4.1, terser-webpack-plugin@^1.4.1: +terser-webpack-plugin@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.0.1.tgz#5e69a187133472174ef2fb51afc76a0f0a7b1d13" + integrity sha512-DXx8f7080P2dgW9Ydd7MUon81AL+GkGr9prfQRf+rH06dRrgCGIvtT7q73JRm2UzmjKeJGtro9O8zwL2y2udag== + dependencies: + cacache "^12.0.3" + find-cache-dir "^3.0.0" + jest-worker "^24.9.0" + schema-utils "^2.2.0" + serialize-javascript "^2.1.0" + source-map "^0.6.1" + terser "^4.2.1" + webpack-sources "^1.4.3" + +terser-webpack-plugin@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4" integrity sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg== @@ -14535,7 +14755,16 @@ terser-webpack-plugin@1.4.1, terser-webpack-plugin@^1.4.1: webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser@4.1.4, terser@^4.1.2: +terser@4.3.1, terser@^4.2.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.3.1.tgz#09820bcb3398299c4b48d9a86aefc65127d0ed65" + integrity sha512-pnzH6dnFEsR2aa2SJaKb1uSCl3QmIsJ8dEkj0Fky+2AwMMcC9doMqLOQIH6wVTEKaVfKVvLSk5qxPBEZT9mywg== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +terser@^4.1.2: version "4.1.4" resolved "https://registry.yarnpkg.com/terser/-/terser-4.1.4.tgz#4478b6a08bb096a61e793fea1a4434408bab936c" integrity sha512-+ZwXJvdSwbd60jG0Illav0F06GDJF0R4ydZ21Q3wGAFKoBGyJGo34F63vzJHgvYxc1ukOtIjvwEvl9MkjzM6Pg== @@ -14736,13 +14965,6 @@ toml@^3.0.0: resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== -topo@3.x.x: - version "3.0.3" - resolved "https://registry.yarnpkg.com/topo/-/topo-3.0.3.tgz#d5a67fb2e69307ebeeb08402ec2a2a6f5f7ad95c" - integrity sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ== - dependencies: - hoek "6.x.x" - tosource@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/tosource/-/tosource-1.0.0.tgz#42d88dd116618bcf00d6106dd5446f3427902ff1" @@ -15305,13 +15527,6 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -vise@3.x.x: - version "3.0.2" - resolved "https://registry.yarnpkg.com/vise/-/vise-3.0.2.tgz#9a8b7450f783aa776faa327fe47d7bfddb227266" - integrity sha512-X52VtdRQbSBXdjcazRiY3eRgV3vTQ0B+7Wh8uC9cVv7lKfML5m9+9NHlbcgCY0R9EAqD1v/v7o9mhGh2A3ANFg== - dependencies: - hoek "6.x.x" - vm-browserify@^1.0.0, vm-browserify@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" @@ -15394,10 +15609,10 @@ webidl-conversions@^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-bundle-analyzer@3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.4.1.tgz#430544c7ba1631baccf673475ca8300cb74a3c47" - integrity sha512-Bs8D/1zF+17lhqj2OYmzi7HEVYqEVxu7lCO9Ff8BwajenOU0vAwEoV8e4ICCPNZAcqR1PCR/7o2SkW+cnCmF0A== +webpack-bundle-analyzer@3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.5.0.tgz#c82130a490a05f9267aa5956871aef574dff5074" + integrity sha512-NzueflueLSJxWGzDlMq5oUV+P8Qoq6yiaQlXGCbDYUpHEKlmzWdPLBJ4k/B6HTdAP/vHM8ply1Fx08mDnY+S8Q== dependencies: acorn "^6.0.7" acorn-walk "^6.1.1" @@ -15413,10 +15628,10 @@ webpack-bundle-analyzer@3.4.1: opener "^1.5.1" ws "^6.0.0" -webpack-cli@3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.6.tgz#2c8c399a2642133f8d736a359007a052e060032c" - integrity sha512-0vEa83M7kJtxK/jUhlpZ27WHIOndz5mghWL2O53kiDoA9DIxSKnfqB92LoqEn77cT4f3H2cZm1BMEat/6AZz3A== +webpack-cli@3.3.8: + version "3.3.8" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.8.tgz#caeaebcc26f685db1736e5decd3f01aac30123ec" + integrity sha512-RANYSXwikSWINjHMd/mtesblNSpjpDLoYTBtP99n1RhXqVI/wxN40Auqy42I7y4xrbmRBoA5Zy5E0JSBD5XRhw== dependencies: chalk "2.4.2" cross-spawn "6.0.5" @@ -15430,14 +15645,14 @@ webpack-cli@3.3.6: v8-compile-cache "2.0.3" yargs "13.2.4" -webpack-merge@4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.1.tgz#5e923cf802ea2ace4fd5af1d3247368a633489b4" - integrity sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw== +webpack-merge@4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" + integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== dependencies: - lodash "^4.17.5" + lodash "^4.17.15" -webpack-sources@^1.4.0, webpack-sources@^1.4.1: +webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== @@ -15445,10 +15660,10 @@ webpack-sources@^1.4.0, webpack-sources@^1.4.1: source-list-map "^2.0.0" source-map "~0.6.1" -webpack@4.39.1: - version "4.39.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.39.1.tgz#60ed9fb2b72cd60f26ea526c404d2a4cc97a1bd8" - integrity sha512-/LAb2TJ2z+eVwisldp3dqTEoNhzp/TLCZlmZm3GGGAlnfIWDgOEE758j/9atklNLfRyhKbZTCOIoPqLJXeBLbQ== +webpack@4.39.3: + version "4.39.3" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.39.3.tgz#a02179d1032156b713b6ec2da7e0df9d037def50" + integrity sha512-BXSI9M211JyCVc3JxHWDpze85CvjC842EvpRsVTc/d15YJGlox7GIDd38kJgWrb3ZluyvIjgenbLDMBQPDcxYQ== dependencies: "@webassemblyjs/ast" "1.8.5" "@webassemblyjs/helper-module-context" "1.8.5" @@ -15597,15 +15812,6 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -wreck@14.x.x: - version "14.2.0" - resolved "https://registry.yarnpkg.com/wreck/-/wreck-14.2.0.tgz#0064a5b930fc675f57830c1fd28342da1a70b0fc" - integrity sha512-NFFft3SMgqrJbXEVfYifh+QDWFxni+98/I7ut7rLbz3F0XOypluHsdo3mdEYssGSirMobM3fGlqhyikbWKDn2Q== - dependencies: - boom "7.x.x" - bourne "1.x.x" - hoek "6.x.x" - write-file-atomic@^2.0.0, write-file-atomic@^2.4.2: version "2.4.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" From b6627a1184b71f1edb9c731ae066b21c2b9a00fb Mon Sep 17 00:00:00 2001 From: Marcin Rataj Date: Thu, 12 Sep 2019 17:55:17 +0200 Subject: [PATCH 12/16] style: standard 14 --- add-on/src/lib/dir-view.js | 2 +- add-on/src/popup/browser-action/header.js | 6 ++++-- add-on/src/popup/quick-upload.js | 2 +- test/functional/lib/ipfs-path.test.js | 10 +++++----- test/functional/lib/ipfs-proxy/enable-command.test.js | 2 +- test/functional/lib/options.test.js | 4 ++-- test/functional/pages/proxy-access-dialog/page.test.js | 4 ++-- 7 files changed, 16 insertions(+), 14 deletions(-) diff --git a/add-on/src/lib/dir-view.js b/add-on/src/lib/dir-view.js index 920733a17..54ad852e6 100644 --- a/add-on/src/lib/dir-view.js +++ b/add-on/src/lib/dir-view.js @@ -6,7 +6,7 @@ const mainStyle = require('ipfs-http-response/src/dir-view/style') function buildFilesList (path, links) { const rows = links.map((link) => { let row = [ - `
 
`, + '
 
', `${link.name}`, filesize(link.size) ] diff --git a/add-on/src/popup/browser-action/header.js b/add-on/src/popup/browser-action/header.js index 77ad6c7c8..eae47d2b6 100644 --- a/add-on/src/popup/browser-action/header.js +++ b/add-on/src/popup/browser-action/header.js @@ -25,11 +25,13 @@ module.exports = function header (props) { ${browser.i18n.getMessage('panel_headerIpfsNodeIconLabel')}
- ${powerIcon({ active, + ${powerIcon({ + active, title: 'panel_headerActiveToggleTitle', action: onToggleActive })} - ${optionsIcon({ active, + ${optionsIcon({ + active, title: 'panel_openPreferences', action: onOpenPrefs })} diff --git a/add-on/src/popup/quick-upload.js b/add-on/src/popup/quick-upload.js index 88c2df0e2..098f71ec4 100644 --- a/add-on/src/popup/quick-upload.js +++ b/add-on/src/popup/quick-upload.js @@ -94,7 +94,7 @@ async function processFiles (state, emitter, files) { } catch (err) { console.error('Unable to perform quick upload', err) // keep upload tab and display error message in it - state.message = `Unable to upload to IPFS API:` + state.message = 'Unable to upload to IPFS API:' state.progress = `${err}` emitter.emit('render') } diff --git a/test/functional/lib/ipfs-path.test.js b/test/functional/lib/ipfs-path.test.js index eade73a7d..9aa1cc79a 100644 --- a/test/functional/lib/ipfs-path.test.js +++ b/test/functional/lib/ipfs-path.test.js @@ -227,7 +227,7 @@ describe('ipfs-path.js', function () { }) it('should resolve URL with /ipfs/ path to the custom gateway if provided', function () { const url = 'https://example.com/ipfs/bafybeicgmdpvw4duutrmdxl4a7gc52sxyuk7nz5gby77afwdteh3jc5bqa/wiki/Mars.html?argTest#hashTest' - expect(ipfsPathValidator.resolveToPublicUrl(url, 'https://example.com/')).to.equal(`https://example.com/ipfs/bafybeicgmdpvw4duutrmdxl4a7gc52sxyuk7nz5gby77afwdteh3jc5bqa/wiki/Mars.html?argTest#hashTest`) + expect(ipfsPathValidator.resolveToPublicUrl(url, 'https://example.com/')).to.equal('https://example.com/ipfs/bafybeicgmdpvw4duutrmdxl4a7gc52sxyuk7nz5gby77afwdteh3jc5bqa/wiki/Mars.html?argTest#hashTest') }) it('should resolve /ipfs/ path to itself attached to the default public gateway', function () { const path = '/ipfs/bafybeicgmdpvw4duutrmdxl4a7gc52sxyuk7nz5gby77afwdteh3jc5bqa/wiki/Mars.html?argTest#hashTest' @@ -391,13 +391,13 @@ describe('ipfs-path.js', function () { it('should resolve URL with /ipns/ path', async function () { const url = 'https://example.com/ipns/docs.ipfs.io/foo/bar?argTest#hashTest' const expectedCid = 'QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR' - spoofIpfsResolve(ipfs, `/ipns/docs.ipfs.io/foo/bar`, `/ipfs/${expectedCid}`) + spoofIpfsResolve(ipfs, '/ipns/docs.ipfs.io/foo/bar', `/ipfs/${expectedCid}`) expect(await ipfsPathValidator.resolveToCid(url)).to.equal(expectedCid) }) it('should resolve /ipns/ path to the immutable /ipfs/ one', async function () { const path = '/ipns/libp2p.io/foo/bar?argTest#hashTest' const expectedCid = 'QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR' - spoofIpfsResolve(ipfs, `/ipns/libp2p.io/foo/bar`, `/ipfs/${expectedCid}`) + spoofIpfsResolve(ipfs, '/ipns/libp2p.io/foo/bar', `/ipfs/${expectedCid}`) expect(await ipfsPathValidator.resolveToCid(path)).to.equal(expectedCid) }) it('should resolve URL of a DNSLink website to null if the value if DNSLink is not in cache', async function () { @@ -414,7 +414,7 @@ describe('ipfs-path.js', function () { spoofCachedDnslink(hostname, dnslinkResolver, dnslinkValue) // Note the DNSLink value is ignored, and /ipns/ is passed to ipfs.resolv internally // This ensures the latest pointer is returned, instead of stale value from DNSLink cache - spoofIpfsResolve(ipfs, `/ipns/docs.ipfs.io/guides/concepts/dnslink/`, `/ipfs/${expectedCid}`) + spoofIpfsResolve(ipfs, '/ipns/docs.ipfs.io/guides/concepts/dnslink/', `/ipfs/${expectedCid}`) expect(await ipfsPathValidator.resolveToCid(url)).to.equal(expectedCid) }) // TODO: remove when https://github.com/ipfs/js-ipfs/issues/1918 is addressed @@ -429,7 +429,7 @@ describe('ipfs-path.js', function () { // This ensures the latest pointer is returned, instead of stale value from DNSLink cache // js-ipfs v0.34 does not support DNSLinks in ipfs.name.resolve: https://github.com/ipfs/js-ipfs/issues/1918 const resolve = stub(ipfs, 'resolve') - resolve.withArgs(`/ipns/docs.ipfs.io/guides/concepts/dnslink/`).throws(new Error('resolve non-IPFS names is not implemented')) + resolve.withArgs('/ipns/docs.ipfs.io/guides/concepts/dnslink/').throws(new Error('resolve non-IPFS names is not implemented')) // until it is implemented, we have a workaround that falls back to value from dnslink resolve.withArgs('/ipns/QmRV5iNhGoxBaAcbucMAW9WtVHbeehXhAdr5CZQDhL55Xk/guides/concepts/dnslink/').resolves(`/ipfs/${expectedCid}`) resolve.throws((arg) => new Error(`Unexpected stubbed call ipfs.resolve(${arg})`)) diff --git a/test/functional/lib/ipfs-proxy/enable-command.test.js b/test/functional/lib/ipfs-proxy/enable-command.test.js index 5b058d2e1..9ac50241a 100644 --- a/test/functional/lib/ipfs-proxy/enable-command.test.js +++ b/test/functional/lib/ipfs-proxy/enable-command.test.js @@ -133,7 +133,7 @@ describe('lib/ipfs-proxy/enable-command', () => { // confirm build permission request failed with error expect(requestAccess.called).to.equal(false) - expect(() => { if (error) throw error }).to.throw(`User denied access to selected commands over IPFS proxy: id`) + expect(() => { if (error) throw error }).to.throw('User denied access to selected commands over IPFS proxy: id') // ensure explicit version acl is still missing const versionAcl = await accessControl.getAccess(getScope(), 'version') diff --git a/test/functional/lib/options.test.js b/test/functional/lib/options.test.js index a94c0a2ef..8d421bb24 100644 --- a/test/functional/lib/options.test.js +++ b/test/functional/lib/options.test.js @@ -61,7 +61,7 @@ describe('storeMissingOptions()', function () { describe('hostTextToArray()', function () { it('should sort, dedup hostnames, drop non-FQDNs and produce an array', () => { - const text = `zombo.com\n two.com \n totally not a FQDN \none.pl \nTWO.com\n\n` + const text = 'zombo.com\n two.com \n totally not a FQDN \none.pl \nTWO.com\n\n' const array = ['one.pl', 'two.com', 'zombo.com'] expect(hostTextToArray(text)).to.be.an('array').to.have.ordered.members(array) }) @@ -70,7 +70,7 @@ describe('hostTextToArray()', function () { describe('hostArrayToText()', function () { it('should sort, deduplicate, drop non-FQDNs and produce multiline string', () => { const array = ['zombo.com ', 'two.com ', 'ONE.pl ', 'one.pl', 'totall not a FQDN', 'zombo.com'] - const text = `one.pl\ntwo.com\nzombo.com` + const text = 'one.pl\ntwo.com\nzombo.com' expect(hostArrayToText(array)).to.be.a('string').equal(text) }) }) diff --git a/test/functional/pages/proxy-access-dialog/page.test.js b/test/functional/pages/proxy-access-dialog/page.test.js index 59d1fa92b..7309a533b 100644 --- a/test/functional/pages/proxy-access-dialog/page.test.js +++ b/test/functional/pages/proxy-access-dialog/page.test.js @@ -14,7 +14,7 @@ describe('pages/proxy-access-dialog/page', () => { expect(() => { res = createProxyAccessDialogPage(i18n)(state).toString() }).to.not.throw() expect(res).to.have.string(`page_proxyAccessDialog_title[${state.scope},${state.permissions}]`) expect(res).to.have.string(`page_proxyAccessDialog_wildcardCheckbox_label[${state.scope}]`) - expect(res).to.have.string(`page_proxyAccessDialog_denyButton_text`) - expect(res).to.have.string(`page_proxyAccessDialog_allowButton_text`) + expect(res).to.have.string('page_proxyAccessDialog_denyButton_text') + expect(res).to.have.string('page_proxyAccessDialog_allowButton_text') }) }) From 2728436cafa796e9b62981296182816279b409b9 Mon Sep 17 00:00:00 2001 From: Marcin Rataj Date: Thu, 12 Sep 2019 19:23:21 +0200 Subject: [PATCH 13/16] fix(brave): provisional fix for /api/v0/add This switch to js-ipfs before PR-2379 https://github.com/ipfs/js-ipfs/pull/2379 switched ipfs.add to ipfs._addAsyncIterator and it broke /api/v0/add exposed by embedded js-ipfs in Brave. It seems old polyfills are no longer enough. Real fix requires more time to investigate, so for now we switch to version before js-ipfs/PR-2379. Used js-ipfs commit is from https://github.com/ipfs/js-ipfs/pull/2304 before it was rebased on top of master after PR-2379, making it the last safe version. Real fix will be tracked in https://github.com/ipfs-shipyard/ipfs-companion/issues/757 --- package.json | 4 +- yarn.lock | 112 +++++++++++++++++++++++++++++---------------------- 2 files changed, 65 insertions(+), 51 deletions(-) diff --git a/package.json b/package.json index d1e2fb12d..fa6885f4e 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "resolutions": { "libp2p-delegated-content-routing": "0.2.4", "libp2p-delegated-peer-routing": "0.2.4", - "@hapi/hapi": "https://github.com/lidel/hapi/tarball/fb8626fac0522f49fe29e2f4f686dfd8926204b6/hapi.tar.gz", + "@hapi/hapi": "https://github.com/lidel/hapi/tarball/0d73f8dde9fc7d518f477b8e04fe5abff1b33777/hapi.tar.gz", "iso-stream-http": "0.1.2", "stream-http": "npm:iso-stream-http@0.1.2", "pull-to-stream": "0.1.1", @@ -124,7 +124,7 @@ "get-port": "5.0.0", "http-dns": "3.0.1", "http-node": "1.2.0", - "ipfs": "https://github.com/ipfs/js-ipfs/tarball/cf38aead2b0cb0b5f269daf265a2b868c50a81f8/js-ipfs.tar.gz", + "ipfs": "https://github.com/ipfs/js-ipfs/tarball/ad65329253da333885b86c7927aa8f0a1e628551/js-ipfs.tar.gz", "ipfs-css": "0.13.1", "ipfs-http-client": "36.0.0", "ipfs-http-response": "0.3.1", diff --git a/yarn.lock b/yarn.lock index 85470837e..d203e6bbf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -879,9 +879,9 @@ resolved "https://registry.yarnpkg.com/@hapi/file/-/file-1.0.0.tgz#c91c39fd04db8bed5af82d2e032e7a4e65555b38" integrity sha512-Bsfp/+1Gyf70eGtnIgmScvrH8sSypO3TcK3Zf0QdHnzn/ACnAkI6KLtGACmNRPEzzIy+W7aJX5E+1fc9GwIABQ== -"@hapi/hapi@^18.3.1", "@hapi/hapi@^18.3.2", "@hapi/hapi@https://github.com/lidel/hapi/tarball/fb8626fac0522f49fe29e2f4f686dfd8926204b6/hapi.tar.gz": +"@hapi/hapi@^18.3.1", "@hapi/hapi@^18.3.2", "@hapi/hapi@https://github.com/lidel/hapi/tarball/0d73f8dde9fc7d518f477b8e04fe5abff1b33777/hapi.tar.gz": version "18.3.2" - resolved "https://github.com/lidel/hapi/tarball/fb8626fac0522f49fe29e2f4f686dfd8926204b6/hapi.tar.gz#a2276e2d746f0befd24d44af2d9775e7245aa55b" + resolved "https://github.com/lidel/hapi/tarball/0d73f8dde9fc7d518f477b8e04fe5abff1b33777/hapi.tar.gz#d34bafd4b1265720b58123384d6cfee93546325a" dependencies: "@hapi/accept" "3.x.x" "@hapi/ammo" "3.x.x" @@ -4311,6 +4311,13 @@ detective@^5.0.2: defined "^1.0.0" minimist "^1.1.1" +dicer@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.3.0.tgz#eacd98b3bfbf92e8ab5c2fdb71aaac44bb06b872" + integrity sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA== + dependencies: + streamsearch "0.1.2" + diff@3.5.0, diff@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -7329,15 +7336,13 @@ ipfs-http-client@^33.0.1, ipfs-http-client@^33.0.2: tar-stream "^2.0.1" through2 "^3.0.1" -ipfs-http-client@^35.1.0: - version "35.1.0" - resolved "https://registry.yarnpkg.com/ipfs-http-client/-/ipfs-http-client-35.1.0.tgz#53ee45c745840112c137ebe0d254dfba49c35283" - integrity sha512-C2726d79vydHRc1GdwIWsWnm29zhV568pmQdNru63StXdaDWeijexL4BwcLQi18/JPudT4s9iLTYU1ixIJIHCQ== +ipfs-http-client@^34.0.0: + version "34.0.0" + resolved "https://registry.yarnpkg.com/ipfs-http-client/-/ipfs-http-client-34.0.0.tgz#8804d06a11c22306332a8ffa0949b6f672a0c9c8" + integrity sha512-4RCkk8ix4Dqn6sxqFVwuXWCZ1eLFPsVaj6Ijvu1fs9VYgxgVudsW9PWwarlr4mw1xUCmPWYyXnEbGgzBrfMy0Q== dependencies: abort-controller "^3.0.0" async "^2.6.1" - async-iterator-all "^1.0.0" - async-iterator-to-pull-stream "^1.3.0" bignumber.js "^9.0.0" bl "^3.0.0" bs58 "^4.0.1" @@ -7350,10 +7355,9 @@ ipfs-http-client@^35.1.0: err-code "^2.0.0" explain-error "^1.0.4" flatmap "0.0.3" - fs-extra "^8.1.0" glob "^7.1.3" ipfs-block "~0.8.1" - ipfs-utils "^0.1.0" + ipfs-utils "~0.0.3" ipld-dag-cbor "~0.15.0" ipld-dag-pb "~0.17.3" ipld-raw "^4.0.0" @@ -7362,14 +7366,12 @@ ipfs-http-client@^35.1.0: is-stream "^2.0.0" iso-stream-http "~0.1.2" iso-url "~0.4.6" - it-glob "0.0.4" - it-to-stream "^0.1.1" iterable-ndjson "^1.1.0" just-kebab-case "^1.1.0" just-map-keys "^1.1.0" kind-of "^6.0.2" - ky "^0.13.0" - ky-universal "^0.3.0" + ky "^0.11.2" + ky-universal "^0.2.2" lru-cache "^5.1.1" multiaddr "^6.0.6" multibase "~0.6.0" @@ -7383,7 +7385,6 @@ ipfs-http-client@^35.1.0: promisify-es6 "^1.0.3" pull-defer "~0.2.3" pull-stream "^3.6.9" - pull-stream-to-async-iterator "^1.0.2" pull-to-stream "~0.1.1" pump "^3.0.0" qs "^6.5.2" @@ -7409,7 +7410,7 @@ ipfs-http-response@0.3.1, ipfs-http-response@~0.3.1: promisify-es6 "^1.0.3" stream-to-blob "^1.0.1" -ipfs-mfs@^0.12.2: +ipfs-mfs@~0.12.0: version "0.12.2" resolved "https://registry.yarnpkg.com/ipfs-mfs/-/ipfs-mfs-0.12.2.tgz#2e8d548aa0da699f6b11a3e1f1798c253a5a43cf" integrity sha512-o9vGKEdUI4HwQV67DQnC1AVSSs7i/yaIHrKPEb6Oe6vGeobLGuEGMReWjTcnMi5KAKUECFESEVtDuNJDr8BW5Q== @@ -7435,7 +7436,15 @@ ipfs-mfs@^0.12.2: promisify-es6 "^1.0.3" pull-stream "^3.6.9" -ipfs-multipart@^0.2.0, ipfs-multipart@~0.2.0: +ipfs-multipart@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ipfs-multipart/-/ipfs-multipart-0.1.1.tgz#a8c2ad93c3732c00558f50f254ba88a6aeaac6ae" + integrity sha512-NAmCxgBkZ0usWXf8lMwYYEXvyzrqa65uy/1caVKm5yOKFoqXNrNOt4Ev99Pb+B0RMRqGSdfSvtnZM1cfhSSk2A== + dependencies: + "@hapi/content" "^4.1.0" + dicer "~0.3.0" + +ipfs-multipart@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/ipfs-multipart/-/ipfs-multipart-0.2.0.tgz#f9bc27856dd94a2b4ca1d7f60311775b22638d9c" integrity sha512-pDCr7xtOW7KCqgeGmejfWjm5xPH516Kx4OU/PdbtIZu68/cFPW4jftJy9idQHdf0C/NnKHnqntMY93rbc+qrQg== @@ -7576,9 +7585,9 @@ ipfs-utils@~0.2.0: pull-stream-to-async-iterator "^1.0.2" readable-stream "^3.4.0" -"ipfs@https://github.com/ipfs/js-ipfs/tarball/cf38aead2b0cb0b5f269daf265a2b868c50a81f8/js-ipfs.tar.gz": +"ipfs@https://github.com/ipfs/js-ipfs/tarball/ad65329253da333885b86c7927aa8f0a1e628551/js-ipfs.tar.gz": version "0.38.0-pre.1" - resolved "https://github.com/ipfs/js-ipfs/tarball/cf38aead2b0cb0b5f269daf265a2b868c50a81f8/js-ipfs.tar.gz#90189b730a6e5123807891a606de7bf7a86c9538" + resolved "https://github.com/ipfs/js-ipfs/tarball/ad65329253da333885b86c7927aa8f0a1e628551/js-ipfs.tar.gz#63488a4ef5f865635f68beb61ae41db6829ab916" dependencies: "@hapi/ammo" "^3.1.1" "@hapi/boom" "^7.4.3" @@ -7617,10 +7626,10 @@ ipfs-utils@~0.2.0: ipfs-bitswap "~0.25.1" ipfs-block "~0.8.1" ipfs-block-service "~0.15.2" - ipfs-http-client "^35.1.0" + ipfs-http-client "^34.0.0" ipfs-http-response "~0.3.1" - ipfs-mfs "^0.12.2" - ipfs-multipart "^0.2.0" + ipfs-mfs "~0.12.0" + ipfs-multipart "~0.1.1" ipfs-repo "~0.26.6" ipfs-unixfs "~0.1.16" ipfs-unixfs-exporter "~0.37.7" @@ -7640,8 +7649,6 @@ ipfs-utils@~0.2.0: is-pull-stream "~0.0.0" is-stream "^2.0.0" iso-url "~0.4.6" - it-pipe "^1.0.1" - it-to-stream "^0.1.1" just-safe-set "^2.1.0" kind-of "^6.0.2" ky "~0.13.0" @@ -7651,7 +7658,7 @@ ipfs-utils@~0.2.0: libp2p-crypto "~0.16.0" libp2p-delegated-content-routing "^0.2.4" libp2p-delegated-peer-routing "^0.2.4" - libp2p-floodsub "^0.18.0" + libp2p-floodsub "^0.17.2" libp2p-gossipsub "~0.0.5" libp2p-kad-dht "~0.15.3" libp2p-keychain "~0.4.2" @@ -7667,7 +7674,7 @@ ipfs-utils@~0.2.0: merge-options "^1.0.1" mime-types "^2.1.21" mkdirp "~0.5.1" - mortice "^2.0.0" + mortice "^1.2.2" multiaddr "^6.1.0" multiaddr-to-uri "^5.0.0" multibase "~0.6.0" @@ -8431,11 +8438,6 @@ it-multipart@~0.0.2: buffer-indexof "^1.1.1" parse-headers "^2.0.2" -it-pipe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/it-pipe/-/it-pipe-1.0.1.tgz#6443f12e2a24dd71728c172eb58a159bb957095e" - integrity sha512-clx7NMIf4eXe3rp4dKLmT5vMYv/hvZv4lNi1/xx4ZJ8CFmpGod9rTKisyBNBTurbCEa3a7503COankdBj/uUCA== - it-to-stream@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/it-to-stream/-/it-to-stream-0.1.1.tgz#3fb4a9c4df868cd8f4aaf2071eba5ada5a3fad2a" @@ -8815,6 +8817,14 @@ klaw@^1.0.0: optionalDependencies: graceful-fs "^4.1.9" +ky-universal@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/ky-universal/-/ky-universal-0.2.2.tgz#7a36e1a75641a98f878157463513965f799f5bfe" + integrity sha512-fb32o/fKy/ux2ALWa9HU2hvGtfOq7/vn2nH0FpVE+jwNzyTeORlAbj3Fiw+WLMbUlmVqZIWupnLZ2USHvqwZHw== + dependencies: + abort-controller "^3.0.0" + node-fetch "^2.3.0" + ky-universal@^0.3.0, ky-universal@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/ky-universal/-/ky-universal-0.3.0.tgz#3fcbb0dd03da39b5f05100d9362a630d5e1d402e" @@ -8823,6 +8833,11 @@ ky-universal@^0.3.0, ky-universal@~0.3.0: abort-controller "^3.0.0" node-fetch "^2.6.0" +ky@^0.11.2: + version "0.11.2" + resolved "https://registry.yarnpkg.com/ky/-/ky-0.11.2.tgz#4ffe6621d9d9ab61bf0f5500542e3a96d1ba0815" + integrity sha512-5Aou5BWue5/mkPqIRqzSWW+0Hkl403pr/2AIrCKYw7cVl/Xoe8Xe4KLBO0PRjbz7GnRe1/8wW1KhqQNFFE7/GQ== + ky@^0.13.0, ky@~0.13.0: version "0.13.0" resolved "https://registry.yarnpkg.com/ky/-/ky-0.13.0.tgz#354c3d209f26d772415cbfe4f5d02ccbcb5ed536" @@ -9171,23 +9186,7 @@ libp2p-delegated-peer-routing@0.2.4, libp2p-delegated-peer-routing@^0.2.4: peer-id "^0.12.2" peer-info "^0.15.1" -libp2p-floodsub@^0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/libp2p-floodsub/-/libp2p-floodsub-0.18.0.tgz#49efd1a9936e898f62abbf041fa2f62049b796e0" - integrity sha512-4OihLP5A4LsxNPlfb0mq6vkjAaNu4YxuyYeoj2nNgrRSzr4H8Dz0YtA+DzEDXIgP2RBANSzS+KG9oDeUXDHa/Q== - dependencies: - async "^2.6.2" - bs58 "^4.0.1" - debug "^4.1.1" - length-prefixed-stream "^2.0.0" - libp2p-crypto "~0.16.1" - libp2p-pubsub "~0.2.0" - protons "^1.0.1" - pull-length-prefixed "^1.3.2" - pull-pushable "^2.2.0" - pull-stream "^3.6.9" - -libp2p-floodsub@~0.17.1: +libp2p-floodsub@^0.17.2, libp2p-floodsub@~0.17.1: version "0.17.2" resolved "https://registry.yarnpkg.com/libp2p-floodsub/-/libp2p-floodsub-0.17.2.tgz#c789bcd55cfb513a4d2f5291bd28d6aa2be271d1" integrity sha512-xOljtBcNTerBwRYFnXlJVmTwdYla9YTvBux6HaBE0GvVjPHqOI7gO5WJQ1Nul/7h5qLX5tJqZ4OY5CVn+mcuUQ== @@ -10301,6 +10300,16 @@ moment@^2.10.6: resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== +mortice@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/mortice/-/mortice-1.2.3.tgz#8e92963d67708dc229a98d5b65ebaa1fc4afb7fd" + integrity sha512-m285eSxSrbNieKgWWzGSbWO2oSoFHb2fdZX306afMVJ8p8boeAmUW5hCyZBC/gHuBMizR7wO9sXH74kZmf0ZbA== + dependencies: + observable-webworkers "^1.0.0" + p-queue "^6.0.0" + promise-timeout "^1.3.0" + shortid "^2.2.8" + mortice@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/mortice/-/mortice-2.0.0.tgz#7be171409c2115561ba3fc035e4527f9082eefde" @@ -10819,7 +10828,7 @@ node-environment-flags@1.0.5: object.getownpropertydescriptors "^2.0.3" semver "^5.7.0" -node-fetch@^2.2.0, node-fetch@^2.6.0: +node-fetch@^2.2.0, node-fetch@^2.3.0, node-fetch@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== @@ -14326,6 +14335,11 @@ stream-to-pull-stream@^1.7.2, stream-to-pull-stream@^1.7.3: looper "^3.0.0" pull-stream "^3.2.3" +streamsearch@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" + integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo= + strftime@~0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/strftime/-/strftime-0.10.0.tgz#b3f0fa419295202a5a289f6d6be9f4909a617193" From 114daeb84ff151ff495db8e3ab68bd0544c1b8ee Mon Sep 17 00:00:00 2001 From: Marcin Rataj Date: Thu, 12 Sep 2019 23:22:51 +0200 Subject: [PATCH 14/16] feat(brave): listen on TCP port - discovers free TCP port for incoming connections - discovers network IPs via WebRTC APIs provided by the browser --- .../embedded-chromesockets/config.js | 32 +++++++++++++++---- package.json | 3 +- yarn.lock | 12 +++++++ 3 files changed, 40 insertions(+), 7 deletions(-) diff --git a/add-on/src/lib/ipfs-client/embedded-chromesockets/config.js b/add-on/src/lib/ipfs-client/embedded-chromesockets/config.js index 180f2207c..bd3fc3160 100644 --- a/add-on/src/lib/ipfs-client/embedded-chromesockets/config.js +++ b/add-on/src/lib/ipfs-client/embedded-chromesockets/config.js @@ -7,12 +7,14 @@ const { optionDefaults } = require('../../options') const chromeSocketsBundle = require('./libp2p-bundle') const mergeOptions = require('merge-options') const getPort = require('get-port') +const { getIPv4, getIPv6 } = require('webrtc-ips') const multiaddr = require('multiaddr') const maToUri = require('multiaddr-to-uri') const multiaddr2httpUrl = (ma) => maToUri(ma.includes('/http') ? ma : multiaddr(ma).encapsulate('/http')) -const chromeSocketsOpts = { +// additional default js-ipfs config specific to runtime with chrome.sockets APIs +const chromeDefaultOpts = { config: { Addresses: { API: '/ip4/127.0.0.1/tcp/5003', @@ -22,10 +24,10 @@ const chromeSocketsOpts = { but Web UI needs API (can't use window.ipfs due to sandboxing) */ Swarm: [ - // TODO: listening on TCP (override IP and port at runtime in buildConfig()?) - '/ip4/0.0.0.0/tcp/0', - // optional ws-star signaling provides a backup non-LAN peer discovery - '/dns4/ws-star1.par.dwebops.pub.com/tcp/443/wss/p2p-websocket-star' + // optional ws-star signaling provides a backup for non-LAN peer discovery + // (this will be removed when autorelay and DHT are stable in js-ipfs) + '/dns4/ws-star1.par.dwebops.pub.com/tcp/443/wss/p2p-websocket-star', + '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star' ], // Delegated Content and Peer Routing: https://github.com/ipfs/js-ipfs/pull/2195 Delegates: // [] // TODO: enable delegates @@ -93,7 +95,25 @@ const chromeSocketsOpts = { async function buildConfig (opts, log) { const defaultOpts = JSON.parse(optionDefaults.ipfsNodeConfig) const userOpts = JSON.parse(opts.ipfsNodeConfig) - const ipfsNodeConfig = mergeOptions(defaultOpts, userOpts, chromeSocketsOpts, { start: false, libp2p: chromeSocketsBundle }) + const chromeOpts = JSON.parse(JSON.stringify(chromeDefaultOpts)) + + // find a free TCP port for incoming connections + const freeTcpPort = await getPort({ port: getPort.makeRange(4042, 4100) }) + // find out local network IPs + const ipv4 = await getIPv4() + const ipv6 = await getIPv6() + // add TCP multiaddrs + if (ipv4) { + chromeOpts.config.Addresses.Swarm.unshift(`/ip4/${ipv4}/tcp/${freeTcpPort}`) + } + if (ipv6) { + chromeOpts.config.Addresses.Swarm.unshift(`/ip6/${ipv6}/tcp/${freeTcpPort}`) + } + // append user-provided multiaddrs + chromeOpts.config.Addresses.Swarm = chromeOpts.config.Addresses.Swarm.concat(userOpts.config.Addresses.Swarm) + + // merge configs + const ipfsNodeConfig = mergeOptions(defaultOpts, userOpts, chromeOpts, { start: false, libp2p: chromeSocketsBundle }) // Detect when API or Gateway port is not available (taken by something else) // We find the next free port and update configuration to use it instead diff --git a/package.json b/package.json index fa6885f4e..18f921db6 100644 --- a/package.json +++ b/package.json @@ -146,7 +146,8 @@ "tachyons": "4.11.1", "timers-browserify-full": "0.0.1", "uri-to-multiaddr": "3.0.1", - "webextension-polyfill": "0.4.0" + "webextension-polyfill": "0.4.0", + "webrtc-ips": "0.1.4" }, "engines": { "node": ">=10.0.0", diff --git a/yarn.lock b/yarn.lock index d203e6bbf..9b2fe519d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12148,6 +12148,11 @@ prometheus-gc-stats@~0.6.0: optionalDependencies: gc-stats "^1.2.1" +promise-controller@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/promise-controller/-/promise-controller-0.3.0.tgz#e512a5059075a0c2dedd1488695412f0650c33f7" + integrity sha512-w1RTaOwD5bNtYjIj5L8+ruDtMgnKC0pLtOogA3kcS4LRtiwLOpAdokjYbkjJMa6AGV0oasHa8RRNa8qEpG1qyw== + promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" @@ -15703,6 +15708,13 @@ webpack@4.39.3: watchpack "^1.6.0" webpack-sources "^1.4.1" +webrtc-ips@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/webrtc-ips/-/webrtc-ips-0.1.4.tgz#c1806a1dd0a91ca01eeb44997ef2133c2a865e53" + integrity sha512-zjpkAmPDxkllbjprCa14s9bpqlb+pqe17T0+uF/SfJTM5XcgUdMP1RDwFcgANIYvZgYbkK075Ok+82YPodvm+A== + dependencies: + promise-controller "^0.3.0" + "webrtcsupport@github:ipfs/webrtcsupport": version "2.2.0" resolved "https://codeload.github.com/ipfs/webrtcsupport/tar.gz/0669f576582c53a3a42aa5ac014fcc5966809615" From 85ef1671656f187be922058f70743667e7501e59 Mon Sep 17 00:00:00 2001 From: Marcin Rataj Date: Thu, 12 Sep 2019 23:56:56 +0200 Subject: [PATCH 15/16] fix(brave): sync ipfsNodeConfig only when changed --- .../embedded-chromesockets/config.js | 45 +++++++++++-------- .../embedded-chromesockets/libp2p.js | 2 + 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/add-on/src/lib/ipfs-client/embedded-chromesockets/config.js b/add-on/src/lib/ipfs-client/embedded-chromesockets/config.js index bd3fc3160..b8d23e338 100644 --- a/add-on/src/lib/ipfs-client/embedded-chromesockets/config.js +++ b/add-on/src/lib/ipfs-client/embedded-chromesockets/config.js @@ -1,5 +1,4 @@ 'use strict' -/* eslint-env browser, webextensions */ const browser = require('webextension-polyfill') @@ -113,7 +112,11 @@ async function buildConfig (opts, log) { chromeOpts.config.Addresses.Swarm = chromeOpts.config.Addresses.Swarm.concat(userOpts.config.Addresses.Swarm) // merge configs - const ipfsNodeConfig = mergeOptions(defaultOpts, userOpts, chromeOpts, { start: false, libp2p: chromeSocketsBundle }) + const finalOpts = { + start: false, + libp2p: chromeSocketsBundle + } + const ipfsNodeConfig = mergeOptions(defaultOpts, userOpts, chromeOpts, finalOpts) // Detect when API or Gateway port is not available (taken by something else) // We find the next free port and update configuration to use it instead @@ -134,26 +137,30 @@ async function buildConfig (opts, log) { } async function syncConfig (ipfs, opts, log) { - const localConfig = await browser.storage.local.get('ipfsNodeConfig') - if (localConfig && localConfig.ipfsNodeConfig) { - const gwMa = await ipfs.config.get('Addresses.Gateway') - const apiMa = await ipfs.config.get('Addresses.API') - const httpGateway = multiaddr2httpUrl(gwMa) - const httpApi = multiaddr2httpUrl(apiMa) + const storedConfig = await browser.storage.local.get('ipfsNodeConfig') + if (storedConfig && storedConfig.ipfsNodeConfig) { + const maGw = await ipfs.config.get('Addresses.Gateway') + const maApi = await ipfs.config.get('Addresses.API') + const httpGw = multiaddr2httpUrl(maGw) + const httpApi = multiaddr2httpUrl(maApi) // update config in browser.storage to ports from js-ipfs instance - const ipfsNodeConfig = JSON.parse(localConfig.ipfsNodeConfig) - ipfsNodeConfig.config.Addresses.Gateway = gwMa - ipfsNodeConfig.config.Addresses.API = apiMa - const configChanges = { - customGatewayUrl: httpGateway, - ipfsApiUrl: httpApi, - ipfsNodeConfig: JSON.stringify(ipfsNodeConfig, null, 2) + const changes = { + customGatewayUrl: httpGw, + ipfsApiUrl: httpApi + } + // update ipfsNodeConfig if ports changed (eg. due to old port being busy) + const cfg = JSON.parse(storedConfig.ipfsNodeConfig) + if (maGw !== cfg.config.Addresses.Gateway || + maApi !== cfg.config.Addresses.API) { + cfg.config.Addresses.Gateway = maGw + cfg.config.Addresses.API = maApi + changes.ipfsNodeConfig = JSON.stringify(cfg, null, 2) } // update runtime config in place - Object.assign(opts, configChanges) - // update config in browser.storage (triggers async client restart if ports changed) - log(`synchronizing ipfsNodeConfig with customGatewayUrl (${configChanges.customGatewayUrl}) and ipfsApiUrl (${configChanges.ipfsApiUrl})`) - await browser.storage.local.set(configChanges) + Object.assign(opts, changes) + // save config to browser.storage (triggers async client restart if ports changed) + log(`synchronizing ipfsNodeConfig with customGatewayUrl (${changes.customGatewayUrl}) and ipfsApiUrl (${changes.ipfsApiUrl})`) + await browser.storage.local.set(changes) } } diff --git a/add-on/src/lib/ipfs-client/embedded-chromesockets/libp2p.js b/add-on/src/lib/ipfs-client/embedded-chromesockets/libp2p.js index 88a6abb2b..37693e982 100644 --- a/add-on/src/lib/ipfs-client/embedded-chromesockets/libp2p.js +++ b/add-on/src/lib/ipfs-client/embedded-chromesockets/libp2p.js @@ -1,3 +1,5 @@ +'use strict' + const TCP = require('libp2p-tcp') const MulticastDNS = require('libp2p-mdns') const WS = require('libp2p-websockets') From a62ac2665fcc097eb438d85d7dd8f842a0526f23 Mon Sep 17 00:00:00 2001 From: Marcin Rataj Date: Fri, 13 Sep 2019 20:14:42 +0200 Subject: [PATCH 16/16] docs: upate node types --- docs/node-types.md | 51 ++++++++++++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/docs/node-types.md b/docs/node-types.md index a1082d380..7b6518c17 100644 --- a/docs/node-types.md +++ b/docs/node-types.md @@ -1,16 +1,27 @@ # Node Types in IPFS Companion > ![screenshot of node type switch](https://user-images.githubusercontent.com/157609/42382479-b4d98768-8134-11e8-979c-69b758846bf0.png)
-> _IPFS Node Type selection_ ----- -> ### **TL;DR** when in doubt, run go-ipfs as _External_ node on your localhost: -> - [IPFS Desktop](https://github.com/ipfs-shipyard/ipfs-desktop) is a GUI app for Windows/Linux/Mac that installs and manages local IPFS node for you -> - If you prefer more on-hands approach: -> - install IPFS node by hand: [Getting Started](https://ipfs.io/docs/getting-started/) -> - or run it in [Docker](https://github.com/ipfs/go-ipfs#docker-usage) -## External +Available node types: + +- [External](#%EF%B8%8F-external) +- [Embedded](#%EF%B8%8F-embedded) +- [Embedded + `chrome.sockets`](#-embedded--chromesockets) +- [Public](#-public) + +## TL;DR + +When in doubt, use _External_ node running on your localhost: +- [IPFS Desktop](https://github.com/ipfs-shipyard/ipfs-desktop) is a GUI app for Windows/Linux/Mac that installs and manages local IPFS node for you +- If you prefer more hands-on approach: + - install IPFS by following [Getting Started](https://docs.ipfs.io/introduction/usage/) guide + - or run it in [Docker](https://github.com/ipfs/go-ipfs#docker-usage) +- If you are using [Brave](https://brave.com/), feel free to experiment with [Embedded + `chrome.sockets`](#-embedded--chromesockets). + You can always switch back to _External_ with local IPFS Desktop + + +## 🛰️ External _External_ node can be any instance of IPFS daemon that runs outside of web browser process and exposes _Gateway_ and writable _API_ over HTTP at TCP ports. @@ -28,7 +39,7 @@ A good practice is to run it on localhost (`127.0.0.1`) as it provides: Don't know where to start? See [Getting Started](https://ipfs.io/docs/getting-started/) instructions. -## Embedded +## 🏗️ Embedded _Embedded_ node is a js-ipfs instance running in browser (in-memory), without need for any external software. @@ -59,20 +70,26 @@ Power users can provide [custom config](https://github.com/ipfs/js-ipfs#faq) (eg When in doubt, run go-ipfs as External node instead. -## Embedded + `chrome.sockets` +## 🦄 Embedded + `chrome.sockets` This node type replaces regular _Embedded_ type if browser vendor granted us access to `chrome.sockets` APIs. -Those powerful APIs enable exciting possibilities: +Those powerful APIs enable embedded js-ipfs to provide true p2p experience without the need for external daemon: + +### 🚪 HTTP Gateway +- access IPFS resources over HTTP without relying on a public gateway +- automatically picks a free localhost port + +### 🚄 TCP transport +- embedded js-ipfs is able to connect to go-ipfs +- go-ipfs is able to connect to embedded js-ipfs -- Embedded HTTP Gateway [wip] -- True P2P over TCP/UDP transports [future] -- Local Discovery (mDNS/DNS-SD) [future] +### 🔮 Local Discovery (mDNS/DNS-SD) -**Note:** this is still work in progress: one can track progress in [ipfs-companion/issues/664](https://github.com/ipfs-shipyard/ipfs-companion/issues/664). -Right now only [Brave Nightly](https://brave.com/download-nightly/) supports this. +- embedded node discovers go-ipfs in LAN and automatically connects to it +**Note:** this is still work in progress, see [Embedded JS-IPFS in Brave](https://github.com/ipfs-shipyard/ipfs-companion/issues/716) for the current status. -## Public +## 🌐 Public Public node is not a part of the toggle UI. It is used as an implicit fallback for its Gateway functionality when External node is offline or Embedded node is used. It does not expose API port.