diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..7d1f5a3
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,4 @@
+root = true
+[*/**.js]
+indent_style = space
+indent_size = 2
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 0000000..0f8e856
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,84 @@
+name: Test
+
+on: push
+
+jobs:
+ linux:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Check out Git repository
+ uses: actions/checkout@v1
+
+ - name: Install Node.js, NPM and Yarn
+ uses: actions/setup-node@v1
+ with:
+ node-version: 12.13.1
+
+ - name: Yarn install
+ run: |
+ yarn install --frozen-lockfile --network-timeout 300000
+
+ - name: Install ffmpeg & chromaprint
+ run: |
+ sudo apt-get install software-properties-common
+ sudo add-apt-repository -y ppa:savoury1/ffmpeg4
+ sudo apt-get update
+ sudo apt-get install libchromaprint-tools ffmpeg
+
+ - name: Test & Lint
+ run: |
+ yarn lint
+ yarn test
+
+ # 'NODE_ENV' is not recognized as an internal or external command
+ # windows:
+ # runs-on: windows-latest
+ # steps:
+ # - name: Check out Git repository
+ # uses: actions/checkout@v1
+
+ # - name: Install Node.js, NPM and Yarn
+ # uses: actions/setup-node@v1
+ # with:
+ # node-version: 12.13.1
+
+ # - name: Yarn install
+ # run: |
+ # yarn install --frozen-lockfile --network-timeout 300000
+
+ # - name: Install ffmpeg & chromaprint
+ # run: |
+ # choco install ffmpeg chromaprint
+
+ # - name: Test & Lint
+ # run: |
+ # yarn lint
+ # yarn test
+
+ mac:
+ runs-on: macos-latest
+ steps:
+ - name: Check out Git repository
+ uses: actions/checkout@v1
+
+ - name: Install Node.js, NPM and Yarn
+ uses: actions/setup-node@v1
+ with:
+ node-version: 12.13.1
+
+ - name: Yarn install
+ run: |
+ yarn install --frozen-lockfile --network-timeout 300000
+
+ - uses: FedericoCarboni/setup-ffmpeg@v1
+ with:
+ token: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Install chromaprint
+ run: |
+ brew install chromaprint
+
+ - name: Test & Lint
+ run: |
+ yarn lint
+ yarn test
diff --git a/.gitignore b/.gitignore
index ad1bf06..1855f70 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,7 @@ yarn-error.log
# App specific
#
+orbitdb/
+keystore/
+cache/
+test/tmp/nodes
diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
index 0000000..b442934
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
index b2aaa18..91fd96b 100644
--- a/README.md
+++ b/README.md
@@ -1,21 +1,44 @@
+
+
+
+
# Record Node
[](LICENSE) [](https://standardjs.com) [](https://github.com/RichardLitt/standard-readme)
+[](https://circleci.com/gh/mistakia/record-node)
+[](https://app.fossa.io/projects/git%2Bgithub.com%2Fmistakia%2Frecord-node?ref=badge_shield)
> Library, CLI and REST API for Record.
-A proof of concept distributed social & music application (library, sharing, discovery & curation) network built entirely on [IPFS](https://github.com/ipfs/js-ipfs). User data is stored via a [scuttlebot](http://scuttlebot.io/)-like immutable log via [IPFS-Log](https://github.com/orbitdb/ipfs-log) & [OrbitDB](https://github.com/orbitdb/orbit-db).
+Record is a proof of concept immutable distributed system for audio files. Built entirely on [IPFS](https://github.com/ipfs/js-ipfs), user data is stored in a [scuttlebot](http://scuttlebot.io/)-esque immutable log via [IPFS-Log](https://github.com/orbitdb/ipfs-log) & [OrbitDB](https://github.com/orbitdb/orbit-db). Bootstraping/peer discovery is done via [bitboot](https://github.com/tintfoundation/bitboot).
+
+At it's core, the application intends to be a media library management & playback system akin to [beets](https://github.com/beetbox/beets) with the ability to join various sources of music like [tomahawk player](https://github.com/tomahawk-player/tomahawk). By building everything on top of IPFS, it can become a connected network of libraries, opening the door to many other possibilities (i.e. soundcloud & musicbrainz), while still being entirely distributed and thus being able to function permanently.
+
+*Note: View the [UI/UX repo](https://github.com/mistakia/record-app) for more information.*
+
+## Install Dependencies
+```
+yarn install
+```
+
+### Install Chromaprint & FFmpeg
+
+Note: fpcalc ([chromaprint](https://github.com/acoustid/chromaprint)) must be installed to be able to import audio files.
+##### OSX using Homebrew
+```
+brew install chromaprint ffmpeg
+```
-## Install
+##### Ubuntu
```
-npm install
+sudo apt-get install libchromaprint-tools
```
## Usage
### Running
```
-npm run start
+yarn start
```
### CLI
@@ -30,32 +53,47 @@ wip
### Module
```js
-const IPFS = require('ipfs')
const RecordNode = require('record-node')
-const OrbitDB = require('orbit-db')
+const createIPFSDaemon = require('record-ipfsd')
-const ipfs = new IPFS()
-ipfs.on('ready', async () => {
- const rn = new RecordNode(ipfs, OrbitDB)
+const ipfsd = await createIPFSDaemon({
+ repo: repoPath,
+ ipfsBin: ipfsBinPath
+})
- await rn.loadLog() // or rn.loadLog('/me')
- // User's log loaded
+const node = new RecordNode()
+node.on('ready', async () => {
+ const log = await node.log.get() // or node.log.get(record.address)
})
+await node.init(ipfsd)
```
## API
### RecordNode Constructor
```js
-const rn = new RecordNode(ipfs, OrbitDB, options)
+const record = new RecordNode(options)
```
-Use the `options` argument to specify configuration. It is an object with any of these properties:
-- `orbitPath` (string): The file path passed to OrbitDB. (Default: `undefined`)
-- `orbitAddress` (string): Valid OrbitDB database address. (Default: `undefined`)
-- `api` (boolean or object): Initialize the api when creating Record Node instance (Default: `undefined`)
-- `logConfig` (object): Options passed to OrbitDB when creating log.
- - `create` (boolean): Wether or not to create db if given just a db name (Default: `true`)
- - `replicate` (boolean): Subscribe to updates via IPFS pubsub (Default: `true`)
- - `replicationConcurrency` (integer): (Default: `128`)
+View default options at [`config.js`](https://github.com/mistakia/record-node/blob/master/config.js). Use the `options` argument to specify configuration. It is an object with any of these properties:
+
+##### `options.api`
+
+| Type | Default |
+|------|---------|
+| boolean | `false` |
+| object | `{ port: 3000 }` |
+
+Enable http api (Default: `undefined`)
+
+##### `options.bitboot`
+
+| Type | Default |
+|------|---------|
+| object | `{ enabled: true }` |
+
+Enable finding peers via [bitboot](https://github.com/tintfoundation/bitboot)
## License
MIT
+
+
+[](https://app.fossa.io/projects/git%2Bgithub.com%2Fmistakia%2Frecord-node?ref=badge_large)
diff --git a/api.js b/api.js
deleted file mode 100644
index fe0fbc9..0000000
--- a/api.js
+++ /dev/null
@@ -1,43 +0,0 @@
-const express = require('express')
-const morgan = require('morgan-debug')
-const bodyParser = require('body-parser')
-const extend = require('deep-extend')
-
-const logsRouter = require('./routes/logs')
-const infoRouter = require('./routes/info')
-const resolveRouter = require('./routes/resolve')
-
-const defaults = {
- port: 3000
-}
-
-module.exports = (self) => {
- const app = express()
-
- const options = extend(defaults, self._options.api)
-
- app.locals.orbitdb = self._orbitdb
- app.locals.ipfs = self._ipfs
- app.locals.log = self._log
- app.locals.loadLog = self.loadLog.bind(self)
- app.locals.resolve = self.resolve
- app.locals.info = self.info
-
- app.use(morgan('record:node:api', 'combined'))
- app.use(bodyParser.json())
-
- app.use((req, res, next) => {
- res.header('Access-Control-Allow-Origin', '*')
- res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept')
- next()
- })
-
- app.use('/logs', logsRouter)
- app.use('/info', infoRouter)
- app.use('/resolve', resolveRouter)
-
- const { port } = options
- app.listen(port, () => self.logger(`API listening on port ${port}`))
-
- return app
-}
diff --git a/benchmark/benchmarks/add-tracks.js b/benchmark/benchmarks/add-tracks.js
new file mode 100644
index 0000000..2410963
--- /dev/null
+++ b/benchmark/benchmarks/add-tracks.js
@@ -0,0 +1,30 @@
+const { startRecord, createTrack } = require('../../test/utils')
+
+const base = {
+ prepare: async function () {
+ return startRecord('0')
+ },
+ cycle: async function ({ record }, { count }) {
+ await record.tracks.add(createTrack(`Hello${count}`))
+ },
+ teardown: async function ({ record }) {
+ await record.stop()
+ }
+}
+
+const baseline = {
+ while: ({ stats, startTime, baselineLimit }) => {
+ return stats.count < baselineLimit
+ }
+}
+
+const stress = {
+ while: ({ stats, startTime, stressLimit }) => {
+ return process.hrtime(startTime)[0] < stressLimit
+ }
+}
+
+module.exports = [
+ { name: 'add-tracks-baseline', ...base, ...baseline },
+ { name: 'add-tracks-stress', ...base, ...stress }
+]
diff --git a/benchmark/benchmarks/index.js b/benchmark/benchmarks/index.js
new file mode 100644
index 0000000..7f1a298
--- /dev/null
+++ b/benchmark/benchmarks/index.js
@@ -0,0 +1,19 @@
+const addTracks = require('./add-tracks')
+const listTracks = require('./list-tracks')
+
+// TODO add links
+// TODO list links
+// TODO listens
+// TODO list tags
+// TODO list listens
+// TODO remove tracks
+// TODO remove tags
+// TODO remove links
+
+// TODO replicate
+// TODO process index
+
+module.exports = [
+ ...addTracks,
+ ...listTracks
+]
diff --git a/benchmark/benchmarks/list-tracks.js b/benchmark/benchmarks/list-tracks.js
new file mode 100644
index 0000000..359b869
--- /dev/null
+++ b/benchmark/benchmarks/list-tracks.js
@@ -0,0 +1,43 @@
+const { startRecord, createTrack } = require('../../test/utils')
+
+const base = {
+ prepare: async function () {
+ const { record } = await startRecord('0')
+
+ process.stdout.clearLine()
+ for (let i = 1; i < this.count + 1; i++) {
+ process.stdout.write(`\r${this.name} - Preparing - Writing: ${i}/${this.count}`)
+ await record.tracks.add(createTrack(`Hello${i}`))
+ }
+
+ return { record }
+ },
+ cycle: async function ({ record }, { count }) {
+ await record.tracks.list({ addresses: [record.address] })
+ },
+ teardown: async function ({ record }) {
+ await record.stop()
+ }
+}
+
+const baseline = {
+ while: ({ stats, startTime, baselineLimit }) => {
+ return stats.count < baselineLimit
+ }
+}
+
+const stress = {
+ while: ({ stats, startTime, stressLimit }) => {
+ return process.hrtime(startTime)[0] < stressLimit
+ }
+}
+
+const counts = [100, 500, 1000]
+const benchmarks = []
+for (const count of counts) {
+ const c = { count }
+ benchmarks.push({ name: `list-tracks-${count}-baseline`, ...base, ...c, ...baseline })
+ benchmarks.push({ name: `list-tracks-${count}-stress`, ...base, ...c, ...stress })
+}
+
+module.exports = benchmarks
diff --git a/benchmark/cli.js b/benchmark/cli.js
new file mode 100644
index 0000000..d1c8bbf
--- /dev/null
+++ b/benchmark/cli.js
@@ -0,0 +1,67 @@
+#!/usr/bin/env node
+
+const { start } = require('./index')
+
+const yargs = require('yargs')
+const argv = yargs
+ .usage('OrbitDB benchmark runner\n\nUsage: node --expose-gc $0 [options]')
+ .version(false)
+ .help('help').alias('help', 'h')
+ .options({
+ baseline: {
+ alias: 'b',
+ description: 'Run baseline benchmarks only',
+ boolean: true,
+ requiresArg: false,
+ required: false
+ },
+ report: {
+ alias: 'r',
+ description: 'Output report (Default: false)',
+ requiresArg: false,
+ boolean: true,
+ required: false
+ },
+ list: {
+ alias: 'l',
+ description: 'List all benchmarks',
+ requiresArg: false,
+ required: false,
+ boolean: true
+ },
+ grep: {
+ alias: 'g',
+ description: ' Regular expression used to match benchmarks (Default: /.*/)',
+ requiresArg: true,
+ required: false
+ },
+ stressLimit: {
+ description: ' seconds to run a stress benchmark (Default: 300)',
+ requiresArg: true,
+ required: false
+ },
+ baselineLimit: {
+ description: ' benchmark cycle limit for baseline benchmarks (Default: 1000)',
+ requiresArg: true,
+ required: false
+ },
+ logLimit: {
+ description: ' max log size used for baseline benchmarks (inclusive) (Default: 10000)',
+ requiresArg: true,
+ required: false
+ }
+ })
+ .example('$0 -r -g append-baseline', 'Run a single benchmark (append-baseline)')
+ .example('$0 -r -g values-.*-baseline', 'Run all of the values baseline benchmarks')
+ .argv
+
+// Was this called directly from the CLI?
+// For mocha tests - maybe we can mitigate this but for now it works
+if (require.main === module) {
+ try {
+ const benchmarks = require('./benchmarks')
+ start(benchmarks, argv)
+ } catch (e) {
+ throw new Error(e.message)
+ }
+}
diff --git a/benchmark/index.js b/benchmark/index.js
new file mode 100644
index 0000000..550c094
--- /dev/null
+++ b/benchmark/index.js
@@ -0,0 +1,117 @@
+require('expose-gc')
+global.gc()
+
+const os = require('os')
+
+const report = require('./report')
+
+const BASELINE_GREP = /[\d\w-]*-baseline/
+const DEFAULT_GREP = /.*/
+
+// TODO: Remove all OS-specific bindings here
+const start = async (benchmarks, argv) => {
+ if (argv.list) {
+ benchmarks.forEach(b => console.log(b.name))
+ return
+ }
+
+ const grep = argv.grep ? new RegExp(argv.grep) : DEFAULT_GREP
+ const stressLimit = argv.stressLimit || 5
+ const logLimit = argv.logLimit || 10000
+ const baselineLimit = argv.baselineLimit || 1000
+ const results = []
+ const baselineOnly = argv.baseline
+ const runnerStartTime = process.hrtime()
+
+ process.stdout.write(`Running ${baselineOnly ? 'baseline ' : ''}benchmarks matching: ${grep}`)
+ process.stdout.write('\n')
+
+ try {
+ for (const benchmark of benchmarks) {
+ benchmark.stressLimit = stressLimit
+ benchmark.baselineLimit = baselineLimit
+
+ if (baselineOnly && !BASELINE_GREP.test(benchmark.name)) {
+ continue
+ }
+
+ if (!grep.test(benchmark.name)) {
+ continue
+ }
+
+ if (benchmark.count && benchmark.count > logLimit) {
+ continue
+ }
+
+ const result = await runOne(benchmark)
+ results.push(result)
+ }
+
+ const runnerElapsed = getElapsed(process.hrtime(runnerStartTime))
+ let output = `\rCompleted ${results.length} benchmark${results.length > 1 ? 's' : ''}`
+ output += ` in ${(runnerElapsed / 1000000000).toFixed(2)} seconds`
+ process.stdout.write(output)
+
+ if (argv.report) {
+ report(results)
+ }
+ } catch (e) {
+ console.log(e)
+ }
+
+ process.exit()
+}
+
+const getElapsed = (time) => {
+ return +time[0] * 1e9 + +time[1]
+}
+
+const runOne = async (benchmark) => {
+ const { stressLimit, baselineLimit } = benchmark
+
+ const stats = {
+ count: 0
+ }
+
+ if (global.gc) {
+ global.gc()
+ }
+
+ const memory = {
+ before: process.memoryUsage()
+ }
+
+ process.stdout.write(`\r${benchmark.name} / Preparing`)
+ const params = await benchmark.prepare()
+
+ process.stdout.clearLine()
+ const startTime = process.hrtime() // eventually convert to hrtime.bigint
+ while (benchmark.while({ stats, startTime, stressLimit, baselineLimit })) {
+ const elapsed = getElapsed(process.hrtime(startTime))
+ const totalSeconds = (elapsed / 1000000000).toFixed(4)
+ const opsPerSec = (stats.count / totalSeconds).toFixed(4)
+ process.stdout.write(`\r${benchmark.name} / Cycles: ${stats.count} (${opsPerSec.toString()} ops/sec)`)
+ await benchmark.cycle(params, stats)
+ stats.count++
+ }
+
+ const elapsed = getElapsed(process.hrtime(startTime))
+ memory.after = process.memoryUsage()
+
+ process.stdout.write(`\r${benchmark.name} / Finishing`)
+ await benchmark.teardown(params)
+ process.stdout.clearLine()
+
+ return {
+ name: benchmark.name,
+ cpus: os.cpus(),
+ loadavg: os.loadavg(),
+ elapsed,
+ stats,
+ memory
+ }
+}
+
+module.exports = {
+ start
+}
diff --git a/benchmark/report.js b/benchmark/report.js
new file mode 100644
index 0000000..55bfe62
--- /dev/null
+++ b/benchmark/report.js
@@ -0,0 +1,69 @@
+const repeatStr = (str, len) => {
+ return Array.apply(null, { length: len + 1 }).join(str).slice(0, len)
+}
+
+const padStr = (str, max) => {
+ str = String(str)
+ const length = max - str.length
+ if (length <= 0) return str
+ return str + repeatStr(' ', length)
+}
+
+const reporter = (results) => {
+ const reports = [{
+ name: 'Benchmark Name',
+ ops: 'Ops / ms',
+ totalMs: 'Total ms',
+ mem: 'Used Mem (MB)'
+ }]
+ let maxNameWidth = 0
+ let maxOpsWidth = reports[0].ops.length
+ let maxTotalWidth = reports[0].totalMs.length
+ let maxMemWidth = reports[0].mem.length
+
+ for (const benchmark of results) {
+ const nameWidth = benchmark.name.length
+ if (maxNameWidth < nameWidth) {
+ maxNameWidth = nameWidth
+ }
+
+ const totalMs = (benchmark.elapsed / 1000000).toFixed(4)
+ const opsPerMs = (benchmark.stats.count / totalMs).toFixed(4)
+ const memUsed = benchmark.memory.after.heapUsed - benchmark.memory.before.heapUsed
+ const memUsedMb = (memUsed / 1024 / 1024).toFixed(2)
+
+ const opsWidth = opsPerMs.toString().length
+ if (maxOpsWidth < opsWidth) {
+ maxOpsWidth = opsWidth
+ }
+ const totalWidth = totalMs.toString().length
+ if (maxTotalWidth < totalWidth) {
+ maxTotalWidth = totalWidth
+ }
+ const memWidth = memUsedMb.toString().length
+ if (maxMemWidth < memWidth) {
+ maxMemWidth = memWidth
+ }
+
+ reports.push({
+ name: benchmark.name,
+ ops: opsPerMs,
+ totalMs: totalMs,
+ mem: memUsedMb
+ })
+ }
+
+ process.stdout.write('\n')
+
+ const colSpacing = ' '
+ for (const report of reports) {
+ let output = `\n${padStr(report.name, maxNameWidth)}`
+ output += `${colSpacing}${padStr(report.ops, maxOpsWidth)}`
+ output += `${colSpacing}${padStr(report.mem, maxMemWidth)}`
+ output += `${colSpacing}${padStr(report.totalMs, maxTotalWidth)}`
+
+ process.stdout.write(output)
+ }
+}
+
+module.exports = reporter
diff --git a/bin/cli.js b/bin/cli.js
new file mode 100755
index 0000000..d1edf35
--- /dev/null
+++ b/bin/cli.js
@@ -0,0 +1,63 @@
+#!/usr/bin/env node
+process.on('unhandledRejection', error => console.log(error))
+
+const os = require('os')
+const fs = require('fs')
+const path = require('path')
+const createIPFSDaemon = require('record-ipfsd')
+const argv = require('yargs').argv
+
+const RecordNode = require('../index')
+
+const getIpfsBinPath = () => require('go-ipfs').path()
+
+const name = `record${(argv.name || argv.n || '')}`
+console.log(`[cli] Node Name: ${name}`)
+
+const recorddir = path.resolve(os.homedir(), `./.${name}`)
+if (!fs.existsSync(recorddir)) { fs.mkdirSync(recorddir) }
+console.log(`[cli] Node Path: ${recorddir}`)
+
+const opts = { directory: recorddir }
+const id = argv.id
+console.log(`[cli] Node Id: ${id}`)
+
+if (id) {
+ opts.id = id
+}
+
+if (argv.api) {
+ const port = argv.port || 8080
+ opts.api = { port }
+}
+
+const main = async () => {
+ const ipfsd = await createIPFSDaemon({
+ repo: path.resolve(recorddir, 'ipfs'),
+ ipfsBin: getIpfsBinPath()
+ })
+
+ const record = new RecordNode(opts)
+ record.on('ready', async (data) => {
+ console.log('[cli]', data)
+ try {
+ const aboutData = {
+ name: `${name}`,
+ bio: 'dweb > web',
+ location: 'not on the world wide web'
+ }
+ const about = await record.about.set(aboutData)
+ console.log('[cli]', about)
+ } catch (e) {
+ console.log(e)
+ }
+ })
+
+ await record.init(ipfsd)
+}
+
+try {
+ main()
+} catch (e) {
+ console.log(e)
+}
diff --git a/bin/run.js b/bin/run.js
deleted file mode 100644
index f6a600f..0000000
--- a/bin/run.js
+++ /dev/null
@@ -1,65 +0,0 @@
-const os = require('os')
-const fs = require('fs')
-const path = require('path')
-
-const debug = require('debug')
-const Logger = require('logplease')
-const IPFS = require('ipfs')
-const OrbitDB = require('orbit-db')
-
-const RecordNode = require('../index')
-
-debug.enable('record:*,jsipfs')
-Logger.setLogLevel(Logger.LogLevels.DEBUG)
-
-const recorddir = path.resolve(os.homedir(), './.record')
-if (!fs.existsSync(recorddir)) { fs.mkdirSync(recorddir) }
-
-const connManagerConfig = {
- maxPeers: 10,
- pollInterval: 30000
-}
-
-const ipfsConfig = {
- repo: path.resolve(recorddir, './ipfs'),
- init: true,
- EXPERIMENTAL: {
- dht: false, // TODO: BRICKS COMPUTER
- relay: {
- enabled: true,
- hop: {
- enabled: false, // TODO: CPU hungry on mobile
- active: false
- }
- },
- pubsub: true
- },
- config: {
- Bootstrap: [],
- Addresses: {
- Swarm: [
- // '/ip4/0.0.0.0/tcp/4002',
- // '/ip4/0.0.0.0/tcp/4003/ws',
- // '/dns4/star-signal.cloud.ipfs.team/wss/p2p-webrtc-star',
- '/ip4/159.203.117.254/tcp/9090/ws/p2p-websocket-star'
- // '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'
- ]
- }
- }
-}
-
-const ipfs = new IPFS(ipfsConfig)
-
-ipfs.on('ready', async () => {
- const opts = {
- orbitPath: path.resolve(recorddir, './orbitdb'),
- api: {
- port: 8080
- }
- }
-
- const rn = new RecordNode(ipfs, OrbitDB, opts)
-
- await rn.loadLog()
- // ready
-})
diff --git a/components/about.js b/components/about.js
new file mode 100644
index 0000000..c3eeb30
--- /dev/null
+++ b/components/about.js
@@ -0,0 +1,41 @@
+const { sha256 } = require('../utils')
+
+module.exports = function about (self) {
+ return {
+ set: async function ({ name = null, bio = null, location = null, avatar = null }, { address = self.address } = {}) {
+ const rows = await self._db('logs')
+ .where({ address, name, bio, location, avatar })
+
+ if (!rows.length) {
+ const log = await self.log.get(address)
+ const data = { name, bio, location, avatar }
+ await log.about.put(data)
+ self.peers._announceLogs()
+ }
+
+ return self.about.get(address)
+ },
+ get: async (address) => {
+ self.logger.info(`[node] get about for: ${address}`)
+ const index = await self._db('entries')
+ .where({ address, type: 'about' })
+ .orderBy('clock', 'desc')
+ .orderBy('timestamp', 'desc')
+ .limit(1)
+
+ const log = await self.log.get(address, { replicate: false })
+ const entry = index.length ? await log.getEntryWithContent(index[0].hash) : undefined
+ const entryValue = entry ? entry.payload.value : { content: {} }
+
+ if (!entryValue.id) {
+ entryValue.id = sha256(log.address.toString())
+ }
+
+ if (!entryValue.content.address) {
+ entryValue.content.address = log.address.toString()
+ }
+
+ return entryValue
+ }
+ }
+}
diff --git a/components/api/index.js b/components/api/index.js
new file mode 100644
index 0000000..aa70cab
--- /dev/null
+++ b/components/api/index.js
@@ -0,0 +1,50 @@
+const express = require('express')
+const morgan = require('morgan')
+const bodyParser = require('body-parser')
+const extend = require('deep-extend')
+
+const routes = require('./routes')
+
+const defaults = {
+ port: 3000
+}
+
+module.exports = (self) => {
+ const app = express()
+ const options = extend(defaults, self._options.api)
+
+ app.locals.record = self
+
+ app.use(morgan('combined', {
+ stream: {
+ write: (msg) => self.logger.info(`[node][api] ${msg}`)
+ }
+ }))
+ app.use(bodyParser.json())
+
+ app.use((req, res, next) => {
+ res.header('Access-Control-Allow-Origin', '*')
+ res.header('Access-Control-Allow-Methods', 'GET, POST, DELETE, OPTIONS')
+ res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept')
+ next()
+ })
+
+ app.use('/about', routes.about) // TODO (low) move to /log
+ app.use('/connect', routes.connect)
+ app.use('/log', routes.log)
+ app.use('/logs', routes.logs)
+ app.use('/disconnect', routes.disconnect)
+ app.use('/export', routes.export)
+ app.use('/import', routes.import)
+ app.use('/listens', routes.listens)
+ app.use('/peers', routes.peers)
+ app.use('/resolve', routes.resolve)
+ app.use('/tags', routes.tags)
+ app.use('/file', routes.file)
+ app.use('/tracks', routes.tracks)
+ app.use('/settings', routes.settings)
+ app.use('/importer', routes.importer)
+
+ const { port } = options
+ return app.listen(port, () => self.logger.info(`[node] api listening on port: ${port}`))
+}
diff --git a/components/api/routes/about.js b/components/api/routes/about.js
new file mode 100644
index 0000000..8331395
--- /dev/null
+++ b/components/api/routes/about.js
@@ -0,0 +1,18 @@
+const express = require('express')
+const router = express.Router()
+
+router.post('/?', async (req, res) => {
+ try {
+ const { name, bio, location } = req.body
+ const { record } = req.app.locals
+ const about = await record.about.set({ name, bio, location })
+ const { address } = about.content
+ const data = await record.logs.get({ sourceAddress: address, targetAddress: address })
+ res.send(data)
+ } catch (err) {
+ req.app.locals.record.logger.error(err)
+ res.status(500).send({ error: err.toString() })
+ }
+})
+
+module.exports = router
diff --git a/components/api/routes/connect.js b/components/api/routes/connect.js
new file mode 100644
index 0000000..6590df9
--- /dev/null
+++ b/components/api/routes/connect.js
@@ -0,0 +1,16 @@
+const express = require('express')
+const router = express.Router()
+
+router.get(':address(*)', async (req, res) => {
+ try {
+ const { address } = req.params
+ const { record } = req.app.locals
+ await record.logs.connect(address)
+ res.send({ success: true })
+ } catch (err) {
+ req.app.locals.record.logger.error(err)
+ res.status(500).send({ error: err.toString() })
+ }
+})
+
+module.exports = router
diff --git a/components/api/routes/disconnect.js b/components/api/routes/disconnect.js
new file mode 100644
index 0000000..940e445
--- /dev/null
+++ b/components/api/routes/disconnect.js
@@ -0,0 +1,16 @@
+const express = require('express')
+const router = express.Router()
+
+router.get(':address(*)', async (req, res) => {
+ try {
+ const { address } = req.params
+ const { record } = req.app.locals
+ await record.logs.disconnect(address)
+ res.send({ success: true })
+ } catch (err) {
+ req.app.locals.record.logger.error(err)
+ res.status(500).send({ error: err.toString() })
+ }
+})
+
+module.exports = router
diff --git a/components/api/routes/export.js b/components/api/routes/export.js
new file mode 100644
index 0000000..649f2c7
--- /dev/null
+++ b/components/api/routes/export.js
@@ -0,0 +1,15 @@
+const express = require('express')
+const router = express.Router()
+
+router.get('/?', async (req, res) => {
+ try {
+ const { record } = req.app.locals
+ const keys = await record.getKeys()
+ res.send(keys)
+ } catch (err) {
+ req.app.locals.record.logger.error(err)
+ res.status(500).send({ error: err.toString() })
+ }
+})
+
+module.exports = router
diff --git a/components/api/routes/file.js b/components/api/routes/file.js
new file mode 100644
index 0000000..1ba97d6
--- /dev/null
+++ b/components/api/routes/file.js
@@ -0,0 +1,94 @@
+const express = require('express')
+const fileType = require('file-type')
+const mime = require('mime-types')
+const peek = require('buffer-peek-stream')
+const toStream = require('it-to-stream')
+const { CID } = require('ipfs-http-client')
+
+const router = express.Router()
+
+const detectContentType = async (chunk) => {
+ const fileSignature = await fileType.fromBuffer(chunk)
+ if (!fileSignature) {
+ return ''
+ }
+
+ const mimeType = mime.lookup(fileSignature.ext)
+ return mime.contentType(mimeType)
+}
+
+router.get('/:cid([a-zA-Z0-9]{46})', async (req, res) => {
+ try {
+ const { cid } = req.params
+ const { localOnly, trackId } = req.query
+ const { record } = req.app.locals
+
+ if (localOnly) {
+ const haveLocally = await record._ipfs.repo.has(new CID(cid))
+ if (!haveLocally) {
+ return res.status(204).send(null)
+ }
+ }
+
+ const range = req.headers.range
+
+ const { size } = await record._ipfs.files.stat(`/ipfs/${cid}`, { size: true })
+
+ let offset
+ let length
+ const head = {}
+
+ if (range) {
+ const parts = range.replace(/bytes=/, '').split('-')
+ const start = parseInt(parts[0], 10)
+ const end = parts[1] ? parseInt(parts[1], 10) : size - 1
+ const chunksize = (end - start) + 1
+ offset = start
+ length = chunksize
+
+ head['Content-Range'] = `bytes ${start}-${end}/${size}`
+ head['Accept-Ranges'] = 'bytes'
+ head['Content-Length'] = chunksize
+ } else {
+ head['Content-Length'] = size
+ }
+
+ const rawStream = toStream.readable(record._ipfs.cat(cid, { offset, length }))
+ const { peekedStream, contentType } = await new Promise((resolve, reject) => {
+ const peekBytes = 4100
+ peek(rawStream, peekBytes, async (err, streamHead, peekedStream) => {
+ if (err) {
+ return reject(err)
+ }
+ const contentType = await detectContentType(streamHead)
+ resolve({ peekedStream, contentType })
+ })
+ })
+
+ head['Content-Type'] = contentType
+ res.writeHead(range ? 206 : 200, head)
+ peekedStream.pipe(res)
+
+ if (trackId) {
+ // get linked log addresses
+ const linkedRows = await record.logs._list(record.address)
+ const linked = linkedRows.map(r => r.link)
+
+ // pin track audio if in linked logs or in main log
+ linked.push(record.address)
+ const rows = await record._db('tracks')
+ .whereIn('address', linked)
+ .andWhere('id', trackId)
+ if (rows.length) {
+ await record._ipfs.pin.add(cid)
+ }
+ }
+
+ record.gc()
+ } catch (err) {
+ req.app.locals.record.logger.error(err)
+ res.status(500).send({ error: err.toString() })
+ }
+})
+
+module.exports = router
diff --git a/components/api/routes/import.js b/components/api/routes/import.js
new file mode 100644
index 0000000..e2ce069
--- /dev/null
+++ b/components/api/routes/import.js
@@ -0,0 +1,19 @@
+const express = require('express')
+const router = express.Router()
+
+router.post('/?', async (req, res) => {
+ try {
+ const { privateKey } = req.body
+ const { record } = req.app.locals
+ const data = privateKey
+ ? await record.setIdentity(privateKey)
+ : await record.createIdentity()
+
+ res.send(data)
+ } catch (err) {
+ req.app.locals.record.logger.error(err)
+ res.status(500).send({ error: err.toString() })
+ }
+})
+
+module.exports = router
diff --git a/components/api/routes/importer.js b/components/api/routes/importer.js
new file mode 100644
index 0000000..ac62dfa
--- /dev/null
+++ b/components/api/routes/importer.js
@@ -0,0 +1,32 @@
+const express = require('express')
+const router = express.Router()
+
+router.get('/?', async (req, res) => {
+ try {
+ const { record } = req.app.locals
+ const data = record.importer.list()
+ res.send(data)
+ } catch (err) {
+ req.app.locals.record.logger.error(err)
+ res.status(500).send({ error: err.toString() })
+ }
+})
+
+router.post('/?', async (req, res) => {
+ try {
+ let { files } = req.body
+ const { record } = req.app.locals
+
+ if (!Array.isArray(files)) {
+ files = [files]
+ }
+
+ files.forEach(file => record.importer.add(file))
+ return res.send({ success: true })
+ } catch (err) {
+ req.app.locals.record.logger.error(err)
+ res.status(500).send({ error: err.toString() })
+ }
+})
+
+module.exports = router
diff --git a/components/api/routes/index.js b/components/api/routes/index.js
new file mode 100644
index 0000000..1367e6f
--- /dev/null
+++ b/components/api/routes/index.js
@@ -0,0 +1,15 @@
+exports.about = require('./about')
+exports.connect = require('./connect')
+exports.log = require('./log')
+exports.logs = require('./logs')
+exports.disconnect = require('./disconnect')
+exports.export = require('./export')
+exports.import = require('./import')
+exports.listens = require('./listens')
+exports.peers = require('./peers')
+exports.resolve = require('./resolve')
+exports.tags = require('./tags')
+exports.file = require('./file')
+exports.tracks = require('./tracks')
+exports.settings = require('./settings')
+exports.importer = require('./importer')
diff --git a/components/api/routes/listens.js b/components/api/routes/listens.js
new file mode 100644
index 0000000..4e30592
--- /dev/null
+++ b/components/api/routes/listens.js
@@ -0,0 +1,31 @@
+const express = require('express')
+const router = express.Router()
+
+router.get('/?', async (req, res) => {
+ try {
+ const { record } = req.app.locals
+ const { start, limit } = req.query
+ const listens = await record.listens.list({
+ start: parseInt(start, 10) || null,
+ limit: parseInt(limit, 10) || null
+ })
+ res.send(listens)
+ } catch (err) {
+ req.app.locals.record.logger.error(err)
+ res.status(500).send({ error: err.toString() })
+ }
+})
+
+router.post('/?', async (req, res) => {
+ try {
+ const { trackId, address, cid } = req.body
+ const { record } = req.app.locals
+ const entry = await record.listens.add({ trackId, address, cid })
+ res.send(entry)
+ } catch (err) {
+ req.app.locals.record.logger.error(err)
+ res.status(500).send({ error: err.toString() })
+ }
+})
+
+module.exports = router
diff --git a/components/api/routes/log.js b/components/api/routes/log.js
new file mode 100644
index 0000000..e6a56a4
--- /dev/null
+++ b/components/api/routes/log.js
@@ -0,0 +1,33 @@
+const express = require('express')
+const router = express.Router()
+
+router.get(':address(*)', async (req, res) => {
+ try {
+ const { address } = req.params
+ const { record } = req.app.locals
+
+ await record.logs.connect(address)
+ const data = await record.logs.get({
+ targetAddress: address
+ })
+ res.send(data)
+ } catch (err) {
+ req.app.locals.record.logger.error(err)
+ res.status(500).send({ error: err.toString() })
+ }
+})
+
+router.delete(':address(*)', async (req, res) => {
+ try {
+ const { address } = req.params
+ const { record } = req.app.locals
+
+ const response = await record.logs.drop(address)
+ res.send(response)
+ } catch (err) {
+ req.app.locals.record.logger.error(err)
+ res.status(500).send({ error: err.toString() })
+ }
+})
+
+module.exports = router
diff --git a/components/api/routes/logs.js b/components/api/routes/logs.js
new file mode 100644
index 0000000..101f9e8
--- /dev/null
+++ b/components/api/routes/logs.js
@@ -0,0 +1,72 @@
+const express = require('express')
+const router = express.Router()
+
+router.get('/all', async (req, res) => {
+ try {
+ const { record } = req.app.locals
+ const data = await record.logs.all()
+ res.send(data)
+ } catch (err) {
+ req.app.locals.record.logger.error(err)
+ res.status(500).send({ error: err.toString() })
+ }
+})
+
+router.get(':address(*)', async (req, res) => {
+ try {
+ const { address } = req.params
+ const { record } = req.app.locals
+
+ const data = await record.logs.list(address)
+ res.send(data)
+ } catch (err) {
+ req.app.locals.record.logger.error(err)
+ res.status(500).send({ error: err.toString() })
+ }
+})
+
+router.post('/?', (req, res, next) => {
+ const { linkAddress, alias } = req.body
+ const { record } = req.app.locals
+
+ const errors = []
+
+ if (!linkAddress) {
+ errors.push('Missing address field')
+ } else if (!record.isValidAddress(linkAddress)) {
+ errors.push('Invalid OrbitDB address')
+ }
+
+ if (!errors.length) {
+ res.locals.data = { linkAddress, alias }
+ return next()
+ }
+
+ res.status(422).send({
+ error: errors.join(', ')
+ })
+}, async (req, res) => {
+ try {
+ const { linkAddress, alias } = res.locals.data
+ const { record } = req.app.locals
+ const data = await record.logs.link({ linkAddress, alias })
+ res.send(data)
+ } catch (err) {
+ req.app.locals.record.logger.error(err)
+ res.status(500).send({ error: err.toString() })
+ }
+})
+
+router.delete('/?', async (req, res) => {
+ try {
+ const { linkAddress } = req.query
+ const { record } = req.app.locals
+ const data = await record.logs.unlink(linkAddress)
+ res.send(data)
+ } catch (err) {
+ req.app.locals.record.logger.error(err)
+ res.status(500).send({ error: err.toString() })
+ }
+})
+
+module.exports = router
diff --git a/components/api/routes/peers.js b/components/api/routes/peers.js
new file mode 100644
index 0000000..29edd8d
--- /dev/null
+++ b/components/api/routes/peers.js
@@ -0,0 +1,15 @@
+const express = require('express')
+const router = express.Router()
+
+router.get('/?', async (req, res) => {
+ try {
+ const { record } = req.app.locals
+ const peers = await record.peers.list()
+ res.send(peers)
+ } catch (err) {
+ req.app.locals.record.logger.error(err)
+ res.status(500).send({ error: err.toString() })
+ }
+})
+
+module.exports = router
diff --git a/routes/resolve.js b/components/api/routes/resolve.js
similarity index 54%
rename from routes/resolve.js
rename to components/api/routes/resolve.js
index 24852bd..c92077d 100644
--- a/routes/resolve.js
+++ b/components/api/routes/resolve.js
@@ -4,10 +4,12 @@ const router = express.Router()
router.get('/?', async (req, res) => {
try {
const { url } = req.query
- const data = await req.app.locals.resolve(url)
+ const { record } = req.app.locals
+ const data = await record.resolve(url)
res.send(data)
} catch (err) {
- res.send({ error: err })
+ req.app.locals.record.logger.error(err)
+ res.status(500).send({ error: err.toString() })
}
})
diff --git a/components/api/routes/settings.js b/components/api/routes/settings.js
new file mode 100644
index 0000000..137260e
--- /dev/null
+++ b/components/api/routes/settings.js
@@ -0,0 +1,27 @@
+const express = require('express')
+const router = express.Router()
+
+router.get('/?', async (req, res) => {
+ try {
+ const { record } = req.app.locals
+ const data = await record.info.get()
+ res.send(data)
+ } catch (err) {
+ req.app.locals.record.logger.error(err)
+ res.status(500).send({ error: err.toString() })
+ }
+})
+
+router.post('/importer', async (req, res) => {
+ try {
+ const { filepath } = req.body
+ const { record } = req.app.locals
+ const directory = await record.importer.setDirectory(filepath)
+ res.send({ directory })
+ } catch (err) {
+ req.app.locals.record.logger.error(err)
+ res.status(500).send({ error: err.toString() })
+ }
+})
+
+module.exports = router
diff --git a/components/api/routes/tags.js b/components/api/routes/tags.js
new file mode 100644
index 0000000..1e5c2f6
--- /dev/null
+++ b/components/api/routes/tags.js
@@ -0,0 +1,58 @@
+const express = require('express')
+const router = express.Router()
+
+router.get('/?', async (req, res) => {
+ try {
+ const { addresses } = req.query
+ const { record } = req.app.locals
+ const tags = await record.tags.list(addresses)
+ res.send(tags)
+ } catch (err) {
+ req.app.locals.record.logger.error(err)
+ res.status(500).send({ error: err.toString() })
+ }
+})
+
+router.post('/?', async (req, res) => {
+ try {
+ const { cid, tag } = req.body
+ const { record } = req.app.locals
+
+ if (!tag) {
+ return res.status(400).send({ error: 'missing tag' })
+ }
+
+ if (!cid) {
+ return res.status(400).send({ error: 'missing cid' })
+ }
+
+ const track = await record.tags.add(cid, tag)
+ res.send(track)
+ } catch (err) {
+ req.app.locals.record.logger.error(err)
+ res.status(500).send({ error: err.toString() })
+ }
+})
+
+router.delete('/?', async (req, res) => {
+ try {
+ const { trackId, tag } = req.query
+ const { record } = req.app.locals
+
+ if (!trackId) {
+ return res.status(400).send({ error: 'missing trackId' })
+ }
+
+ if (!tag) {
+ return res.status(400).send({ error: 'missing tag' })
+ }
+
+ const track = await record.tags.remove(trackId, tag)
+ res.send(track)
+ } catch (err) {
+ req.app.locals.record.logger.error(err)
+ res.status(500).send({ error: err.toString() })
+ }
+})
+
+module.exports = router
diff --git a/components/api/routes/tracks.js b/components/api/routes/tracks.js
new file mode 100644
index 0000000..4a0eb37
--- /dev/null
+++ b/components/api/routes/tracks.js
@@ -0,0 +1,68 @@
+const express = require('express')
+const router = express.Router()
+
+router.get('/?', async (req, res) => {
+ try {
+ const { record } = req.app.locals
+ const { start, limit, tags, shuffle, query, sort, order, addresses } = req.query
+ const tracks = await record.tracks.list({
+ start: parseInt(start, 10) || null,
+ limit: parseInt(limit, 10) || null,
+ addresses,
+ tags,
+ shuffle,
+ query,
+ sort,
+ order
+ })
+ res.send(tracks)
+ } catch (err) {
+ req.app.locals.record.logger.error(err)
+ res.status(500).send({ error: err.toString() })
+ }
+})
+
+router.post('/?', async (req, res) => {
+ try {
+ const { url, file, cid } = req.body
+ const { record } = req.app.locals
+
+ if (cid) {
+ const track = await record.tracks.addTrackFromCID(cid)
+ return res.send(track)
+ }
+
+ if (file) {
+ const track = await record.tracks.addTracksFromFS(file)
+ return res.send(track)
+ }
+
+ if (url) {
+ const track = await record.tracks.addTrackFromUrl(url)
+ record.emit('redux', {
+ type: 'TRACK_ADDED',
+ payload: { data: track, address: record.address }
+ })
+ return res.send(track)
+ }
+
+ res.status(400).send({ error: 'Body missing one of \'cid\', \'url\', or \'file\'' })
+ } catch (err) {
+ req.app.locals.record.logger.error(err)
+ res.status(500).send({ error: err.toString() })
+ }
+})
+
+router.delete('/?', async (req, res) => {
+ try {
+ const { trackId } = req.query
+ const { record } = req.app.locals
+ const hash = await record.tracks.remove(trackId)
+ res.send({ trackId, hash })
+ } catch (err) {
+ req.app.locals.record.logger.error(err)
+ res.status(500).send({ error: err.toString() })
+ }
+})
+
+module.exports = router
diff --git a/components/bootstrap.js b/components/bootstrap.js
new file mode 100644
index 0000000..046c4eb
--- /dev/null
+++ b/components/bootstrap.js
@@ -0,0 +1,78 @@
+const Bitboot = require('bitboot')
+const net = require('net')
+
+const isIPFS = require('is-ipfs')
+const { multiaddr } = require('ipfs-http-client')
+
+module.exports = function bootstrap (self) {
+ return {
+ _peers: new Map(),
+ _stop: async () => {
+ self.logger.info('[node] stopping bootstrap server')
+ const closeServer = () => new Promise((resolve) => {
+ self.bootstrap._server.close(() => resolve())
+ })
+ const closeBB = () => new Promise((resolve) => {
+ self.bb.destroy(() => resolve())
+ })
+
+ if (self.bootstrap._server) {
+ await closeServer()
+ }
+
+ if (self.bb) {
+ await closeBB()
+ }
+ },
+ _init: () => {
+ if (!self._options.bitboot.enabled) {
+ return
+ }
+
+ self.logger.info('[node] starting bootstrap server')
+
+ self.bootstrap._server = net.createServer(async (socket) => {
+ const identity = await self._ipfs.id()
+ socket.write(identity.id)
+ socket.pipe(socket)
+ })
+
+ self.bootstrap._server.listen(8383, '0.0.0.0')
+
+ self.bb = new Bitboot('record')
+ self.bb.on('error', self.logger.error)
+ self.bb.on('peers', async (peers) => {
+ // check for new peers
+ for (const peer of peers) {
+ const id = peer.id.toString('hex')
+ if (!self.bootstrap._peers.has(id)) {
+ self.logger.info(`[node] found bitboot node: ${id}`)
+ const client = net.createConnection({ port: 8383, host: peer.host })
+ client.on('error', err => self.logger.error(err))
+ client.on('data', (peerId) => {
+ client.end()
+
+ const nodeId = peerId.toString()
+ if (!isIPFS.multihash(nodeId)) {
+ self.logger.error('Bitboot node peerId is invalid:', nodeId)
+ return
+ }
+
+ self.logger.info(`[node] connecting to bitboot node peerId: ${nodeId}`)
+ const addr = multiaddr(`/ip4/${peer.host}/tcp/4003/ws/ipfs/${peerId}`)
+ try {
+ self._ipfs.swarm.connect(addr)
+ } catch (err) {
+ self.logger.error(err)
+ }
+ })
+ self.bootstrap._peers.set(id, peer)
+ }
+ }
+ })
+ self.bb.on('rejoin', (nodeId) => {
+ self.logger.info(`[node] bitboot node id: ${nodeId.toString('hex')}`)
+ })
+ }
+ }
+}
diff --git a/components/importer.js b/components/importer.js
new file mode 100644
index 0000000..5f20103
--- /dev/null
+++ b/components/importer.js
@@ -0,0 +1,285 @@
+const fs = require('fs')
+const fsPromises = fs.promises
+const path = require('path')
+const jsonfile = require('jsonfile')
+
+const fileExists = async path => !!(await fsPromises.stat(path).catch(e => false))
+const walk = async (dir, {
+ filelist = [],
+ dirlist = [],
+ onFile
+} = {}) => {
+ const files = await fsPromises.readdir(dir)
+
+ for (const file of files) {
+ const filepath = path.join(dir, file)
+ const stat = await fsPromises.stat(filepath)
+
+ if (stat.isDirectory()) {
+ dirlist.push(filepath)
+ const data = await walk(filepath, { filelist, dirlist, onFile })
+ filelist = data.filelist
+ dirlist = data.dirlist
+ } else {
+ filelist.push(filepath)
+ if (onFile) await onFile(filepath)
+ }
+ }
+
+ return { filelist, dirlist }
+}
+
+const defaultQueue = () => ({
+ jobs: {},
+ files: {},
+ completed: {}
+})
+
+let queue = defaultQueue()
+
+module.exports = function importer (self) {
+ return {
+ _directory: null,
+ _onImportDirectoryChange: (event, filepath) => {
+ self.importer.add(self.importer._directory)
+ },
+ _cleanup: async (file) => {
+ self.logger.info('[node] importer cleaning up')
+
+ // cleanup import directory
+ if (self._options.importer.enabled && file.includes(self.importer._directory)) {
+ if (fs.existsSync(file)) {
+ self.logger.info(`[node] removing imported file from import directory: ${file}`)
+ fs.unlinkSync(file)
+ }
+
+ const dir = path.dirname(file)
+ if (dir !== self.importer._directory) {
+ const { filelist } = await walk(dir)
+ if (!filelist.length) {
+ self.logger.info(`[node] removing empty directory from import directory: ${dir}`)
+ fs.rmdirSync(dir)
+ }
+ }
+ }
+
+ // cleanup jobs & emit events
+ const jobIds = new Set(Object.values(queue.files).flat())
+ for (const jobId of Object.keys(queue.jobs)) {
+ if (!queue.jobs[jobId].queued) {
+ continue
+ }
+
+ const tasksLeft = jobIds.has(jobId)
+ const job = queue.jobs[jobId]
+ if (!tasksLeft) {
+ self.emit('redux', {
+ type: 'IMPORTER_FINISHED',
+ payload: {
+ ...job
+ }
+ })
+ delete queue.jobs[jobId]
+ }
+ }
+ },
+ _worker: async () => {
+ const files = Object.keys(queue.files)
+
+ if (!files.length) {
+ self.importer._importing = false
+ return
+ }
+
+ let track = {}
+ let error
+ const file = files[0]
+ const jobIds = queue.files[file]
+
+ self.logger.info(`[node] importer processing: ${file}`)
+
+ try {
+ if (queue.completed[file]) {
+ const { trackId, addresses } = queue.completed[file]
+ if (trackId && addresses && addresses.length) {
+ track = self.tracks.get({ address: addresses[0], trackId })
+ }
+ }
+
+ const firstJobId = jobIds.shift()
+ const firstJob = queue.jobs[firstJobId]
+ if (!track.id) {
+ track = await self.tracks.addTrackFromFile(file, { address: firstJob.address })
+ } else {
+ await self.tracks.addTrackFromCID(track.cid, { address: firstJob.address })
+ }
+
+ for (const jobId of jobIds) {
+ const job = queue.jobs[jobId]
+ await self.tracks.addTrackFromCID(track.cid, { address: job.address })
+ }
+ } catch (e) {
+ self.logger.error(e)
+ error = e
+ } finally {
+ const trackId = track.id
+ const jobAddressesSet = new Set(Object.keys(queue.jobs).map(jobId => queue.jobs[jobId].address))
+ const jobAddresses = Array.from(jobAddressesSet)
+ if (queue.completed[file]) {
+ if (error) {
+ queue.completed[file].error = error
+ }
+
+ if (Array.isArray(queue.completed[file].addresses)) {
+ queue.completed[file].addresses = queue.completed[file].addresses.concat(jobAddresses)
+ } else {
+ queue.completed[file].addresses = jobAddresses
+ }
+ } else {
+ queue.completed[file] = { error, trackId, addresses: jobAddresses }
+ }
+ delete queue.files[file]
+ jsonfile.writeFileSync(self.importer._queuePath, queue, { spaces: 2 })
+
+ const errors = []
+ Object.keys(queue.completed).forEach(file => {
+ const i = queue.completed[file]
+ if (i.error) {
+ errors.push({ file, error: i.error })
+ }
+ })
+
+ self.emit('redux', {
+ type: 'IMPORTER_PROCESSED_FILE',
+ payload: {
+ file,
+ trackId,
+ track,
+ errors,
+ files: Object.keys(queue.files).map(file => ({ file })),
+ addresses: jobAddresses,
+ completed: Object.keys(queue.completed).length,
+ remaining: Object.keys(queue.files).length
+ }
+ })
+
+ await self.importer._cleanup(file)
+ self.importer._worker()
+ }
+ },
+ start: () => {
+ if (!self.importer._importing) {
+ self.logger.info('[node] importer starting')
+ self.emit('redux', {
+ type: 'IMPORTER_STARTING',
+ payload: {
+ completed: Object.keys(queue.completed).length,
+ remaining: Object.keys(queue.files).length
+ }
+ })
+
+ self.importer._importing = true
+ self.importer._worker()
+ }
+ },
+ watch: async () => {
+ const directory = self.importer._directory
+ self.logger.info(`[node] enabling import directory: ${directory}`)
+ const dirExists = await fileExists(directory)
+ if (!dirExists) {
+ await fsPromises.mkdir(directory)
+ }
+ self.importer.add(self.importer._directory)
+ self.importer._watcher = fs.watch(directory, self.importer._onImportDirectoryChange)
+ },
+ add: async (filepath, address = self.address) => {
+ const jobId = `${address}${filepath}`
+ if (queue.jobs[jobId] && !queue.jobs[jobId].queued) {
+ queue.jobs[jobId].changed = true
+ return
+ }
+
+ queue.jobs[jobId] = {
+ queued: false,
+ changed: false,
+ filepath,
+ address
+ }
+
+ const onFile = async (file) => {
+ if (queue.completed[file]) {
+ const { addresses, error } = queue.completed[file]
+
+ if (error) {
+ return self.importer._cleanup(file)
+ }
+
+ if (addresses && addresses.includes(address)) {
+ return self.importer._cleanup(file)
+ }
+ }
+
+ if (queue.files[file]) {
+ const jobIds = queue.files[file]
+ if (!jobIds.includes(jobId)) {
+ queue.files[file].push(jobId)
+ }
+ } else {
+ queue.files[file] = [jobId]
+ }
+
+ self.importer.start()
+ }
+
+ self.logger.info(`[node] importer added: ${jobId}`)
+ const stat = await fsPromises.stat(filepath)
+ if (stat.isDirectory()) {
+ await walk(filepath, { onFile })
+ } else {
+ await onFile(filepath)
+ }
+
+ queue.jobs[jobId].queued = true
+ jsonfile.writeFileSync(self.importer._queuePath, queue, { spaces: 2 })
+
+ // re-add filepath if changed while adding
+ if (queue.jobs[jobId].changed) {
+ self.importer.add(filepath, address)
+ }
+ },
+ list: () => {
+ const files = Object.keys(queue.files)
+ return { files }
+ },
+ setDirectory: async (filepath) => {
+ if (!path.isAbsolute(filepath)) {
+ throw new Error(`${filepath} is not absolute.`)
+ }
+
+ self.importer._directory = filepath
+ if (self.importer._watcher) self.importer._watcher.stop()
+ await self.importer.watch()
+ return self.importer._directory
+ },
+ init: async () => {
+ self.logger.info('[node] initializing importer')
+ self.importer._queuePath = path.resolve(self._options.directory, './queue.json')
+ const queueExists = await fileExists(self.importer._queuePath)
+ if (queueExists) {
+ queue = jsonfile.readFileSync(self.importer._queuePath)
+ self.importer.start()
+ } else {
+ queue = defaultQueue()
+ }
+
+ if (!self._options.importer.enabled) {
+ return
+ }
+
+ const defaultDir = path.resolve(self._options.directory, './import')
+ self.importer._directory = self._options.importer.directory || defaultDir
+
+ await self.importer.watch()
+ }
+ }
+}
diff --git a/components/index.js b/components/index.js
index b944b51..2564f9c 100644
--- a/components/index.js
+++ b/components/index.js
@@ -1,3 +1,14 @@
'use strict'
+exports.about = require('./about')
+exports.api = require('./api')
+exports.bootstrap = require('./bootstrap')
exports.info = require('./info')
+exports.indexer = require('./indexer')
+exports.importer = require('./importer')
+exports.logs = require('./logs')
+exports.listens = require('./listens')
+exports.log = require('./log')
+exports.peers = require('./peers')
+exports.tags = require('./tags')
+exports.tracks = require('./tracks')
diff --git a/components/indexer.js b/components/indexer.js
new file mode 100644
index 0000000..cbb6dea
--- /dev/null
+++ b/components/indexer.js
@@ -0,0 +1,423 @@
+const path = require('path')
+
+const Errors = require('../errors')
+const knex = require('knex')
+const { CID } = require('ipfs-http-client')
+const { default: PQueue } = require('p-queue')
+
+const { loadEntryContent } = require('../utils')
+const MigrationSource = require('../migrations')
+
+const indexManager = new PQueue({ concurrency: 100, timeout: 30000 })
+module.exports = function indexer (self) {
+ return {
+ _loading: {},
+ _processing: {},
+ _init: async () => {
+ self.logger.info('[node] initializing index')
+ const config = {
+ client: 'sqlite3',
+ connection: {
+ filename: path.resolve(self._options.directory, './index'),
+ multipleStatements: true
+ },
+ useNullAsDefault: true,
+ pool: {
+ min: 2,
+ max: 10
+ },
+ migrations: {
+ tableName: 'migrations'
+ }
+ }
+
+ self._db = knex(config)
+ await self._db.migrate.latest({
+ migrationSource: new MigrationSource()
+ })
+ },
+
+ trackCount: async (address) => {
+ const rows = await self._db('tracks')
+ .where({ address })
+ .count({ tracks: 'address' })
+
+ return rows[0].tracks
+ },
+
+ logCount: async (address) => {
+ const rows = await self._db('links')
+ .where({ address })
+ .count({ logs: 'address' })
+
+ return rows[0].logs
+ },
+
+ indexQueueSize: (address) => {
+ return Object.keys(self.indexer._processing[address] || {}).length
+ },
+
+ isLoading: (address) => {
+ return !!self.indexer._loading[address]
+ },
+
+ isProcessing: (address) => {
+ return !!self.indexer.indexQueueSize(address)
+ },
+
+ load: async (log) => {
+ self.indexer._loading[log.id] = true
+ const queueHashes = Object.keys(self.indexer._processing[log.id] || {})
+ const entryHashes = Array.from(log._oplog._hashIndex.keys())
+ const hashes = entryHashes.filter(h => !queueHashes.includes(h))
+
+ // TODO (medium) refactor (see below)
+ // sort hashes, pull out top 50 shared prefixes, query index (select distinct)
+
+ for (const entryHash of hashes) {
+ const rows = await self._db('entries').where({ hash: entryHash }).limit(1)
+ if (rows.length) continue
+
+ const entry = await log._oplog.get(entryHash)
+ // Check to see if entry contents are local, add to indexManager if not
+ if (CID.isCID(entry.payload.value.content)) {
+ const haveLocally = await self._ipfs.repo.has(entry.payload.value.content)
+ if (!haveLocally) {
+ self.indexer._process(entry)
+ continue
+ }
+ }
+
+ const loadedEntry = await loadEntryContent(self._ipfs, entry)
+ await self.indexer.add(loadedEntry)
+ }
+ },
+
+ _add: async (entry, type) => {
+ switch (type) {
+ case 'about':
+ return self.indexer._addAbout(entry)
+
+ case 'track':
+ return self.indexer._addTrack(entry)
+
+ case 'log':
+ return self.indexer._addLog(entry)
+
+ default:
+ throw Errors.InvalidEntryTypeError()
+ }
+ },
+
+ _addAbout: async (entry) => {
+ const { name, location, bio, avatar } = entry.payload.value.content
+ const address = entry.payload.value.content.address || entry.id
+ const id = entry.payload.key
+ return self._db('logs')
+ .insert({ name, location, bio, avatar, address, id })
+ .onConflict('id')
+ .merge()
+ },
+
+ _addToTracks: async (entry) => {
+ const address = entry.id
+ const id = entry.payload.value.id
+ const {
+ title, artist, artists, albumartist, album, remixer, bpm
+ } = entry.payload.value.content.tags
+ const { duration, bitrate } = entry.payload.value.content.audio
+ const data = {
+ title, artist, artists, albumartist, album, remixer, bpm, duration, bitrate
+ }
+
+ return self._db('tracks')
+ .insert({ ...data, id, address })
+ .onConflict(['address', 'id'])
+ .merge()
+ },
+
+ _addToTags: async (entry) => {
+ const address = entry.id
+ const trackid = entry.payload.key
+ const { tags } = entry.payload.value
+
+ const rows = await self._db('tags').where({ address, trackid })
+ const current = rows.map(r => r.tag)
+ const dels = current.filter(t => !tags.includes(t))
+ const adds = tags.filter(t => !current.includes(t))
+
+ if (dels.length) {
+ // TODO (low) bulk delete
+ for (const del of dels) {
+ await self._db('tags').where({ tag: del, address, trackid }).del()
+ }
+ }
+
+ if (adds.length) {
+ const inserts = adds.map(t => ({ tag: t, address, trackid }))
+ await self._db('tags').insert(inserts)
+ }
+ },
+
+ _addToResolvers: async (entry) => {
+ const trackid = entry.payload.key
+ const { resolver } = entry.payload.value.content
+
+ for (const item of resolver) {
+ const { extractor, id, fulltitle } = item
+ try {
+ await self._db('resolvers').insert({ trackid, extractor, id, fulltitle })
+ } catch (err) {
+ const msg = err.toString()
+ if (!msg.includes('SQLITE_CONSTRAINT: UNIQUE')) {
+ self.logger.error(err)
+ }
+ }
+ }
+ },
+
+ _addTrack: async (entry) => {
+ await self.indexer._addToTracks(entry)
+ await self.indexer._addToTags(entry)
+ await self.indexer._addToResolvers(entry)
+ },
+
+ _addLog: async (entry) => {
+ const address = entry.id
+ const id = entry.payload.key
+ const { alias, address: link } = entry.payload.value.content
+ await self._db('links').insert({ address, alias, link, id }).onConflict(['address', 'link', 'id']).merge()
+ },
+
+ _addListen: async (entry) => {
+ const { trackId: trackid, timestamp } = entry.payload
+ await self._db('listens').insert({ trackid, timestamp })
+ },
+
+ _remove: async (entry, type) => {
+ switch (type) {
+ case 'track':
+ return self.indexer._removeTrack(entry)
+
+ case 'log':
+ return self.indexer._removeLog(entry)
+
+ default:
+ throw Errors.InvalidEntryTypeError()
+ }
+ },
+
+ _removeLog: async (entry) => {
+ const address = entry.id
+ const id = entry.payload.key
+
+ const links = await self._db('links').where({ address, id })
+ const linkAddress = links[0].link
+
+ // check if linked in other libraries
+ const rows = await self._db('links')
+ .where({ link: linkAddress })
+ .whereNot({ address: self.address })
+ if (rows.length) return self._db('links').where({ address, id }).del()
+
+ const linkedEntries = await self._db('entries').where({ address: linkAddress })
+ const linkedEntryKeys = linkedEntries.map(e => e.key)
+ const nonUniqueEntries = await self._db('entries')
+ .whereNot({ address: linkAddress })
+ .whereIn('key', linkedEntryKeys)
+ .groupBy('key')
+ const nonUniqueKeys = nonUniqueEntries.map(e => e.key)
+ const uniqueEntries = linkedEntries.filter(e => !nonUniqueKeys.includes(e.key))
+
+ const log = await self.log.get(linkAddress)
+ for (const hash of log._oplog._hashIndex.keys()) {
+ // remove entry pins
+ await self._ipfs.pin.rm(hash, { recursive: false })
+
+ // remove entry index
+ await self._db('entries').where({ hash }).del()
+
+ const uniqueEntry = uniqueEntries.find(e => e.hash === hash)
+ if (uniqueEntry) {
+ if (uniqueEntry.type === 'track') {
+ await self._db('tracks').where({ id: uniqueEntry.key }).del()
+ await self._db('resolvers').where({ trackid: uniqueEntry.key }).del()
+ }
+
+ const dagNode = await self._ipfs.dag.get(uniqueEntry.cid, { timeout: 3000 })
+ if (!dagNode) continue
+
+ // remove content pin
+ try {
+ await self._ipfs.pin.rm(uniqueEntry.cid)
+ } catch (e) {
+ self.logger.error(e)
+ }
+
+ // remove audio pin
+ try {
+ await self._ipfs.pin.rm(dagNode.value.hash)
+ } catch (e) {
+ self.logger.error(e)
+ }
+
+ // remove artwork pins
+ try {
+ for (const cid of dagNode.value.artwork) {
+ await self._ipfs.pin.rm(cid)
+ }
+ } catch (e) {
+ self.logger.error(e)
+ }
+ }
+ }
+
+ await self._db('logs').where({ address: linkAddress }).del()
+ await self._db('tags').where({ address: linkAddress }).del()
+
+ return self._db('links').where({ address, id }).del()
+ },
+
+ _deleteTrackAudioAndArtwork: async (id) => {
+ const rows = await self._db('entries')
+ .where({ key: id })
+ .orderBy('clock', 'desc')
+ .orderBy('timestamp', 'desc')
+
+ for (const row of rows) {
+ const { cid } = row
+
+ const dagNode = await self._ipfs.dag.get(cid, { timeout: 3000 })
+ if (!dagNode.value) {
+ continue
+ }
+ const { hash, artwork } = dagNode.value
+
+ try {
+ await self._ipfs.pin.rm(hash) // remove audio
+ } catch (err) {
+ self.logger.error(err)
+ }
+
+ for (const cid of artwork) {
+ try {
+ await self._ipfs.pin.rm(cid) // remove artwork
+ } catch (err) {
+ self.logger.error(err)
+ }
+ }
+ }
+ },
+
+ _removeTrack: async (entry) => {
+ const address = entry.id
+ const id = entry.payload.key
+ await self._db('tracks').where({ address, id }).del()
+ await self._db('tags').where({ address, trackid: id }).del()
+
+ const results = await self._db('tracks').where({ id }).whereNot({ address })
+ // ignore if track is in other linked logs or in own log
+ if (results.length) {
+ return
+ }
+
+ const entries = await self._db('entries').where({ key: id })
+ for (const entry of entries) {
+ const dagNode = await self._ipfs.dag.get(entry.cid, { timeout: 3000 })
+ try {
+ await self._ipfs.pin.rm(entry.cid)
+ } catch (error) {
+ self.logger.error(error)
+ }
+
+ try {
+ await self._ipfs.pin.rm(dagNode.value.hash)
+ } catch (error) {
+ self.logger.error(error)
+ }
+
+ try {
+ for (const cid of dagNode.value.artwork) {
+ await self._ipfs.pin.rm(cid)
+ }
+ } catch (error) {
+ self.logger.error(error)
+ }
+ }
+
+ await self._db('resolvers').where({ trackid: id }).del()
+ await self.indexer._deleteTrackAudioAndArtwork(id)
+ },
+
+ _process: async (entry) => {
+ if (!self.indexer._processing[entry.id]) {
+ self.indexer._processing[entry.id] = {}
+ }
+
+ self.indexer._processing[entry.id][entry.hash] = true
+
+ await indexManager.add(async () => {
+ try {
+ const log = await self.log.get(entry.id)
+ log.events.emit('processing', self.indexer.indexQueueSize(entry.id))
+
+ const loadedEntry = await loadEntryContent(self._ipfs, entry)
+ await self.indexer.add(loadedEntry)
+ } catch (error) {
+ self.logger.error(error)
+ }
+ })
+
+ delete self.indexer._processing[entry.id][entry.hash]
+
+ if (!self.indexer.isProcessing(entry.id)) {
+ self.emit('redux', {
+ type: 'LOG_INDEX_UPDATED',
+ payload: { address: entry.id, isProcessingIndex: false }
+ })
+ }
+ },
+
+ add: async (entry) => {
+ const address = entry.id
+ const { key, op } = entry.payload
+ const { type, timestamp } = entry.payload.value
+ const clock = entry.clock.time
+
+ const rows = await self._db('entries')
+ .where({ key, address })
+ .orderBy('clock', 'desc')
+ .orderBy('timestamp', 'desc')
+
+ // update index only if entry clock is larger
+ if (!rows.length || (clock >= rows[0].clock && timestamp > rows[0].timestamp)) {
+ if (op === 'PUT') {
+ await self.indexer._add(entry, type)
+ } else if (op === 'DEL') {
+ await self.indexer._remove(entry, type)
+ }
+ }
+
+ const { hash } = entry
+ const cid = entry.payload.value.contentCID
+
+ if (op !== 'DEL') {
+ await self._db('entries').insert({
+ address, hash, type, op, clock, key, cid, timestamp
+ })
+ } else {
+ await self._db('entries').where({
+ address, key, type
+ }).del()
+ }
+
+ const log = await self.log.get(address)
+ log.events.emit('indexUpdated', self.indexer.indexQueueSize(address), entry)
+ },
+
+ drop: async (address) => {
+ // TODO (v0.0.2) iterate tracks and logs, send to remove
+ // TODO (v0.0.2) drop from log table
+ }
+ }
+}
diff --git a/components/info.js b/components/info.js
index 6a3985f..98c50a9 100644
--- a/components/info.js
+++ b/components/info.js
@@ -1,71 +1,32 @@
-const async = require('async')
-const promisify = require('promisify-es6')
-
module.exports = function info (self) {
- return promisify((callback) => {
- async.parallel({
-
- orbitdb: (done) => {
- // TODO: return manifest & access Controller dag objects
- done(null, {
- address: self._log.address.toString(),
- publicKey: self._log.key.getPublic('hex')
- })
- },
-
- state: (done) => {
- const state = self._ipfs.state.state()
- done(null, state)
- },
-
- ipfs: (done) => {
- self._ipfs.id(done)
- },
-
- peers: (done) => {
- self._ipfs.swarm.peers((err, peerInfos) => {
- if (err) { return done(err) }
- const peers = []
- peerInfos.forEach((peerInfo) => {
- peers.push({
- id: peerInfo.peer.toB58String(),
- address: peerInfo.addr.toString()
- })
- })
- done(null, peers)
- })
- },
-
- subs: (done) => {
- self._ipfs.pubsub.ls((err, subInfos) => {
- if (err) { return done(err) }
-
- let subs = {}
-
- async.each(subInfos, (subInfo, next) => {
- self._ipfs.pubsub.peers(subInfo, (err, peerIds) => {
- subs[subInfo] = peerIds
- next(err)
- })
- }, (err) => {
- done(err, subs)
- })
- })
- }
-
- }, (err, results) => {
- if (err) {
- return callback(err)
- }
-
- const { ipfs, peers, subs, orbitdb, state } = results
- callback(null, {
- ipfs,
- peers,
+ const getSubs = async () => {
+ const subInfos = await self._ipfs.pubsub.ls()
+ const subs = {}
+
+ for (const subInfo of subInfos) {
+ const peerIds = await self._ipfs.pubsub.peers(subInfo)
+ subs[subInfo] = peerIds
+ }
+
+ return subs
+ }
+
+ return {
+ _init: () => {
+ // TODO (low) emit event on ipfs peer join
+ // TODO (low) emit event on ipfs peer leave
+ },
+ get: async () => {
+ const subs = await getSubs()
+
+ return {
subs,
- state,
- orbitdb
- })
- })
- })
+ bw: self._bwStats,
+ repo: self._repoStats,
+ importer: {
+ directory: self.importer._directory
+ }
+ }
+ }
+ }
}
diff --git a/components/listens.js b/components/listens.js
new file mode 100644
index 0000000..04cb3ec
--- /dev/null
+++ b/components/listens.js
@@ -0,0 +1,66 @@
+const { ListensStore } = require('../store')
+
+module.exports = function listens (self) {
+ return {
+ _afterAdd: async (logEntry) => {
+ return self.indexer._addListen(logEntry)
+ },
+
+ _init: async () => {
+ self.logger.info('[node] initializing listens')
+ const opts = {
+ create: true,
+ replicate: true,
+ type: ListensStore.type,
+ afterAdd: self.listens._afterAdd
+ }
+ self._listens = await self._orbitdb.open('listens', opts)
+ // await self._ipfs.pin.add(self._listens.address.root) // pin manifest
+ // await self.log.pinAccessController(self._listens.options.accessControllerAddress)
+ await self._listens.load()
+ },
+
+ get address () {
+ return self._listens.address.toString()
+ },
+
+ isMe: (address) => {
+ return self._listens.address.toString() === address
+ },
+
+ add: async (data) => {
+ await self._listens.add(data)
+ return self.listens.getCount(data.trackId)
+ },
+
+ getCount: async (trackId) => {
+ const rows = await self._db('listens').where({ trackid: trackId })
+ const result = {
+ trackId,
+ count: rows.length,
+ timestamps: rows.map(r => r.timestamp)
+ }
+ return result
+ },
+
+ list: async ({ start, limit } = {}) => {
+ const listens = await self._listens.list({ start, limit })
+ const entries = []
+ for (const listen of listens) {
+ const key = listen.trackId
+ const rows = await self._db('entries')
+ .where({ key })
+ .orderBy('clock', 'desc')
+ .orderBy('timestamp', 'desc')
+ .limit(1)
+ const { hash, address } = rows[0]
+ const log = await self.log.get(address)
+ const entry = await log.getEntryWithContent(hash)
+ const track = await self.tracks._entryToTrack(entry, listen)
+ entries.push(track)
+ }
+
+ return entries
+ }
+ }
+}
diff --git a/components/log.js b/components/log.js
new file mode 100644
index 0000000..059f7ee
--- /dev/null
+++ b/components/log.js
@@ -0,0 +1,341 @@
+const extend = require('deep-extend')
+const { CID } = require('ipfs-http-client')
+
+const { throttle, loadEntryContent } = require('../utils')
+const { RecordStore } = require('../store')
+const Errors = require('../errors')
+
+const logNameRe = /^[0-9a-zA-Z-]*$/
+const timeout = ms => new Promise(resolve => setTimeout(resolve, ms))
+
+/* const sortFn = (a, b) => {
+ * // TODO (medium) pass sortFn to orbitdb.open/create
+ * // sort by clocks
+ * // sort by entry payload timestamp
+ * // take first entry
+ * }
+ * */
+module.exports = function log (self) {
+ return {
+ _beforePut: async (recordEntry, { id }) => {
+ if (recordEntry.content) {
+ const address = id
+ const cid = recordEntry.content
+ const { tags, id: trackId } = recordEntry
+ const entries = await self._db('entries').where({ cid, address: id })
+ const length = tags && tags.length
+ if (!length && entries.length) {
+ // check tags for equality
+ const tagRows = await self._db('tags').whereIn('tag', tags).where({ address, trackid: trackId })
+ if (tags.length === tagRows.length && tagRows.filter(t => !tags.includes(t.tag)).length) {
+ throw new Errors.DuplicateEntryError()
+ }
+ }
+ }
+ },
+
+ _afterWrite: async (logEntry) => {
+ const loadedEntry = await loadEntryContent(self._ipfs, logEntry)
+ return self.indexer.add(loadedEntry)
+ },
+
+ _init: async (address = 'record') => {
+ const opts = extend(
+ {},
+ self._options.store,
+ { beforePut: self.log._beforePut, afterWrite: self.log._afterWrite },
+ { create: true, replicate: true }
+ )
+ self._log = await self._orbitdb.open(address, opts)
+ await self._ipfs.pin.add(self._log.address.root) // pin manifest
+ await self.log.pinAccessController(self._log.options.accessControllerAddress)
+ await self.log._registerEvents(self._log)
+ await self._log.load()
+ },
+
+ mine: () => {
+ return self._log
+ },
+
+ getLocalAddresses: async () => {
+ const addresses = Object.keys(self._addresses)
+ const localAddresses = []
+ for (const address of addresses) {
+ const isLocal = await self.log.isLocal(address)
+ if (isLocal) localAddresses.push(address)
+ }
+ return localAddresses
+ },
+
+ getLocalLogs: async () => {
+ const localAddresses = await self.log.getLocalAddresses()
+ const logs = []
+ for (const address of localAddresses) {
+ try {
+ const log = await self.log.get(address)
+ logs.push(log)
+ } catch (err) {
+ self.logger.error(err)
+ }
+ }
+ return logs
+ },
+
+ canAppend: async (address) => {
+ try {
+ const log = await self.log.get(address, { replicate: false })
+ return log.access.write.includes(self.identity)
+ } catch (err) {
+ self.logger.error(err)
+ return false
+ }
+ },
+
+ isMine: (log) => {
+ return self._log.address === log.address
+ },
+
+ isOpen: (address) => {
+ return !!self._orbitdb.stores[address]
+ },
+
+ isEmpty: async (address) => {
+ const log = await self.log.get(address, { replicate: false })
+ return !(log._oplog._hashIndex.size || log._oplog._length)
+ },
+
+ isLocal: async (address) => {
+ const parsedAddress = self.parseAddress(address)
+ const haveManifest = self.log.haveManifest(parsedAddress.root)
+ if (!haveManifest) {
+ return false
+ }
+
+ const { accessController } = await self.log.getManifest(parsedAddress.root)
+ return self.log.haveAccessController(accessController)
+ },
+
+ getManifest: async (manifestAddress) => {
+ const manifest = await self._ipfs.dag.get(new CID(manifestAddress))
+ return manifest.value
+ },
+
+ haveManifest: async (manifestAddress) => {
+ return self._ipfs.repo.has(new CID(manifestAddress))
+ },
+
+ haveAccessController: async (accessControllerAddress) => {
+ const hash = accessControllerAddress.split('/')[2]
+ const hasAC = await self._ipfs.repo.has(new CID(hash))
+ if (!hasAC) {
+ return false
+ }
+
+ const ac = await self._ipfs.dag.get(new CID(hash))
+ const hasIPFSAC = await self._ipfs.repo.has(new CID(ac.value.params.address))
+ if (!hasIPFSAC) {
+ return false
+ }
+
+ return true
+ },
+
+ _registerEvents: async (log) => {
+ const address = log.id
+
+ log.events.on('peer', (peerId) => {
+ self.emit('redux', {
+ type: 'LOG_PEER_JOINED',
+ payload: { address, peerId }
+ })
+ })
+
+ const onProcessing = (processingCount) => {
+ const isProcessingIndex = self.indexer.isProcessing(address)
+ self.emit('redux', {
+ type: 'LOG_INDEX_UPDATED',
+ payload: { address, isProcessingIndex, processingCount }
+ })
+ }
+
+ const throttledProcessing = throttle(onProcessing, 2500)
+ log.events.on('processing', throttledProcessing)
+
+ let updatedEntries = []
+ const onIndexUpdated = async (processingCount) => {
+ const trackCount = await self.indexer.trackCount(address)
+ const logCount = await self.indexer.logCount(address)
+ self.emit('redux', {
+ type: 'LOG_INDEX_UPDATED',
+ payload: {
+ address,
+ data: updatedEntries,
+ isProcessingIndex: self.indexer.isProcessing(address),
+ processingCount,
+ trackCount,
+ logCount
+ }
+ })
+ updatedEntries = []
+ }
+
+ const throttledIndexUpdated = throttle(onIndexUpdated, 2500)
+ log.events.on('indexUpdated', (processingCount, entry) => {
+ updatedEntries.push(entry)
+ throttledIndexUpdated(processingCount)
+ })
+
+ log.events.on('replicated', (address) => {
+ self.emit('redux', {
+ type: 'LOG_REPLICATED',
+ payload: { address, replicationStatus: log.replicationStatus, replicationStats: log._replicator._stats, length: log._oplog._hashIndex.size }
+ })
+ })
+
+ const onReplicateProgress = (address, hash, entry) => {
+ self.emit('redux', {
+ type: 'LOG_REPLICATE_PROGRESS',
+ payload: { address, hash, entry, replicationStatus: log.replicationStatus, replicationStats: log._replicator._stats, length: log._oplog._hashIndex.size }
+ })
+ }
+
+ const throttledReplicateProgress = throttle(onReplicateProgress, 2000)
+ log.events.on('replicate.progress', (address, hash, entry, progress, total) => {
+ self.logger.info(`[node] new entry ${address}/${entry.hash}`)
+ throttledReplicateProgress(address, hash, entry)
+ self.indexer._process(entry)
+ self._ipfs.pin.add(hash, { recursive: false })
+ if (entry.payload.value.content) self._ipfs.pin.add(entry.payload.value.content, { recursive: false })
+ })
+ },
+
+ pinAccessController: async (accessControllerAddress) => {
+ self.logger.info(`[node] pinning access controller address: ${accessControllerAddress}`)
+ const acAddress = accessControllerAddress.split('/')[2]
+ await self._ipfs.pin.add(acAddress)
+ const dagNode = await self._ipfs.dag.get(acAddress)
+ await self._ipfs.pin.add(dagNode.value.params.address)
+ },
+
+ getLogEntryFromId: async (address, id) => {
+ const rows = await self._db('entries')
+ .where({ address, key: id })
+ .orderBy('clock', 'desc')
+ .orderBy('timestamp', 'desc')
+ .limit(1)
+
+ if (!rows.length) {
+ return undefined
+ }
+
+ const hash = rows[0].hash
+ const log = await self.log.get(address)
+ return log.getEntryWithContent(hash)
+ },
+
+ drop: async function (address) {
+ if (!address) {
+ throw new Error('missing address')
+ }
+
+ if (self.isMe(address)) {
+ throw new Error('Cannot drop default log')
+ }
+
+ await self.logs.unlink(address)
+ self.logs._disconnect(address)
+
+ self.logger.info(`[node] dropping log ${address}`)
+ const log = await self.log.get(address)
+ if (log._type === RecordStore.type) {
+ for (const hash of log._oplog._hashIndex.keys()) {
+ const entry = await log._oplog.get(hash)
+ await self._ipfs.pin.rm(entry.hash, { recursive: false }) // remove entry pins
+ }
+ await self.indexer.drop(address)
+ delete self._addresses[address]
+ }
+
+ try {
+ await self._ipfs.pin.rm(log.address.root) // remove manifest pin
+ const acAddress = log.options.accessControllerAddress.split('/')[2]
+ await self._ipfs.pin.rm(acAddress) // remove ac pin
+ const dagNode = await self._ipfs.dag.get(acAddress)
+ await self._ipfs.pin.rm(dagNode.value.params.address) // remove ipfs ac pin
+ } catch (error) {
+ self.logger.error(error)
+ }
+
+ // TODO (v0.0.2) remove from cache
+
+ await log.drop(address)
+
+ return { address }
+ },
+
+ get: async function (address = self.address, options = {}) {
+ if (self.isMe(address)) {
+ return self._log
+ }
+
+ if (self.listens.isMe(address)) {
+ return self._listensLog
+ }
+
+ if (!self.isValidAddress(address)) {
+ if (!options.create) {
+ const addr = await self._orbitdb.determineAddress(address, RecordStore.type)
+ address = addr.toString()
+ options.localOnly = true
+ } else if (!logNameRe.test(address)) {
+ throw new Error(`${address} is not a valid log name`)
+ }
+ }
+
+ if (this.isOpen(address)) {
+ return self._orbitdb.stores[address]
+ }
+
+ const opts = extend({ replicate: false }, self._options.store, options)
+ self.logger.info(`[node] loading log: ${address}`)
+ const log = await Promise.race([
+ timeout(5000),
+ self._orbitdb.open(address, opts)
+ ])
+
+ if (!log) {
+ throw new Errors.CannotOpenLogError()
+ }
+
+ if (log._type === RecordStore.type) {
+ const data = await self.logs.get({ targetAddress: address })
+ self.emit('redux', {
+ type: 'LOG_LOADING',
+ payload: {
+ data
+ }
+ })
+ }
+
+ await self._ipfs.pin.add(log.address.root) // pin manifest
+ await self.log.pinAccessController(log.options.accessControllerAddress)
+ await this._registerEvents(log)
+ await log.load()
+
+ // TODO (high) send to indexer
+
+ if (log._type === RecordStore.type) {
+ self._addresses[log.address.toString()] = log.options.accessControllerAddress
+ const data = await self.logs.get({ targetAddress: address })
+ self.emit('redux', {
+ type: 'LOG_LOADED',
+ payload: {
+ data
+ }
+ })
+ }
+
+ return log
+ }
+ }
+}
diff --git a/components/logs.js b/components/logs.js
new file mode 100644
index 0000000..248d058
--- /dev/null
+++ b/components/logs.js
@@ -0,0 +1,285 @@
+const extend = require('deep-extend')
+
+const { loadEntryContent, sha256 } = require('../utils')
+
+module.exports = function logs (self) {
+ return {
+ _getEntryHash: async ({ address, linkAddress }) => {
+ const key = sha256(linkAddress)
+ const rows = await self._db('entries')
+ .select('hash')
+ .where({ type: 'log', address, op: 'PUT', key })
+ .orderBy('clock', 'desc')
+ .orderBy('timestamp', 'desc')
+ .limit(1)
+
+ return rows.length ? rows[0].hash : undefined
+ },
+ connect: async function (address) {
+ if (address) {
+ return this._connect(address)
+ }
+
+ self.isReplicating = true
+
+ const links = await self._db('links').where({ address: self.address })
+ const addresses = links.map(l => l.link)
+ for (const address of addresses) {
+ this._connect(address)
+ }
+
+ self.emit('redux', { type: 'LOGS_CONNECTED' })
+ },
+
+ disconnect: async function (address) {
+ if (address) {
+ return this._disconnect(address)
+ }
+
+ self.isReplicating = false
+
+ const links = await self._db('links').where({ address: self.address })
+ const addresses = links.map(l => l.link)
+ for (const address of addresses) {
+ this._disconnect(address)
+ }
+
+ self.emit('redux', { type: 'LOGS_DISCONNECTED' })
+ },
+
+ _connect: async (address) => {
+ if (self.isMe(address)) {
+ return
+ }
+
+ self.logger.info(`[node] connecting log: ${address}`)
+ const log = await self.log.get(address, { replicate: true })
+ self.logger.info(`[node] connected log: ${address}`)
+
+ if (!log.options.replicate) {
+ try {
+ log.options.replicate = true
+ await self._orbitdb._pubsub.subscribe(
+ address,
+ self._orbitdb._onMessage.bind(self._orbitdb),
+ self._orbitdb._onPeerConnected.bind(self._orbitdb)
+ )
+ log._replicator.resume()
+ } catch (e) {
+ self.logger.error(e)
+ }
+ }
+
+ self.emit('redux', { type: 'LOG_CONNECTED', payload: { address } })
+ },
+
+ _disconnect: async (address) => {
+ if (self.isMe(address)) {
+ return
+ }
+
+ self.logger.info(`[node] disconnecting log: ${address}`)
+ if (!self.log.isOpen(address)) {
+ return self.logger.info(`[node] log is not open: ${address}`)
+ }
+
+ const log = await self.log.get(address)
+
+ if (!log.options.replicate) {
+ return self.logger.info(`[node] log was not replicating: ${address}`)
+ }
+
+ await self._orbitdb._pubsub.unsubscribe(address)
+ log.options.replicate = false
+ log._replicator.pause()
+
+ self.emit('redux', { type: 'LOG_DISCONNECTED', payload: { address } })
+ },
+
+ isReplicating: async (address) => {
+ if (!self.log.isOpen(address)) {
+ return false
+ }
+
+ const log = await self.log.get(address)
+ return log.options.replicate
+ },
+
+ link: async ({ address = self.address, alias = null, linkAddress }) => {
+ if (self.isMe(linkAddress)) {
+ throw new Error(`unable to add self: ${linkAddress}`)
+ }
+
+ if (!self.isValidAddress(linkAddress)) {
+ throw new Error(`invalid address: ${linkAddress}`)
+ }
+
+ self.logger.info(`[node] link log: ${linkAddress}`)
+ const rows = await self._db('links')
+ .where({ address, alias, link: linkAddress })
+ .limit(1)
+
+ const log = await self.log.get(address)
+ if (!rows.length) {
+ const data = { address: linkAddress, alias }
+ await log.logs.put(data)
+ }
+
+ if (self.isReplicating) {
+ self.logs._connect(linkAddress)
+ }
+
+ return self.logs.get({
+ sourceAddress: self.address,
+ targetAddress: linkAddress
+ })
+ },
+
+ _getEntry: async (address, linkAddress) => {
+ if (address === linkAddress) {
+ return {}
+ }
+
+ const entryHash = await self.logs._getEntryHash({ address, linkAddress })
+ if (!entryHash) {
+ return {}
+ }
+
+ const log = await self.log.get(address, { replicate: false })
+ const logEntry = await log.get(entryHash)
+ const entry = await loadEntryContent(self._ipfs, logEntry)
+ return entry ? entry.payload.value : {}
+ },
+
+ get: async ({ sourceAddress, targetAddress }) => {
+ if (!targetAddress) {
+ throw new Error('missing targetAddress')
+ }
+
+ if (!sourceAddress) {
+ sourceAddress = targetAddress
+ }
+
+ const isMyLog = self.isMe(sourceAddress)
+ let myEntry = {}
+ if (!isMyLog) {
+ myEntry = await self.logs._getEntry(self.address, targetAddress)
+ }
+
+ let peerEntry = {}
+ if (self.peers.get(targetAddress)) {
+ peerEntry = self.peers.get(targetAddress)
+ }
+
+ const [entry, about, peers] = await Promise.all([
+ self.logs._getEntry(sourceAddress, targetAddress),
+ self.about.get(targetAddress),
+ self._ipfs.pubsub.peers(targetAddress)
+ ])
+
+ const isLinked = isMyLog ? !!entry.id : !!myEntry.id
+ let replicationStatus = {}
+ let replicationStats = {}
+ let length = 0
+ let trackCount = 0
+ let logCount = 0
+ let isReplicating = false
+ let isLoadingIndex = false
+ let isProcessingIndex = false
+ let heads = []
+
+ if (self.log.isOpen(targetAddress)) {
+ const log = await self.log.get(targetAddress)
+
+ isReplicating = log.options.replicate
+ replicationStatus = log.replicationStatus
+ replicationStats = log._replicator._stats
+ length = log._oplog._hashIndex.size
+ heads = log._oplog.heads
+ isLoadingIndex = self.indexer.isLoading(targetAddress)
+ isProcessingIndex = self.indexer.isProcessing(targetAddress)
+ trackCount = await self.indexer.trackCount(targetAddress)
+ logCount = await self.indexer.logCount(targetAddress)
+ }
+
+ return extend(about, peerEntry, entry, myEntry, {
+ isReplicating,
+ isLoadingIndex,
+ isProcessingIndex,
+ trackCount,
+ logCount,
+ peers,
+ replicationStatus,
+ replicationStats,
+ length,
+ heads,
+ isLinked,
+ isMe: self.isMe(targetAddress)
+ })
+ },
+
+ has: async (address, linkAddress) => {
+ const rows = await self._db('links')
+ .where({ address, link: linkAddress })
+ .limit(1)
+
+ return !!rows.length
+ },
+
+ unlink: async (linkAddress) => {
+ self.logger.info(`[node] unlink log: ${linkAddress}`)
+ const log = self.log.mine()
+ const rows = await self._db('links')
+ .where({ address: self.address, link: linkAddress })
+ .limit(1)
+
+ if (!rows.length) {
+ throw new Error(`${linkAddress} is not linked`)
+ }
+ const id = sha256(linkAddress)
+ await log.logs.del(id)
+ self.logs._disconnect(linkAddress)
+
+ return { id, linkAddress }
+ },
+
+ all: async () => {
+ const links = {}
+ const linkedRows = await self._db('links')
+ linkedRows.forEach(r => {
+ links[r.address] = true
+ links[r.link] = true
+ })
+ Object.keys(self._addresses).forEach(a => { links[a] = true })
+ const addresses = Object.keys(links)
+ const logs = []
+ for (const address of addresses) {
+ try {
+ const log = await self.logs.get({
+ sourceAddress: self.address,
+ targetAddress: address
+ })
+ logs.push(log)
+ } catch (err) {
+ self.logger.error(err)
+ }
+ }
+
+ return logs
+ },
+
+ _list: async (address) => {
+ return self._db('links').where({ address })
+ },
+
+ list: async (address = self.address) => {
+ const linkedRows = await self.logs._list(address)
+ const getLog = (r) => self.logs.get({
+ sourceAddress: address,
+ targetAddress: r.link
+ })
+ const promises = linkedRows.map(r => getLog(r))
+ return Promise.all(promises)
+ }
+ }
+}
diff --git a/components/peers.js b/components/peers.js
new file mode 100644
index 0000000..4ed72d6
--- /dev/null
+++ b/components/peers.js
@@ -0,0 +1,142 @@
+const PeerMonitor = require('ipfs-pubsub-peer-monitor')
+
+module.exports = function peers (self) {
+ return {
+ _topic: 'RECORD',
+ _index: {},
+ _init: () => {
+ self.logger.info('[node] initializing peer monitor')
+ self._monitor = new PeerMonitor(self._ipfs.pubsub, self.peers._topic, self._options.pubsubMonitor)
+ self._monitor.on('join', self.peers._announceLogs)
+ self._monitor.on('leave', self.peers._onLeave)
+ self._monitor.on('error', (e) => self.logger.error(e))
+ self._ipfs.pubsub.subscribe(self.peers._topic, self.peers._onMessage)
+ },
+ _stop: async () => {
+ self.logger.info('[node] stop peer monitor')
+ self._monitor && await self._monitor.stop()
+ self._ipfs.pubsub.unsubscribe(self.peers._topic, self.peers._onMessage)
+ },
+ get: (address) => {
+ const peerIds = Object.keys(self.peers._index)
+ const peerLogs = []
+ for (const peerId of peerIds) {
+ peerLogs.push(self.peers._index[peerId].about)
+ self.peers._index[peerId].logs.forEach(l => peerLogs.push(l))
+ }
+ return peerLogs.find(p => p.content.address === address)
+ },
+ list: async () => {
+ const peerIds = Object.keys(self.peers._index)
+ const peers = []
+ const addPeer = async (about) => {
+ const peerLog = await self.logs.get({
+ sourceAddress: self.address,
+ targetAddress: about.content.address
+ })
+ peers.push(peerLog)
+ }
+
+ for (const peerId of peerIds) {
+ const peer = self.peers._index[peerId]
+ await addPeer(peer.about)
+ for (const about of peer.logs) {
+ await addPeer(about)
+ }
+ }
+
+ return peers
+ },
+ _announceLogs: async (peer) => {
+ const addresses = Object.keys(self._addresses)
+ const data = {
+ logs: []
+ }
+
+ data.about = await self.about.get(self.address)
+
+ for (const address of addresses) {
+ const isLocal = self.log.isLocal(address)
+ if (!isLocal) {
+ continue
+ }
+
+ const isEmpty = await self.log.isEmpty(address)
+ if (isEmpty) {
+ continue
+ }
+
+ const about = await self.about.get(address)
+ data.logs.push(about)
+ }
+ const message = JSON.stringify(data)
+ // TODO (low) send to specific peer when available
+ self._ipfs.pubsub.publish(self.peers._topic, message)
+ },
+ _onLeave: (peerId) => {
+ if (!self.peers._index[peerId]) {
+ return
+ }
+
+ const peer = self.peers._index[peerId]
+ delete self.peers._index[peerId]
+ const peerCount = Object.keys(self.peers._index).length
+ self.logger.info(`[node] record peer left, remaining: ${peerCount}`)
+
+ self.emit('redux', {
+ type: 'RECORD_PEER_LEFT',
+ payload: {
+ address: peer.about.content.address,
+ peerCount,
+ peerId
+ }
+ })
+
+ for (const about of peer.logs) {
+ self.emit('redux', {
+ type: 'RECORD_PEER_LEFT',
+ payload: { address: about.content.address, peerCount, peerId }
+ })
+ }
+ },
+ _add: async (about, peerId) => {
+ const { address } = about.content
+ if (!address) {
+ throw new Error('peer message missing address')
+ }
+
+ if (!self.isValidAddress(address)) {
+ return
+ }
+
+ await self.log.get(address, { replicate: false })
+ const peerCount = Object.keys(self.peers._index).length
+ self.emit('redux', {
+ type: 'RECORD_PEER_JOINED',
+ payload: { address: address, peerCount, peerId }
+ })
+ },
+ _onMessage: async (message) => {
+ try {
+ const str = Buffer.from(message.data).toString()
+ const data = JSON.parse(str)
+ self.peers._index[message.from] = data
+
+ await self.peers._add(data.about, message.from)
+
+ const peerCount = Object.keys(self.peers._index).length
+ for (const about of data.logs) {
+ try {
+ await self.peers._add(about, message.from)
+ } catch (e) {
+ self.logger.error(e)
+ }
+ }
+
+ self.logger.info(`[node] record peer added, current count: ${peerCount}`)
+ } catch (e) {
+ self.logger.error(e)
+ }
+ }
+ }
+}
diff --git a/components/tags.js b/components/tags.js
new file mode 100644
index 0000000..2702e73
--- /dev/null
+++ b/components/tags.js
@@ -0,0 +1,97 @@
+module.exports = function tags (self) {
+ return {
+ list: async (addresses = []) => {
+ if (!Array.isArray(addresses)) {
+ addresses = [addresses]
+ }
+
+ let sql = self._db('tags').groupBy('tag')
+ if (addresses.length) {
+ sql = sql.whereIn('address', addresses)
+ }
+
+ const tags = await sql
+
+ return tags
+ },
+
+ add: async (cid, tag) => {
+ if (!cid) {
+ throw new Error('missing cid')
+ }
+
+ if (!tag) {
+ throw new Error('missing tag')
+ }
+ self.logger.info(`[node] adding tag: ${tag}`)
+
+ const tracks = await self._db('tracks')
+ .innerJoin('entries', 'tracks.id', 'entries.key')
+ .where({ cid })
+ .where('tracks.address', self.address)
+ .limit(1)
+
+ let tags = []
+ if (tracks.length) {
+ const trackid = tracks[0].id
+ const rows = await self._db('tags')
+ .where({ address: self.address, trackid })
+
+ tags = rows.map(r => r.tag)
+ if (tags.includes(tag)) {
+ throw new Error('tag exists')
+ }
+ }
+ tags.push(tag)
+
+ const dagNode = await self._ipfs.dag.get(cid)
+ const content = dagNode.value
+ const log = self.log.mine()
+ const entry = await log.tracks.put(content, tags)
+ const track = await self.tracks._entryToTrack(entry, log.address.toString())
+ return track
+ },
+
+ remove: async (trackId, tag) => {
+ if (!trackId) {
+ throw new Error('missing trackId')
+ }
+
+ if (!tag) {
+ throw new Error('missing tag')
+ }
+
+ self.logger.info(`[node] removing tag: ${tag}`)
+
+ const rows = await self._db('tags')
+ .where({ address: self.address, trackid: trackId })
+
+ const tags = rows.map(r => r.tag)
+ const idx = tags.indexOf(tag)
+ if (idx === -1) {
+ throw new Error('tag does not exist')
+ }
+ tags.splice(idx, 1)
+
+ const tracks = await self._db('tracks')
+ .innerJoin('entries', 'tracks.id', 'entries.key')
+ .orderBy('clock', 'desc')
+ .orderBy('timestamp', 'desc')
+ .where('tracks.address', self.address)
+ .andWhere('id', trackId)
+ .limit(1)
+
+ if (!tracks.length) {
+ throw new Error('track does not exist')
+ }
+
+ const { cid } = tracks[0]
+ const dagNode = await self._ipfs.dag.get(cid)
+ const content = dagNode.value
+ const log = self.log.mine()
+ const entry = await log.tracks.put(content, tags)
+ const track = await self.tracks._entryToTrack(entry, log.address.toString())
+ return track
+ }
+ }
+}
diff --git a/components/tracks.js b/components/tracks.js
new file mode 100644
index 0000000..33270aa
--- /dev/null
+++ b/components/tracks.js
@@ -0,0 +1,447 @@
+const os = require('os')
+const fs = require('fs')
+const fsPromises = require('fs').promises
+const path = require('path')
+
+const peek = require('buffer-peek-stream')
+const fileType = require('file-type')
+const fetch = require('node-fetch')
+const fpcalc = require('fpcalc')
+const ffmpeg = require('fluent-ffmpeg')
+const musicMetadata = require('music-metadata')
+
+const { globSource } = require('ipfs-http-client')
+const { sha256 } = require('../utils')
+
+const orderByTrackIds = (array, trackIds) => {
+ array.sort((a, b) => {
+ if (trackIds.indexOf(a.key) > trackIds.indexOf(b.key)) {
+ return 1
+ } else {
+ return -1
+ }
+ })
+
+ return array
+}
+
+const getAcoustID = (filepath, options) => {
+ return new Promise((resolve, reject) => {
+ fpcalc(filepath, options, (err, result) => {
+ if (err) return reject(err)
+ resolve(result)
+ })
+ })
+}
+
+const removeTags = (inputPath, outputPath) => {
+ return new Promise((resolve, reject) => {
+ ffmpeg()
+ .input(inputPath)
+ .outputOptions([
+ '-map 0:a', // copy only audio (removes album art)
+ '-codec:a copy', // no encoding
+ '-bitexact', // prevent ffmpeg from writer encoder tag
+ '-map_metadata -1' // clear metadata
+ ])
+ .output(outputPath)
+ .on('error', reject)
+ .on('end', resolve)
+ .run()
+ })
+}
+
+const downloadFile = (resolverData) => {
+ return new Promise((resolve, reject) => {
+ let filepath
+ fetch(resolverData.url).then(res => {
+ if (!res.ok) {
+ return reject(new Error(`unexpected status code: ${res.status} - ${resolverData.url}`))
+ }
+
+ const peekBytes = 4100
+ peek(res.body, peekBytes, async (err, chunk, outputStream) => {
+ if (err) {
+ return reject(err)
+ }
+
+ const type = await fileType.fromBuffer(chunk)
+ const filename = `${resolverData.extractor}-${resolverData.id}.${type.ext}`
+ filepath = path.resolve(os.tmpdir(), filename)
+ const file = fs.createWriteStream(filepath)
+ file.on('error', (error) => reject(error))
+ file.on('finish', () => {
+ resolve(filepath)
+ })
+ outputStream.pipe(file)
+ })
+ }).catch(async (err) => {
+ if (filepath) {
+ await fsPromises.unlink(filepath)
+ }
+ reject(err)
+ })
+ })
+}
+
+module.exports = function tracks (self) {
+ return {
+ _init: () => {
+ if (self._options.ffmpegPath) {
+ self.logger.info(`[node] set ffmpeg path: ${self._options.ffmpegPath}`)
+ ffmpeg.setFfmpegPath(self._options.ffmpegPath)
+ }
+ },
+ _getIndexInfo: async (trackId) => {
+ const tracks = await self._db('tracks')
+ .innerJoin('entries', 'tracks.id', 'entries.key')
+ .orderBy('clock', 'desc')
+ .orderBy('timestamp', 'desc')
+ .limit(1)
+ .where({ id: trackId })
+ .andWhere('entries.address', self.address)
+
+ const tags = await self._db('tags')
+ .where({ trackid: trackId })
+
+ return { tracks, tags }
+ },
+ _entryToTrack: async (entry, address = self.address) => {
+ const indexInfo = await self.tracks._getIndexInfo(entry.payload.key)
+
+ const haveTrack = !!indexInfo.tracks.length
+ if (!self.isMe(address) && haveTrack) {
+ const log = self.log.mine()
+ entry = await log.getEntryWithContent(indexInfo.tracks[0].hash)
+ }
+
+ const selfTags = []
+ const externalTags = []
+ for (const { address, tag } of indexInfo.tags) {
+ if (address === self.address) {
+ selfTags.push({ address, tag })
+ } else {
+ externalTags.push({ address, tag })
+ }
+ }
+ const tags = selfTags.concat(externalTags)
+
+ entry.payload.value.haveTrack = haveTrack
+ entry.payload.value.tags = tags
+
+ const count = await self.listens.getCount(entry.payload.value.id)
+ entry.payload.value.listens = count.timestamps
+
+ // TODO (low) - re-enable
+ /* const cid = new CID(entry.payload.value.content.hash)
+ * entry.payload.value.isLocal = await self._ipfs.repo.has(cid)
+ */
+ return entry.payload.value
+ },
+
+ addTracksFromFS: async (filepath, { address } = {}) => {
+ self.logger.info(`[node] searching ${filepath} for tracks`)
+
+ let result = []
+ const stat = await fsPromises.stat(filepath)
+
+ if (stat.isFile()) {
+ try {
+ const track = await self.tracks.addTrackFromFile(filepath, { address })
+ result.push(track)
+ } catch (e) {
+ self.logger.error(e)
+ }
+ return result
+ }
+
+ if (stat.isDirectory()) {
+ const pathsInDir = await fsPromises.readdir(filepath)
+ self.logger.info(`[node] found ${pathsInDir.length} paths in ${filepath}`)
+ for (let i = 0; i < pathsInDir.length; i++) {
+ const tracks = await self.tracks.addTracksFromFS(
+ path.resolve(filepath, pathsInDir[i]),
+ { address }
+ )
+ result = tracks.concat(result)
+ }
+ }
+
+ return result
+ },
+ addTrackFromFile: async (filepath, { resolverData, address } = {}) => {
+ self.logger.info(`[node] adding track from ${filepath}`)
+ const acoustid = await getAcoustID(filepath, {
+ command: self._options.chromaprintPath
+ })
+ self.logger.info('[node] generated AcoustID Fingerprint')
+
+ const id = sha256(acoustid.fingerprint)
+
+ // check if already in this log, give that entry priority for now
+ // TODO (low) use existing entry if possible, prioritze own log over others
+ const entry = await self.tracks.get({ address, trackId: id })
+ if (entry) {
+ return entry
+ }
+
+ // TODO (low) - move to worker thread
+ const metadata = await musicMetadata.parseFile(filepath)
+ const pictures = metadata.common.picture
+ delete metadata.common.picture
+ self.logger.info('[node] extracted metadata')
+
+ const extension = path.extname(filepath)
+ const filename = path.parse(filepath).name
+ const processPath = path.resolve(os.tmpdir(), `${filename}-notags${extension}`)
+ await removeTags(filepath, processPath)
+ self.logger.info('[node] cleanded file tags')
+
+ let audioFile
+ for await (const file of self._ipfs.addAll(globSource(processPath))) {
+ audioFile = file
+ }
+ await fsPromises.unlink(processPath)
+ self.logger.info('[node] added audio to ipfs')
+
+ const results = []
+ if (pictures) {
+ for await (const file of self._ipfs.addAll(pictures.map(p => p.data))) {
+ results.push(file)
+ }
+ }
+ self.logger.info('[node] added artwork to ipfs')
+
+ const { size } = await self._ipfs.files.stat(`/ipfs/${audioFile.cid.toString()}`, { size: true })
+
+ const trackData = {
+ size,
+ hash: audioFile.cid,
+ tags: {
+ ...metadata.common,
+ acoustid_fingerprint: acoustid.fingerprint
+ },
+ audio: metadata.format,
+ artwork: results.map(r => r.cid),
+ resolver: []
+ }
+
+ await self._ipfs.pin.add(trackData.hash) // pin audio file
+ for (let i = 0; i < trackData.artwork.length; i++) {
+ await self._ipfs.pin.add(trackData.artwork[i]) // pin artwork
+ }
+
+ if (resolverData) {
+ delete resolverData.url
+ trackData.resolver = [resolverData]
+ }
+
+ return self.tracks.add(trackData, [], { address })
+ },
+
+ addTrackFromUrl: async (resolverData, { address = self.address } = {}) => {
+ if (typeof resolverData === 'string') {
+ self.logger.info(`[node] adding track from URL: ${resolverData}`)
+ resolverData = await self.resolve(resolverData)
+ }
+
+ if (!resolverData) {
+ return null
+ }
+
+ if (!Array.isArray(resolverData)) {
+ resolverData = [resolverData]
+ }
+
+ const log = self.log.mine()
+ const entries = []
+ for (const item of resolverData) {
+ const { extractor, id } = item
+ // TODO (low) - use existing entry
+ const rows = await self._db('tracks')
+ .innerJoin('entries', 'tracks.id', 'entries.key')
+ .innerJoin('resolvers', 'entries.key', 'resolvers.trackid')
+ .where({ extractor })
+ .andWhere('tracks.address', address)
+ .andWhere('resolvers.id', id)
+ .limit(1)
+
+ if (rows.length) {
+ const { hash } = rows[0]
+ const entry = await log.getEntryWithContent(hash)
+
+ if (entry) {
+ entries.push(await self.tracks._entryToTrack(entry))
+ continue
+ }
+ }
+
+ const filepath = await downloadFile(item)
+ // TODO (low) - hand off to importer
+ entries.push(await self.tracks.addTrackFromFile(filepath, { resolverData: item, address }))
+ }
+
+ return entries
+ },
+
+ addTrackFromCID: async (cid, { address } = {}) => {
+ self.logger.info(`[node] adding track from cid: ${cid}`)
+ const dagNode = await self._ipfs.dag.get(cid)
+ const content = dagNode.value
+ return self.tracks.add(content, { address })
+ },
+
+ add: async (trackData, { address } = {}) => {
+ const log = await self.log.get(address)
+ const entry = await log.tracks.put(trackData, [])
+ const track = await self.tracks._entryToTrack(entry, log.address.toString())
+ return track
+ },
+
+ get: async ({ address = self.address, trackId }) => {
+ const rows = await self._db('tracks')
+ .innerJoin('entries', 'tracks.id', 'entries.key')
+ .where({ key: trackId, type: 'track' })
+ .andWhere('tracks.address', address)
+ .orderBy('clock', 'desc')
+ .orderBy('timestamp', 'desc')
+ .limit(1)
+
+ if (!rows.length) {
+ return null
+ }
+
+ const { hash } = rows[0]
+ const log = await self.log.get(address, { replicate: false })
+ const entry = await log.getEntryWithContent(hash)
+
+ if (!entry) {
+ // TODO (low) handle / repair index
+ self.logger.info(`[node] ${address} missing ${hash}`)
+ return null
+ }
+
+ return self.tracks._entryToTrack(entry, address)
+ },
+
+ has: async (address, trackId) => {
+ const rows = await self._db('tracks')
+ .where({ address, id: trackId })
+ .limit(1)
+
+ return !!rows.length
+ },
+
+ remove: async (trackId, { address = self.address } = {}) => {
+ const has = await self.tracks.has(address, trackId)
+ if (!has) {
+ throw new Error(`track does not exist: ${trackId}`)
+ }
+
+ self.logger.info(`[node] removing track: ${trackId}`)
+ const log = await self.log.get(address)
+ const hash = await log.tracks.del(trackId)
+ return hash
+ },
+
+ list: async ({
+ addresses = [],
+ start = 0,
+ shuffle = false,
+ query = null,
+ tags = [],
+ limit = 20,
+ sort = null,
+ order = null
+ } = {}) => {
+ if (addresses && !Array.isArray(addresses)) {
+ addresses = [addresses]
+ }
+
+ if (tags && !Array.isArray(tags)) {
+ tags = [tags]
+ }
+
+ let sql = self._db('tracks')
+ .offset(start)
+ .limit(limit)
+
+ if (tags.length) {
+ let tagsSQL = self._db('tags')
+ .whereIn('tag', tags)
+ .groupBy('trackid')
+ .havingRaw('count(tags.trackid) = ?', tags.length)
+
+ if (addresses.length) {
+ tagsSQL = tagsSQL.whereIn('address', addresses)
+ }
+
+ const tagRows = await tagsSQL
+ const trackIds = tagRows.map(t => t.trackid)
+ sql = sql.whereIn('tracks.id', trackIds)
+ }
+
+ if (addresses.length) {
+ sql = sql.whereIn('tracks.address', addresses)
+ }
+
+ if (query) {
+ const searchTerm = `%${query}%`
+ sql = sql.leftJoin('resolvers', 'tracks.id', 'resolvers.trackid')
+ .where(function () {
+ this.orWhere('title', 'like', searchTerm)
+ this.orWhere('artist', 'like', searchTerm)
+ this.orWhere('album', 'like', searchTerm)
+ this.orWhere('remixer', 'like', searchTerm)
+ this.orWhere('fulltitle', 'like', searchTerm)
+ })
+ }
+
+ let entryRows
+ if (shuffle || (order && sort)) {
+ if (shuffle) {
+ sql = sql.orderByRaw('RANDOM()')
+ } else {
+ // TODO (high) validate sort
+ // TODO (high) validate order
+ if (sort === 'title') {
+ sql = sql.leftJoin('resolvers', 'tracks.id', 'resolvers.trackid')
+ .orderByRaw(`COALESCE(title, fulltitle) COLLATE NOCASE ${order}`)
+ } else {
+ sql = sql.orderByRaw(`${sort} COLLATE NOCASE ${order}`)
+ }
+ }
+
+ const rows = await sql.select('tracks.id')
+ const trackIds = rows.map(t => t.id)
+ entryRows = await self._db('entries')
+ .whereIn('key', trackIds)
+ .orderBy('clock', 'desc')
+ .orderBy('timestamp', 'desc')
+ .groupBy('key')
+
+ entryRows = orderByTrackIds(entryRows, trackIds)
+ } else {
+ entryRows = await sql.innerJoin('entries', 'tracks.id', 'entries.key')
+ .orderBy('clock', 'desc')
+ .orderBy('timestamp', 'desc')
+ .groupBy('key')
+ }
+
+ const entries = []
+ for (const row of entryRows) {
+ const log = await self.log.get(row.address, { replicate: false })
+ const entry = await log.getEntryWithContent(row.hash)
+ entries.push(entry)
+ }
+
+ const tracks = []
+ for (const entry of entries) {
+ const track = await self.tracks._entryToTrack(entry, entry.id)
+ tracks.push(track)
+ }
+
+ return tracks
+ }
+ }
+}
diff --git a/config.js b/config.js
new file mode 100644
index 0000000..69ca5be
--- /dev/null
+++ b/config.js
@@ -0,0 +1,47 @@
+const path = require('path')
+const os = require('os')
+
+const { RecordStore } = require('./store')
+const { version } = require('./package.json')
+
+const IS_TEST = process.env.NODE_ENV === 'test'
+const NOOP = () => {}
+
+module.exports = {
+ version,
+ id: undefined,
+ api: false,
+ address: 'record',
+ directory: path.resolve(os.homedir(), './.record'),
+ gcInterval: 10000000, // 10mb
+ chromaprintPath: null,
+ ffmpegPath: null,
+ youtubedlPath: null,
+ logger: {
+ info: IS_TEST ? NOOP : console.log,
+ error: IS_TEST ? NOOP : console.error
+ },
+ importer: {
+ enabled: false,
+ directory: null
+ },
+ pubsubMonitor: {
+ pollInterval: 5000
+ },
+ store: {
+ type: RecordStore.type,
+ referenceCount: 24,
+ replicationConcurrency: 128,
+ localOnly: false,
+ create: false,
+ overwrite: true,
+ syncLocal: true,
+ replicate: true
+ },
+ bitboot: {
+ enabled: true
+ },
+ orbitdb: {
+ directory: undefined
+ }
+}
diff --git a/errors.js b/errors.js
new file mode 100644
index 0000000..5506b24
--- /dev/null
+++ b/errors.js
@@ -0,0 +1,34 @@
+'use strict'
+
+class CannotOpenLogError extends Error {
+ constructor (message = 'can not open log') {
+ super(message)
+ this.name = 'CannotOpenLogError'
+ this.code = CannotOpenLogError.code
+ }
+}
+
+CannotOpenLogError.code = 'ERR_CAN_NOT_OPEN_LOG'
+exports.CannotOpenLogError = CannotOpenLogError
+
+class InvalidEntryTypeError extends Error {
+ constructor (message = 'invalid entry type') {
+ super(message)
+ this.name = 'InvalidEntryTypeError'
+ this.code = InvalidEntryTypeError.code
+ }
+}
+
+InvalidEntryTypeError.code = 'INVALID_ENTRY_TYPE'
+exports.InvalidEntryTypeError = InvalidEntryTypeError
+
+class DuplicateEntryError extends Error {
+ constructor (message = 'duplicate entry') {
+ super(message)
+ this.name = 'DuplicateEntryError'
+ this.code = DuplicateEntryError.code
+ }
+}
+
+DuplicateEntryError.code = 'DUPLICATE_ENTRY'
+exports.DuplicateEntryError = DuplicateEntryError
diff --git a/index.js b/index.js
index 508174d..21f0c9e 100644
--- a/index.js
+++ b/index.js
@@ -1,93 +1,351 @@
-const extend = require('deep-extend')
-const debug = require('debug')
+const EventEmitter = require('events')
+const path = require('path')
+const fs = require('fs')
+const crypto = require('libp2p-crypto')
+const extend = require('deep-extend')
+const OrbitDB = require('orbit-db')
const resolver = require('record-resolver')
+const Keystore = require('orbit-db-keystore')
+const Cache = require('orbit-db-cache')
+const Storage = require('orbit-db-storage-adapter')
+const Identities = require('orbit-db-identity-provider')
+const secp256k1 = require('secp256k1')
+const leveldown = require('leveldown')
+const { CID } = require('ipfs-http-client')
+const Errors = require('./errors')
+
+const manifestRe = /\/orbitdb\/[a-zA-Z0-9]+\/[^/]+\/_manifest/
const components = require('./components')
-const api = require('./api')
+const { sha256 } = require('./utils')
+const {
+ RecordStore,
+ ListensStore
+} = require('./store')
+const defaultConfig = require('./config')
-const RecordLog = require('./log')
+const createKey = async () => {
+ const keys = await crypto.keys.generateKeyPair('secp256k1', 256)
+ const decompressedKey = secp256k1.publicKeyConvert(Buffer.from(keys.public.marshal()), false)
+ return {
+ publicKey: decompressedKey.toString('hex'),
+ privateKey: keys.marshal().toString('hex'),
+ privateKeyBytes: keys.bytes.toString('hex')
+ }
+}
-const getDefaultConfig = () => {
- const defaults = {
- orbitPath: undefined,
- orbitAddress: undefined,
- logConfig: {
- create: true
- }
+const getKey = async (id, storage) => {
+ const keys = await storage.getKey(id)
+ const decompressedKey = secp256k1.publicKeyConvert(Buffer.from(keys.public.marshal()), false)
+ return {
+ publicKey: decompressedKey.toString('hex'),
+ privateKey: keys.marshal().toString('hex'),
+ privateKeyBytes: keys.bytes.toString('hex')
}
+}
- return defaults
+const createKeyFromPk = async (pk) => {
+ const keys = await crypto.keys.unmarshalPrivateKey(Buffer.from(pk, 'hex'))
+ const decompressedKey = secp256k1.publicKeyConvert(Buffer.from(keys.public.marshal()), false)
+ return {
+ publicKey: decompressedKey.toString('hex'),
+ privateKey: keys.marshal().toString('hex'),
+ privateKeyBytes: keys.bytes.toString('hex')
+ }
}
-class RecordNode {
- constructor (ipfs, OrbitDB, options = {}) {
- this.logger = debug('record:node')
- this.logger.log = console.log.bind(console) // log to stdout instead of stderr
- this.logger.err = debug('record:node:err')
+OrbitDB.addDatabaseType(RecordStore.type, RecordStore)
+OrbitDB.addDatabaseType(ListensStore.type, ListensStore)
- const defaults = getDefaultConfig()
- this._options = extend(defaults, options)
+class RecordNode extends EventEmitter {
+ constructor (options = {}) {
+ super()
- this.logger(this._options)
+ this._options = extend({}, defaultConfig, options)
+ const { logger, ...opts } = this._options
+ this.logger = logger
+ // exclude logger property from output
+ this.logger.info(JSON.stringify(opts, null, 2))
- this._ipfs = ipfs
- this._orbitdb = new OrbitDB(this._ipfs, this._options.orbitPath)
- this._log = new RecordLog(this._orbitdb, this._options.orbitAddress, this._options.logConfig)
+ this._options.orbitdb.storage = Storage(leveldown)
+ this._options.orbitdb.directory = path.resolve(this._options.directory, './orbitdb')
- this._contacts = {}
+ this.resolve = resolver
+ if (this._options.youtubedlPath) resolver.setYtdlBinary(this._options.youtubedlPath)
- /* const ipfsConfig = await this._ipfs.config.get()
- * const ipfsInfo = await this._ipfs.id()
- * this.logger(`IPFS ID: ${ipfsInfo.id}`)
- * this.logger(`IPFS Config: ${JSON.stringify(ipfsConfig, null, 2)}`)
- * this.logger(`Orbit ID: ${this._orbitdb.id}`)
- * this.logger(`Orbit Dir: ${this._orbitdb.directory}`)
- */
+ this.isValidAddress = OrbitDB.isValidAddress
+ this.parseAddress = OrbitDB.parseAddress
+ this.about = components.about(this)
+ this.bootstrap = components.bootstrap(this)
+ this.logs = components.logs(this)
+ this.indexer = components.indexer(this)
+ this.importer = components.importer(this)
this.info = components.info(this)
- this.resolve = resolver
+ this.listens = components.listens(this)
+ this.log = components.log(this)
+ this.tags = components.tags(this)
+ this.tracks = components.tracks(this)
+ this.peers = components.peers(this)
+
+ // A mapping of cached log addresses to access controller addresses
+ this._addresses = {}
+ this._gcLock = false
+ this._gcPosition = 0
+ this._bwStats = {}
+ this._repoStats = {}
if (this._options.api) {
- this._api = api(this)
+ this._api = components.api(this)
+ }
+
+ if (!fs.existsSync(this._options.directory)) {
+ fs.mkdirSync(this._options.directory, { recursive: true })
}
}
- async loadLog (logId, opts) {
- const log = await this.getLog(logId, opts)
- await log.load()
- this.logger(`Log Address: ${this._log._log.address}`)
+ static async createFromKey (pk, opts = {}) {
+ opts.key = await createKeyFromPk(pk)
+ return new RecordNode(opts)
+ }
+
+ get address () {
+ return this._log.address.toString()
+ }
+
+ get identity () {
+ return this._log.identity.id
+ }
- // TODO: cache?
- return log
+ isMe (address) {
+ return this.address === address
}
- syncContacts () {
- this.logger('Loading contacts to sync')
+ async init (ipfsd) {
+ this.logger.info('[node] initializing')
+ await this._startIPFS(ipfsd)
+ await this._init(this._options.key, this._options.address)
+ const ipfs = await this._ipfs.id()
+ this.emit('ready', {
+ id: this._id,
+ orbitdb: {
+ address: this._log.address.toString(),
+ publicKey: this._log.identity.publicKey
+ },
+ ipfs
+ })
+ }
+
+ async _startIPFS (ipfsd) {
+ this._ipfs = ipfsd.api
+ // ipfs.refs.local is too expensive
+ // cli: ipfs refs -r --offline
+ // cli: ipfs object stat --offline
+ this._ipfs.repo.has = ipfsd.hasLocal
+ this._ipfs.repo.stat().then(repoStats => { this._repoStats = repoStats })
+ }
+
+ async _init (key, address) {
+ await this._createKeystore()
+
+ if (!key) {
+ const id = this._options.id || this._id
+ if (id) {
+ key = await getKey(id, this._options.orbitdb.keystore)
+ } else {
+ key = await createKey()
+ }
+ }
+
+ this._id = sha256(key.publicKey)
+ await this._keyStorage.put(this._id, JSON.stringify(key))
+
+ this._options.orbitdb.identity = await Identities.createIdentity({
+ id: this._id,
+ keystore: this._options.orbitdb.keystore
+ })
+
+ await this._createCache()
+ await this._loadCache()
+
+ this._orbitdb = await OrbitDB.createInstance(this._ipfs, this._options.orbitdb)
+
+ await this.indexer._init()
+ await this.listens._init()
+ await this.log._init(address)
+ await this.importer.init()
+
+ this.bootstrap._init()
+ this.peers._init()
+ this.tracks._init()
+
+ for await (const stats of this._ipfs.stats.bw()) {
+ this._bwStats = stats
+ }
+ }
- this._log.contacts.all().forEach(async (contact) => {
- const { address } = contact.content
- if (this._contacts[address]) { return }
+ async stop () {
+ this.logger.info('[node] stopping')
+ const closeAPI = () => new Promise((resolve, reject) => {
+ if (!this._api) {
+ return resolve()
+ }
- this.logger(`Loading contact: ${address}`)
- const opts = { replicate: true }
- const log = new RecordLog(this._orbitdb, address, opts)
- await log.load()
- this._contacts[address] = log
+ this._api.close((err) => {
+ if (err) {
+ return reject(err)
+ }
+ resolve()
+ })
})
- this.logger(`All contacts loaded`)
+
+ try {
+ await Promise.all([
+ closeAPI(),
+ this.bootstrap._stop(),
+ this._orbitdb.stop(),
+ this.peers._stop()
+ ])
+ } catch (e) {
+ this.logger.error(e)
+ }
+ }
+
+ async restart () {
+ this.logger.info('[node] restarting')
+ await this.stop()
+ await this.start()
+ }
+
+ async start () {
+ this.logger.info('[node] starting')
+ const id = await this._ipfs.id()
+ if (!id) {
+ throw new Error('ipfs not available')
+ }
+
+ try {
+ await this._init(this._options.key, this._options.address)
+ } catch (e) {
+ this.logger.error(e)
+ }
+ }
+
+ async gc () {
+ if (this._gcLock) return
+
+ this.logger.info('[node] running garbage collect')
+ this._gcLock = true
+
+ for await (const stats of this._ipfs.stats.bw()) {
+ this._bwStats = stats
+ }
+
+ if (this._bwStats.totalIn.minus(this._gcPosition) > this._options.gcInterval) {
+ this.logger.info(`[node] running IPFS gc at ${this._gcPosition}`)
+ for await (const res of this._ipfs.repo.gc()) {
+ this.logger.info('[node] garbage collected:', res)
+ }
+ this._gcPosition = this._bwStats.totalIn.toNumber()
+ }
+
+ this._repoStats = await this._ipfs.repo.stat()
+ this._gcLock = false
+ }
+
+ async getKeys () {
+ const keys = await getKey(this._id, this._options.orbitdb.keystore)
+ return keys
+ }
+
+ async createIdentity () {
+ this.logger.info('[node] creating identity')
+ const keys = await createKey()
+ return this.setIdentity(keys.privateKeyBytes)
}
- async getLog (logId, options) {
- if (!logId || logId === '/me') {
- return this._log
+ async setIdentity (pk) {
+ await Promise.all([
+ this.bootstrap._stop(),
+ this._orbitdb.stop(),
+ this.peers._stop()
+ ])
+
+ const key = await createKeyFromPk(pk)
+ await this._init(key)
+
+ const data = {
+ id: this._id,
+ orbitdb: {
+ address: this._log.address.toString(),
+ publicKey: this._log.identity.publicKey
+ }
}
+ this.emit('id', data)
+ return data
+ }
- const defaults = { replicate: false, create: false }
- const opts = extend(defaults, options)
- const log = new RecordLog(this._orbitdb, logId, opts)
- return log
+ async _createKeystore () {
+ this.logger.info('[node] creating keystore')
+ const keystorePath = path.resolve(this._options.directory, './keystore')
+ if (!fs.existsSync(keystorePath)) {
+ fs.mkdirSync(keystorePath, { recursive: true })
+ }
+ this._keyStorage = await this._options.orbitdb.storage.createStore(keystorePath)
+ this._options.orbitdb.keystore = new Keystore(this._keyStorage)
+ }
+
+ async _createCache () {
+ this.logger.info('[node] creating cache')
+ const cachePath = path.resolve(this._options.directory, './cache')
+ if (!fs.existsSync(cachePath)) {
+ fs.mkdirSync(cachePath, { recursive: true })
+ }
+ this._cacheStorage = await this._options.orbitdb.storage.createStore(cachePath)
+ this._options.orbitdb.cache = new Cache(this._cacheStorage)
+ }
+
+ async _loadCache () {
+ this.logger.info('[node] loading cache')
+ const keys = []
+ this._cacheStorage.createKeyStream().on('data', (data) => {
+ const key = data.toString()
+ keys.push(key)
+ }).on('close', async () => {
+ const deleteAddresses = []
+
+ // Find log manifests to either load or delete from cache
+ for (const key of keys) {
+ if (key.match(manifestRe)) {
+ const value = await this._cacheStorage.get(key)
+ const manifestAddress = JSON.parse(value.toString())
+ const manifest = await this._ipfs.dag.get(new CID(manifestAddress))
+ const address = `/orbitdb/${manifestAddress}/${manifest.value.name}`
+ if (manifest.value.type === 'recordstore') {
+ const { accessController } = manifest.value
+ const haveAccessController = await this.log.haveAccessController(accessController)
+ if (haveAccessController) {
+ this._addresses[address] = accessController
+ } else {
+ deleteAddresses.push(address)
+ }
+ }
+ }
+ }
+
+ for (const key of keys) {
+ for (const address of deleteAddresses) {
+ const shouldDelete = key.includes(address)
+ if (shouldDelete) {
+ this.logger.info(`[node] deleting cache for stale log: ${key}`)
+ this._cacheStorage.del(key)
+ }
+ }
+ }
+ })
}
}
module.exports = RecordNode
+module.exports.Errors = Errors
diff --git a/log/ContactEntry.js b/log/ContactEntry.js
deleted file mode 100644
index dbc19f2..0000000
--- a/log/ContactEntry.js
+++ /dev/null
@@ -1,18 +0,0 @@
-const { sha256 } = require('crypto-hash')
-
-const Entry = require('./Entry')
-
-class ContactEntry extends Entry {
- constructor (data) {
- super(data)
-
- this._type = 'contact'
- }
-
- async create (data) {
- const id = await sha256(data.address)
- return super.create(id, this._type, data)
- }
-}
-
-module.exports = ContactEntry
diff --git a/log/Entry.js b/log/Entry.js
deleted file mode 100644
index 0d65fc9..0000000
--- a/log/Entry.js
+++ /dev/null
@@ -1,22 +0,0 @@
-class Entry {
- constructor (data) {
- this._data = data
- }
-
- create (id, type, data) {
- this._data = {
- _id: id,
- type,
- timestamp: Date.now(),
- content: data
- }
-
- return this._data
- }
-
- get () {
- return this._data
- }
-}
-
-module.exports = Entry
diff --git a/log/TrackEntry.js b/log/TrackEntry.js
deleted file mode 100644
index 238a4fd..0000000
--- a/log/TrackEntry.js
+++ /dev/null
@@ -1,18 +0,0 @@
-const { sha256 } = require('crypto-hash')
-
-const Entry = require('./Entry')
-
-class TrackEntry extends Entry {
- constructor (data) {
- super(data)
-
- this._type = 'track'
- }
-
- async create (data) {
- const id = await sha256(data.webpage_url)
- return super.create(id, this._type, data)
- }
-}
-
-module.exports = TrackEntry
diff --git a/log/contacts.js b/log/contacts.js
deleted file mode 100644
index 390b4eb..0000000
--- a/log/contacts.js
+++ /dev/null
@@ -1,49 +0,0 @@
-const ContactEntry = require('./ContactEntry')
-
-module.exports = function (self) {
- function filterEntries (mapper) {
- return (doc) => {
- if (doc.type !== 'contact') { return false }
-
- return mapper ? mapper(doc) : true
- }
- }
-
- return {
- all: (mapper) => {
- const all = self._log.query(filterEntries(mapper))
- return all
- },
-
- findOrCreate: async function (data) {
- const entry = await new ContactEntry().create(data)
- let contact = this.get(entry._id)
-
- if (contact.length) { return contact }
-
- const hash = await this.add(data)
- contact = this.get(entry._id)
- return contact
- },
-
- add: async (data) => {
- const entry = await new ContactEntry().create(data)
- const hash = await self._log.put(entry)
-
- // TODO:
- // self.syncContacts()
-
- return hash
- },
-
- get: (key) => {
- const data = self._log.get(key)
- return data
- },
-
- del: async (key) => {
- const hash = await self._log.del(key)
- return hash
- }
- }
-}
diff --git a/log/index.js b/log/index.js
deleted file mode 100644
index 6d6ed55..0000000
--- a/log/index.js
+++ /dev/null
@@ -1,30 +0,0 @@
-const extend = require('deep-extend')
-
-const tracks = require('./tracks')
-const contacts = require('./contacts')
-
-const defaultOptions = {
- replicationConcurrency: 128,
- replicate: true
-}
-
-class RecordLog {
- constructor (orbitdb, address = 'record', options = {}) {
- this._orbitdb = orbitdb
- this._address = address
- this._options = extend(defaultOptions, options)
-
- this.tracks = tracks(this)
- this.contacts = contacts(this)
- }
-
- async load () {
- this._log = await this._orbitdb.docs(this._address, this._options)
- this.address = this._log.address
- this.key = this._log.key
-
- await this._log.load()
- }
-}
-
-module.exports = RecordLog
diff --git a/log/tracks.js b/log/tracks.js
deleted file mode 100644
index 9bc219a..0000000
--- a/log/tracks.js
+++ /dev/null
@@ -1,49 +0,0 @@
-const TrackEntry = require('./TrackEntry')
-
-module.exports = function (self) {
- function filterEntries (mapper) {
- return (doc) => {
- if (doc.type !== 'track') { return false }
-
- return mapper ? mapper(doc) : true
- }
- }
-
- return {
- all: (mapper) => {
- const all = self._log.query(filterEntries(mapper))
- return all
- },
-
- findOrCreate: async function (data) {
- const entry = await new TrackEntry().create(data)
- let track = this.get(entry._id)
-
- if (track.length) { return track }
-
- const hash = await this.add(data)
- track = this.get(entry._id)
- return track
- },
-
- add: async (data) => {
- const entry = await new TrackEntry().create(data)
- const hash = await self._log.put(entry)
- return hash
- },
-
- get: (key) => {
- const data = self._log.get(key)
- return data
- },
-
- del: async (key) => {
- const hash = await self._log.del(key)
- return hash
- },
-
- crate: () => {
- return this.all((doc) => doc.content.crate === true)
- }
- }
-}
diff --git a/migrations/0.js b/migrations/0.js
new file mode 100644
index 0000000..32862f5
--- /dev/null
+++ b/migrations/0.js
@@ -0,0 +1,74 @@
+exports.up = async function (knex) {
+ await knex.schema.createTable('logs', (table) => {
+ table.text('id').notNullable().unique()
+ table.text('address').primary()
+ table.text('name').nullable()
+ table.text('location').nullable()
+ table.text('bio').nullable()
+ table.text('avatar').nullable()
+ })
+
+ await knex.schema.createTable('tracks', (table) => {
+ table.text('address').notNullable()
+ table.text('id').notNullable()
+ table.text('title').nullable()
+ table.text('artist').nullable()
+ table.text('artists').nullable()
+ table.text('albumartist').nullable()
+ table.text('album').nullable()
+ table.text('remixer').nullable()
+ table.integer('bpm').nullable()
+ table.integer('duration').notNullable()
+ table.integer('bitrate').notNullable()
+ table.unique(['address', 'id'])
+ })
+
+ await knex.schema.createTable('resolvers', (table) => {
+ table.text('trackid').notNullable()
+ table.text('extractor').notNullable()
+ table.text('fulltitle').notNullable()
+ table.text('id').notNullable()
+ table.unique(['trackid', 'extractor', 'id'])
+ })
+
+ await knex.schema.createTable('entries', (table) => {
+ table.text('address').notNullable().index()
+ table.text('hash').notNullable().unique()
+ table.text('type').notNullable()
+ table.text('op').notNullable()
+ table.integer('clock').notNullable()
+ table.text('key').notNullable().index()
+ table.text('cid').nullable().index()
+ table.integer('timestamp').notNullable()
+ })
+
+ await knex.schema.createTable('tags', (table) => {
+ table.text('address').notNullable()
+ table.text('trackid').notNullable()
+ table.text('tag').notNullable()
+ table.unique(['address', 'trackid', 'tag'])
+ })
+
+ await knex.schema.createTable('links', (table) => {
+ table.text('address').notNullable()
+ table.text('link').notNullable()
+ table.text('id').notNullable()
+ table.text('alias').nullable()
+ table.unique(['address', 'link', 'id'])
+ })
+
+ await knex.schema.createTable('listens', (table) => {
+ table.text('trackid').index().notNullable()
+ table.integer('timestamp').notNullable()
+ })
+}
+
+exports.down = async function (knex) {
+ await knex.schema.dropTable('links')
+ await knex.schema.dropTable('tags')
+ await knex.schema.dropTable('resolvers')
+ await knex.schema.dropTable('tracks')
+ await knex.schema.dropTable('entries')
+ await knex.schema.dropTable('logs')
+ await knex.schema.dropTable('listens')
+}
diff --git a/migrations/index.js b/migrations/index.js
new file mode 100644
index 0000000..6b54ffe
--- /dev/null
+++ b/migrations/index.js
@@ -0,0 +1,19 @@
+const migrations = {
+ 0: require('./0')
+}
+
+class MigrationSource {
+ getMigrations () {
+ return Promise.resolve(Object.keys(migrations))
+ }
+
+ getMigrationName (migration) {
+ return migration
+ }
+
+ getMigration (migration) {
+ return migrations[migration]
+ }
+}
+
+module.exports = MigrationSource
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index ce853af..0000000
--- a/package-lock.json
+++ /dev/null
@@ -1,10029 +0,0 @@
-{
- "name": "record-node",
- "version": "0.0.1",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "@types/node": {
- "version": "10.5.1",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-10.5.1.tgz",
- "integrity": "sha512-AFLl1IALIuyt6oK4AYZsgWVJ/5rnyzQWud7IebaZWWV3YmgtPZkQmYio9R5Ze/2pdd7XfqF5bP+hWS11mAKoOQ=="
- },
- "abstract-leveldown": {
- "version": "0.12.4",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz",
- "integrity": "sha1-KeGOYy5g5OIh1YECR4UqY9ey5BA=",
- "dev": true,
- "requires": {
- "xtend": "~3.0.0"
- },
- "dependencies": {
- "xtend": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
- "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=",
- "dev": true
- }
- }
- },
- "accept": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/accept/-/accept-2.1.4.tgz",
- "integrity": "sha1-iHr1TO7lx/RDBGGXHsQAxh0JrLs=",
- "dev": true,
- "requires": {
- "boom": "5.x.x",
- "hoek": "4.x.x"
- },
- "dependencies": {
- "boom": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
- "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
- "dev": true,
- "requires": {
- "hoek": "4.x.x"
- }
- },
- "hoek": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
- "dev": true
- }
- }
- },
- "accepts": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
- "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
- "requires": {
- "mime-types": "~2.1.18",
- "negotiator": "0.6.1"
- }
- },
- "acorn": {
- "version": "5.5.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz",
- "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==",
- "dev": true
- },
- "acorn-jsx": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
- "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
- "dev": true,
- "requires": {
- "acorn": "^3.0.4"
- },
- "dependencies": {
- "acorn": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
- "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
- "dev": true
- }
- }
- },
- "after": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
- "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
- "dev": true
- },
- "ajv": {
- "version": "5.5.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
- "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
- "requires": {
- "co": "^4.6.0",
- "fast-deep-equal": "^1.0.0",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.3.0"
- }
- },
- "ajv-keywords": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
- "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
- "dev": true
- },
- "ammo": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/ammo/-/ammo-2.0.4.tgz",
- "integrity": "sha1-v4CqshFpjqePY+9efxE91dnokX8=",
- "dev": true,
- "requires": {
- "boom": "5.x.x",
- "hoek": "4.x.x"
- },
- "dependencies": {
- "boom": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
- "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
- "dev": true,
- "requires": {
- "hoek": "4.x.x"
- }
- },
- "hoek": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
- "dev": true
- }
- }
- },
- "ansi-align": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
- "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
- "dev": true,
- "requires": {
- "string-width": "^2.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "ansi-escapes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
- "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==",
- "dev": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "aproba": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
- "dev": true
- },
- "are-we-there-yet": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
- "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
- "dev": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "requires": {
- "sprintf-js": "~1.0.2"
- },
- "dependencies": {
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
- "dev": true
- }
- }
- },
- "array-flatten": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
- },
- "array-includes": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz",
- "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.2",
- "es-abstract": "^1.7.0"
- }
- },
- "array-union": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
- "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
- "dev": true,
- "requires": {
- "array-uniq": "^1.0.1"
- }
- },
- "array-uniq": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
- "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
- "dev": true
- },
- "arraybuffer.slice": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
- "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==",
- "dev": true
- },
- "arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
- "dev": true
- },
- "asap": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
- "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
- "dev": true
- },
- "asn1": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
- "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
- },
- "asn1.js": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.0.0.tgz",
- "integrity": "sha512-Y+FKviD0uyIWWo/xE0XkUl0x1allKFhzEVJ+//2Dgqpy+n+B77MlPNqvyk7Vx50M9XyVzjnRhDqJAEAsyivlbA==",
- "dev": true,
- "requires": {
- "bn.js": "^4.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0"
- }
- },
- "assert": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
- "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
- "dev": true,
- "requires": {
- "util": "0.10.3"
- }
- },
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
- },
- "async": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
- "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
- "requires": {
- "lodash": "^4.14.0"
- }
- },
- "async-limiter": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
- "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
- "dev": true
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
- },
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
- },
- "aws4": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz",
- "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w=="
- },
- "b64": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/b64/-/b64-3.0.3.tgz",
- "integrity": "sha512-Pbeh0i6OLubPJdIdCepn8ZQHwN2MWznZHbHABSTEfQ706ie+yuxNSaPdqX1xRatT6WanaS1EazMiSg0NUW2XxQ==",
- "dev": true
- },
- "babel-code-frame": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
- "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "esutils": "^2.0.2",
- "js-tokens": "^3.0.2"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- }
- },
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
- }
- }
- },
- "backo2": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
- "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
- "dev": true
- },
- "balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
- "dev": true
- },
- "base-x": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.4.tgz",
- "integrity": "sha512-UYOadoSIkEI/VrRGSG6qp93rp2WdokiAiNYDfGW5qURAY8GiAQkvMbwNNSDYiVJopqv4gCna7xqf4rrNGp+5AA==",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "base32.js": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/base32.js/-/base32.js-0.1.0.tgz",
- "integrity": "sha1-tYLexpPC8R6JPPBk7mrFthMaIgI=",
- "dev": true
- },
- "base64-arraybuffer": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
- "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=",
- "dev": true
- },
- "base64id": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
- "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=",
- "dev": true
- },
- "basic-auth": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz",
- "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=",
- "requires": {
- "safe-buffer": "5.1.1"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
- "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
- }
- }
- },
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
- "optional": true,
- "requires": {
- "tweetnacl": "^0.14.3"
- },
- "dependencies": {
- "tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
- "optional": true
- }
- }
- },
- "bech32": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.3.tgz",
- "integrity": "sha512-yuVFUvrNcoJi0sv5phmqc6P+Fl1HjRDRNOOkHY2X/3LBy2bIGNSFx4fZ95HMaXHupuS7cZR15AsvtmCIF4UEyg==",
- "dev": true
- },
- "better-assert": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
- "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
- "dev": true,
- "requires": {
- "callsite": "1.0.0"
- }
- },
- "big.js": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.1.2.tgz",
- "integrity": "sha512-qG6ZOc1lY84Bn8p/z9xvJisj9F4PRyo0pOGqGNYc7gS3p1WciS/3XcLuNI3Z/yYZpMNFhHeX3YNENwgrQq0NTA==",
- "dev": true
- },
- "bigi": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz",
- "integrity": "sha1-nGZalfiLiwj8Bc/XMfVhhZ1yWCU=",
- "dev": true
- },
- "bignumber.js": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-6.0.0.tgz",
- "integrity": "sha512-x247jIuy60/+FtMRvscqfxtVHQf8AGx2hm9c6btkgC0x/hp9yt+teISNhvF8WlwRkCc5yF2fDECH8SIMe8j+GA==",
- "dev": true
- },
- "binary-querystring": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/binary-querystring/-/binary-querystring-0.1.2.tgz",
- "integrity": "sha512-mrot/6OS3YIUSWMyv/9uyMbCDYQWxl+fVDsrJFjPFGcVT0xDCdEg/gbN6eguaCr0UqsuXdtJ3DQ3i2z2alnulg==",
- "dev": true
- },
- "bindings": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz",
- "integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==",
- "dev": true
- },
- "bintrees": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.1.tgz",
- "integrity": "sha1-DmVcm5wkNeqraL9AJyJtK1WjRSQ=",
- "dev": true
- },
- "bip66": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz",
- "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "bitcoin-ops": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/bitcoin-ops/-/bitcoin-ops-1.4.1.tgz",
- "integrity": "sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow==",
- "dev": true
- },
- "bitcoinjs-lib": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-3.3.2.tgz",
- "integrity": "sha512-l5qqvbaK8wwtANPf6oEffykycg4383XgEYdia1rI7/JpGf1jfRWlOUCvx5TiTZS7kyIvY4j/UhIQ2urLsvGkzw==",
- "dev": true,
- "requires": {
- "bech32": "^1.1.2",
- "bigi": "^1.4.0",
- "bip66": "^1.1.0",
- "bitcoin-ops": "^1.3.0",
- "bs58check": "^2.0.0",
- "create-hash": "^1.1.0",
- "create-hmac": "^1.1.3",
- "ecurve": "^1.0.0",
- "merkle-lib": "^2.0.10",
- "pushdata-bitcoin": "^1.0.1",
- "randombytes": "^2.0.1",
- "safe-buffer": "^5.0.1",
- "typeforce": "^1.11.3",
- "varuint-bitcoin": "^1.0.4",
- "wif": "^2.0.1"
- }
- },
- "bl": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
- "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
- "dev": true,
- "requires": {
- "readable-stream": "^2.3.5",
- "safe-buffer": "^5.1.1"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- }
- }
- },
- "blakejs": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.0.tgz",
- "integrity": "sha1-ad+S75U6qIylGjLfarHFShVfx6U=",
- "dev": true
- },
- "blob": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz",
- "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=",
- "dev": true
- },
- "bn.js": {
- "version": "4.11.8",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
- "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
- "dev": true
- },
- "body-parser": {
- "version": "1.18.3",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
- "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
- "requires": {
- "bytes": "3.0.0",
- "content-type": "~1.0.4",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "http-errors": "~1.6.3",
- "iconv-lite": "0.4.23",
- "on-finished": "~2.3.0",
- "qs": "6.5.2",
- "raw-body": "2.3.3",
- "type-is": "~1.6.16"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "iconv-lite": {
- "version": "0.4.23",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
- "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- }
- }
- },
- "boolbase": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
- "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
- },
- "boom": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/boom/-/boom-7.2.0.tgz",
- "integrity": "sha1-K/8kpVVldn/ehp7ICDF+sQxI6WY=",
- "dev": true,
- "requires": {
- "hoek": "5.x.x"
- }
- },
- "borc": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/borc/-/borc-2.0.3.tgz",
- "integrity": "sha512-2mfipKUXn7yLgwn8D5jZkJqd2ZyzqmYZQX/9d4On33oGNDLwxj5qQMst+nkKyEdaujQRFfrZCId+k8wehQVANg==",
- "dev": true,
- "requires": {
- "bignumber.js": "^6.0.0",
- "commander": "^2.15.0",
- "ieee754": "^1.1.8",
- "json-text-sequence": "^0.1"
- }
- },
- "boxen": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
- "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==",
- "dev": true,
- "requires": {
- "ansi-align": "^2.0.0",
- "camelcase": "^4.0.0",
- "chalk": "^2.0.1",
- "cli-boxes": "^1.0.0",
- "string-width": "^2.0.0",
- "term-size": "^1.2.0",
- "widest-line": "^2.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "brorand": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
- "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
- "dev": true
- },
- "browserify-aes": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
- "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
- "dev": true,
- "requires": {
- "buffer-xor": "^1.0.3",
- "cipher-base": "^1.0.0",
- "create-hash": "^1.1.0",
- "evp_bytestokey": "^1.0.3",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "bs58": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz",
- "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=",
- "dev": true,
- "requires": {
- "base-x": "^3.0.2"
- }
- },
- "bs58check": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.1.tgz",
- "integrity": "sha512-okRQiWc5FJuA2VOwQ1hB7Sf0MyEFg/EwRN12h4b8HrJoGkZ3xq1CGjkaAfYloLcZyqixQnO5mhPpN6IcHSplVg==",
- "dev": true,
- "requires": {
- "bs58": "^4.0.0",
- "create-hash": "^1.1.0"
- }
- },
- "buffer-alloc": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.1.0.tgz",
- "integrity": "sha1-BVFNM78WVtNUDGhPZbEgLpDsowM=",
- "dev": true,
- "requires": {
- "buffer-alloc-unsafe": "^0.1.0",
- "buffer-fill": "^0.1.0"
- }
- },
- "buffer-alloc-unsafe": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-0.1.1.tgz",
- "integrity": "sha1-/+H2dVHdBVc33iUzN7/oU9+rGmo=",
- "dev": true
- },
- "buffer-fill": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-0.1.1.tgz",
- "integrity": "sha512-YgBMBzdRLEfgxJIGu2wrvI2E03tMCFU1p7d1KhB4BOoMN0VxmTFjSyN5JtKt9z8Z9JajMHruI6SE25W96wNv7Q==",
- "dev": true
- },
- "buffer-from": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz",
- "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==",
- "dev": true
- },
- "buffer-indexof": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-0.0.2.tgz",
- "integrity": "sha1-7Q82t64WamanzRdMBGeuje3wCPU=",
- "dev": true
- },
- "buffer-loader": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/buffer-loader/-/buffer-loader-0.0.1.tgz",
- "integrity": "sha1-TWd8qS3YiTEIeLAqL7z6txICTPI=",
- "dev": true
- },
- "buffer-split": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/buffer-split/-/buffer-split-1.0.0.tgz",
- "integrity": "sha1-RCfb/1NzG2HXpxq6R/UDOWYTeEo=",
- "dev": true,
- "requires": {
- "buffer-indexof": "~0.0.0"
- }
- },
- "buffer-xor": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
- "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
- "dev": true
- },
- "builtin-modules": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
- "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
- "dev": true
- },
- "builtin-status-codes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
- "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
- "dev": true
- },
- "byteman": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/byteman/-/byteman-1.3.5.tgz",
- "integrity": "sha512-FzWDstifFRxtHX234b93AGa1b77dA6NUFpEXe+AoG1NydGN//XDZLMXxRNUoMf7SYYhVxfpwUEUgQOziearJvA==",
- "dev": true
- },
- "bytes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
- "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
- },
- "call": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/call/-/call-4.0.2.tgz",
- "integrity": "sha1-33b19R7o3Ui4VqyEAPfmnm1zmcQ=",
- "dev": true,
- "requires": {
- "boom": "5.x.x",
- "hoek": "4.x.x"
- },
- "dependencies": {
- "boom": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
- "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
- "dev": true,
- "requires": {
- "hoek": "4.x.x"
- }
- },
- "hoek": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
- "dev": true
- }
- }
- },
- "caller-path": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
- "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
- "dev": true,
- "requires": {
- "callsites": "^0.2.0"
- }
- },
- "callsite": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
- "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
- "dev": true
- },
- "callsites": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
- "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
- "dev": true
- },
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
- },
- "capture-stack-trace": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz",
- "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=",
- "dev": true
- },
- "caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
- },
- "catbox": {
- "version": "7.1.5",
- "resolved": "https://registry.npmjs.org/catbox/-/catbox-7.1.5.tgz",
- "integrity": "sha512-4fui5lELzqZ+9cnaAP/BcqXTH6LvWLBRtFhJ0I4FfgfXiSaZcf6k9m9dqOyChiTxNYtvLk7ZMYSf7ahMq3bf5A==",
- "dev": true,
- "requires": {
- "boom": "5.x.x",
- "hoek": "4.x.x",
- "joi": "10.x.x"
- },
- "dependencies": {
- "boom": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
- "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
- "dev": true,
- "requires": {
- "hoek": "4.x.x"
- }
- },
- "hoek": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
- "dev": true
- },
- "joi": {
- "version": "10.6.0",
- "resolved": "https://registry.npmjs.org/joi/-/joi-10.6.0.tgz",
- "integrity": "sha512-hBF3LcqyAid+9X/pwg+eXjD2QBZI5eXnBFJYaAkH4SK3mp9QSRiiQnDYlmlz5pccMvnLcJRS4whhDOTCkmsAdQ==",
- "dev": true,
- "requires": {
- "hoek": "4.x.x",
- "isemail": "2.x.x",
- "items": "2.x.x",
- "topo": "2.x.x"
- }
- }
- }
- },
- "catbox-memory": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/catbox-memory/-/catbox-memory-2.0.4.tgz",
- "integrity": "sha1-Qz4lWQLK9UIz0ShkKcj03xToItU=",
- "dev": true,
- "requires": {
- "hoek": "4.x.x"
- },
- "dependencies": {
- "hoek": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
- "dev": true
- }
- }
- },
- "chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "chardet": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
- "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
- "dev": true
- },
- "cheerio": {
- "version": "1.0.0-rc.2",
- "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz",
- "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=",
- "requires": {
- "css-select": "~1.2.0",
- "dom-serializer": "~0.1.0",
- "entities": "~1.1.1",
- "htmlparser2": "^3.9.1",
- "lodash": "^4.15.0",
- "parse5": "^3.0.1"
- }
- },
- "chownr": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz",
- "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=",
- "dev": true
- },
- "chunky": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/chunky/-/chunky-0.0.0.tgz",
- "integrity": "sha1-HnWAojwIOJfSrWYkWefv2EZfYIo=",
- "dev": true
- },
- "ci-info": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz",
- "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==",
- "dev": true
- },
- "cids": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/cids/-/cids-0.5.3.tgz",
- "integrity": "sha512-ujWbNP8SeLKg5KmGrxYZM4c+ttd+wwvegrdtgmbi2KNFUbQN4pqsGZaGQE3rhjayXTbKFq36bYDbKhsnD0eMsg==",
- "dev": true,
- "requires": {
- "multibase": "~0.4.0",
- "multicodec": "~0.2.6",
- "multihashes": "~0.4.13"
- }
- },
- "cipher-base": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
- "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "circular-json": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
- "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
- "dev": true
- },
- "class-is": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz",
- "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==",
- "dev": true
- },
- "cli-boxes": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
- "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=",
- "dev": true
- },
- "cli-cursor": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
- "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
- "dev": true,
- "requires": {
- "restore-cursor": "^2.0.0"
- }
- },
- "cli-width": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
- "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
- "dev": true
- },
- "cliui": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
- "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
- "requires": {
- "string-width": "^2.1.1",
- "strip-ansi": "^4.0.0",
- "wrap-ansi": "^2.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "co": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
- },
- "code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
- },
- "color-convert": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
- "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
- "dev": true,
- "requires": {
- "color-name": "^1.1.1"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "combined-stream": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
- "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "commander": {
- "version": "2.15.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
- "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
- "dev": true
- },
- "component-bind": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
- "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=",
- "dev": true
- },
- "component-emitter": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
- "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
- "dev": true
- },
- "component-inherit": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
- "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=",
- "dev": true
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
- },
- "concat-stream": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
- "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
- }
- },
- "configstore": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz",
- "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==",
- "dev": true,
- "requires": {
- "dot-prop": "^4.1.0",
- "graceful-fs": "^4.1.2",
- "make-dir": "^1.0.0",
- "unique-string": "^1.0.0",
- "write-file-atomic": "^2.0.0",
- "xdg-basedir": "^3.0.0"
- }
- },
- "console-control-strings": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
- "dev": true
- },
- "contains-path": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
- "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
- "dev": true
- },
- "content": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/content/-/content-3.0.7.tgz",
- "integrity": "sha512-LXtnSnvE+Z1Cjpa3P9gh9kb396qV4MqpfwKy777BOSF8n6nw2vAi03tHNl0/XRqZUyzVzY/+nMXOZVnEapWzdg==",
- "dev": true,
- "requires": {
- "boom": "5.x.x"
- },
- "dependencies": {
- "boom": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
- "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
- "dev": true,
- "requires": {
- "hoek": "4.x.x"
- }
- },
- "hoek": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
- "dev": true
- }
- }
- },
- "content-disposition": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
- "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
- },
- "content-type": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
- "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
- },
- "cookie": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
- "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
- },
- "cookie-signature": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
- },
- "core-js": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
- "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=",
- "dev": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
- },
- "crdts": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/crdts/-/crdts-0.1.5.tgz",
- "integrity": "sha512-4Z/dQqa9qzMPlrE+zd0ecl53QFwaTZVVYTUgxvpF0k8OcOy4HY7c+C9brXp81eigLE0EKENTVp3CjIMY9b/ezg==",
- "dev": true
- },
- "create-error-class": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
- "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
- "dev": true,
- "requires": {
- "capture-stack-trace": "^1.0.0"
- }
- },
- "create-hash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
- "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
- "dev": true,
- "requires": {
- "cipher-base": "^1.0.1",
- "inherits": "^2.0.1",
- "md5.js": "^1.3.4",
- "ripemd160": "^2.0.1",
- "sha.js": "^2.4.0"
- }
- },
- "create-hmac": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
- "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
- "dev": true,
- "requires": {
- "cipher-base": "^1.0.3",
- "create-hash": "^1.1.0",
- "inherits": "^2.0.1",
- "ripemd160": "^2.0.0",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- }
- },
- "cross-spawn": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
- "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
- "requires": {
- "lru-cache": "^4.0.1",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "cryptiles": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
- "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
- "dev": true,
- "requires": {
- "boom": "5.x.x"
- },
- "dependencies": {
- "boom": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
- "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
- "dev": true,
- "requires": {
- "hoek": "4.x.x"
- }
- },
- "hoek": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
- "dev": true
- }
- }
- },
- "crypto-hash": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/crypto-hash/-/crypto-hash-0.1.0.tgz",
- "integrity": "sha512-Ja2zFqujqKLsr5G+g3BeyTY9whJmbtdGFkgXjTOqUj9BWhdYGuQyi5F0EqPVh5/Dqit5oEMUTl6gmMbhn1j5pQ=="
- },
- "crypto-random-string": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
- "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
- "dev": true
- },
- "css-select": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
- "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
- "requires": {
- "boolbase": "~1.0.0",
- "css-what": "2.1",
- "domutils": "1.5.1",
- "nth-check": "~1.0.1"
- }
- },
- "css-what": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz",
- "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0="
- },
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "data-queue": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/data-queue/-/data-queue-0.0.3.tgz",
- "integrity": "sha512-6YOUFa/+lXklPO42RF4zIzzphG01Jp1eoWolzkQb6z5oVsSThLibZ63VmAze3KuIMTglFt551q8j0Zaswx5vGQ==",
- "dev": true
- },
- "datastore-core": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/datastore-core/-/datastore-core-0.4.0.tgz",
- "integrity": "sha512-BQC3f2jSUgVL1DUjt/ZJr9yWzNYyx3ApNh4NhMYFZBap0c+iTKJqyHRlO4bRT+CZG0mqqOUTNXU3qYvTJlN6OA==",
- "dev": true,
- "requires": {
- "async": "^2.5.0",
- "interface-datastore": "~0.4.0",
- "left-pad": "^1.1.3",
- "pull-many": "^1.0.8",
- "pull-stream": "^3.6.1"
- }
- },
- "datastore-fs": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/datastore-fs/-/datastore-fs-0.4.2.tgz",
- "integrity": "sha512-mJ511KiZP1zrkEnCvMqvrurW6YSf3QT4P3bdGVftPl+DeaGxC/gdwj8DE9cWsmyD6E1a50jU2Q8IqhaZGNEBbg==",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "datastore-core": "~0.4.0",
- "glob": "^7.1.2",
- "graceful-fs": "^4.1.11",
- "interface-datastore": "^0.4.2",
- "mkdirp": "^0.5.1",
- "pull-stream": "^3.6.1",
- "write-file-atomic": "^2.3.0"
- }
- },
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "debug-log": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz",
- "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=",
- "dev": true
- },
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
- },
- "decompress-response": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
- "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
- "dev": true,
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
- "deep-extend": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz",
- "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w=="
- },
- "deep-is": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
- "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
- "dev": true
- },
- "deepmerge": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz",
- "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==",
- "dev": true
- },
- "define-properties": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz",
- "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",
- "dev": true,
- "requires": {
- "foreach": "^2.0.5",
- "object-keys": "^1.0.8"
- },
- "dependencies": {
- "object-keys": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
- "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=",
- "dev": true
- }
- }
- },
- "deglob": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.0.tgz",
- "integrity": "sha1-TUSr4W7zLHebSXK9FBqAMlApoUo=",
- "dev": true,
- "requires": {
- "find-root": "^1.0.0",
- "glob": "^7.0.5",
- "ignore": "^3.0.9",
- "pkg-config": "^1.1.0",
- "run-parallel": "^1.1.2",
- "uniq": "^1.0.1"
- }
- },
- "del": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
- "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
- "dev": true,
- "requires": {
- "globby": "^5.0.0",
- "is-path-cwd": "^1.0.0",
- "is-path-in-cwd": "^1.0.0",
- "object-assign": "^4.0.1",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "rimraf": "^2.2.8"
- },
- "dependencies": {
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- }
- }
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
- },
- "delegates": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
- "dev": true
- },
- "delimit-stream": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/delimit-stream/-/delimit-stream-0.1.0.tgz",
- "integrity": "sha1-m4MZR3wOX4rrPONXrjBfwl6hzSs=",
- "dev": true
- },
- "depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
- },
- "destroy": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
- },
- "detect-libc": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
- "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
- "dev": true
- },
- "detect-node": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz",
- "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=",
- "dev": true
- },
- "dicer": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz",
- "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=",
- "dev": true,
- "requires": {
- "readable-stream": "1.1.x",
- "streamsearch": "0.1.2"
- },
- "dependencies": {
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
- },
- "readable-stream": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
- "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
- "dev": true
- }
- }
- },
- "dirty-chai": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/dirty-chai/-/dirty-chai-2.0.1.tgz",
- "integrity": "sha512-ys79pWKvDMowIDEPC6Fig8d5THiC0DJ2gmTeGzVAoEH18J8OzLud0Jh7I9IWg3NSk8x2UocznUuFmfHCXYZx9w==",
- "dev": true
- },
- "dns-packet": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-4.2.0.tgz",
- "integrity": "sha512-bn1AKpfkFbm0MIioOMHZ5qJzl2uypdBwI4nYNsqvhjsegBhcKJUlCrMPWLx6JEezRjxZmxhtIz/FkBEur2l8Cw==",
- "dev": true,
- "requires": {
- "ip": "^1.1.5",
- "safe-buffer": "^5.1.1"
- }
- },
- "doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2"
- }
- },
- "dom-serializer": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
- "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
- "requires": {
- "domelementtype": "~1.1.1",
- "entities": "~1.1.1"
- },
- "dependencies": {
- "domelementtype": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
- "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs="
- }
- }
- },
- "domelementtype": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
- "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI="
- },
- "domhandler": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
- "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
- "requires": {
- "domelementtype": "1"
- }
- },
- "domutils": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
- "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
- "requires": {
- "dom-serializer": "0",
- "domelementtype": "1"
- }
- },
- "dot-prop": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
- "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
- "dev": true,
- "requires": {
- "is-obj": "^1.0.0"
- }
- },
- "drbg.js": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz",
- "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=",
- "dev": true,
- "requires": {
- "browserify-aes": "^1.0.6",
- "create-hash": "^1.1.2",
- "create-hmac": "^1.1.4"
- }
- },
- "duplexer3": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
- "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
- "dev": true
- },
- "duplexify": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz",
- "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0",
- "stream-shift": "^1.0.0"
- }
- },
- "ecc-jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
- "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
- "optional": true,
- "requires": {
- "jsbn": "~0.1.0"
- },
- "dependencies": {
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
- "optional": true
- }
- }
- },
- "ecurve": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/ecurve/-/ecurve-1.0.6.tgz",
- "integrity": "sha512-/BzEjNfiSuB7jIWKcS/z8FK9jNjmEWvUV2YZ4RLSmcDtP7Lq0m6FvDuSnJpBlDpGRpfRQeTLGLBI8H+kEv0r+w==",
- "dev": true,
- "requires": {
- "bigi": "^1.1.0",
- "safe-buffer": "^5.0.1"
- }
- },
- "ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
- },
- "elliptic": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
- "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",
- "dev": true,
- "requires": {
- "bn.js": "^4.4.0",
- "brorand": "^1.0.1",
- "hash.js": "^1.0.0",
- "hmac-drbg": "^1.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.0"
- }
- },
- "encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
- },
- "encoding": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
- "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
- "dev": true,
- "requires": {
- "iconv-lite": "~0.4.13"
- }
- },
- "end-of-stream": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
- "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
- "dev": true,
- "requires": {
- "once": "^1.4.0"
- }
- },
- "engine.io": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.0.tgz",
- "integrity": "sha512-mRbgmAtQ4GAlKwuPnnAvXXwdPhEx+jkc0OBCLrXuD/CRvwNK3AxRSnqK4FSqmAMRRHryVJP8TopOvmEaA64fKw==",
- "dev": true,
- "requires": {
- "accepts": "~1.3.4",
- "base64id": "1.0.0",
- "cookie": "0.3.1",
- "debug": "~3.1.0",
- "engine.io-parser": "~2.1.0",
- "ws": "~3.3.1"
- },
- "dependencies": {
- "ultron": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
- "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==",
- "dev": true
- },
- "ws": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
- "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
- "dev": true,
- "requires": {
- "async-limiter": "~1.0.0",
- "safe-buffer": "~5.1.0",
- "ultron": "~1.1.0"
- }
- }
- }
- },
- "engine.io-client": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz",
- "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==",
- "dev": true,
- "requires": {
- "component-emitter": "1.2.1",
- "component-inherit": "0.0.3",
- "debug": "~3.1.0",
- "engine.io-parser": "~2.1.1",
- "has-cors": "1.1.0",
- "indexof": "0.0.1",
- "parseqs": "0.0.5",
- "parseuri": "0.0.5",
- "ws": "~3.3.1",
- "xmlhttprequest-ssl": "~1.5.4",
- "yeast": "0.1.2"
- },
- "dependencies": {
- "ultron": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
- "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==",
- "dev": true
- },
- "ws": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
- "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
- "dev": true,
- "requires": {
- "async-limiter": "~1.0.0",
- "safe-buffer": "~5.1.0",
- "ultron": "~1.1.0"
- }
- }
- }
- },
- "engine.io-parser": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz",
- "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==",
- "dev": true,
- "requires": {
- "after": "0.8.2",
- "arraybuffer.slice": "~0.0.7",
- "base64-arraybuffer": "0.1.5",
- "blob": "0.0.4",
- "has-binary2": "~1.0.2"
- }
- },
- "entities": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
- "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA="
- },
- "epimetheus": {
- "version": "1.0.55",
- "resolved": "https://registry.npmjs.org/epimetheus/-/epimetheus-1.0.55.tgz",
- "integrity": "sha1-j0dAiy1oCxIm/9IF1QH499XikgY=",
- "dev": true,
- "requires": {
- "prom-client": "^10.0.0"
- },
- "dependencies": {
- "prom-client": {
- "version": "10.2.3",
- "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-10.2.3.tgz",
- "integrity": "sha512-Xboq5+TdUwuQtSSDRZRNnb5NprINlgQN999VqUjZxnLKydUNLeIPx6Eiahg6oJua3XBg2TGnh5Cth1s4I6+r7g==",
- "dev": true,
- "requires": {
- "tdigest": "^0.1.1"
- }
- }
- }
- },
- "errno": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
- "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
- "dev": true,
- "requires": {
- "prr": "~1.0.1"
- }
- },
- "error-ex": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
- "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
- "dev": true,
- "requires": {
- "is-arrayish": "^0.2.1"
- }
- },
- "es-abstract": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.11.0.tgz",
- "integrity": "sha512-ZnQrE/lXTTQ39ulXZ+J1DTFazV9qBy61x2bY071B+qGco8Z8q1QddsLdt/EF8Ai9hcWH72dWS0kFqXLxOxqslA==",
- "dev": true,
- "requires": {
- "es-to-primitive": "^1.1.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.1",
- "is-callable": "^1.1.3",
- "is-regex": "^1.0.4"
- }
- },
- "es-to-primitive": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz",
- "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=",
- "dev": true,
- "requires": {
- "is-callable": "^1.1.1",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.1"
- }
- },
- "escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "dev": true
- },
- "eslint": {
- "version": "4.18.2",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.18.2.tgz",
- "integrity": "sha512-qy4i3wODqKMYfz9LUI8N2qYDkHkoieTbiHpMrYUI/WbjhXJQr7lI4VngixTgaG+yHX+NBCv7nW4hA0ShbvaNKw==",
- "dev": true,
- "requires": {
- "ajv": "^5.3.0",
- "babel-code-frame": "^6.22.0",
- "chalk": "^2.1.0",
- "concat-stream": "^1.6.0",
- "cross-spawn": "^5.1.0",
- "debug": "^3.1.0",
- "doctrine": "^2.1.0",
- "eslint-scope": "^3.7.1",
- "eslint-visitor-keys": "^1.0.0",
- "espree": "^3.5.2",
- "esquery": "^1.0.0",
- "esutils": "^2.0.2",
- "file-entry-cache": "^2.0.0",
- "functional-red-black-tree": "^1.0.1",
- "glob": "^7.1.2",
- "globals": "^11.0.1",
- "ignore": "^3.3.3",
- "imurmurhash": "^0.1.4",
- "inquirer": "^3.0.6",
- "is-resolvable": "^1.0.0",
- "js-yaml": "^3.9.1",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.3.0",
- "lodash": "^4.17.4",
- "minimatch": "^3.0.2",
- "mkdirp": "^0.5.1",
- "natural-compare": "^1.4.0",
- "optionator": "^0.8.2",
- "path-is-inside": "^1.0.2",
- "pluralize": "^7.0.0",
- "progress": "^2.0.0",
- "require-uncached": "^1.0.3",
- "semver": "^5.3.0",
- "strip-ansi": "^4.0.0",
- "strip-json-comments": "~2.0.1",
- "table": "4.0.2",
- "text-table": "~0.2.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "eslint-config-standard": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-11.0.0.tgz",
- "integrity": "sha512-oDdENzpViEe5fwuRCWla7AXQd++/oyIp8zP+iP9jiUPG6NBj3SHgdgtl/kTn00AjeN+1HNvavTKmYbMo+xMOlw==",
- "dev": true
- },
- "eslint-config-standard-jsx": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-5.0.0.tgz",
- "integrity": "sha512-rLToPAEqLMPBfWnYTu6xRhm2OWziS2n40QFqJ8jAM8NSVzeVKTa3nclhsU4DpPJQRY60F34Oo1wi/71PN/eITg==",
- "dev": true
- },
- "eslint-import-resolver-node": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz",
- "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==",
- "dev": true,
- "requires": {
- "debug": "^2.6.9",
- "resolve": "^1.5.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- }
- }
- },
- "eslint-module-utils": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz",
- "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=",
- "dev": true,
- "requires": {
- "debug": "^2.6.8",
- "pkg-dir": "^1.0.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- }
- }
- },
- "eslint-plugin-import": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.9.0.tgz",
- "integrity": "sha1-JgAu+/ylmJtyiKwEdQi9JPIXsWk=",
- "dev": true,
- "requires": {
- "builtin-modules": "^1.1.1",
- "contains-path": "^0.1.0",
- "debug": "^2.6.8",
- "doctrine": "1.5.0",
- "eslint-import-resolver-node": "^0.3.1",
- "eslint-module-utils": "^2.1.1",
- "has": "^1.0.1",
- "lodash": "^4.17.4",
- "minimatch": "^3.0.3",
- "read-pkg-up": "^2.0.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "doctrine": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
- "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2",
- "isarray": "^1.0.0"
- }
- },
- "load-json-file": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
- "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "strip-bom": "^3.0.0"
- }
- },
- "parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
- "dev": true,
- "requires": {
- "error-ex": "^1.2.0"
- }
- },
- "path-type": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
- "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
- "dev": true,
- "requires": {
- "pify": "^2.0.0"
- }
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- },
- "read-pkg": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
- "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
- "dev": true,
- "requires": {
- "load-json-file": "^2.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^2.0.0"
- }
- },
- "read-pkg-up": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
- "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
- "dev": true,
- "requires": {
- "find-up": "^2.0.0",
- "read-pkg": "^2.0.0"
- }
- }
- }
- },
- "eslint-plugin-node": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-6.0.1.tgz",
- "integrity": "sha512-Q/Cc2sW1OAISDS+Ji6lZS2KV4b7ueA/WydVWd1BECTQwVvfQy5JAi3glhINoKzoMnfnuRgNP+ZWKrGAbp3QDxw==",
- "dev": true,
- "requires": {
- "ignore": "^3.3.6",
- "minimatch": "^3.0.4",
- "resolve": "^1.3.3",
- "semver": "^5.4.1"
- }
- },
- "eslint-plugin-promise": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.7.0.tgz",
- "integrity": "sha512-2WO+ZFh7vxUKRfR0cOIMrWgYKdR6S1AlOezw6pC52B6oYpd5WFghN+QHxvrRdZMtbo8h3dfUZ2o1rWb0UPbKtg==",
- "dev": true
- },
- "eslint-plugin-react": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.7.0.tgz",
- "integrity": "sha512-KC7Snr4YsWZD5flu6A5c0AcIZidzW3Exbqp7OT67OaD2AppJtlBr/GuPrW/vaQM/yfZotEvKAdrxrO+v8vwYJA==",
- "dev": true,
- "requires": {
- "doctrine": "^2.0.2",
- "has": "^1.0.1",
- "jsx-ast-utils": "^2.0.1",
- "prop-types": "^15.6.0"
- }
- },
- "eslint-plugin-standard": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz",
- "integrity": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=",
- "dev": true
- },
- "eslint-scope": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
- "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
- "dev": true,
- "requires": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
- }
- },
- "eslint-visitor-keys": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
- "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
- "dev": true
- },
- "espree": {
- "version": "3.5.4",
- "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
- "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
- "dev": true,
- "requires": {
- "acorn": "^5.5.0",
- "acorn-jsx": "^3.0.0"
- }
- },
- "esprima": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
- "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==",
- "dev": true
- },
- "esquery": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
- "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
- "dev": true,
- "requires": {
- "estraverse": "^4.0.0"
- }
- },
- "esrecurse": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
- "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
- "dev": true,
- "requires": {
- "estraverse": "^4.1.0"
- }
- },
- "estraverse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
- "dev": true
- },
- "esutils": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
- "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
- "dev": true
- },
- "etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
- },
- "eth-hash-to-cid": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/eth-hash-to-cid/-/eth-hash-to-cid-0.1.1.tgz",
- "integrity": "sha512-qRmanZnp+YqLGpZaaBX49jEBVpUhYvosNBA/6lrgDDdVhzGCeMbpFycJYyR3prgrxMRPDoMk1H7iMeKRVZKLPA==",
- "dev": true,
- "requires": {
- "cids": "^0.5.3",
- "multihashes": "^0.4.13"
- }
- },
- "ethereum-common": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz",
- "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==",
- "dev": true
- },
- "ethereumjs-account": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz",
- "integrity": "sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==",
- "dev": true,
- "requires": {
- "ethereumjs-util": "^5.0.0",
- "rlp": "^2.0.0",
- "safe-buffer": "^5.1.1"
- }
- },
- "ethereumjs-block": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz",
- "integrity": "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==",
- "dev": true,
- "requires": {
- "async": "^2.0.1",
- "ethereum-common": "0.2.0",
- "ethereumjs-tx": "^1.2.2",
- "ethereumjs-util": "^5.0.0",
- "merkle-patricia-tree": "^2.1.2"
- }
- },
- "ethereumjs-tx": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.4.tgz",
- "integrity": "sha512-kOgUd5jC+0tgV7t52UDECMMz9Uf+Lro+6fSpCvzWemtXfMEcwI3EOxf5mVPMRbTFkMMhuERokNNVF3jItAjidg==",
- "dev": true,
- "requires": {
- "ethereum-common": "^0.0.18",
- "ethereumjs-util": "^5.0.0"
- },
- "dependencies": {
- "ethereum-common": {
- "version": "0.0.18",
- "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz",
- "integrity": "sha1-L9w1dvIykDNYl26znaeDIT/5Uj8=",
- "dev": true
- }
- }
- },
- "ethereumjs-util": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz",
- "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==",
- "dev": true,
- "requires": {
- "bn.js": "^4.11.0",
- "create-hash": "^1.1.2",
- "ethjs-util": "^0.1.3",
- "keccak": "^1.0.2",
- "rlp": "^2.0.0",
- "safe-buffer": "^5.1.1",
- "secp256k1": "^3.0.1"
- }
- },
- "ethjs-util": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.4.tgz",
- "integrity": "sha1-HItoeSV0RO9NPz+7rC3tEs2ZfZM=",
- "dev": true,
- "requires": {
- "is-hex-prefixed": "1.0.0",
- "strip-hex-prefix": "1.0.0"
- }
- },
- "evp_bytestokey": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
- "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
- "dev": true,
- "requires": {
- "md5.js": "^1.3.4",
- "safe-buffer": "^5.1.1"
- }
- },
- "execa": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
- "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
- "requires": {
- "cross-spawn": "^5.0.1",
- "get-stream": "^3.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- }
- },
- "expand-template": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.0.tgz",
- "integrity": "sha512-kkjwkMqj0h4w/sb32ERCDxCQkREMCAgS39DscDnSwDsbxnwwM1BTZySdC3Bn1lhY7vL08n9GoO/fVTynjDgRyQ==",
- "dev": true
- },
- "express": {
- "version": "4.16.3",
- "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz",
- "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=",
- "requires": {
- "accepts": "~1.3.5",
- "array-flatten": "1.1.1",
- "body-parser": "1.18.2",
- "content-disposition": "0.5.2",
- "content-type": "~1.0.4",
- "cookie": "0.3.1",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "1.1.1",
- "fresh": "0.5.2",
- "merge-descriptors": "1.0.1",
- "methods": "~1.1.2",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.2",
- "path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.3",
- "qs": "6.5.1",
- "range-parser": "~1.2.0",
- "safe-buffer": "5.1.1",
- "send": "0.16.2",
- "serve-static": "1.13.2",
- "setprototypeof": "1.1.0",
- "statuses": "~1.4.0",
- "type-is": "~1.6.16",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
- },
- "dependencies": {
- "body-parser": {
- "version": "1.18.2",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
- "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
- "requires": {
- "bytes": "3.0.0",
- "content-type": "~1.0.4",
- "debug": "2.6.9",
- "depd": "~1.1.1",
- "http-errors": "~1.6.2",
- "iconv-lite": "0.4.19",
- "on-finished": "~2.3.0",
- "qs": "6.5.1",
- "raw-body": "2.3.2",
- "type-is": "~1.6.15"
- }
- },
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "qs": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
- "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="
- },
- "raw-body": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",
- "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
- "requires": {
- "bytes": "3.0.0",
- "http-errors": "1.6.2",
- "iconv-lite": "0.4.19",
- "unpipe": "1.0.0"
- },
- "dependencies": {
- "depd": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
- "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k="
- },
- "http-errors": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
- "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
- "requires": {
- "depd": "1.1.1",
- "inherits": "2.0.3",
- "setprototypeof": "1.0.3",
- "statuses": ">= 1.3.1 < 2"
- }
- },
- "setprototypeof": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
- "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="
- }
- }
- },
- "safe-buffer": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
- "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
- }
- }
- },
- "extend": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
- "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="
- },
- "external-editor": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
- "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
- "dev": true,
- "requires": {
- "chardet": "^0.4.0",
- "iconv-lite": "^0.4.17",
- "tmp": "^0.0.33"
- }
- },
- "extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
- },
- "fast-deep-equal": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
- "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
- },
- "fast-future": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/fast-future/-/fast-future-1.0.2.tgz",
- "integrity": "sha1-hDWpqqAteSSNF9cE52JZMB2ZKAo=",
- "dev": true
- },
- "fast-json-stable-stringify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
- "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
- },
- "fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
- "dev": true
- },
- "fbjs": {
- "version": "0.8.16",
- "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz",
- "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=",
- "dev": true,
- "requires": {
- "core-js": "^1.0.0",
- "isomorphic-fetch": "^2.1.1",
- "loose-envify": "^1.0.0",
- "object-assign": "^4.1.0",
- "promise": "^7.1.1",
- "setimmediate": "^1.0.5",
- "ua-parser-js": "^0.7.9"
- },
- "dependencies": {
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true
- },
- "promise": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
- "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
- "dev": true,
- "requires": {
- "asap": "~2.0.3"
- }
- }
- }
- },
- "figures": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
- "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^1.0.5"
- }
- },
- "file-entry-cache": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
- "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
- "dev": true,
- "requires": {
- "flat-cache": "^1.2.1",
- "object-assign": "^4.0.1"
- },
- "dependencies": {
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true
- }
- }
- },
- "file-type": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-7.7.1.tgz",
- "integrity": "sha512-bTrKkzzZI6wH+NXhyD3SOXtb2zXTw2SbwI2RxUlRcXVsnN7jNL5hJzVQLYv7FOQhxFkK4XWdAflEaWFpaLLWpQ==",
- "dev": true
- },
- "filesize": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
- "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==",
- "dev": true
- },
- "finalhandler": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
- "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
- "requires": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.2",
- "statuses": "~1.4.0",
- "unpipe": "~1.0.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- }
- }
- },
- "find-process": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/find-process/-/find-process-1.1.1.tgz",
- "integrity": "sha1-V/sa28f0MEeG23IKSf69cIoxYtQ=",
- "dev": true,
- "requires": {
- "chalk": "^2.0.1",
- "commander": "^2.11.0",
- "debug": "^2.6.8"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- }
- }
- },
- "find-root": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
- "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
- "dev": true
- },
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "requires": {
- "locate-path": "^2.0.0"
- }
- },
- "flat-cache": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
- "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
- "dev": true,
- "requires": {
- "circular-json": "^0.3.1",
- "del": "^2.0.2",
- "graceful-fs": "^4.1.2",
- "write": "^0.2.1"
- }
- },
- "flatmap": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/flatmap/-/flatmap-0.0.3.tgz",
- "integrity": "sha1-Hxik2TgVLUlZZfnJWNkjqy3WabQ=",
- "dev": true
- },
- "foreach": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
- "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
- "dev": true
- },
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
- },
- "form-data": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
- "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "1.0.6",
- "mime-types": "^2.1.12"
- }
- },
- "forwarded": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
- "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
- },
- "fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
- },
- "fs-constants": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
- "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
- "dev": true
- },
- "fs-ext": {
- "version": "github:baudehlo/node-fs-ext#f5c9c9ec584937f8b216335d0c36d238b5d187c9",
- "from": "github:baudehlo/node-fs-ext#master",
- "dev": true,
- "optional": true,
- "requires": {
- "nan": "^2.0"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
- },
- "fsm": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/fsm/-/fsm-1.0.2.tgz",
- "integrity": "sha1-4uubKXR+gGu7kPjVRT4vnXvSN4M=",
- "dev": true,
- "requires": {
- "split": "~0.3.0"
- }
- },
- "fsm-event": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fsm-event/-/fsm-event-2.1.0.tgz",
- "integrity": "sha1-04VxbtOPnJL+qyumAeKqxsC6WpI=",
- "dev": true,
- "requires": {
- "fsm": "^1.0.2"
- }
- },
- "function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
- },
- "functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
- "dev": true
- },
- "gar": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/gar/-/gar-1.0.3.tgz",
- "integrity": "sha512-zDpwk/l3HbhjVAvdxNUTJFzgXiNy0a7EmE/50XT38o1z+7NJbFhp+8CDsv1Qgy2adBAwUVYlMpIX2fZUbmlUJw==",
- "dev": true
- },
- "gauge": {
- "version": "2.7.4",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
- "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
- "dev": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- },
- "dependencies": {
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true
- }
- }
- },
- "gc-stats": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/gc-stats/-/gc-stats-1.1.1.tgz",
- "integrity": "sha512-B3H6EnfqxhI940ebenWHJI9p40is8yEDlyv3qKgZYmQmiHA5DvCcF7rgZAoiWPiOAdA/iVVguWV4Z7ACCH3JdA==",
- "dev": true,
- "optional": true,
- "requires": {
- "nan": "^2.6.2",
- "node-pre-gyp": "^0.7.0"
- },
- "dependencies": {
- "abbrev": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true
- },
- "aproba": {
- "version": "1.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "are-we-there-yet": {
- "version": "1.1.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "asn1": {
- "version": "0.2.3",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "asynckit": {
- "version": "0.4.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "aws4": {
- "version": "1.6.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "bcrypt-pbkdf": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "tweetnacl": "^0.14.3"
- }
- },
- "block-stream": {
- "version": "0.0.9",
- "bundled": true,
- "dev": true,
- "requires": {
- "inherits": "~2.0.0"
- }
- },
- "brace-expansion": {
- "version": "1.1.8",
- "bundled": true,
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "caseless": {
- "version": "0.12.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "co": {
- "version": "4.6.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true
- },
- "combined-stream": {
- "version": "1.0.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true,
- "dev": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "dashdash": {
- "version": "1.14.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "assert-plus": "^1.0.0"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- }
- }
- },
- "debug": {
- "version": "2.6.9",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "deep-extend": {
- "version": "0.4.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "delayed-stream": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "delegates": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "detect-libc": {
- "version": "1.0.3",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "ecc-jsbn": {
- "version": "0.1.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "jsbn": "~0.1.0"
- }
- },
- "extend": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "extsprintf": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "fast-deep-equal": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "fast-json-stable-stringify": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "forever-agent": {
- "version": "0.6.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "fs.realpath": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "fstream": {
- "version": "1.0.11",
- "bundled": true,
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "inherits": "~2.0.0",
- "mkdirp": ">=0.5 0",
- "rimraf": "2"
- }
- },
- "fstream-ignore": {
- "version": "1.0.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "fstream": "^1.0.0",
- "inherits": "2",
- "minimatch": "^3.0.0"
- }
- },
- "gauge": {
- "version": "2.7.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- }
- },
- "getpass": {
- "version": "0.1.7",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "assert-plus": "^1.0.0"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- }
- }
- },
- "glob": {
- "version": "7.1.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "graceful-fs": {
- "version": "4.1.11",
- "bundled": true,
- "dev": true
- },
- "has-unicode": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "bundled": true,
- "dev": true
- },
- "ini": {
- "version": "1.3.5",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "is-typedarray": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "isarray": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "isstream": {
- "version": "0.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "jsbn": {
- "version": "0.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "json-schema": {
- "version": "0.2.3",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "json-schema-traverse": {
- "version": "0.3.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "jsprim": {
- "version": "1.4.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.0.2",
- "json-schema": "0.2.3",
- "verror": "1.3.6"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- }
- }
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "0.0.8",
- "bundled": true,
- "dev": true
- },
- "mkdirp": {
- "version": "0.5.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "ms": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "node-pre-gyp": {
- "version": "0.7.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "detect-libc": "^1.0.2",
- "mkdirp": "^0.5.1",
- "nopt": "^4.0.1",
- "npmlog": "^4.0.2",
- "rc": "^1.1.7",
- "request": "2.83.0",
- "rimraf": "^2.6.1",
- "semver": "^5.3.0",
- "tar": "^2.2.1",
- "tar-pack": "^3.4.0"
- },
- "dependencies": {
- "ajv": {
- "version": "5.5.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "co": "^4.6.0",
- "fast-deep-equal": "^1.0.0",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.3.0"
- }
- },
- "assert-plus": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "aws-sign2": {
- "version": "0.7.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "boom": {
- "version": "4.3.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "hoek": "4.x.x"
- }
- },
- "cryptiles": {
- "version": "3.1.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "boom": "5.x.x"
- },
- "dependencies": {
- "boom": {
- "version": "5.2.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "hoek": "4.x.x"
- }
- }
- }
- },
- "form-data": {
- "version": "2.3.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "1.0.6",
- "mime-types": "^2.1.12"
- },
- "dependencies": {
- "combined-stream": {
- "version": "1.0.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- }
- }
- },
- "har-schema": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "har-validator": {
- "version": "5.0.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ajv": "^5.1.0",
- "har-schema": "^2.0.0"
- }
- },
- "hawk": {
- "version": "6.0.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "boom": "4.x.x",
- "cryptiles": "3.x.x",
- "hoek": "4.x.x",
- "sntp": "2.x.x"
- }
- },
- "hoek": {
- "version": "4.2.1",
- "bundled": true,
- "dev": true
- },
- "http-signature": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- }
- },
- "mime-db": {
- "version": "1.33.0",
- "bundled": true,
- "dev": true
- },
- "mime-types": {
- "version": "2.1.18",
- "bundled": true,
- "dev": true,
- "requires": {
- "mime-db": "~1.33.0"
- }
- },
- "performance-now": {
- "version": "2.1.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "qs": {
- "version": "6.5.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "request": {
- "version": "2.83.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.6.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.5",
- "extend": "~3.0.1",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.1",
- "har-validator": "~5.0.3",
- "hawk": "~6.0.2",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.17",
- "oauth-sign": "~0.8.2",
- "performance-now": "^2.1.0",
- "qs": "~6.5.1",
- "safe-buffer": "^5.1.1",
- "stringstream": "~0.0.5",
- "tough-cookie": "~2.3.3",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.1.0"
- }
- },
- "sntp": {
- "version": "2.1.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "hoek": "4.x.x"
- }
- },
- "tough-cookie": {
- "version": "2.3.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "punycode": "^1.4.1"
- }
- }
- }
- },
- "nopt": {
- "version": "4.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "npmlog": {
- "version": "4.1.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "oauth-sign": {
- "version": "0.8.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "osenv": {
- "version": "0.1.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "process-nextick-args": {
- "version": "1.0.7",
- "bundled": true,
- "dev": true
- },
- "punycode": {
- "version": "1.4.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "rc": {
- "version": "1.2.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "deep-extend": "~0.4.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "optional": true
- }
- }
- },
- "readable-stream": {
- "version": "2.3.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~1.0.6",
- "safe-buffer": "~5.1.0",
- "string_decoder": "~1.0.0",
- "util-deprecate": "~1.0.1"
- }
- },
- "rimraf": {
- "version": "2.6.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "glob": "^7.0.5"
- }
- },
- "safe-buffer": {
- "version": "5.1.1",
- "bundled": true,
- "dev": true
- },
- "semver": {
- "version": "5.3.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "sshpk": {
- "version": "1.13.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "tweetnacl": "~0.14.0"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- }
- }
- },
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "string_decoder": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "safe-buffer": "~5.0.1"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.0.1",
- "bundled": true,
- "dev": true
- }
- }
- },
- "stringstream": {
- "version": "0.0.5",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "tar": {
- "version": "2.2.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "block-stream": "*",
- "fstream": "^1.0.2",
- "inherits": "2"
- }
- },
- "tar-pack": {
- "version": "3.4.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "debug": "^2.2.0",
- "fstream": "^1.0.10",
- "fstream-ignore": "^1.0.5",
- "once": "^1.3.3",
- "readable-stream": "^2.1.4",
- "rimraf": "^2.5.1",
- "tar": "^2.2.1",
- "uid-number": "^0.0.6"
- }
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "tweetnacl": {
- "version": "0.14.5",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "uid-number": {
- "version": "0.0.6",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "uuid": {
- "version": "3.1.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "verror": {
- "version": "1.3.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "extsprintf": "1.0.2"
- }
- },
- "wide-align": {
- "version": "1.1.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "string-width": "^1.0.2"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- }
- }
- },
- "get-browser-rtc": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/get-browser-rtc/-/get-browser-rtc-1.0.2.tgz",
- "integrity": "sha1-u81AyEUaftTvXDc7gWmkCd0dEdk=",
- "dev": true
- },
- "get-caller-file": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
- "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U="
- },
- "get-folder-size": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/get-folder-size/-/get-folder-size-1.0.1.tgz",
- "integrity": "sha1-gC+kIIQ03nEgUYKxWrfxNSCI5YA=",
- "dev": true,
- "requires": {
- "async": "^1.4.2",
- "gar": "^1.0.2"
- },
- "dependencies": {
- "async": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
- "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
- "dev": true
- }
- }
- },
- "get-stdin": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz",
- "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==",
- "dev": true
- },
- "get-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
- },
- "getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "github-from-package": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
- "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=",
- "dev": true
- },
- "glob": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "global-dirs": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
- "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
- "dev": true,
- "requires": {
- "ini": "^1.3.4"
- }
- },
- "globals": {
- "version": "11.5.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.5.0.tgz",
- "integrity": "sha512-hYyf+kI8dm3nORsiiXUQigOU62hDLfJ9G01uyGMxhc6BKsircrUhC4uJPQPUSuq2GrTmiiEt7ewxlMdBewfmKQ==",
- "dev": true
- },
- "globby": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
- "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
- "dev": true,
- "requires": {
- "array-union": "^1.0.1",
- "arrify": "^1.0.0",
- "glob": "^7.0.3",
- "object-assign": "^4.0.1",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- },
- "dependencies": {
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- }
- }
- },
- "got": {
- "version": "6.7.1",
- "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
- "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
- "dev": true,
- "requires": {
- "create-error-class": "^3.0.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^3.0.0",
- "is-redirect": "^1.0.0",
- "is-retry-allowed": "^1.0.0",
- "is-stream": "^1.0.0",
- "lowercase-keys": "^1.0.0",
- "safe-buffer": "^5.0.1",
- "timed-out": "^4.0.0",
- "unzip-response": "^2.0.1",
- "url-parse-lax": "^1.0.0"
- }
- },
- "graceful-fs": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
- "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
- "dev": true
- },
- "hapi": {
- "version": "16.6.3",
- "resolved": "https://registry.npmjs.org/hapi/-/hapi-16.6.3.tgz",
- "integrity": "sha512-Fe1EtSlRWdez9c1sLDrHZYxpsp3IddwtUWp7y65TCBW5CMcBP98X4WnoBJZTGsDZnk/FDkRyEMhUVsC9qysDPg==",
- "dev": true,
- "requires": {
- "accept": "^2.1.4",
- "ammo": "^2.0.4",
- "boom": "^5.2.0",
- "call": "^4.0.2",
- "catbox": "^7.1.5",
- "catbox-memory": "^2.0.4",
- "cryptiles": "^3.1.2",
- "heavy": "^4.0.4",
- "hoek": "^4.2.0",
- "iron": "^4.0.5",
- "items": "^2.1.1",
- "joi": "^11.1.0",
- "mimos": "^3.0.3",
- "podium": "^1.3.0",
- "shot": "^3.4.2",
- "statehood": "^5.0.3",
- "subtext": "^5.0.0",
- "topo": "^2.0.2"
- },
- "dependencies": {
- "boom": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
- "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
- "dev": true,
- "requires": {
- "hoek": "4.x.x"
- }
- },
- "hoek": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
- "dev": true
- },
- "isemail": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.1.2.tgz",
- "integrity": "sha512-zfRhJn9rFSGhzU5tGZqepRSAj3+g6oTOHxMGGriWNJZzyLPUK8H7VHpqKntegnW8KLyGA9zwuNaCoopl40LTpg==",
- "dev": true,
- "requires": {
- "punycode": "2.x.x"
- }
- },
- "joi": {
- "version": "11.4.0",
- "resolved": "https://registry.npmjs.org/joi/-/joi-11.4.0.tgz",
- "integrity": "sha512-O7Uw+w/zEWgbL6OcHbyACKSj0PkQeUgmehdoXVSxt92QFCq4+1390Rwh5moI2K/OgC7D8RHRZqHZxT2husMJHA==",
- "dev": true,
- "requires": {
- "hoek": "4.x.x",
- "isemail": "3.x.x",
- "topo": "2.x.x"
- }
- }
- }
- },
- "hapi-set-header": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/hapi-set-header/-/hapi-set-header-1.0.2.tgz",
- "integrity": "sha1-KvrgAsZxnW1U8/qIRi+CKJLS3xM=",
- "dev": true
- },
- "har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
- },
- "har-validator": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
- "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
- "requires": {
- "ajv": "^5.1.0",
- "har-schema": "^2.0.0"
- }
- },
- "has": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
- "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
- "dev": true,
- "requires": {
- "function-bind": "^1.0.2"
- }
- },
- "has-ansi": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
- "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "has-binary2": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
- "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==",
- "dev": true,
- "requires": {
- "isarray": "2.0.1"
- },
- "dependencies": {
- "isarray": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
- "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
- "dev": true
- }
- }
- },
- "has-cors": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
- "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=",
- "dev": true
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "has-unicode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
- "dev": true
- },
- "hash-base": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
- "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "hash.js": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",
- "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.0"
- }
- },
- "hashish": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/hashish/-/hashish-0.0.4.tgz",
- "integrity": "sha1-bWC8b/r3Ebav1g5CbQd5iAFOZVQ=",
- "requires": {
- "traverse": ">=0.2.4"
- }
- },
- "hashlru": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/hashlru/-/hashlru-2.2.1.tgz",
- "integrity": "sha1-EPIJmg18BaQPK+r1wdOc8vfavzY=",
- "dev": true
- },
- "heap": {
- "version": "0.2.6",
- "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.6.tgz",
- "integrity": "sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=",
- "dev": true
- },
- "heavy": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/heavy/-/heavy-4.0.4.tgz",
- "integrity": "sha1-NskTNsAMz+hSyqTRUwhjNc0vAOk=",
- "dev": true,
- "requires": {
- "boom": "5.x.x",
- "hoek": "4.x.x",
- "joi": "10.x.x"
- },
- "dependencies": {
- "boom": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
- "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
- "dev": true,
- "requires": {
- "hoek": "4.x.x"
- }
- },
- "hoek": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
- "dev": true
- },
- "joi": {
- "version": "10.6.0",
- "resolved": "https://registry.npmjs.org/joi/-/joi-10.6.0.tgz",
- "integrity": "sha512-hBF3LcqyAid+9X/pwg+eXjD2QBZI5eXnBFJYaAkH4SK3mp9QSRiiQnDYlmlz5pccMvnLcJRS4whhDOTCkmsAdQ==",
- "dev": true,
- "requires": {
- "hoek": "4.x.x",
- "isemail": "2.x.x",
- "items": "2.x.x",
- "topo": "2.x.x"
- }
- }
- }
- },
- "hh-mm-ss": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/hh-mm-ss/-/hh-mm-ss-1.2.0.tgz",
- "integrity": "sha512-f4I9Hz1dLpX/3mrEs7yq30+FiuO3tt5NWAqAGeBTaoeoBfB8vhcQ3BphuDc5DjZb/K809agqrAaFlP0jhEU/8w==",
- "requires": {
- "zero-fill": "^2.2.3"
- }
- },
- "hmac-drbg": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
- "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
- "dev": true,
- "requires": {
- "hash.js": "^1.0.3",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
- "hoek": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz",
- "integrity": "sha512-Bmr56pxML1c9kU+NS51SMFkiVQAb+9uFfXwyqR2tn4w2FPvmPt65eZ9aCcEfRXd9G74HkZnILC6p967pED4aiw==",
- "dev": true
- },
- "hosted-git-info": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz",
- "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==",
- "dev": true
- },
- "html-entities": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
- "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8="
- },
- "htmlparser2": {
- "version": "3.9.2",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz",
- "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=",
- "requires": {
- "domelementtype": "^1.3.0",
- "domhandler": "^2.3.0",
- "domutils": "^1.5.1",
- "entities": "^1.1.1",
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.2"
- }
- },
- "http-errors": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
- "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.0",
- "statuses": ">= 1.4.0 < 2"
- }
- },
- "http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- }
- },
- "human-to-milliseconds": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/human-to-milliseconds/-/human-to-milliseconds-1.0.0.tgz",
- "integrity": "sha512-Rp1uvdGYHZ8v6GCl3N6QW48MlABqvLCzKbeNPPddbFdDEC7G1G+8oq0hmCiem4PSJIDwLvAxkPi3FF5BDoeKew==",
- "dev": true,
- "requires": {
- "promisify-es6": "^1.0.3"
- }
- },
- "hyperdiff": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/hyperdiff/-/hyperdiff-2.0.4.tgz",
- "integrity": "sha512-rCRkwmjC2+X7YHyki1t/RCYD6NGWc9OGQiLyhSUArPWSfAeeGGBfUTApvfMEfGFov/zaVmssPWk8FN26Cz9yrQ==",
- "dev": true,
- "requires": {
- "debug": "~3.1.0",
- "lodash.clonedeep": "~4.5.0",
- "lodash.pullat": "~4.6.0"
- }
- },
- "iconv-lite": {
- "version": "0.4.19",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
- "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
- },
- "idb-readable-stream": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/idb-readable-stream/-/idb-readable-stream-0.0.4.tgz",
- "integrity": "sha1-MoPaZkW/ayINxhumHfYr7l2uSs8=",
- "dev": true,
- "requires": {
- "xtend": "^4.0.1"
- }
- },
- "idb-wrapper": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.2.tgz",
- "integrity": "sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg==",
- "dev": true
- },
- "ieee754": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz",
- "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==",
- "dev": true
- },
- "ignore": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.8.tgz",
- "integrity": "sha512-pUh+xUQQhQzevjRHHFqqcTy0/dP/kS9I8HSrUydhihjuD09W6ldVWFtIrwhXdUJHis3i2rZNqEHpZH/cbinFbg==",
- "dev": true
- },
- "immediate": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz",
- "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=",
- "dev": true
- },
- "import-lazy": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
- "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
- "dev": true
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
- "dev": true
- },
- "indexof": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
- "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
- "dev": true
- },
- "inert": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/inert/-/inert-4.2.1.tgz",
- "integrity": "sha512-qmbbZYPSzU/eOUOStPQvSjrU9IR1Q3uDtsEsVwnBQeZG43xu7Nrj6yuUrX3ice/03rv5dj/KiKB+NGCbiqH+aQ==",
- "dev": true,
- "requires": {
- "ammo": "2.x.x",
- "boom": "5.x.x",
- "hoek": "4.x.x",
- "items": "2.x.x",
- "joi": "10.x.x",
- "lru-cache": "4.1.x"
- },
- "dependencies": {
- "boom": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
- "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
- "dev": true,
- "requires": {
- "hoek": "4.x.x"
- }
- },
- "hoek": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
- "dev": true
- },
- "joi": {
- "version": "10.6.0",
- "resolved": "https://registry.npmjs.org/joi/-/joi-10.6.0.tgz",
- "integrity": "sha512-hBF3LcqyAid+9X/pwg+eXjD2QBZI5eXnBFJYaAkH4SK3mp9QSRiiQnDYlmlz5pccMvnLcJRS4whhDOTCkmsAdQ==",
- "dev": true,
- "requires": {
- "hoek": "4.x.x",
- "isemail": "2.x.x",
- "items": "2.x.x",
- "topo": "2.x.x"
- }
- }
- }
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
- },
- "ini": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
- "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
- "dev": true
- },
- "inquirer": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
- "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
- "dev": true,
- "requires": {
- "ansi-escapes": "^3.0.0",
- "chalk": "^2.0.0",
- "cli-cursor": "^2.1.0",
- "cli-width": "^2.0.0",
- "external-editor": "^2.0.4",
- "figures": "^2.0.0",
- "lodash": "^4.3.0",
- "mute-stream": "0.0.7",
- "run-async": "^2.2.0",
- "rx-lite": "^4.0.8",
- "rx-lite-aggregates": "^4.0.8",
- "string-width": "^2.1.0",
- "strip-ansi": "^4.0.0",
- "through": "^2.3.6"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "interface-connection": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/interface-connection/-/interface-connection-0.3.2.tgz",
- "integrity": "sha1-5JSYg/bqeft+3QHuP0/KR6Kf0sQ=",
- "dev": true,
- "requires": {
- "pull-defer": "~0.2.2",
- "timed-tape": "~0.1.1"
- }
- },
- "interface-datastore": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-0.4.2.tgz",
- "integrity": "sha512-Vztsb1SXZANtwwGkpDoxOTMELhhuCklkQKbjma6PY4XLwIyrhQ1xEKaG1sOHavMXoghThw8IZEysiCDrofOQKQ==",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "pull-defer": "^0.2.2",
- "pull-stream": "^3.6.1",
- "uuid": "^3.1.0"
- }
- },
- "invert-kv": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
- "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
- },
- "ip": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
- "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
- "dev": true
- },
- "ip-address": {
- "version": "5.8.9",
- "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-5.8.9.tgz",
- "integrity": "sha512-7ay355oMN34iXhET1BmCJVsHjOTSItEEIIpOs38qUC23AIhOy+xIPnkrTuEFjeLMrTJ7m8KMXWgWfy/2Vn9sDw==",
- "dev": true,
- "requires": {
- "jsbn": "1.1.0",
- "lodash.find": "^4.6.0",
- "lodash.max": "^4.0.1",
- "lodash.merge": "^4.6.0",
- "lodash.padstart": "^4.6.1",
- "lodash.repeat": "^4.1.0",
- "sprintf-js": "1.1.0"
- }
- },
- "ipaddr.js": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz",
- "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs="
- },
- "ipfs": {
- "version": "github:ipfs/js-ipfs#4486acca4b5f9fef26dab2e787e681ed293def9f",
- "from": "github:ipfs/js-ipfs#4486acc",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "big.js": "^5.0.3",
- "binary-querystring": "~0.1.2",
- "bl": "^1.2.2",
- "boom": "^7.2.0",
- "bs58": "^4.0.1",
- "byteman": "^1.3.5",
- "cids": "~0.5.3",
- "debug": "^3.1.0",
- "file-type": "^7.7.1",
- "filesize": "^3.6.1",
- "fsm-event": "^2.1.0",
- "get-folder-size": "^1.0.1",
- "glob": "^7.1.2",
- "hapi": "^16.6.2",
- "hapi-set-header": "^1.0.2",
- "hoek": "^5.0.3",
- "human-to-milliseconds": "^1.0.0",
- "ipfs-api": "^22.0.0",
- "ipfs-bitswap": "~0.20.0",
- "ipfs-block": "~0.7.1",
- "ipfs-block-service": "~0.14.0",
- "ipfs-multipart": "~0.1.0",
- "ipfs-repo": "~0.20.0",
- "ipfs-unixfs": "~0.1.14",
- "ipfs-unixfs-engine": "~0.29.0",
- "ipld": "~0.17.0",
- "ipld-dag-cbor": "~0.12.0",
- "ipld-dag-pb": "~0.14.4",
- "is-ipfs": "~0.3.2",
- "is-pull-stream": "~0.0.0",
- "is-stream": "^1.1.0",
- "joi": "^13.2.0",
- "joi-browser": "^13.0.1",
- "joi-multiaddr": "^2.0.0",
- "libp2p": "~0.20.4",
- "libp2p-circuit": "~0.2.0",
- "libp2p-floodsub": "~0.15.0",
- "libp2p-kad-dht": "~0.10.0",
- "libp2p-keychain": "~0.3.1",
- "libp2p-mdns": "~0.11.0",
- "libp2p-mplex": "~0.7.0",
- "libp2p-railing": "~0.8.1",
- "libp2p-secio": "~0.10.0",
- "libp2p-tcp": "~0.12.0",
- "libp2p-webrtc-star": "~0.15.0",
- "libp2p-websocket-star": "~0.8.0",
- "libp2p-websockets": "~0.12.0",
- "lodash.flatmap": "^4.5.0",
- "lodash.get": "^4.4.2",
- "lodash.set": "^4.3.2",
- "lodash.sortby": "^4.7.0",
- "lodash.values": "^4.3.0",
- "mafmt": "^6.0.0",
- "mime-types": "^2.1.18",
- "mkdirp": "~0.5.1",
- "multiaddr": "^5.0.0",
- "multibase": "~0.4.0",
- "multihashes": "~0.4.13",
- "once": "^1.4.0",
- "path-exists": "^3.0.0",
- "peer-book": "~0.8.0",
- "peer-id": "~0.10.7",
- "peer-info": "~0.14.1",
- "progress": "^2.0.0",
- "prom-client": "^11.0.0",
- "prometheus-gc-stats": "~0.5.1",
- "promisify-es6": "^1.0.3",
- "pull-abortable": "^4.1.1",
- "pull-defer": "~0.2.2",
- "pull-file": "^1.1.0",
- "pull-ndjson": "~0.1.1",
- "pull-paramap": "^1.2.2",
- "pull-pushable": "^2.2.0",
- "pull-sort": "^1.0.1",
- "pull-stream": "^3.6.7",
- "pull-stream-to-stream": "^1.3.4",
- "pull-zip": "^2.0.1",
- "read-pkg-up": "^3.0.0",
- "readable-stream": "2.3.6",
- "stream-to-pull-stream": "^1.7.2",
- "tar-stream": "^1.6.0",
- "temp": "~0.8.3",
- "through2": "^2.0.3",
- "update-notifier": "^2.5.0",
- "yargs": "^11.0.0",
- "yargs-parser": "^10.0.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- }
- }
- },
- "ipfs-api": {
- "version": "22.0.0",
- "resolved": "https://registry.npmjs.org/ipfs-api/-/ipfs-api-22.0.0.tgz",
- "integrity": "sha512-YO7yehqSD/pWVf2E6H/pOHC36haxyg0vlXownrbAUsXNzL1QICpuihBXO0NVwHf34uZ3sufVzF2UtbFY7UXXWw==",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "big.js": "^5.0.3",
- "bs58": "^4.0.1",
- "cids": "~0.5.3",
- "concat-stream": "^1.6.2",
- "detect-node": "^2.0.3",
- "flatmap": "0.0.3",
- "glob": "^7.1.2",
- "ipfs-block": "~0.7.1",
- "ipfs-unixfs": "~0.1.14",
- "ipld-dag-cbor": "~0.12.0",
- "ipld-dag-pb": "~0.14.4",
- "is-ipfs": "~0.3.2",
- "is-pull-stream": "0.0.0",
- "is-stream": "^1.1.0",
- "libp2p-crypto": "^0.13.0",
- "lru-cache": "^4.1.3",
- "multiaddr": "^5.0.0",
- "multibase": "~0.4.0",
- "multihashes": "~0.4.13",
- "ndjson": "^1.5.0",
- "once": "^1.4.0",
- "peer-id": "~0.10.7",
- "peer-info": "~0.14.1",
- "promisify-es6": "^1.0.3",
- "pull-defer": "^0.2.2",
- "pull-pushable": "^2.2.0",
- "pull-stream-to-stream": "^1.3.4",
- "pump": "^3.0.0",
- "qs": "^6.5.2",
- "readable-stream": "^2.3.6",
- "stream-http": "^2.8.2",
- "stream-to-pull-stream": "^1.7.2",
- "streamifier": "^0.1.1",
- "tar-stream": "^1.6.1"
- },
- "dependencies": {
- "lru-cache": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
- "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
- "dev": true,
- "requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "tar-stream": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz",
- "integrity": "sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==",
- "dev": true,
- "requires": {
- "bl": "^1.0.0",
- "buffer-alloc": "^1.1.0",
- "end-of-stream": "^1.0.0",
- "fs-constants": "^1.0.0",
- "readable-stream": "^2.3.0",
- "to-buffer": "^1.1.0",
- "xtend": "^4.0.0"
- }
- }
- }
- },
- "ipfs-bitswap": {
- "version": "0.20.1",
- "resolved": "https://registry.npmjs.org/ipfs-bitswap/-/ipfs-bitswap-0.20.1.tgz",
- "integrity": "sha512-5M0L8xcF3os+ZxYRuyR4YEqcYyb2eGN9+oBuAuf5M9lWbqqnPT7LbIhQ9fEDjpViFHAKGeLqndVYBhHq5Bg2VQ==",
- "dev": true,
- "requires": {
- "async": "^2.6.1",
- "big.js": "^5.1.2",
- "cids": "~0.5.3",
- "debug": "^3.1.0",
- "ipfs-block": "~0.7.1",
- "lodash.debounce": "^4.0.8",
- "lodash.find": "^4.6.0",
- "lodash.groupby": "^4.6.0",
- "lodash.isequalwith": "^4.4.0",
- "lodash.isundefined": "^3.0.1",
- "lodash.pullallwith": "^4.7.0",
- "lodash.sortby": "^4.7.0",
- "lodash.uniqwith": "^4.5.0",
- "lodash.values": "^4.3.0",
- "moving-average": "^1.0.0",
- "multicodec": "~0.2.6",
- "multihashing-async": "~0.5.0",
- "protons": "^1.0.1",
- "pull-defer": "~0.2.2",
- "pull-length-prefixed": "^1.3.0",
- "pull-pushable": "^2.2.0",
- "pull-stream": "^3.6.8",
- "varint-decoder": "^0.1.1"
- },
- "dependencies": {
- "async": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
- "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.10"
- }
- },
- "multihashing-async": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/multihashing-async/-/multihashing-async-0.5.0.tgz",
- "integrity": "sha512-fi1FK4H3yMT5pVibC8ZPtDciEaX/xpr+FyiMnnH6idv8VtZ24hB/stDrxIIomxi8px4KwqZRhqko4gmq1YyUrQ==",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "blakejs": "^1.1.0",
- "js-sha3": "^0.7.0",
- "multihashes": "~0.4.13",
- "murmurhash3js": "^3.0.1",
- "nodeify": "^1.0.1"
- }
- },
- "pull-stream": {
- "version": "3.6.8",
- "resolved": "https://registry.npmjs.org/pull-stream/-/pull-stream-3.6.8.tgz",
- "integrity": "sha512-wQUIptQBcM0rFsUhZoEpOT3vUn73DtTGVq3NQ86c4T7iMOSprDzeKWYq2ksXnbwiuExTKvt+8G9fzNLFQuiO+A==",
- "dev": true
- }
- }
- },
- "ipfs-block": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/ipfs-block/-/ipfs-block-0.7.1.tgz",
- "integrity": "sha512-ABZS9J/+OaDwc10zu6pIVdxWnOD/rkPEravk7FRVuRep7/zKSjffNhO/WuHN7Ex+MOBMz7mty0e+i6xjGnRsRQ==",
- "dev": true,
- "requires": {
- "cids": "^0.5.3",
- "class-is": "^1.1.0"
- }
- },
- "ipfs-block-service": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/ipfs-block-service/-/ipfs-block-service-0.14.0.tgz",
- "integrity": "sha512-qu5VdBSAh/44wtqVgyoyWebjIY6mLbiEZObwYZHEZ5VFuU4oOlfZ+s2oz2I5lTw1eeL7SGccQeshQ0OePxIPnw==",
- "dev": true
- },
- "ipfs-log": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ipfs-log/-/ipfs-log-4.0.6.tgz",
- "integrity": "sha512-LcCFq8AF8CDCKFAM78QkbH5+6VHk0sX5qu6k7/b7wVetuaTx3Xq85axfFjj7D5YeQdssBGLqex1x6EAx9MX9+Q==",
- "dev": true,
- "requires": {
- "p-map": "^1.1.1",
- "p-whilst": "^1.0.0"
- }
- },
- "ipfs-multipart": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/ipfs-multipart/-/ipfs-multipart-0.1.0.tgz",
- "integrity": "sha1-Wo7RP0LoLYvvfS4VHY6vXjow4+o=",
- "dev": true,
- "requires": {
- "content": "^3.0.0",
- "dicer": "^0.2.5"
- }
- },
- "ipfs-pubsub-room": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ipfs-pubsub-room/-/ipfs-pubsub-room-1.2.1.tgz",
- "integrity": "sha512-9KSUihYpA5Lp+AK9d2+MQ3d8IQJ5+VIqDyn9NC1Gbph9ruiDRfMCy/sGS73PnXOUcCqKtpR4PbVdZ6dKOHzhZA==",
- "dev": true,
- "requires": {
- "hyperdiff": "^2.0.3",
- "lodash.clonedeep": "^4.5.0",
- "pull-pushable": "^2.1.1",
- "pull-stream": "^3.6.1",
- "safe-buffer": "^5.1.1"
- }
- },
- "ipfs-repo": {
- "version": "0.20.0",
- "resolved": "https://registry.npmjs.org/ipfs-repo/-/ipfs-repo-0.20.0.tgz",
- "integrity": "sha512-ipwAwj5EzcDU5OyNzfQLdKhTU6UcK3NMWAz9IngbqeKubMjl48392v47ENZqYyK5wgAG1uwTYLDF3QleGI6/WQ==",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "base32.js": "~0.1.0",
- "big.js": "^5.0.3",
- "cids": "~0.5.3",
- "datastore-core": "~0.4.0",
- "datastore-fs": "~0.4.2",
- "datastore-level": "~0.7.0",
- "debug": "^3.1.0",
- "interface-datastore": "~0.4.2",
- "ipfs-block": "~0.7.1",
- "level-js": "github:timkuijsten/level.js#18e03adab34c49523be7d3d58fafb0c632f61303",
- "leveldown": "^1.7.2",
- "lock-me": "^1.0.3",
- "lodash.get": "^4.4.2",
- "lodash.has": "^4.5.2",
- "lodash.set": "^4.3.2",
- "multiaddr": "^4.0.0",
- "pull-stream": "^3.6.7"
- },
- "dependencies": {
- "datastore-level": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/datastore-level/-/datastore-level-0.7.0.tgz",
- "integrity": "sha512-Wgm6kzkXadFOVkzRpu7KfSm6QwxjsgfPRCrcvVQuR4/CsWeREnmyuzu580fLywRmlIQMbcncu6W02W0HyAzjng==",
- "dev": true,
- "requires": {
- "datastore-core": "~0.4.0",
- "interface-datastore": "~0.4.1",
- "level-js": "^2.2.4",
- "leveldown": "^1.9.0",
- "levelup": "^1.3.9",
- "pull-stream": "^3.6.1"
- },
- "dependencies": {
- "level-js": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/level-js/-/level-js-2.2.4.tgz",
- "integrity": "sha1-vAVfQYBjXUSJtWHJSG+jcOjBFpc=",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~0.12.0",
- "idb-wrapper": "^1.5.0",
- "isbuffer": "~0.0.0",
- "ltgt": "^2.1.2",
- "typedarray-to-buffer": "~1.0.0",
- "xtend": "~2.1.2"
- }
- },
- "xtend": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
- "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
- "dev": true,
- "requires": {
- "object-keys": "~0.4.0"
- }
- }
- }
- },
- "deferred-leveldown": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz",
- "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~2.6.0"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz",
- "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
- }
- }
- },
- "leveldown": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-1.9.0.tgz",
- "integrity": "sha512-3MwcrnCUIuFiKp/jSrG1UqDTV4k1yH8f5HH6T9dpqCKG+lRxcfo2KwAqbzTT+TTKfCbaATeHMy9mm1y6sI3ZvA==",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~2.7.0",
- "bindings": "~1.3.0",
- "fast-future": "~1.0.2",
- "nan": "~2.7.0",
- "prebuild-install": "^2.1.0"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz",
- "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
- }
- }
- },
- "levelup": {
- "version": "1.3.9",
- "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz",
- "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==",
- "dev": true,
- "requires": {
- "deferred-leveldown": "~1.2.1",
- "level-codec": "~7.0.0",
- "level-errors": "~1.0.3",
- "level-iterator-stream": "~1.3.0",
- "prr": "~1.0.1",
- "semver": "~5.4.1",
- "xtend": "~4.0.0"
- }
- },
- "multiaddr": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-4.0.0.tgz",
- "integrity": "sha512-zUatrOCfBd/tJNOSoJ10d2EI2FDXB9PyPZhqUMdXE9mOyR3C+HLuOjga2Ga/eChwvEHIpTYRMoIKF2Nv7af2qQ==",
- "dev": true,
- "requires": {
- "bs58": "^4.0.1",
- "class-is": "^1.1.0",
- "ip": "^1.1.5",
- "ip-address": "^5.8.9",
- "lodash.filter": "^4.6.0",
- "lodash.map": "^4.6.0",
- "varint": "^5.0.0",
- "xtend": "^4.0.1"
- }
- },
- "nan": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz",
- "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=",
- "dev": true
- },
- "semver": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
- "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
- "dev": true
- }
- }
- },
- "ipfs-unixfs": {
- "version": "0.1.14",
- "resolved": "https://registry.npmjs.org/ipfs-unixfs/-/ipfs-unixfs-0.1.14.tgz",
- "integrity": "sha512-s1tEnwKhdd17MmyC/EUMNVMDYzKhCiHDI11TF8tSBeWkEQp+0WUxkYuqvz0R5TSi2lNDJ/oVnEmwWhki2spUiQ==",
- "dev": true,
- "requires": {
- "protons": "^1.0.0"
- }
- },
- "ipfs-unixfs-engine": {
- "version": "0.29.0",
- "resolved": "https://registry.npmjs.org/ipfs-unixfs-engine/-/ipfs-unixfs-engine-0.29.0.tgz",
- "integrity": "sha512-mLs+Aqbn46bU6i/lwtK7LCVWszjbQKtg8Y2c9OvnSFTxFi7gP0bSPAiSb0j93QTQV0EqX4AG9c0dqwYebm8Dqw==",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "bs58": "^4.0.1",
- "cids": "~0.5.3",
- "deep-extend": "~0.5.0",
- "ipfs-unixfs": "~0.1.14",
- "ipld": "^0.17.0",
- "ipld-dag-pb": "~0.14.3",
- "left-pad": "^1.3.0",
- "lodash": "^4.17.5",
- "multihashes": "~0.4.13",
- "multihashing-async": "~0.4.8",
- "pull-batch": "^1.0.0",
- "pull-block": "^1.4.0",
- "pull-cat": "^1.1.11",
- "pull-pair": "^1.1.0",
- "pull-paramap": "^1.2.2",
- "pull-pause": "0.0.2",
- "pull-pushable": "^2.2.0",
- "pull-stream": "^3.6.7",
- "pull-through": "^1.0.18",
- "pull-traverse": "^1.0.3",
- "pull-write": "^1.1.4",
- "sparse-array": "^1.3.1"
- }
- },
- "ipld": {
- "version": "0.17.0",
- "resolved": "https://registry.npmjs.org/ipld/-/ipld-0.17.0.tgz",
- "integrity": "sha512-XyOvrK6MtaZBJ5lRFK/FwKZxUpWY7fHgGzM5x+GLev1NFeldzqwX6Pkkmu3sc5HNyQM43pD2DlZGs0K6adQFHg==",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "cids": "~0.5.3",
- "interface-datastore": "~0.4.2",
- "ipfs-block": "~0.7.1",
- "ipfs-block-service": "~0.14.0",
- "ipfs-repo": "~0.19.0",
- "ipld-bitcoin": "~0.1.5",
- "ipld-dag-cbor": "~0.12.0",
- "ipld-dag-pb": "~0.14.2",
- "ipld-ethereum": "^2.0.0",
- "ipld-git": "~0.2.0",
- "ipld-raw": "^2.0.0",
- "ipld-zcash": "~0.1.3",
- "is-ipfs": "~0.3.2",
- "lodash.flatten": "^4.4.0",
- "lodash.includes": "^4.3.0",
- "memdown": "^2.0.0",
- "multihashes": "~0.4.13",
- "pull-defer": "^0.2.2",
- "pull-sort": "^1.0.1",
- "pull-stream": "^3.6.7",
- "pull-traverse": "^1.0.3"
- },
- "dependencies": {
- "datastore-level": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/datastore-level/-/datastore-level-0.7.0.tgz",
- "integrity": "sha512-Wgm6kzkXadFOVkzRpu7KfSm6QwxjsgfPRCrcvVQuR4/CsWeREnmyuzu580fLywRmlIQMbcncu6W02W0HyAzjng==",
- "dev": true,
- "requires": {
- "datastore-core": "~0.4.0",
- "interface-datastore": "~0.4.1",
- "level-js": "^2.2.4",
- "leveldown": "^1.9.0",
- "levelup": "^1.3.9",
- "pull-stream": "^3.6.1"
- },
- "dependencies": {
- "level-js": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/level-js/-/level-js-2.2.4.tgz",
- "integrity": "sha1-vAVfQYBjXUSJtWHJSG+jcOjBFpc=",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~0.12.0",
- "idb-wrapper": "^1.5.0",
- "isbuffer": "~0.0.0",
- "ltgt": "^2.1.2",
- "typedarray-to-buffer": "~1.0.0",
- "xtend": "~2.1.2"
- }
- },
- "xtend": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
- "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
- "dev": true,
- "requires": {
- "object-keys": "~0.4.0"
- }
- }
- }
- },
- "deferred-leveldown": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz",
- "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~2.6.0"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz",
- "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
- }
- }
- },
- "ipfs-repo": {
- "version": "0.19.0",
- "resolved": "https://registry.npmjs.org/ipfs-repo/-/ipfs-repo-0.19.0.tgz",
- "integrity": "sha512-d94KB9OScnShdZ6XXVe8V/GFPFrZH0IHHh/ikkpJOovEZKGqX8JR+Ly9PKKSitkEG5AILKz/UABzGlWJ/l+Ajw==",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "base32.js": "~0.1.0",
- "big.js": "^5.0.3",
- "cids": "~0.5.3",
- "datastore-core": "~0.4.0",
- "datastore-fs": "~0.4.2",
- "datastore-level": "~0.7.0",
- "debug": "^3.1.0",
- "interface-datastore": "~0.4.2",
- "ipfs-block": "~0.7.1",
- "level-js": "github:timkuijsten/level.js#18e03adab34c49523be7d3d58fafb0c632f61303",
- "leveldown": "^1.7.2",
- "lock-me": "^1.0.3",
- "lodash.get": "^4.4.2",
- "lodash.has": "^4.5.2",
- "lodash.set": "^4.3.2",
- "multiaddr": "^4.0.0",
- "pull-stream": "^3.6.7"
- }
- },
- "leveldown": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-1.9.0.tgz",
- "integrity": "sha512-3MwcrnCUIuFiKp/jSrG1UqDTV4k1yH8f5HH6T9dpqCKG+lRxcfo2KwAqbzTT+TTKfCbaATeHMy9mm1y6sI3ZvA==",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~2.7.0",
- "bindings": "~1.3.0",
- "fast-future": "~1.0.2",
- "nan": "~2.7.0",
- "prebuild-install": "^2.1.0"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz",
- "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
- }
- }
- },
- "levelup": {
- "version": "1.3.9",
- "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz",
- "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==",
- "dev": true,
- "requires": {
- "deferred-leveldown": "~1.2.1",
- "level-codec": "~7.0.0",
- "level-errors": "~1.0.3",
- "level-iterator-stream": "~1.3.0",
- "prr": "~1.0.1",
- "semver": "~5.4.1",
- "xtend": "~4.0.0"
- }
- },
- "multiaddr": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-4.0.0.tgz",
- "integrity": "sha512-zUatrOCfBd/tJNOSoJ10d2EI2FDXB9PyPZhqUMdXE9mOyR3C+HLuOjga2Ga/eChwvEHIpTYRMoIKF2Nv7af2qQ==",
- "dev": true,
- "requires": {
- "bs58": "^4.0.1",
- "class-is": "^1.1.0",
- "ip": "^1.1.5",
- "ip-address": "^5.8.9",
- "lodash.filter": "^4.6.0",
- "lodash.map": "^4.6.0",
- "varint": "^5.0.0",
- "xtend": "^4.0.1"
- }
- },
- "nan": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz",
- "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=",
- "dev": true
- },
- "semver": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
- "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
- "dev": true
- }
- }
- },
- "ipld-bitcoin": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/ipld-bitcoin/-/ipld-bitcoin-0.1.5.tgz",
- "integrity": "sha512-sXgjbp++QTs1onkeBY/W1/LTvDdFErZoPgPlIKAOR9fiLXaRHSUKHTBulaL/IDnNXhD5jaFPveOudFkNNJCbDw==",
- "dev": true,
- "requires": {
- "bitcoinjs-lib": "^3.3.2",
- "cids": "~0.5.2",
- "dirty-chai": "^2.0.1",
- "hash.js": "^1.1.3",
- "multihashes": "~0.4.12"
- }
- },
- "ipld-dag-cbor": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/ipld-dag-cbor/-/ipld-dag-cbor-0.12.0.tgz",
- "integrity": "sha512-zitoqSGNP/73r5LU4ZuYE5E+zJar84k+AEGdFl3Y+H3opBn8KTMcR3bm1CoTaJYBfpn1fJpB0jb2wTEQDRESpQ==",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "borc": "^2.0.2",
- "bs58": "^4.0.1",
- "cids": "~0.5.2",
- "is-circular": "^1.0.1",
- "multihashes": "~0.4.12",
- "multihashing-async": "~0.4.7",
- "traverse": "^0.6.6"
- }
- },
- "ipld-dag-pb": {
- "version": "0.14.4",
- "resolved": "https://registry.npmjs.org/ipld-dag-pb/-/ipld-dag-pb-0.14.4.tgz",
- "integrity": "sha512-RHVzHh5AIrkFWgd9v/ZWBoeKbtQI43Jz8bC7cqSYwz180Es+Qr41abI3cKujcOldwVypfLtZmdB22gUUTJYHsw==",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "bs58": "^4.0.1",
- "buffer-loader": "~0.0.1",
- "cids": "~0.5.3",
- "class-is": "^1.1.0",
- "is-ipfs": "~0.3.2",
- "multihashes": "~0.4.13",
- "multihashing-async": "~0.4.8",
- "protons": "^1.0.1",
- "pull-stream": "^3.6.7",
- "pull-traverse": "^1.0.3",
- "stable": "0.1.6"
- }
- },
- "ipld-ethereum": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ipld-ethereum/-/ipld-ethereum-2.0.0.tgz",
- "integrity": "sha512-wpWmba4bwjctTrHZbYQIdbizCBprEh4ueDhAJtYiiaEoDA4yWdrDF/gHNL3dBXFMFZ/FYudSI08GrQeEuC8tQg==",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "cids": "~0.5.2",
- "eth-hash-to-cid": "~0.1.0",
- "ethereumjs-account": "^2.0.4",
- "ethereumjs-block": "^1.7.0",
- "ethereumjs-tx": "^1.3.3",
- "ipfs-block": "~0.6.1",
- "merkle-patricia-tree": "^2.2.0",
- "multihashes": "~0.4.12",
- "multihashing-async": "~0.4.7",
- "rlp": "^2.0.0"
- },
- "dependencies": {
- "ipfs-block": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/ipfs-block/-/ipfs-block-0.6.1.tgz",
- "integrity": "sha512-28dgGsb2YsYnFs+To4cVBX8e/lTCb8eWDzGhN5csj3a/sHMOYrHeK8+Ez0IV67CI3lqKGuG/ZD01Cmd6JUvKrQ==",
- "dev": true,
- "requires": {
- "cids": "^0.5.2"
- }
- }
- }
- },
- "ipld-git": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/ipld-git/-/ipld-git-0.2.0.tgz",
- "integrity": "sha512-4hMxkRCIme5qlqxgtQ9ZKsU+LmbNu55Yqi9MTNPly6tOPuBdNcB/5Cvw9OBG8KPHaGpZkHYmZ1K/LTHD0M7FCg==",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "cids": "~0.5.2",
- "multicodec": "~0.2.5",
- "multihashes": "~0.4.12",
- "multihashing-async": "~0.4.7",
- "smart-buffer": "^4.0.0",
- "traverse": "~0.6.6"
- }
- },
- "ipld-raw": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ipld-raw/-/ipld-raw-2.0.0.tgz",
- "integrity": "sha512-iuzlzyqIMnRjpsgyVcorkXIXRZjlYjdlmZFpYW5K1s2ce5qnl4DHy4o7ASsgIpr3Eevp4BuwMXnJBpK6i8u8qg==",
- "dev": true,
- "requires": {
- "cids": "~0.5.2"
- }
- },
- "ipld-zcash": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ipld-zcash/-/ipld-zcash-0.1.3.tgz",
- "integrity": "sha512-SLMihJHMTjU008iSAUEVILKgpcRbhEhu/VZQ4Arcj3WnB18AdDZAwC7hg6E8BeJDG7oJq5vtfJ68YxRX9NSHgg==",
- "dev": true,
- "requires": {
- "cids": "~0.5.2",
- "dirty-chai": "^2.0.1",
- "hash.js": "^1.1.3",
- "multihashes": "~0.4.12",
- "zcash-bitcore-lib": "^0.13.20-rc3"
- }
- },
- "iron": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/iron/-/iron-4.0.5.tgz",
- "integrity": "sha1-TwQszri5c480a1mqc0yDqJvDFCg=",
- "dev": true,
- "requires": {
- "boom": "5.x.x",
- "cryptiles": "3.x.x",
- "hoek": "4.x.x"
- },
- "dependencies": {
- "boom": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
- "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
- "dev": true,
- "requires": {
- "hoek": "4.x.x"
- }
- },
- "hoek": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
- "dev": true
- }
- }
- },
- "is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
- "dev": true
- },
- "is-builtin-module": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
- "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
- "dev": true,
- "requires": {
- "builtin-modules": "^1.0.0"
- }
- },
- "is-callable": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz",
- "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=",
- "dev": true
- },
- "is-ci": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz",
- "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==",
- "dev": true,
- "requires": {
- "ci-info": "^1.0.0"
- }
- },
- "is-circular": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-circular/-/is-circular-1.0.1.tgz",
- "integrity": "sha1-ZbBHaoWI5Ua4CHwdZtTAjYKjFnk=",
- "dev": true
- },
- "is-date-object": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
- "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "is-hex-prefixed": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz",
- "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=",
- "dev": true
- },
- "is-installed-globally": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
- "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
- "dev": true,
- "requires": {
- "global-dirs": "^0.1.0",
- "is-path-inside": "^1.0.0"
- }
- },
- "is-ipfs": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/is-ipfs/-/is-ipfs-0.3.2.tgz",
- "integrity": "sha512-82V1j4LMkYy7H4seQQzOWqo7FiW3I64/1/ryo3dhtWKfOvm7ZolLMRQQfGKs4OXWauh5rAkPnamVcRISHwhmpQ==",
- "dev": true,
- "requires": {
- "bs58": "^4.0.1",
- "cids": "~0.5.1",
- "multihashes": "~0.4.9"
- }
- },
- "is-npm": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
- "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=",
- "dev": true
- },
- "is-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
- "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
- "dev": true
- },
- "is-path-cwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
- "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
- "dev": true
- },
- "is-path-in-cwd": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
- "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
- "dev": true,
- "requires": {
- "is-path-inside": "^1.0.0"
- }
- },
- "is-path-inside": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
- "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
- "dev": true,
- "requires": {
- "path-is-inside": "^1.0.1"
- }
- },
- "is-promise": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz",
- "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU=",
- "dev": true
- },
- "is-pull-stream": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/is-pull-stream/-/is-pull-stream-0.0.0.tgz",
- "integrity": "sha1-o7w9HG0wVRUcRr3m85nv7SFEDKk=",
- "dev": true
- },
- "is-redirect": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
- "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
- "dev": true
- },
- "is-regex": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
- "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
- "dev": true,
- "requires": {
- "has": "^1.0.1"
- }
- },
- "is-resolvable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
- "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
- "dev": true
- },
- "is-retry-allowed": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
- "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=",
- "dev": true
- },
- "is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
- },
- "is-symbol": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz",
- "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=",
- "dev": true
- },
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "isbuffer": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/isbuffer/-/isbuffer-0.0.0.tgz",
- "integrity": "sha1-OMFG2d9Si4v5sHAcPUPPEt8/w5s=",
- "dev": true
- },
- "isemail": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/isemail/-/isemail-2.2.1.tgz",
- "integrity": "sha1-A1PT2aYpUQgMJiwqoKQrjqjp4qY=",
- "dev": true
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
- },
- "isomorphic-fetch": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
- "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
- "dev": true,
- "requires": {
- "node-fetch": "^1.0.1",
- "whatwg-fetch": ">=0.10.0"
- }
- },
- "isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
- },
- "items": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/items/-/items-2.1.1.tgz",
- "integrity": "sha1-i9FtnIOxlSneWuoyGsqtp4NkoZg=",
- "dev": true
- },
- "joi": {
- "version": "13.3.0",
- "resolved": "https://registry.npmjs.org/joi/-/joi-13.3.0.tgz",
- "integrity": "sha512-iF6jEYVfBIoYXztYymia1JfuoVbxBNuOcwdbsdoGin9/jjhBLhonKmfTQOvePss8r8v4tU4JOcNmYPHZzKEFag==",
- "dev": true,
- "requires": {
- "hoek": "5.x.x",
- "isemail": "3.x.x",
- "topo": "3.x.x"
- },
- "dependencies": {
- "isemail": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.1.2.tgz",
- "integrity": "sha512-zfRhJn9rFSGhzU5tGZqepRSAj3+g6oTOHxMGGriWNJZzyLPUK8H7VHpqKntegnW8KLyGA9zwuNaCoopl40LTpg==",
- "dev": true,
- "requires": {
- "punycode": "2.x.x"
- }
- },
- "topo": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.0.tgz",
- "integrity": "sha512-Tlu1fGlR90iCdIPURqPiufqAlCZYzLjHYVVbcFWDMcX7+tK8hdZWAfsMrD/pBul9jqHHwFjNdf1WaxA9vTRRhw==",
- "dev": true,
- "requires": {
- "hoek": "5.x.x"
- }
- }
- }
- },
- "joi-browser": {
- "version": "13.0.1",
- "resolved": "https://registry.npmjs.org/joi-browser/-/joi-browser-13.0.1.tgz",
- "integrity": "sha512-o5rSmqmneWaq/LXt5Rq9moyeE8vW4gGwLL3zRT7iA2wiUgVnrE8EPfNvYEVH0yetGpyzH4LMW/NGb0ChvYk7pQ==",
- "dev": true
- },
- "joi-multiaddr": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/joi-multiaddr/-/joi-multiaddr-2.0.0.tgz",
- "integrity": "sha512-7dJLwgplwRnIQAlC+zTuX3jkk3uXVa/RKm7GDfNO3NqmjiYgwAet8yprIdilki1WhdkJJMLuTNDf49uFNru68A==",
- "dev": true,
- "requires": {
- "mafmt": "^6.0.0",
- "multiaddr": "^4.0.0"
- },
- "dependencies": {
- "multiaddr": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-4.0.0.tgz",
- "integrity": "sha512-zUatrOCfBd/tJNOSoJ10d2EI2FDXB9PyPZhqUMdXE9mOyR3C+HLuOjga2Ga/eChwvEHIpTYRMoIKF2Nv7af2qQ==",
- "dev": true,
- "requires": {
- "bs58": "^4.0.1",
- "class-is": "^1.1.0",
- "ip": "^1.1.5",
- "ip-address": "^5.8.9",
- "lodash.filter": "^4.6.0",
- "lodash.map": "^4.6.0",
- "varint": "^5.0.0",
- "xtend": "^4.0.1"
- }
- }
- }
- },
- "js-sha3": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.7.0.tgz",
- "integrity": "sha512-Wpks3yBDm0UcL5qlVhwW9Jr9n9i4FfeWBFOOXP5puDS/SiudJGhw7DPyBqn3487qD4F0lsC0q3zxink37f7zeA==",
- "dev": true
- },
- "js-tokens": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
- "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
- "dev": true
- },
- "js-yaml": {
- "version": "3.11.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz",
- "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "jsbn": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
- "integrity": "sha1-sBMHyym2GKHtJux56RH4A8TaAEA=",
- "dev": true
- },
- "json-parse-better-errors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
- "dev": true
- },
- "json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
- },
- "json-schema-traverse": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
- "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
- },
- "json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
- "dev": true
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
- },
- "json-text-sequence": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/json-text-sequence/-/json-text-sequence-0.1.1.tgz",
- "integrity": "sha1-py8hfcSvxGKf/1/rME3BvVGi89I=",
- "dev": true,
- "requires": {
- "delimit-stream": "0.1.0"
- }
- },
- "jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- }
- },
- "jsx-ast-utils": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz",
- "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=",
- "dev": true,
- "requires": {
- "array-includes": "^3.0.3"
- }
- },
- "k-bucket": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/k-bucket/-/k-bucket-4.0.1.tgz",
- "integrity": "sha512-YvDpmY3waI999h1zZoW1rJ04fZrgZ+5PAlVmvwDHT6YO/Q1AOhdel07xsKy9eAvJjQ9xZV1wz3rXKqEfaWvlcQ==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "randombytes": "^2.0.3"
- }
- },
- "keccak": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz",
- "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==",
- "dev": true,
- "requires": {
- "bindings": "^1.2.1",
- "inherits": "^2.0.3",
- "nan": "^2.2.1",
- "safe-buffer": "^5.1.0"
- }
- },
- "keypair": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/keypair/-/keypair-1.0.1.tgz",
- "integrity": "sha1-dgNxknCvtlZO04oiCHoG/Jqk6hs=",
- "dev": true
- },
- "latest-version": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
- "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=",
- "dev": true,
- "requires": {
- "package-json": "^4.0.0"
- }
- },
- "lcid": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
- "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
- "requires": {
- "invert-kv": "^1.0.0"
- }
- },
- "left-pad": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz",
- "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==",
- "dev": true
- },
- "length-prefixed-stream": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/length-prefixed-stream/-/length-prefixed-stream-1.5.2.tgz",
- "integrity": "sha512-5kHV/7ZCefC27d4FQLgFHek/pN1S0uEQ8OEgSm55DWO1rKxGi9by4F444aStxa56wB20b6CxZw6KiGPwmJOUmQ==",
- "dev": true,
- "requires": {
- "buffer-alloc-unsafe": "^1.0.0",
- "readable-stream": "^2.0.0",
- "varint": "^5.0.0"
- },
- "dependencies": {
- "buffer-alloc-unsafe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.0.0.tgz",
- "integrity": "sha1-R0qojzTnvHX6MR0uZFdAnFhGw/4=",
- "dev": true
- }
- }
- },
- "level-codec": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz",
- "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==",
- "dev": true
- },
- "level-errors": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz",
- "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==",
- "dev": true,
- "requires": {
- "errno": "~0.1.1"
- }
- },
- "level-iterator-stream": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz",
- "integrity": "sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0=",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "level-errors": "^1.0.3",
- "readable-stream": "^1.0.33",
- "xtend": "^4.0.0"
- },
- "dependencies": {
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
- },
- "readable-stream": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
- "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
- "dev": true
- }
- }
- },
- "level-js": {
- "version": "github:timkuijsten/level.js#18e03adab34c49523be7d3d58fafb0c632f61303",
- "from": "github:timkuijsten/level.js#idbunwrapper",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~2.4.1",
- "idb-readable-stream": "0.0.4",
- "ltgt": "^2.1.2",
- "xtend": "^4.0.1"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.4.1.tgz",
- "integrity": "sha1-s7/tuITraToSd18MVenwpCDM7mQ=",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
- }
- }
- },
- "level-ws": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz",
- "integrity": "sha1-Ny5RIXeSSgBCSwtDrvK7QkltIos=",
- "dev": true,
- "requires": {
- "readable-stream": "~1.0.15",
- "xtend": "~2.1.1"
- },
- "dependencies": {
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
- },
- "readable-stream": {
- "version": "1.0.34",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
- "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
- "dev": true
- },
- "xtend": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
- "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
- "dev": true,
- "requires": {
- "object-keys": "~0.4.0"
- }
- }
- }
- },
- "leveldown": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-1.9.0.tgz",
- "integrity": "sha512-3MwcrnCUIuFiKp/jSrG1UqDTV4k1yH8f5HH6T9dpqCKG+lRxcfo2KwAqbzTT+TTKfCbaATeHMy9mm1y6sI3ZvA==",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~2.7.0",
- "bindings": "~1.3.0",
- "fast-future": "~1.0.2",
- "nan": "~2.7.0",
- "prebuild-install": "^2.1.0"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz",
- "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
- },
- "nan": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz",
- "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=",
- "dev": true
- }
- }
- },
- "levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
- "dev": true,
- "requires": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
- }
- },
- "libp2p": {
- "version": "0.20.4",
- "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-0.20.4.tgz",
- "integrity": "sha512-I93QXjo9LCUMzfr6f1XErQzwN9PuS3gZCpt6K/hgPbgMqssbtP1+AgCNpT5JK37+IUk+3HAxa4vyIEzUl3VsQA==",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "libp2p-floodsub": "^0.15.0",
- "libp2p-ping": "~0.8.0",
- "libp2p-switch": "~0.39.2",
- "libp2p-websockets": "^0.12.0",
- "mafmt": "^6.0.0",
- "multiaddr": "^5.0.0",
- "peer-book": "~0.7.0",
- "peer-id": "~0.10.7",
- "peer-info": "~0.14.1"
- },
- "dependencies": {
- "peer-book": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/peer-book/-/peer-book-0.7.0.tgz",
- "integrity": "sha512-QgZF7Cb9CELGm9HQEuTCYs+AZbZiIEW+XJzWaRLpHs5waXukrBC7TZxRzF8PuRkNIOAzulZSN8qOsP8U4m+elw==",
- "dev": true,
- "requires": {
- "bs58": "^4.0.1",
- "peer-id": "^0.10.7",
- "peer-info": "^0.14.0"
- }
- }
- }
- },
- "libp2p-circuit": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/libp2p-circuit/-/libp2p-circuit-0.2.0.tgz",
- "integrity": "sha512-K3k+ojqO8b1VM1C2Nb+ba+8z7lDD1pn6stieIB3pOEB35M9pVbXfVg8nKoSnjw3NAXCSsSCbD1swYMwq8g/fAA==",
- "dev": true,
- "requires": {
- "assert": "^1.4.1",
- "async": "^2.6.0",
- "debug": "^3.1.0",
- "interface-connection": "^0.3.2",
- "lodash": "^4.17.5",
- "mafmt": "^6.0.0",
- "multiaddr": "^4.0.0",
- "multistream-select": "^0.14.1",
- "peer-id": "^0.10.7",
- "peer-info": "^0.14.0",
- "protons": "^1.0.1",
- "pull-abortable": "^4.1.1",
- "pull-handshake": "^1.1.4",
- "pull-stream": "^3.6.7",
- "safe-buffer": "^5.1.1",
- "setimmediate": "^1.0.5"
- },
- "dependencies": {
- "multiaddr": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-4.0.0.tgz",
- "integrity": "sha512-zUatrOCfBd/tJNOSoJ10d2EI2FDXB9PyPZhqUMdXE9mOyR3C+HLuOjga2Ga/eChwvEHIpTYRMoIKF2Nv7af2qQ==",
- "dev": true,
- "requires": {
- "bs58": "^4.0.1",
- "class-is": "^1.1.0",
- "ip": "^1.1.5",
- "ip-address": "^5.8.9",
- "lodash.filter": "^4.6.0",
- "lodash.map": "^4.6.0",
- "varint": "^5.0.0",
- "xtend": "^4.0.1"
- }
- }
- }
- },
- "libp2p-crypto": {
- "version": "0.13.0",
- "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.13.0.tgz",
- "integrity": "sha512-i3r1TBec/xYmC5bcpPiIs3OyUAU3iy53OdRdxqawKoWTQPjYB+TyQ4w+otT66Y0sMcw70O0wH3GFAfPmQgFn+g==",
- "dev": true,
- "requires": {
- "asn1.js": "^5.0.0",
- "async": "^2.6.0",
- "browserify-aes": "^1.2.0",
- "bs58": "^4.0.1",
- "keypair": "^1.0.1",
- "libp2p-crypto-secp256k1": "~0.2.2",
- "multihashing-async": "~0.4.8",
- "node-forge": "^0.7.5",
- "pem-jwk": "^1.5.1",
- "protons": "^1.0.1",
- "rsa-pem-to-jwk": "^1.1.3",
- "tweetnacl": "^1.0.0",
- "webcrypto-shim": "github:dignifiedquire/webcrypto-shim#190bc9ec341375df6025b17ae12ddb2428ea49c8"
- }
- },
- "libp2p-crypto-secp256k1": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/libp2p-crypto-secp256k1/-/libp2p-crypto-secp256k1-0.2.2.tgz",
- "integrity": "sha1-DdUh8Yq8TjahUuJOmzYwewrpzwU=",
- "dev": true,
- "requires": {
- "async": "^2.5.0",
- "multihashing-async": "~0.4.6",
- "nodeify": "^1.0.1",
- "safe-buffer": "^5.1.1",
- "secp256k1": "^3.3.0"
- }
- },
- "libp2p-floodsub": {
- "version": "0.15.0",
- "resolved": "https://registry.npmjs.org/libp2p-floodsub/-/libp2p-floodsub-0.15.0.tgz",
- "integrity": "sha512-sDVNxE6GKOZ7+qWE06jQuJ/CrYgPfOqkRD4qWPFe02AtghswyocWJkDiceKHx++mW2h2KYl7ae68XK0DLEEOiw==",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "bs58": "^4.0.1",
- "debug": "^3.1.0",
- "length-prefixed-stream": "^1.5.2",
- "libp2p-crypto": "~0.13.0",
- "lodash.values": "^4.3.0",
- "protons": "^1.0.1",
- "pull-pushable": "^2.2.0",
- "time-cache": "~0.3.0"
- }
- },
- "libp2p-identify": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/libp2p-identify/-/libp2p-identify-0.7.1.tgz",
- "integrity": "sha512-uQh04s5s2v6JbhdzeKdQqaOGmEMlZv60djMR74MPkerNPFLcJEHHyVXcD35CgMVaZezqai2Y8L2zvPuuOnUZtA==",
- "dev": true,
- "requires": {
- "multiaddr": "^5.0.0",
- "peer-id": "~0.10.7",
- "peer-info": "~0.14.1",
- "protons": "^1.0.1",
- "pull-length-prefixed": "^1.3.0",
- "pull-stream": "^3.6.7"
- }
- },
- "libp2p-kad-dht": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/libp2p-kad-dht/-/libp2p-kad-dht-0.10.0.tgz",
- "integrity": "sha512-JbudRVI6iTFcQ+YtO+BByslR5uASKi5gEWadhDwZNuVlpSlNx177QiOb4uxxLVdo/JR13ulppMdUHFgVFXZiLA==",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "base32.js": "^0.1.0",
- "cids": "~0.5.3",
- "debug": "^3.1.0",
- "hashlru": "^2.2.1",
- "heap": "^0.2.6",
- "interface-datastore": "~0.4.2",
- "k-bucket": "^4.0.0",
- "libp2p-crypto": "~0.13.0",
- "libp2p-record": "~0.5.1",
- "multihashing-async": "~0.4.8",
- "peer-id": "~0.10.7",
- "peer-info": "~0.14.0",
- "priorityqueue": "^0.2.1",
- "protons": "^1.0.1",
- "pull-length-prefixed": "^1.3.0",
- "pull-stream": "^3.6.7",
- "varint": "^5.0.0",
- "xor-distance": "^1.0.0"
- }
- },
- "libp2p-keychain": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/libp2p-keychain/-/libp2p-keychain-0.3.1.tgz",
- "integrity": "sha512-dsKw+gP/P7wDPkDpQZVVU+mRUlPqEmcYxGhvrEyjd7+UdcTxydEFbwvP0HQLVkkoLjsr2dVSauh7FdX7ZUmnQQ==",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "deepmerge": "^1.5.2",
- "interface-datastore": "~0.4.2",
- "libp2p-crypto": "~0.12.0",
- "pull-stream": "^3.6.1",
- "sanitize-filename": "^1.6.1"
- },
- "dependencies": {
- "libp2p-crypto": {
- "version": "0.12.1",
- "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.12.1.tgz",
- "integrity": "sha512-1/z8rxZ0DcQNreZhEsl7PnLr7DWOioSvYbKBLGkRwNRiNh1JJLgh0PdTySBb44wkrOGT+TxcGRd7iq3/X6Wxwg==",
- "dev": true,
- "requires": {
- "asn1.js": "^5.0.0",
- "async": "^2.6.0",
- "browserify-aes": "^1.1.1",
- "bs58": "^4.0.1",
- "keypair": "^1.0.1",
- "libp2p-crypto-secp256k1": "~0.2.2",
- "multihashing-async": "~0.4.7",
- "node-forge": "^0.7.1",
- "pem-jwk": "^1.5.1",
- "protons": "^1.0.1",
- "rsa-pem-to-jwk": "^1.1.3",
- "tweetnacl": "^1.0.0",
- "webcrypto-shim": "github:dignifiedquire/webcrypto-shim#190bc9ec341375df6025b17ae12ddb2428ea49c8"
- }
- }
- }
- },
- "libp2p-mdns": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/libp2p-mdns/-/libp2p-mdns-0.11.0.tgz",
- "integrity": "sha512-TmG/AcdwPiJraGb2XCMP9etxCl2k6Q++GkBRPmphVBVEccaNll32PLxASMw12u1ANAHPgORw0VboR9qmrxxA7Q==",
- "dev": true,
- "requires": {
- "libp2p-tcp": "~0.12.0",
- "multiaddr": "^4.0.0",
- "multicast-dns": "^7.0.0",
- "peer-id": "~0.10.7",
- "peer-info": "~0.14.0"
- },
- "dependencies": {
- "multiaddr": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-4.0.0.tgz",
- "integrity": "sha512-zUatrOCfBd/tJNOSoJ10d2EI2FDXB9PyPZhqUMdXE9mOyR3C+HLuOjga2Ga/eChwvEHIpTYRMoIKF2Nv7af2qQ==",
- "dev": true,
- "requires": {
- "bs58": "^4.0.1",
- "class-is": "^1.1.0",
- "ip": "^1.1.5",
- "ip-address": "^5.8.9",
- "lodash.filter": "^4.6.0",
- "lodash.map": "^4.6.0",
- "varint": "^5.0.0",
- "xtend": "^4.0.1"
- }
- }
- }
- },
- "libp2p-mplex": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/libp2p-mplex/-/libp2p-mplex-0.7.0.tgz",
- "integrity": "sha512-Vvk6ShXrNQBM/fkbrnEMtWuWiKEBXmSMFONtmfu33BKgi6dDzOWOR33LuIv1xEPkLWagRAeckVTg0kTta7J3ZA==",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "chunky": "0.0.0",
- "concat-stream": "^1.6.2",
- "debug": "^3.1.0",
- "duplexify": "^3.5.4",
- "pull-catch": "^1.0.0",
- "pull-stream": "^3.6.7",
- "pull-stream-to-stream": "^1.3.4",
- "pump": "^3.0.0",
- "readable-stream": "^2.3.6",
- "stream-to-pull-stream": "^1.7.2",
- "through2": "^2.0.3",
- "varint": "^5.0.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- }
- }
- },
- "libp2p-ping": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/libp2p-ping/-/libp2p-ping-0.8.0.tgz",
- "integrity": "sha512-7GtCCvbs6sEabnjh2ZIdru8wuKP4Qux6alw7wuaMosqWkPeFnnFmQsGaWEGpwEmD49A1dsT+aIYvAx5jFB02Bw==",
- "dev": true,
- "requires": {
- "libp2p-crypto": "~0.13.0",
- "pull-handshake": "^1.1.4",
- "pull-stream": "^3.6.7"
- }
- },
- "libp2p-railing": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/libp2p-railing/-/libp2p-railing-0.8.1.tgz",
- "integrity": "sha512-2GXIwPj/FUBeNeTmdIOEC4pluZ5R/GZiw6V7h8cJ+1o3FJ60Dvc0uYR2fHqo3VaGUN9eM1MqCAqMYVio0CyrGg==",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "debug": "^3.1.0",
- "lodash": "^4.17.5",
- "mafmt": "^6.0.0",
- "multiaddr": "^4.0.0",
- "peer-id": "~0.10.7",
- "peer-info": "~0.14.1"
- },
- "dependencies": {
- "multiaddr": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-4.0.0.tgz",
- "integrity": "sha512-zUatrOCfBd/tJNOSoJ10d2EI2FDXB9PyPZhqUMdXE9mOyR3C+HLuOjga2Ga/eChwvEHIpTYRMoIKF2Nv7af2qQ==",
- "dev": true,
- "requires": {
- "bs58": "^4.0.1",
- "class-is": "^1.1.0",
- "ip": "^1.1.5",
- "ip-address": "^5.8.9",
- "lodash.filter": "^4.6.0",
- "lodash.map": "^4.6.0",
- "varint": "^5.0.0",
- "xtend": "^4.0.1"
- }
- }
- }
- },
- "libp2p-record": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/libp2p-record/-/libp2p-record-0.5.1.tgz",
- "integrity": "sha512-e2qLv0Tx4yBrGQrTbogWKpRFAM5rhmwTAnm/IfVn8/TzRBcB4F0PTVRB/Wf0eFCa8dNmD6vTn9wyhe+zmcI1zQ==",
- "dev": true,
- "requires": {
- "async": "^2.5.0",
- "buffer-split": "^1.0.0",
- "left-pad": "^1.1.3",
- "multihashes": "~0.4.9",
- "multihashing-async": "~0.4.6",
- "peer-id": "~0.10.0",
- "protons": "^1.0.0"
- }
- },
- "libp2p-secio": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/libp2p-secio/-/libp2p-secio-0.10.0.tgz",
- "integrity": "sha512-/0nirr4UBdQBbETBliGYD6mLzKl+ZUX+2Kzmpk98Pdjdam5W2IhLF8zSeeK6Z4d/gJOaLdf2H8C6wLrwOSil8A==",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "debug": "^3.1.0",
- "interface-connection": "~0.3.2",
- "libp2p-crypto": "~0.12.1",
- "multihashing-async": "~0.4.8",
- "peer-id": "~0.10.7",
- "peer-info": "^0.14.0",
- "protons": "^1.0.1",
- "pull-defer": "^0.2.2",
- "pull-handshake": "^1.1.4",
- "pull-length-prefixed": "^1.3.0",
- "pull-stream": "^3.6.7"
- },
- "dependencies": {
- "libp2p-crypto": {
- "version": "0.12.1",
- "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.12.1.tgz",
- "integrity": "sha512-1/z8rxZ0DcQNreZhEsl7PnLr7DWOioSvYbKBLGkRwNRiNh1JJLgh0PdTySBb44wkrOGT+TxcGRd7iq3/X6Wxwg==",
- "dev": true,
- "requires": {
- "asn1.js": "^5.0.0",
- "async": "^2.6.0",
- "browserify-aes": "^1.1.1",
- "bs58": "^4.0.1",
- "keypair": "^1.0.1",
- "libp2p-crypto-secp256k1": "~0.2.2",
- "multihashing-async": "~0.4.7",
- "node-forge": "^0.7.1",
- "pem-jwk": "^1.5.1",
- "protons": "^1.0.1",
- "rsa-pem-to-jwk": "^1.1.3",
- "tweetnacl": "^1.0.0",
- "webcrypto-shim": "github:dignifiedquire/webcrypto-shim#190bc9ec341375df6025b17ae12ddb2428ea49c8"
- }
- }
- }
- },
- "libp2p-switch": {
- "version": "0.39.2",
- "resolved": "https://registry.npmjs.org/libp2p-switch/-/libp2p-switch-0.39.2.tgz",
- "integrity": "sha512-lKJTCJlGPPYiR3B0cMZP1/0bfGe6n2oIfcP1NPPfxJmc3/WBs8hAzdiAPnibg+uI78RsQaiZBPTvO6+XDccdLQ==",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "big.js": "^5.0.3",
- "debug": "^3.1.0",
- "interface-connection": "~0.3.2",
- "ip-address": "^5.8.9",
- "libp2p-circuit": "~0.2.0",
- "libp2p-identify": "~0.7.1",
- "lodash.includes": "^4.3.0",
- "moving-average": "^1.0.0",
- "multiaddr": "^5.0.0",
- "multistream-select": "~0.14.2",
- "once": "^1.4.0",
- "peer-id": "~0.10.7",
- "peer-info": "~0.14.1",
- "pull-stream": "^3.6.7",
- "quick-lru": "^1.1.0"
- }
- },
- "libp2p-tcp": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/libp2p-tcp/-/libp2p-tcp-0.12.0.tgz",
- "integrity": "sha512-zuq8bpnra1XGUK6DcsiDT0fY2QWoJQBmdQgx6Hz4L2IJTPmGBN3ww3Z8VhSqNaPmm/Dcfs7pug+pamIu3olmuQ==",
- "dev": true,
- "requires": {
- "class-is": "^1.1.0",
- "debug": "^3.1.0",
- "interface-connection": "~0.3.2",
- "ip-address": "^5.8.9",
- "lodash.includes": "^4.3.0",
- "lodash.isfunction": "^3.0.9",
- "mafmt": "^6.0.0",
- "multiaddr": "^4.0.0",
- "once": "^1.4.0",
- "stream-to-pull-stream": "^1.7.2"
- },
- "dependencies": {
- "multiaddr": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-4.0.0.tgz",
- "integrity": "sha512-zUatrOCfBd/tJNOSoJ10d2EI2FDXB9PyPZhqUMdXE9mOyR3C+HLuOjga2Ga/eChwvEHIpTYRMoIKF2Nv7af2qQ==",
- "dev": true,
- "requires": {
- "bs58": "^4.0.1",
- "class-is": "^1.1.0",
- "ip": "^1.1.5",
- "ip-address": "^5.8.9",
- "lodash.filter": "^4.6.0",
- "lodash.map": "^4.6.0",
- "varint": "^5.0.0",
- "xtend": "^4.0.1"
- }
- }
- }
- },
- "libp2p-webrtc-star": {
- "version": "0.15.0",
- "resolved": "https://registry.npmjs.org/libp2p-webrtc-star/-/libp2p-webrtc-star-0.15.0.tgz",
- "integrity": "sha512-6HotnIMC4ovF6lIF7GknbOq71cuf689rS85IFCrmW+7HTe7qCzRZkkbG76880YYoBtnPlAedDzoihYjtz29GlQ==",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "class-is": "^1.1.0",
- "debug": "^3.1.0",
- "detect-node": "^2.0.3",
- "epimetheus": "^1.0.55",
- "hapi": "^16.6.2",
- "inert": "^4.2.1",
- "interface-connection": "~0.3.2",
- "mafmt": "^6.0.0",
- "minimist": "^1.2.0",
- "multiaddr": "^5.0.0",
- "once": "^1.4.0",
- "peer-id": "~0.10.7",
- "peer-info": "~0.14.1",
- "pull-stream": "^3.6.8",
- "simple-peer": "^9.1.1",
- "socket.io": "^2.1.0",
- "socket.io-client": "^2.1.0",
- "stream-to-pull-stream": "^1.7.2",
- "webrtcsupport": "github:ipfs/webrtcsupport#0669f576582c53a3a42aa5ac014fcc5966809615"
- },
- "dependencies": {
- "pull-stream": {
- "version": "3.6.8",
- "resolved": "https://registry.npmjs.org/pull-stream/-/pull-stream-3.6.8.tgz",
- "integrity": "sha512-wQUIptQBcM0rFsUhZoEpOT3vUn73DtTGVq3NQ86c4T7iMOSprDzeKWYq2ksXnbwiuExTKvt+8G9fzNLFQuiO+A==",
- "dev": true
- }
- }
- },
- "libp2p-websocket-star": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/libp2p-websocket-star/-/libp2p-websocket-star-0.8.0.tgz",
- "integrity": "sha512-LVOVEXkg5SvdDA8f5XCcpL4yoyPWzbxPFQv/yasecUHo5J/QFkRC8pziRh7wuZnLnxw/skMUKNnXlEkznv3aaw==",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "class-is": "^1.1.0",
- "data-queue": "0.0.3",
- "debug": "^3.1.0",
- "interface-connection": "^0.3.2",
- "libp2p-crypto": "^0.12.1",
- "mafmt": "^6.0.0",
- "merge-recursive": "0.0.3",
- "multiaddr": "^4.0.0",
- "once": "^1.4.0",
- "peer-id": "^0.10.7",
- "peer-info": "^0.14.0",
- "pull-stream": "^3.6.7",
- "socket.io-client": "^2.1.0",
- "socket.io-pull-stream": "^0.1.5",
- "uuid": "^3.2.1"
- },
- "dependencies": {
- "libp2p-crypto": {
- "version": "0.12.1",
- "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.12.1.tgz",
- "integrity": "sha512-1/z8rxZ0DcQNreZhEsl7PnLr7DWOioSvYbKBLGkRwNRiNh1JJLgh0PdTySBb44wkrOGT+TxcGRd7iq3/X6Wxwg==",
- "dev": true,
- "requires": {
- "asn1.js": "^5.0.0",
- "async": "^2.6.0",
- "browserify-aes": "^1.1.1",
- "bs58": "^4.0.1",
- "keypair": "^1.0.1",
- "libp2p-crypto-secp256k1": "~0.2.2",
- "multihashing-async": "~0.4.7",
- "node-forge": "^0.7.1",
- "pem-jwk": "^1.5.1",
- "protons": "^1.0.1",
- "rsa-pem-to-jwk": "^1.1.3",
- "tweetnacl": "^1.0.0",
- "webcrypto-shim": "github:dignifiedquire/webcrypto-shim#190bc9ec341375df6025b17ae12ddb2428ea49c8"
- }
- },
- "multiaddr": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-4.0.0.tgz",
- "integrity": "sha512-zUatrOCfBd/tJNOSoJ10d2EI2FDXB9PyPZhqUMdXE9mOyR3C+HLuOjga2Ga/eChwvEHIpTYRMoIKF2Nv7af2qQ==",
- "dev": true,
- "requires": {
- "bs58": "^4.0.1",
- "class-is": "^1.1.0",
- "ip": "^1.1.5",
- "ip-address": "^5.8.9",
- "lodash.filter": "^4.6.0",
- "lodash.map": "^4.6.0",
- "varint": "^5.0.0",
- "xtend": "^4.0.1"
- }
- }
- }
- },
- "libp2p-websockets": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/libp2p-websockets/-/libp2p-websockets-0.12.0.tgz",
- "integrity": "sha512-I4m0MNqzBOwoIneCF/5mXHGaavNf0Hoe/7NFg2WUm74o7240dZEIuNkAoLu1+OJyOPyu4RXeIBhUOS4cjBdCew==",
- "dev": true,
- "requires": {
- "class-is": "^1.1.0",
- "interface-connection": "~0.3.2",
- "lodash.includes": "^4.3.0",
- "mafmt": "^6.0.0",
- "pull-ws": "^3.3.1"
- }
- },
- "load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
- }
- },
- "locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "lock-me": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/lock-me/-/lock-me-1.0.4.tgz",
- "integrity": "sha512-PH/uZMCtlTfiPcKnNVc8cF57Jrc9uTcil4qL6f1faTWV71J3ym8LIlaO385BtoC3MQb+jt3t2R8SnHxcQ5pafw==",
- "dev": true,
- "requires": {
- "async": "^2.1.5",
- "find-process": "^1.0.5",
- "fs-ext": "github:baudehlo/node-fs-ext#f5c9c9ec584937f8b216335d0c36d238b5d187c9",
- "nodeify": "^1.0.1",
- "once": "^1.4.0"
- }
- },
- "lodash": {
- "version": "4.17.10",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
- "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg=="
- },
- "lodash.clonedeep": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
- "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
- "dev": true
- },
- "lodash.debounce": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
- "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
- "dev": true
- },
- "lodash.filter": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz",
- "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=",
- "dev": true
- },
- "lodash.find": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.find/-/lodash.find-4.6.0.tgz",
- "integrity": "sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E=",
- "dev": true
- },
- "lodash.flatmap": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.flatmap/-/lodash.flatmap-4.5.0.tgz",
- "integrity": "sha1-74y/QI9uSCaGYzRTBcaswLd4cC4=",
- "dev": true
- },
- "lodash.flatten": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
- "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=",
- "dev": true
- },
- "lodash.get": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
- "dev": true
- },
- "lodash.groupby": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz",
- "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=",
- "dev": true
- },
- "lodash.has": {
- "version": "4.5.2",
- "resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz",
- "integrity": "sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI=",
- "dev": true
- },
- "lodash.includes": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
- "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=",
- "dev": true
- },
- "lodash.isequalwith": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.isequalwith/-/lodash.isequalwith-4.4.0.tgz",
- "integrity": "sha1-Jmcm3dUo+FTyH06pigZWBuD7xrA=",
- "dev": true
- },
- "lodash.isfunction": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz",
- "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==",
- "dev": true
- },
- "lodash.isundefined": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz",
- "integrity": "sha1-I+89lTVWUgOmbO/VuDD4SJEa+0g=",
- "dev": true
- },
- "lodash.map": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
- "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=",
- "dev": true
- },
- "lodash.max": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/lodash.max/-/lodash.max-4.0.1.tgz",
- "integrity": "sha1-hzVWbGGLNan3YFILSHrnllivE2o=",
- "dev": true
- },
- "lodash.merge": {
- "version": "4.6.1",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz",
- "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==",
- "dev": true
- },
- "lodash.padstart": {
- "version": "4.6.1",
- "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz",
- "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=",
- "dev": true
- },
- "lodash.pullallwith": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/lodash.pullallwith/-/lodash.pullallwith-4.7.0.tgz",
- "integrity": "sha1-ZX5CAHENi1nWlO5SE2Yq4FEdEXA=",
- "dev": true
- },
- "lodash.pullat": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.pullat/-/lodash.pullat-4.6.0.tgz",
- "integrity": "sha1-vfrPDiCf0n+WXnEfplp3SoTTAmE=",
- "dev": true
- },
- "lodash.range": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/lodash.range/-/lodash.range-3.2.0.tgz",
- "integrity": "sha1-9GHliPZmg/fq3q3lE+OKaaVloV0=",
- "dev": true
- },
- "lodash.repeat": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/lodash.repeat/-/lodash.repeat-4.1.0.tgz",
- "integrity": "sha1-/H3oEx2MisB+S0n3T/6CnR8r7EQ=",
- "dev": true
- },
- "lodash.set": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz",
- "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=",
- "dev": true
- },
- "lodash.sortby": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
- "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
- "dev": true
- },
- "lodash.throttle": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
- "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=",
- "dev": true
- },
- "lodash.uniqby": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz",
- "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=",
- "dev": true
- },
- "lodash.uniqwith": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.uniqwith/-/lodash.uniqwith-4.5.0.tgz",
- "integrity": "sha1-egy/ZfQ7WShiWp1NDcVLGMrcfvM=",
- "dev": true
- },
- "lodash.values": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-4.3.0.tgz",
- "integrity": "sha1-o6bCsOvsxcLLocF+bmIP6BtT00c=",
- "dev": true
- },
- "logplease": {
- "version": "1.2.14",
- "resolved": "https://registry.npmjs.org/logplease/-/logplease-1.2.14.tgz",
- "integrity": "sha512-n6bf1Ce0zvcmuyOzDi2xxLix6F1D/Niz7Qa4K3BmkjyaXcovzEjwZKUYsV+0F2Uv4rlXm5cToIEB+ynqSRdwGw==",
- "dev": true
- },
- "looper": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/looper/-/looper-3.0.0.tgz",
- "integrity": "sha1-LvpUw7HLq6m5Su4uWRSwvlf7t0k=",
- "dev": true
- },
- "loose-envify": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
- "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
- "dev": true,
- "requires": {
- "js-tokens": "^3.0.0"
- }
- },
- "lowercase-keys": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
- "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
- "dev": true
- },
- "lru-cache": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz",
- "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==",
- "requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "ltgt": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz",
- "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=",
- "dev": true
- },
- "m3u8stream": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.2.2.tgz",
- "integrity": "sha512-R/xWLXBtVr0m9sPruRL4p9uO01JyHxhcQ4nhqQhVgyT802OZyVW+dn+fWHvTnbfE6YMLc65TksZZut+Mh2OVMQ==",
- "requires": {
- "miniget": "^1.1.0"
- }
- },
- "mafmt": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/mafmt/-/mafmt-6.0.0.tgz",
- "integrity": "sha512-ikjvRXcbEu/kpSQSUlCX5mj2sRZs18rjFAR3azO7mTJ1HPtTcd1XL5y/ey5wSuRjX4dsgGIPEc9VYF3dUaudPw==",
- "dev": true,
- "requires": {
- "multiaddr": "^4.0.0"
- },
- "dependencies": {
- "multiaddr": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-4.0.0.tgz",
- "integrity": "sha512-zUatrOCfBd/tJNOSoJ10d2EI2FDXB9PyPZhqUMdXE9mOyR3C+HLuOjga2Ga/eChwvEHIpTYRMoIKF2Nv7af2qQ==",
- "dev": true,
- "requires": {
- "bs58": "^4.0.1",
- "class-is": "^1.1.0",
- "ip": "^1.1.5",
- "ip-address": "^5.8.9",
- "lodash.filter": "^4.6.0",
- "lodash.map": "^4.6.0",
- "varint": "^5.0.0",
- "xtend": "^4.0.1"
- }
- }
- }
- },
- "make-dir": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
- "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
- "dev": true,
- "requires": {
- "pify": "^3.0.0"
- }
- },
- "md5.js": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
- "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=",
- "dev": true,
- "requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1"
- }
- },
- "media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
- },
- "mem": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
- "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
- "requires": {
- "mimic-fn": "^1.0.0"
- }
- },
- "memdown": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/memdown/-/memdown-2.0.0.tgz",
- "integrity": "sha1-QKRQGzmJCuZBUT8qlNc0LVlMLYM=",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~4.0.0",
- "functional-red-black-tree": "~1.0.1",
- "immediate": "~3.2.3",
- "inherits": "~2.0.1",
- "ltgt": "~2.2.0",
- "safe-buffer": "~5.1.1"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-4.0.3.tgz",
- "integrity": "sha512-qsIHFQy0u17JqSY+3ZUT+ykqxYY17yOfvAsLkFkw8kSQqi05d1jyj0bCuSX6sjYlXuY9cKpgUt5EudQdP4aXyA==",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
- }
- }
- },
- "merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
- },
- "merge-recursive": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/merge-recursive/-/merge-recursive-0.0.3.tgz",
- "integrity": "sha1-3nkB78rsyQbYyrKtHpxHD1o9roQ=",
- "dev": true
- },
- "merkle-lib": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/merkle-lib/-/merkle-lib-2.0.10.tgz",
- "integrity": "sha1-grjbrnXieneFOItz+ddyXQ9vMyY=",
- "dev": true
- },
- "merkle-patricia-tree": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.1.tgz",
- "integrity": "sha512-Qp9Mpb3xazznXzzGQBqHbqCpT2AR9joUOHYYPiQjYCarrdCPCnLWXo4BFv77y4xN26KR224xoU1n/qYY7RYYgw==",
- "dev": true,
- "requires": {
- "async": "^1.4.2",
- "ethereumjs-util": "^5.0.0",
- "level-ws": "0.0.0",
- "levelup": "^1.2.1",
- "memdown": "^1.0.0",
- "readable-stream": "^2.0.0",
- "rlp": "^2.0.0",
- "semaphore": ">=1.0.1"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz",
- "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
- },
- "async": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
- "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
- "dev": true
- },
- "deferred-leveldown": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz",
- "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~2.6.0"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz",
- "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
- }
- }
- },
- "levelup": {
- "version": "1.3.9",
- "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz",
- "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==",
- "dev": true,
- "requires": {
- "deferred-leveldown": "~1.2.1",
- "level-codec": "~7.0.0",
- "level-errors": "~1.0.3",
- "level-iterator-stream": "~1.3.0",
- "prr": "~1.0.1",
- "semver": "~5.4.1",
- "xtend": "~4.0.0"
- }
- },
- "memdown": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz",
- "integrity": "sha1-tOThkhdGZP+65BNhqlAPMRnv4hU=",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~2.7.1",
- "functional-red-black-tree": "^1.0.1",
- "immediate": "^3.2.3",
- "inherits": "~2.0.1",
- "ltgt": "~2.2.0",
- "safe-buffer": "~5.1.1"
- }
- },
- "semver": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
- "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
- "dev": true
- }
- }
- },
- "methods": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
- },
- "mime": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
- "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
- },
- "mime-db": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
- "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ=="
- },
- "mime-types": {
- "version": "2.1.18",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
- "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
- "requires": {
- "mime-db": "~1.33.0"
- }
- },
- "mimic-fn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
- "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="
- },
- "mimic-response": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.0.tgz",
- "integrity": "sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4=",
- "dev": true
- },
- "mimos": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/mimos/-/mimos-3.0.3.tgz",
- "integrity": "sha1-uRCQcq03jCty9qAQHEPd+ys2ZB8=",
- "dev": true,
- "requires": {
- "hoek": "4.x.x",
- "mime-db": "1.x.x"
- },
- "dependencies": {
- "hoek": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
- "dev": true
- }
- }
- },
- "miniget": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/miniget/-/miniget-1.2.0.tgz",
- "integrity": "sha1-ADY3Oia71S2+aUX85sjAOR6eEkE="
- },
- "minimalistic-assert": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
- "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
- "dev": true
- },
- "minimalistic-crypto-utils": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
- "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
- "dev": true
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- },
- "mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
- "requires": {
- "minimist": "0.0.8"
- },
- "dependencies": {
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
- }
- }
- },
- "morgan": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz",
- "integrity": "sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE=",
- "requires": {
- "basic-auth": "~2.0.0",
- "debug": "2.6.9",
- "depd": "~1.1.1",
- "on-finished": "~2.3.0",
- "on-headers": "~1.0.1"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- }
- }
- },
- "morgan-debug": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/morgan-debug/-/morgan-debug-2.0.0.tgz",
- "integrity": "sha1-ukdWu3bL5+VYiWVrnxF/BRJEQ2c=",
- "requires": {
- "through2": "~2.0.1"
- }
- },
- "moving-average": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/moving-average/-/moving-average-1.0.0.tgz",
- "integrity": "sha512-97cgMz0U2zciiDp4xRl/n+MYgrm9l7UiYbtsBLPr0rhw6KH3m4LyK2w4d96V6+UwKo+ph7KtQSoL2qgnqZVgvA==",
- "dev": true
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "multiaddr": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-5.0.0.tgz",
- "integrity": "sha512-IMEo+iCv53MT8c/6SQWbJpJUEENTYr6qp7o635BKJLQG2nkxOIO9LSEFhF5e56Az+DkmI6HGAAjp69AT7Sjulw==",
- "dev": true,
- "requires": {
- "bs58": "^4.0.1",
- "class-is": "^1.1.0",
- "ip": "^1.1.5",
- "ip-address": "^5.8.9",
- "lodash.filter": "^4.6.0",
- "lodash.map": "^4.6.0",
- "varint": "^5.0.0",
- "xtend": "^4.0.1"
- }
- },
- "multibase": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.4.0.tgz",
- "integrity": "sha512-fnYvZJWDn3eSJ7EeWvS8zbOpRwuyPHpDggSnqGXkQMvYED5NdO9nyqnZboGvAT+r/60J8KZ09tW8YJHkS22sFw==",
- "dev": true,
- "requires": {
- "base-x": "3.0.4"
- }
- },
- "multicast-dns": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.0.0.tgz",
- "integrity": "sha512-BqB5TtIXHo+8gN33N1CA1clsvPsAJlnc6D49SzfQA0xq75cxj15g2y9NaRdf4x2u4v1P66PBC+Wg6YgPO5Bc/g==",
- "dev": true,
- "requires": {
- "dns-packet": "^4.0.0",
- "thunky": "^1.0.2"
- }
- },
- "multicodec": {
- "version": "0.2.6",
- "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.2.6.tgz",
- "integrity": "sha512-VGyRUDkxdJzWnj9x3C49MzI3+TtKKDYNfIBOaWBCNuPk6CE5CwwkL15gJtsLDfLay0fL4xTh4Af3kBbJSxSppw==",
- "dev": true,
- "requires": {
- "varint": "^5.0.0"
- }
- },
- "multihashes": {
- "version": "0.4.13",
- "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.13.tgz",
- "integrity": "sha512-HwJGEKPCpLlNlgGQA56CYh/Wsqa+c4JAq8+mheIgw7OK5T4QvNJqgp6TH8gZ4q4l1aiWeNat/H/MrFXmTuoFfQ==",
- "dev": true,
- "requires": {
- "bs58": "^4.0.1",
- "varint": "^5.0.0"
- }
- },
- "multihashing-async": {
- "version": "0.4.8",
- "resolved": "https://registry.npmjs.org/multihashing-async/-/multihashing-async-0.4.8.tgz",
- "integrity": "sha512-LCc4lfxmTJOHKIjZjFNgvmfB6nXS/ErLInT9uwU8udFrRm2PH+aTPk3mfCREKmCiSHOlCWiv2O8rlnBx+OjlMw==",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "blakejs": "^1.1.0",
- "js-sha3": "^0.7.0",
- "multihashes": "~0.4.13",
- "murmurhash3js": "^3.0.1",
- "nodeify": "^1.0.1"
- }
- },
- "multistream-select": {
- "version": "0.14.2",
- "resolved": "https://registry.npmjs.org/multistream-select/-/multistream-select-0.14.2.tgz",
- "integrity": "sha512-s+e2a6YAvImGejfAy/HAovuvSArSqLG+seSs8yMCOj76dPBh+h8vyQaWkhpfpeVRTzDnNTdvNkMrFjqp97kcXg==",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "debug": "^3.1.0",
- "interface-connection": "~0.3.2",
- "lodash.isfunction": "^3.0.9",
- "lodash.range": "^3.2.0",
- "once": "^1.4.0",
- "pull-handshake": "^1.1.4",
- "pull-length-prefixed": "^1.3.0",
- "pull-stream": "^3.6.7",
- "semver": "^5.5.0",
- "varint": "^5.0.0"
- }
- },
- "murmurhash3js": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/murmurhash3js/-/murmurhash3js-3.0.1.tgz",
- "integrity": "sha1-Ppg+W0fCoG9DpxMXTn5DXKBEuZg=",
- "dev": true
- },
- "mute-stream": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
- "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
- "dev": true
- },
- "nan": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
- "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==",
- "dev": true
- },
- "natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
- "dev": true
- },
- "ndjson": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/ndjson/-/ndjson-1.5.0.tgz",
- "integrity": "sha1-rmA7NrE0vOw0e0UkIrC/mNWDLsg=",
- "dev": true,
- "requires": {
- "json-stringify-safe": "^5.0.1",
- "minimist": "^1.2.0",
- "split2": "^2.1.0",
- "through2": "^2.0.3"
- }
- },
- "negotiator": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
- "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
- },
- "nigel": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/nigel/-/nigel-2.0.2.tgz",
- "integrity": "sha1-k6GGb7DFLYc5CqdeKxYfS1x15bE=",
- "dev": true,
- "requires": {
- "hoek": "4.x.x",
- "vise": "2.x.x"
- },
- "dependencies": {
- "hoek": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
- "dev": true
- }
- }
- },
- "node-abi": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.4.1.tgz",
- "integrity": "sha512-pUlswqpHQ7zGPI9lGjZ4XDNIEUDbHxsltfIRb7dTnYdhgHWHOcB0MLZKLoCz6UMcGzSPG5wGl1HODZVQAUsH6w==",
- "dev": true,
- "requires": {
- "semver": "^5.4.1"
- }
- },
- "node-fetch": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
- "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
- "dev": true,
- "requires": {
- "encoding": "^0.1.11",
- "is-stream": "^1.0.1"
- }
- },
- "node-forge": {
- "version": "0.7.5",
- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz",
- "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==",
- "dev": true
- },
- "node-localstorage": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/node-localstorage/-/node-localstorage-1.3.1.tgz",
- "integrity": "sha512-NMWCSWWc6JbHT5PyWlNT2i8r7PgGYXVntmKawY83k/M0UJScZ5jirb61TLnqKwd815DfBQu+lR3sRw08SPzIaQ==",
- "dev": true,
- "requires": {
- "write-file-atomic": "^1.1.4"
- },
- "dependencies": {
- "write-file-atomic": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz",
- "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.11",
- "imurmurhash": "^0.1.4",
- "slide": "^1.1.5"
- }
- }
- }
- },
- "nodeify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/nodeify/-/nodeify-1.0.1.tgz",
- "integrity": "sha1-ZKtpp7268DzhB7TwM1yHwLnpGx0=",
- "dev": true,
- "requires": {
- "is-promise": "~1.0.0",
- "promise": "~1.3.0"
- }
- },
- "noop-logger": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz",
- "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=",
- "dev": true
- },
- "normalize-package-data": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
- "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
- "dev": true,
- "requires": {
- "hosted-git-info": "^2.1.4",
- "is-builtin-module": "^1.0.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- }
- },
- "npm-run-path": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
- "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
- "requires": {
- "path-key": "^2.0.0"
- }
- },
- "npmlog": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
- "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
- "dev": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "nth-check": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz",
- "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=",
- "requires": {
- "boolbase": "~1.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
- },
- "oauth-sign": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
- "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="
- },
- "object-assign": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
- "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=",
- "dev": true
- },
- "object-component": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
- "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=",
- "dev": true
- },
- "object-keys": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
- "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=",
- "dev": true
- },
- "on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
- "requires": {
- "ee-first": "1.1.1"
- }
- },
- "on-headers": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
- "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c="
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "onetime": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
- "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
- "dev": true,
- "requires": {
- "mimic-fn": "^1.0.0"
- }
- },
- "optimist": {
- "version": "0.3.7",
- "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
- "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=",
- "dev": true,
- "requires": {
- "wordwrap": "~0.0.2"
- }
- },
- "optional": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/optional/-/optional-0.1.4.tgz",
- "integrity": "sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw==",
- "dev": true,
- "optional": true
- },
- "optionator": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
- "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
- "dev": true,
- "requires": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.4",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "wordwrap": "~1.0.0"
- },
- "dependencies": {
- "wordwrap": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
- "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
- "dev": true
- }
- }
- },
- "options": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
- "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=",
- "dev": true
- },
- "orbit-db": {
- "version": "0.19.7",
- "resolved": "https://registry.npmjs.org/orbit-db/-/orbit-db-0.19.7.tgz",
- "integrity": "sha512-ib6YzqbKMgW5ZeqkJuaXSot/oBKqs4Wfeoz2F3ZP93CBbk2LBGt2NcaFgr6TlnH2jCMKs3Yo7fMLDFLluMwyoQ==",
- "dev": true,
- "requires": {
- "logplease": "^1.2.14",
- "multihashes": "^0.4.12",
- "orbit-db-cache": "~0.2.2",
- "orbit-db-counterstore": "~1.2.0",
- "orbit-db-docstore": "~1.2.0",
- "orbit-db-eventstore": "~1.2.0",
- "orbit-db-feedstore": "~1.2.0",
- "orbit-db-keystore": "~0.1.0",
- "orbit-db-kvstore": "~1.2.0",
- "orbit-db-pubsub": "~0.4.0"
- }
- },
- "orbit-db-cache": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/orbit-db-cache/-/orbit-db-cache-0.2.3.tgz",
- "integrity": "sha512-b7ic6K1cc7N9x9jfiplL9TKA3b/eJUmvZE2CvdB2wX/sVE/zmLr2TOlnLjteeBQXmlop4jrnqy+PGl8bYHUPkA==",
- "dev": true,
- "requires": {
- "level-js": "~2.2.4",
- "leveldown": "^1.9.0",
- "logplease": "^1.2.14",
- "mkdirp": "^0.5.1"
- },
- "dependencies": {
- "level-js": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/level-js/-/level-js-2.2.4.tgz",
- "integrity": "sha1-vAVfQYBjXUSJtWHJSG+jcOjBFpc=",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~0.12.0",
- "idb-wrapper": "^1.5.0",
- "isbuffer": "~0.0.0",
- "ltgt": "^2.1.2",
- "typedarray-to-buffer": "~1.0.0",
- "xtend": "~2.1.2"
- }
- },
- "xtend": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
- "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
- "dev": true,
- "requires": {
- "object-keys": "~0.4.0"
- }
- }
- }
- },
- "orbit-db-counterstore": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/orbit-db-counterstore/-/orbit-db-counterstore-1.2.0.tgz",
- "integrity": "sha512-IUmFtZdyYqzA46AnO+qgxlwIXVbXPbgVdogrJ6ZdgrXtXViLU2nFVOp4PPXRENCEyMuQW6OGVpu/kO1bRhUmcg==",
- "dev": true,
- "requires": {
- "crdts": "~0.1.2",
- "orbit-db-store": "~2.2.0"
- }
- },
- "orbit-db-docstore": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/orbit-db-docstore/-/orbit-db-docstore-1.2.0.tgz",
- "integrity": "sha512-ciJkR3Ub4CbZeNj2MkVLQz5czc4fiLgCAuuSyGRrTSi72A0ubJ74mgPh5gzCFMsF1yeMFMM+xBiqg9PjUFzFeg==",
- "dev": true,
- "requires": {
- "orbit-db-store": "~2.2.0",
- "p-map": "~1.1.1"
- },
- "dependencies": {
- "p-map": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.1.1.tgz",
- "integrity": "sha1-BfXkrpegaDcbwqXMhr+9vBnErno=",
- "dev": true
- }
- }
- },
- "orbit-db-eventstore": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/orbit-db-eventstore/-/orbit-db-eventstore-1.2.0.tgz",
- "integrity": "sha512-6ERKUkMUIy/n2Cq9b/ZN/zHktGTSxXXFd2rH/DnnbU3WbmHQabrk5P2kSUVHt4CONcyrorQoUNB/kbPrX7aZJA==",
- "dev": true,
- "requires": {
- "orbit-db-store": "~2.2.0"
- }
- },
- "orbit-db-feedstore": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/orbit-db-feedstore/-/orbit-db-feedstore-1.2.0.tgz",
- "integrity": "sha512-1xGECp8tZ44SyzNlWz3u2QaqaUGbKQ7CyYWIzvuXHgFtXvZRQd9gC1r9JXc48HHLajTBmuXUlHr1megqKKIgMg==",
- "dev": true,
- "requires": {
- "orbit-db-eventstore": "~1.2.0"
- }
- },
- "orbit-db-keystore": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/orbit-db-keystore/-/orbit-db-keystore-0.1.0.tgz",
- "integrity": "sha512-LG3jlhPL6PcsInKoXuDqLyhXmulBA9EHAdavrfFv16za7HZ7oWIkr/e7DzEgH7Lb9bWdclsi2Misxj+9lLwKbA==",
- "dev": true,
- "requires": {
- "elliptic": "^6.4.0",
- "mkdirp": "^0.5.1",
- "node-localstorage": "^1.3.0"
- }
- },
- "orbit-db-kvstore": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/orbit-db-kvstore/-/orbit-db-kvstore-1.2.0.tgz",
- "integrity": "sha512-knSMO655vH4HH2OR1gRIj2b7Z0z7T2lPGta6Z76vC/CXjD3yZSrrudYQ+Qyb8ZYoFhpH1tLfEdq9rEO5EPTjkg==",
- "dev": true,
- "requires": {
- "orbit-db-store": "~2.2.0"
- }
- },
- "orbit-db-pubsub": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/orbit-db-pubsub/-/orbit-db-pubsub-0.4.0.tgz",
- "integrity": "sha512-RXgH2XazxG8H4i80JpqIonITvPxgifw3WvMDEY+f5UljJEhCC5UPbKywMZZuMHd/khh6BjXEQWI5yxBI8ZX+Jw==",
- "dev": true,
- "requires": {
- "ipfs-pubsub-room": "~1.2.0",
- "logplease": "~1.2.14"
- }
- },
- "orbit-db-store": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/orbit-db-store/-/orbit-db-store-2.2.1.tgz",
- "integrity": "sha512-KnWK9Nl43bX9XnSB5sBQV/T0bc1rSHzsBy1LCY3NxmnL18Nx0kXiWD4OPHxnew+41Bd5B0eSFa/d2bqT+xHpsg==",
- "dev": true,
- "requires": {
- "ipfs-log": "~4.0.6",
- "logplease": "^1.2.14",
- "p-each-series": "^1.0.0",
- "readable-stream": "~2.3.3"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
- "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
- "dev": true
- },
- "os-locale": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
- "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
- "requires": {
- "execa": "^0.7.0",
- "lcid": "^1.0.0",
- "mem": "^1.1.0"
- }
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
- "dev": true
- },
- "p-each-series": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz",
- "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=",
- "dev": true,
- "requires": {
- "p-reduce": "^1.0.0"
- }
- },
- "p-finally": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
- },
- "p-limit": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz",
- "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==",
- "requires": {
- "p-try": "^1.0.0"
- }
- },
- "p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
- "requires": {
- "p-limit": "^1.1.0"
- }
- },
- "p-map": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
- "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==",
- "dev": true
- },
- "p-reduce": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz",
- "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=",
- "dev": true
- },
- "p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
- },
- "p-whilst": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-whilst/-/p-whilst-1.0.0.tgz",
- "integrity": "sha1-VGaOrX+TR5n8APHlIw/Wrd645+Y=",
- "dev": true
- },
- "package-json": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
- "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
- "dev": true,
- "requires": {
- "got": "^6.7.1",
- "registry-auth-token": "^3.0.1",
- "registry-url": "^3.0.3",
- "semver": "^5.1.0"
- }
- },
- "parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
- "dev": true,
- "requires": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- }
- },
- "parse5": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
- "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==",
- "requires": {
- "@types/node": "*"
- }
- },
- "parseqs": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
- "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
- "dev": true,
- "requires": {
- "better-assert": "~1.0.0"
- }
- },
- "parseuri": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
- "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
- "dev": true,
- "requires": {
- "better-assert": "~1.0.0"
- }
- },
- "parseurl": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
- "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "dev": true
- },
- "path-is-inside": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
- "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
- "dev": true
- },
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
- },
- "path-parse": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
- "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
- "dev": true
- },
- "path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
- },
- "path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
- "dev": true,
- "requires": {
- "pify": "^3.0.0"
- }
- },
- "peer-book": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/peer-book/-/peer-book-0.8.0.tgz",
- "integrity": "sha512-0An5viX2NnYeaqmwe2Vpzl03K9yxJ08mrktzkCPJyyd6rO4xz6QV2JK2Ku2vTHATP8Ag0ambxvr0QbrkT4UCYA==",
- "dev": true,
- "requires": {
- "bs58": "^4.0.1",
- "peer-id": "^0.10.7",
- "peer-info": "^0.14.1"
- }
- },
- "peer-id": {
- "version": "0.10.7",
- "resolved": "https://registry.npmjs.org/peer-id/-/peer-id-0.10.7.tgz",
- "integrity": "sha512-VEpMFcL9q0NQijmR0jsj38OGbY4yzaWMEareVkDahopmlNT+Cpsot8btPgsgBBApP9NiZj2Enwvh8rZN30ocQw==",
- "dev": true,
- "requires": {
- "async": "^2.6.0",
- "libp2p-crypto": "~0.12.1",
- "lodash": "^4.17.5",
- "multihashes": "~0.4.13"
- },
- "dependencies": {
- "libp2p-crypto": {
- "version": "0.12.1",
- "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.12.1.tgz",
- "integrity": "sha512-1/z8rxZ0DcQNreZhEsl7PnLr7DWOioSvYbKBLGkRwNRiNh1JJLgh0PdTySBb44wkrOGT+TxcGRd7iq3/X6Wxwg==",
- "dev": true,
- "requires": {
- "asn1.js": "^5.0.0",
- "async": "^2.6.0",
- "browserify-aes": "^1.1.1",
- "bs58": "^4.0.1",
- "keypair": "^1.0.1",
- "libp2p-crypto-secp256k1": "~0.2.2",
- "multihashing-async": "~0.4.7",
- "node-forge": "^0.7.1",
- "pem-jwk": "^1.5.1",
- "protons": "^1.0.1",
- "rsa-pem-to-jwk": "^1.1.3",
- "tweetnacl": "^1.0.0",
- "webcrypto-shim": "github:dignifiedquire/webcrypto-shim#190bc9ec341375df6025b17ae12ddb2428ea49c8"
- }
- }
- }
- },
- "peer-info": {
- "version": "0.14.1",
- "resolved": "https://registry.npmjs.org/peer-info/-/peer-info-0.14.1.tgz",
- "integrity": "sha512-I9K+q7sisU0gg5ej6ekbhgolwlcm1tc2wDtLmumptoLYx0DkIT8WVHtgoTnupYwRRqcYADtwddFdiXfb8QFqzg==",
- "dev": true,
- "requires": {
- "lodash.uniqby": "^4.7.0",
- "mafmt": "^6.0.0",
- "multiaddr": "^4.0.0",
- "peer-id": "~0.10.7"
- },
- "dependencies": {
- "multiaddr": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-4.0.0.tgz",
- "integrity": "sha512-zUatrOCfBd/tJNOSoJ10d2EI2FDXB9PyPZhqUMdXE9mOyR3C+HLuOjga2Ga/eChwvEHIpTYRMoIKF2Nv7af2qQ==",
- "dev": true,
- "requires": {
- "bs58": "^4.0.1",
- "class-is": "^1.1.0",
- "ip": "^1.1.5",
- "ip-address": "^5.8.9",
- "lodash.filter": "^4.6.0",
- "lodash.map": "^4.6.0",
- "varint": "^5.0.0",
- "xtend": "^4.0.1"
- }
- }
- }
- },
- "pem-jwk": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/pem-jwk/-/pem-jwk-1.5.1.tgz",
- "integrity": "sha1-eoY3/S9nqCflfAxC4cI8P9Us+wE=",
- "dev": true,
- "requires": {
- "asn1.js": "1.0.3"
- },
- "dependencies": {
- "asn1.js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-1.0.3.tgz",
- "integrity": "sha1-KBuj7B8kSP52X5Kk7s+IP+E2S1Q=",
- "dev": true,
- "requires": {
- "bn.js": "^1.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0"
- }
- },
- "bn.js": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-1.3.0.tgz",
- "integrity": "sha1-DbTL+W+PI7dC9by50ap6mZSgXoM=",
- "dev": true,
- "optional": true
- }
- }
- },
- "performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
- },
- "pez": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/pez/-/pez-2.1.5.tgz",
- "integrity": "sha1-XsLMYlAMw+tCNtSkFM9aF7XrUAc=",
- "dev": true,
- "requires": {
- "b64": "3.x.x",
- "boom": "5.x.x",
- "content": "3.x.x",
- "hoek": "4.x.x",
- "nigel": "2.x.x"
- },
- "dependencies": {
- "boom": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
- "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
- "dev": true,
- "requires": {
- "hoek": "4.x.x"
- }
- },
- "hoek": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
- "dev": true
- }
- }
- },
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true
- },
- "pinkie": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
- "dev": true
- },
- "pinkie-promise": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
- "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
- "dev": true,
- "requires": {
- "pinkie": "^2.0.0"
- }
- },
- "pkg-conf": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz",
- "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=",
- "dev": true,
- "requires": {
- "find-up": "^2.0.0",
- "load-json-file": "^4.0.0"
- }
- },
- "pkg-config": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz",
- "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=",
- "dev": true,
- "requires": {
- "debug-log": "^1.0.0",
- "find-root": "^1.0.0",
- "xtend": "^4.0.1"
- }
- },
- "pkg-dir": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
- "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
- "dev": true,
- "requires": {
- "find-up": "^1.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
- "dev": true,
- "requires": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
- "dev": true,
- "requires": {
- "pinkie-promise": "^2.0.0"
- }
- }
- }
- },
- "pluralize": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
- "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
- "dev": true
- },
- "podium": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/podium/-/podium-1.3.0.tgz",
- "integrity": "sha512-ZIujqk1pv8bRZNVxwwwq0BhXilZ2udycQT3Kp8ah3f3TcTmVg7ILJsv/oLf47gRa2qeiP584lNq+pfvS9U3aow==",
- "dev": true,
- "requires": {
- "hoek": "4.x.x",
- "items": "2.x.x",
- "joi": "10.x.x"
- },
- "dependencies": {
- "hoek": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
- "dev": true
- },
- "joi": {
- "version": "10.6.0",
- "resolved": "https://registry.npmjs.org/joi/-/joi-10.6.0.tgz",
- "integrity": "sha512-hBF3LcqyAid+9X/pwg+eXjD2QBZI5eXnBFJYaAkH4SK3mp9QSRiiQnDYlmlz5pccMvnLcJRS4whhDOTCkmsAdQ==",
- "dev": true,
- "requires": {
- "hoek": "4.x.x",
- "isemail": "2.x.x",
- "items": "2.x.x",
- "topo": "2.x.x"
- }
- }
- }
- },
- "prebuild-install": {
- "version": "2.5.3",
- "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-2.5.3.tgz",
- "integrity": "sha512-/rI36cN2g7vDQnKWN8Uzupi++KjyqS9iS+/fpwG4Ea8d0Pip0PQ5bshUNzVwt+/D2MRfhVAplYMMvWLqWrCF/g==",
- "dev": true,
- "requires": {
- "detect-libc": "^1.0.3",
- "expand-template": "^1.0.2",
- "github-from-package": "0.0.0",
- "minimist": "^1.2.0",
- "mkdirp": "^0.5.1",
- "node-abi": "^2.2.0",
- "noop-logger": "^0.1.1",
- "npmlog": "^4.0.1",
- "os-homedir": "^1.0.1",
- "pump": "^2.0.1",
- "rc": "^1.1.6",
- "simple-get": "^2.7.0",
- "tar-fs": "^1.13.0",
- "tunnel-agent": "^0.6.0",
- "which-pm-runs": "^1.0.0"
- },
- "dependencies": {
- "pump": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
- "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- }
- }
- },
- "prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
- "dev": true
- },
- "prepend-http": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
- "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
- "dev": true
- },
- "priorityqueue": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/priorityqueue/-/priorityqueue-0.2.1.tgz",
- "integrity": "sha512-Dr6ZkRFGZHoAri6iNp5KvspOrFPfhxJ5AExXqLy5ChgdwALd3nC+q5/QG+gmjmf9W63joDXc+Zp0h05Ug/RtYg==",
- "dev": true
- },
- "process-nextick-args": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
- },
- "progress": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
- "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
- "dev": true
- },
- "prom-client": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-11.0.0.tgz",
- "integrity": "sha512-UM4uYDwmA7x9yTq+AZcL4lU/XF11RkbQWbIouFaVMLxdV4qBB5CEmEosQlR1lGvduBuS1IWonHFh1WBtFSoZ3A==",
- "dev": true,
- "optional": true,
- "requires": {
- "tdigest": "^0.1.1"
- }
- },
- "prometheus-gc-stats": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/prometheus-gc-stats/-/prometheus-gc-stats-0.5.1.tgz",
- "integrity": "sha1-RxO8Xp9znuCahslkAU37zk/VAAM=",
- "dev": true,
- "optional": true,
- "requires": {
- "gc-stats": "^1.0.0",
- "optional": "^0.1.3"
- }
- },
- "promise": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/promise/-/promise-1.3.0.tgz",
- "integrity": "sha1-5cyaTIJ45GZP/twBx9qEhCsEAXU=",
- "dev": true,
- "requires": {
- "is-promise": "~1"
- }
- },
- "promisify-es6": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/promisify-es6/-/promisify-es6-1.0.3.tgz",
- "integrity": "sha512-N9iVG+CGJsI4b4ZGazjwLnxErD2d9Pe4DPvvXSxYA9tFNu8ymXME4Qs5HIQ0LMJpNM7zj+m0NlNnNeqFpKzqnA=="
- },
- "prop-types": {
- "version": "15.6.1",
- "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz",
- "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==",
- "dev": true,
- "requires": {
- "fbjs": "^0.8.16",
- "loose-envify": "^1.3.1",
- "object-assign": "^4.1.1"
- },
- "dependencies": {
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true
- }
- }
- },
- "protocol-buffers-schema": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.3.2.tgz",
- "integrity": "sha512-Xdayp8sB/mU+sUV4G7ws8xtYMGdQnxbeIfLjyO9TZZRJdztBGhlmbI5x1qcY4TG5hBkIKGnc28i7nXxaugu88w==",
- "dev": true
- },
- "protons": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/protons/-/protons-1.0.1.tgz",
- "integrity": "sha512-+0ZKnfVs+4c43tbAQ5j0Mck8wPcLnlxUYzKQoB4iDW4ocdXGnN4P+0dDbgX1FTpoY9+7P2Tn2scJyHHqj+S/lQ==",
- "dev": true,
- "requires": {
- "protocol-buffers-schema": "^3.3.1",
- "safe-buffer": "^5.1.1",
- "signed-varint": "^2.0.1",
- "varint": "^5.0.0"
- }
- },
- "proxy-addr": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz",
- "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==",
- "requires": {
- "forwarded": "~0.1.2",
- "ipaddr.js": "1.6.0"
- }
- },
- "prr": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
- "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
- "dev": true
- },
- "pseudomap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
- },
- "pull-abortable": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/pull-abortable/-/pull-abortable-4.1.1.tgz",
- "integrity": "sha1-s61a77QRayWRbSbbiTk6yY0NzqE=",
- "dev": true
- },
- "pull-batch": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/pull-batch/-/pull-batch-1.0.0.tgz",
- "integrity": "sha1-OopwhNsOmDxcWb8OB0qkHnU/Alg=",
- "dev": true,
- "requires": {
- "pull-through": "^1.0.18"
- }
- },
- "pull-block": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/pull-block/-/pull-block-1.4.0.tgz",
- "integrity": "sha512-nqrFveL9SWdpM9FDkgUVifhbH/dgtK65Pmwa/rrdvB9avE32uWXb1uiemxczfrkqZaG4XVc139KdqfyvPoraoA==",
- "dev": true,
- "requires": {
- "pull-through": "^1.0.18"
- }
- },
- "pull-cat": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/pull-cat/-/pull-cat-1.1.11.tgz",
- "integrity": "sha1-tkLdElXaN2pwa220+pYvX9t0wxs=",
- "dev": true
- },
- "pull-catch": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/pull-catch/-/pull-catch-1.0.0.tgz",
- "integrity": "sha1-9YA361woLMtQavn3awAn0zkx5Is=",
- "dev": true
- },
- "pull-defer": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/pull-defer/-/pull-defer-0.2.2.tgz",
- "integrity": "sha1-CIew/7MK8ypW2+z6csFnInHwexM=",
- "dev": true
- },
- "pull-file": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/pull-file/-/pull-file-1.1.0.tgz",
- "integrity": "sha1-HdmHYF1jV6DSPB5Lgm95FaIVEpw=",
- "dev": true,
- "requires": {
- "pull-utf8-decoder": "^1.0.2"
- }
- },
- "pull-handshake": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/pull-handshake/-/pull-handshake-1.1.4.tgz",
- "integrity": "sha1-YACg/QGIhM39c3JU+Mxgqypjd5E=",
- "dev": true,
- "requires": {
- "pull-cat": "^1.1.9",
- "pull-pair": "~1.1.0",
- "pull-pushable": "^2.0.0",
- "pull-reader": "^1.2.3"
- }
- },
- "pull-length-prefixed": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/pull-length-prefixed/-/pull-length-prefixed-1.3.0.tgz",
- "integrity": "sha512-FkxMYPNUSFjEDEXuS6MAaKwagQAN0sonifeC+NeutQmgXy+WBdPOtPzDT1dyT69Io1wzraZ+GzXAbBGnFcjdFQ==",
- "dev": true,
- "requires": {
- "pull-pushable": "^2.0.1",
- "pull-reader": "^1.2.9",
- "safe-buffer": "^5.0.1",
- "varint": "^5.0.0"
- }
- },
- "pull-many": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/pull-many/-/pull-many-1.0.8.tgz",
- "integrity": "sha1-Pa3ZttFWxUVyG9qNAAPdjqoGKT4=",
- "dev": true,
- "requires": {
- "pull-stream": "^3.4.5"
- }
- },
- "pull-ndjson": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pull-ndjson/-/pull-ndjson-0.1.1.tgz",
- "integrity": "sha1-gx4GutmqbFxevBKol+Og4V1J4H4=",
- "dev": true,
- "requires": {
- "pull-split": "^0.2.0",
- "pull-stream": "^3.4.5",
- "pull-stringify": "^1.2.2"
- }
- },
- "pull-pair": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/pull-pair/-/pull-pair-1.1.0.tgz",
- "integrity": "sha1-fuQnJj/fTaglOXrAoF4atLdL120=",
- "dev": true
- },
- "pull-paramap": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/pull-paramap/-/pull-paramap-1.2.2.tgz",
- "integrity": "sha1-UaQZPOnI1yFdla2tReK824STsjo=",
- "dev": true,
- "requires": {
- "looper": "^4.0.0"
- },
- "dependencies": {
- "looper": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/looper/-/looper-4.0.0.tgz",
- "integrity": "sha1-dwat7VmpntygbmtUu4bI7BnJUVU=",
- "dev": true
- }
- }
- },
- "pull-pause": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/pull-pause/-/pull-pause-0.0.2.tgz",
- "integrity": "sha1-GdRb6PqmFfpVbxSpb9czRiw3+6M=",
- "dev": true
- },
- "pull-pushable": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/pull-pushable/-/pull-pushable-2.2.0.tgz",
- "integrity": "sha1-Xy867UethpGfAbEqLpnW8b13ZYE=",
- "dev": true
- },
- "pull-reader": {
- "version": "1.2.9",
- "resolved": "https://registry.npmjs.org/pull-reader/-/pull-reader-1.2.9.tgz",
- "integrity": "sha1-0umtALz7VOYqpm1Cwtu8tetoQ7A=",
- "dev": true
- },
- "pull-sort": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/pull-sort/-/pull-sort-1.0.1.tgz",
- "integrity": "sha1-qKsMcMhvRTQ8mszJOfxCdprT3G0=",
- "dev": true,
- "requires": {
- "pull-defer": "^0.2.2",
- "pull-stream": "^3.6.0"
- }
- },
- "pull-split": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/pull-split/-/pull-split-0.2.0.tgz",
- "integrity": "sha1-mW0ohTEFIgmoMTiK0NKB3zyCN5Y=",
- "dev": true,
- "requires": {
- "pull-through": "~1.0.6"
- }
- },
- "pull-stream": {
- "version": "3.6.7",
- "resolved": "https://registry.npmjs.org/pull-stream/-/pull-stream-3.6.7.tgz",
- "integrity": "sha512-XdE2/o1I2lK7A+sbbA/HjYnd5Xk7wL5CwAKzqHIgcBsluDb0LiKHNTl1K0it3/RKPshQljLf4kl1aJ12YsCCGQ==",
- "dev": true
- },
- "pull-stream-to-stream": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/pull-stream-to-stream/-/pull-stream-to-stream-1.3.4.tgz",
- "integrity": "sha1-P4HYIWvRjSv9GhmBkEcRgOJzg5k=",
- "dev": true
- },
- "pull-stringify": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/pull-stringify/-/pull-stringify-1.2.2.tgz",
- "integrity": "sha1-Whw04Adfry8vbUYATjbczTO9fHw=",
- "dev": true
- },
- "pull-through": {
- "version": "1.0.18",
- "resolved": "https://registry.npmjs.org/pull-through/-/pull-through-1.0.18.tgz",
- "integrity": "sha1-jdYjFCY+Wc9Qlur7sSeitu8xBzU=",
- "dev": true,
- "requires": {
- "looper": "~3.0.0"
- }
- },
- "pull-traverse": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/pull-traverse/-/pull-traverse-1.0.3.tgz",
- "integrity": "sha1-dPtde+f6a9enjpeTPhmbeUWGaTg=",
- "dev": true
- },
- "pull-utf8-decoder": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pull-utf8-decoder/-/pull-utf8-decoder-1.0.2.tgz",
- "integrity": "sha1-p6+iOE0eZBWl1gIFQSbMjeO8vOc=",
- "dev": true
- },
- "pull-write": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/pull-write/-/pull-write-1.1.4.tgz",
- "integrity": "sha1-3d6jFJO0j2douEooHQHrO1Mf4Lg=",
- "dev": true,
- "requires": {
- "looper": "^4.0.0",
- "pull-cat": "^1.1.11",
- "pull-stream": "^3.4.5"
- },
- "dependencies": {
- "looper": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/looper/-/looper-4.0.0.tgz",
- "integrity": "sha1-dwat7VmpntygbmtUu4bI7BnJUVU=",
- "dev": true
- }
- }
- },
- "pull-ws": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/pull-ws/-/pull-ws-3.3.1.tgz",
- "integrity": "sha512-kJodbLQT+oKjcRIQO+vQNw6xWBuEo7Kxp51VMOvb6cvPvHYA+aNLzm+NmkB/5dZwbuTRYGMal9QPvH52tzM1ZA==",
- "dev": true,
- "requires": {
- "relative-url": "^1.0.2",
- "safe-buffer": "^5.1.1",
- "ws": "^1.1.0"
- }
- },
- "pull-zip": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pull-zip/-/pull-zip-2.0.1.tgz",
- "integrity": "sha1-4GQc6v+WSvJ1ltqsBwDnmzgQKPU=",
- "dev": true
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- "dev": true
- },
- "pushdata-bitcoin": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/pushdata-bitcoin/-/pushdata-bitcoin-1.0.1.tgz",
- "integrity": "sha1-FZMdPNlnreUiBvUjqnMxrvfUOvc=",
- "dev": true,
- "requires": {
- "bitcoin-ops": "^1.3.0"
- }
- },
- "qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
- },
- "quick-lru": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
- "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
- "dev": true
- },
- "randombytes": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
- "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.0"
- }
- },
- "range-parser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
- "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
- },
- "raw-body": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
- "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
- "requires": {
- "bytes": "3.0.0",
- "http-errors": "1.6.3",
- "iconv-lite": "0.4.23",
- "unpipe": "1.0.0"
- },
- "dependencies": {
- "iconv-lite": {
- "version": "0.4.23",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
- "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- }
- }
- },
- "rc": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz",
- "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==",
- "dev": true,
- "requires": {
- "deep-extend": "^0.5.1",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- }
- },
- "read-pkg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
- "dev": true,
- "requires": {
- "load-json-file": "^4.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^3.0.0"
- }
- },
- "read-pkg-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
- "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
- "dev": true,
- "requires": {
- "find-up": "^2.0.0",
- "read-pkg": "^3.0.0"
- }
- },
- "readable-stream": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz",
- "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.0.3",
- "util-deprecate": "~1.0.1"
- },
- "dependencies": {
- "string_decoder": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
- "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "record-resolver": {
- "version": "github:mistakia/record-resolver#8588af5d05f36b2d5a380c8c996a2473ffc14812",
- "from": "github:mistakia/record-resolver#8588af5",
- "requires": {
- "async": "^2.6.1",
- "cheerio": "^1.0.0-rc.2",
- "deep-extend": "^0.6.0",
- "promisify-es6": "^1.0.3",
- "requestretry": "^1.13.0",
- "urijs": "^1.19.1",
- "yargs": "^11.0.0",
- "youtube-dl": "^1.12.2",
- "ytdl-core": "^0.20.4"
- },
- "dependencies": {
- "async": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
- "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
- "requires": {
- "lodash": "^4.17.10"
- }
- },
- "deep-extend": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
- }
- }
- },
- "registry-auth-token": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
- "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
- "dev": true,
- "requires": {
- "rc": "^1.1.6",
- "safe-buffer": "^5.0.1"
- }
- },
- "registry-url": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
- "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
- "dev": true,
- "requires": {
- "rc": "^1.0.1"
- }
- },
- "relative-url": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/relative-url/-/relative-url-1.0.2.tgz",
- "integrity": "sha1-0hxSpy1gYQGLzun5yfwQa/fWUoc=",
- "dev": true
- },
- "request": {
- "version": "2.87.0",
- "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz",
- "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==",
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.6.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.5",
- "extend": "~3.0.1",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.1",
- "har-validator": "~5.0.3",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.17",
- "oauth-sign": "~0.8.2",
- "performance-now": "^2.1.0",
- "qs": "~6.5.1",
- "safe-buffer": "^5.1.1",
- "tough-cookie": "~2.3.3",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.1.0"
- }
- },
- "requestretry": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/requestretry/-/requestretry-1.13.0.tgz",
- "integrity": "sha512-Lmh9qMvnQXADGAQxsXHP4rbgO6pffCfuR8XUBdP9aitJcLQJxhp7YZK4xAVYXnPJ5E52mwrfiKQtKonPL8xsmg==",
- "requires": {
- "extend": "^3.0.0",
- "lodash": "^4.15.0",
- "request": "^2.74.0",
- "when": "^3.7.7"
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
- },
- "require-main-filename": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
- "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE="
- },
- "require-uncached": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
- "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
- "dev": true,
- "requires": {
- "caller-path": "^0.1.0",
- "resolve-from": "^1.0.0"
- }
- },
- "resolve": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz",
- "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==",
- "dev": true,
- "requires": {
- "path-parse": "^1.0.5"
- }
- },
- "resolve-from": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
- "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
- "dev": true
- },
- "restore-cursor": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
- "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
- "dev": true,
- "requires": {
- "onetime": "^2.0.0",
- "signal-exit": "^3.0.2"
- }
- },
- "rimraf": {
- "version": "2.2.8",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
- "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=",
- "dev": true
- },
- "ripemd160": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
- "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
- "dev": true,
- "requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1"
- }
- },
- "rlp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.0.0.tgz",
- "integrity": "sha1-nbOE/0uJqPYVY9kjldhiWxjzr7A=",
- "dev": true
- },
- "rsa-pem-to-jwk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/rsa-pem-to-jwk/-/rsa-pem-to-jwk-1.1.3.tgz",
- "integrity": "sha1-JF52vbfnI0z+58oDLTG1TDj6uY4=",
- "dev": true,
- "requires": {
- "object-assign": "^2.0.0",
- "rsa-unpack": "0.0.6"
- }
- },
- "rsa-unpack": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/rsa-unpack/-/rsa-unpack-0.0.6.tgz",
- "integrity": "sha1-9Q69VqYoN45jHylxYQJs6atO3bo=",
- "dev": true,
- "requires": {
- "optimist": "~0.3.5"
- }
- },
- "run-async": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
- "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
- "dev": true,
- "requires": {
- "is-promise": "^2.1.0"
- },
- "dependencies": {
- "is-promise": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
- "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
- "dev": true
- }
- }
- },
- "run-parallel": {
- "version": "1.1.9",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
- "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==",
- "dev": true
- },
- "rx-lite": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
- "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
- "dev": true
- },
- "rx-lite-aggregates": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
- "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
- "dev": true,
- "requires": {
- "rx-lite": "*"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
- },
- "sanitize-filename": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.1.tgz",
- "integrity": "sha1-YS2hyWRz+gLczaktzVtKsWSmdyo=",
- "dev": true,
- "requires": {
- "truncate-utf8-bytes": "^1.0.0"
- }
- },
- "sax": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
- "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
- },
- "secp256k1": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.5.0.tgz",
- "integrity": "sha512-e5QIJl8W7Y4tT6LHffVcZAxJjvpgE5Owawv6/XCYPQljE9aP2NFFddQ8OYMKhdLshNu88FfL3qCN3/xYkXGRsA==",
- "dev": true,
- "requires": {
- "bindings": "^1.2.1",
- "bip66": "^1.1.3",
- "bn.js": "^4.11.3",
- "create-hash": "^1.1.2",
- "drbg.js": "^1.0.1",
- "elliptic": "^6.2.3",
- "nan": "^2.2.1",
- "safe-buffer": "^5.1.0"
- }
- },
- "semaphore": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz",
- "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==",
- "dev": true
- },
- "semver": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
- "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
- "dev": true
- },
- "semver-diff": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
- "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
- "dev": true,
- "requires": {
- "semver": "^5.0.3"
- }
- },
- "send": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
- "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
- "requires": {
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "~1.6.2",
- "mime": "1.4.1",
- "ms": "2.0.0",
- "on-finished": "~2.3.0",
- "range-parser": "~1.2.0",
- "statuses": "~1.4.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- }
- }
- },
- "serve-static": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
- "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
- "requires": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.2",
- "send": "0.16.2"
- }
- },
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
- },
- "setimmediate": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
- "dev": true
- },
- "setprototypeof": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
- "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
- },
- "sha.js": {
- "version": "2.4.11",
- "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
- "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
- },
- "shot": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/shot/-/shot-3.4.2.tgz",
- "integrity": "sha1-Hlw/bysmZJrcQvfrNQIUpaApHWc=",
- "dev": true,
- "requires": {
- "hoek": "4.x.x",
- "joi": "10.x.x"
- },
- "dependencies": {
- "hoek": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
- "dev": true
- },
- "joi": {
- "version": "10.6.0",
- "resolved": "https://registry.npmjs.org/joi/-/joi-10.6.0.tgz",
- "integrity": "sha512-hBF3LcqyAid+9X/pwg+eXjD2QBZI5eXnBFJYaAkH4SK3mp9QSRiiQnDYlmlz5pccMvnLcJRS4whhDOTCkmsAdQ==",
- "dev": true,
- "requires": {
- "hoek": "4.x.x",
- "isemail": "2.x.x",
- "items": "2.x.x",
- "topo": "2.x.x"
- }
- }
- }
- },
- "signal-exit": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
- "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
- },
- "signed-varint": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/signed-varint/-/signed-varint-2.0.1.tgz",
- "integrity": "sha1-UKmYnafJjCxh2tEZvJdHDvhSgSk=",
- "dev": true,
- "requires": {
- "varint": "~5.0.0"
- }
- },
- "simple-concat": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz",
- "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=",
- "dev": true
- },
- "simple-get": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz",
- "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==",
- "dev": true,
- "requires": {
- "decompress-response": "^3.3.0",
- "once": "^1.3.1",
- "simple-concat": "^1.0.0"
- }
- },
- "simple-peer": {
- "version": "9.1.2",
- "resolved": "https://registry.npmjs.org/simple-peer/-/simple-peer-9.1.2.tgz",
- "integrity": "sha512-MUWWno5o5cvISKOH4pYQ18PQJLpDaNWoKUbrPPKuspCLCkkh+zhtuQyTE8h2U2Ags+/OUN5wnUe92+9B8/Sm2Q==",
- "dev": true,
- "requires": {
- "debug": "^3.1.0",
- "get-browser-rtc": "^1.0.0",
- "inherits": "^2.0.1",
- "randombytes": "^2.0.3",
- "readable-stream": "^2.3.4"
- }
- },
- "slice-ansi": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
- "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0"
- },
- "dependencies": {
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- }
- }
- },
- "slide": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz",
- "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=",
- "dev": true
- },
- "smart-buffer": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.0.1.tgz",
- "integrity": "sha512-RFqinRVJVcCAL9Uh1oVqE6FZkqsyLiVOYEZ20TqIOjuX7iFVJ+zsbs4RIghnw/pTs7mZvt8ZHhvm1ZUrR4fykg==",
- "dev": true
- },
- "socket.io": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz",
- "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==",
- "dev": true,
- "requires": {
- "debug": "~3.1.0",
- "engine.io": "~3.2.0",
- "has-binary2": "~1.0.2",
- "socket.io-adapter": "~1.1.0",
- "socket.io-client": "2.1.1",
- "socket.io-parser": "~3.2.0"
- }
- },
- "socket.io-adapter": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz",
- "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=",
- "dev": true
- },
- "socket.io-client": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz",
- "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==",
- "dev": true,
- "requires": {
- "backo2": "1.0.2",
- "base64-arraybuffer": "0.1.5",
- "component-bind": "1.0.0",
- "component-emitter": "1.2.1",
- "debug": "~3.1.0",
- "engine.io-client": "~3.2.0",
- "has-binary2": "~1.0.2",
- "has-cors": "1.1.0",
- "indexof": "0.0.1",
- "object-component": "0.0.3",
- "parseqs": "0.0.5",
- "parseuri": "0.0.5",
- "socket.io-parser": "~3.2.0",
- "to-array": "0.1.4"
- }
- },
- "socket.io-parser": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz",
- "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==",
- "dev": true,
- "requires": {
- "component-emitter": "1.2.1",
- "debug": "~3.1.0",
- "isarray": "2.0.1"
- },
- "dependencies": {
- "isarray": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
- "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
- "dev": true
- }
- }
- },
- "socket.io-pull-stream": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/socket.io-pull-stream/-/socket.io-pull-stream-0.1.5.tgz",
- "integrity": "sha512-lcC2se3iAS33xYGnTDSzYW9P4RPVEgcqACCH7Mawy+2go0Wmx3y72PXGv7KI6Vz1YFcOz7np58FqOnZ/iUCbdg==",
- "dev": true,
- "requires": {
- "data-queue": "0.0.3",
- "debug": "^3.1.0",
- "pull-stream": "^3.6.2",
- "uuid": "^3.2.1"
- }
- },
- "sparse-array": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/sparse-array/-/sparse-array-1.3.1.tgz",
- "integrity": "sha1-1Wm5i55JIz1EGN5gmFAqSmxB2Dw=",
- "dev": true
- },
- "spdx-correct": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
- "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
- "dev": true,
- "requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-exceptions": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
- "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
- "dev": true
- },
- "spdx-expression-parse": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
- "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
- "dev": true,
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-license-ids": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
- "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
- "dev": true
- },
- "split": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
- "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=",
- "dev": true,
- "requires": {
- "through": "2"
- }
- },
- "split2": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz",
- "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==",
- "dev": true,
- "requires": {
- "through2": "^2.0.2"
- }
- },
- "sprintf-js": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.0.tgz",
- "integrity": "sha1-z/yvcC2vZeo5u04PorKZzsGhvkY=",
- "dev": true
- },
- "sshpk": {
- "version": "1.14.2",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
- "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
- "requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- },
- "dependencies": {
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
- "optional": true
- },
- "tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
- "optional": true
- }
- }
- },
- "stable": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
- "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
- "dev": true
- },
- "standard": {
- "version": "11.0.1",
- "resolved": "https://registry.npmjs.org/standard/-/standard-11.0.1.tgz",
- "integrity": "sha512-nu0jAcHiSc8H+gJCXeiziMVZNDYi8MuqrYJKxTgjP4xKXZMKm311boqQIzDrYI/ktosltxt2CbDjYQs9ANC8IA==",
- "dev": true,
- "requires": {
- "eslint": "~4.18.0",
- "eslint-config-standard": "11.0.0",
- "eslint-config-standard-jsx": "5.0.0",
- "eslint-plugin-import": "~2.9.0",
- "eslint-plugin-node": "~6.0.0",
- "eslint-plugin-promise": "~3.7.0",
- "eslint-plugin-react": "~7.7.0",
- "eslint-plugin-standard": "~3.0.1",
- "standard-engine": "~8.0.0"
- }
- },
- "standard-engine": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-8.0.1.tgz",
- "integrity": "sha512-LA531C3+nljom/XRvdW/hGPXwmilRkaRkENhO3FAGF1Vtq/WtCXzgmnc5S6vUHHsgv534MRy02C1ikMwZXC+tw==",
- "dev": true,
- "requires": {
- "deglob": "^2.1.0",
- "get-stdin": "^6.0.0",
- "minimist": "^1.1.0",
- "pkg-conf": "^2.0.0"
- }
- },
- "statehood": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/statehood/-/statehood-5.0.3.tgz",
- "integrity": "sha512-YrPrCt10t3ImH/JMO5szSwX7sCm8HoqVl3VFLOa9EZ1g/qJx/ZmMhN+2uzPPB/vaU6hpkJpXxcBWsgIkkG+MXA==",
- "dev": true,
- "requires": {
- "boom": "5.x.x",
- "cryptiles": "3.x.x",
- "hoek": "4.x.x",
- "iron": "4.x.x",
- "items": "2.x.x",
- "joi": "10.x.x"
- },
- "dependencies": {
- "boom": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
- "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
- "dev": true,
- "requires": {
- "hoek": "4.x.x"
- }
- },
- "hoek": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
- "dev": true
- },
- "joi": {
- "version": "10.6.0",
- "resolved": "https://registry.npmjs.org/joi/-/joi-10.6.0.tgz",
- "integrity": "sha512-hBF3LcqyAid+9X/pwg+eXjD2QBZI5eXnBFJYaAkH4SK3mp9QSRiiQnDYlmlz5pccMvnLcJRS4whhDOTCkmsAdQ==",
- "dev": true,
- "requires": {
- "hoek": "4.x.x",
- "isemail": "2.x.x",
- "items": "2.x.x",
- "topo": "2.x.x"
- }
- }
- }
- },
- "statuses": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
- "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
- },
- "stream-http": {
- "version": "2.8.2",
- "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.2.tgz",
- "integrity": "sha512-QllfrBhqF1DPcz46WxKTs6Mz1Bpc+8Qm6vbqOpVav5odAXwbyzwnEczoWqtxrsmlO+cJqtPrp/8gWKWjaKLLlA==",
- "dev": true,
- "requires": {
- "builtin-status-codes": "^3.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.3.6",
- "to-arraybuffer": "^1.0.0",
- "xtend": "^4.0.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- }
- }
- },
- "stream-shift": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
- "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
- "dev": true
- },
- "stream-to-pull-stream": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/stream-to-pull-stream/-/stream-to-pull-stream-1.7.2.tgz",
- "integrity": "sha1-dXYJrhzr0zx0MtSvvjH/eGULnd4=",
- "dev": true,
- "requires": {
- "looper": "^3.0.0",
- "pull-stream": "^3.2.3"
- }
- },
- "streamifier": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/streamifier/-/streamifier-0.1.1.tgz",
- "integrity": "sha1-l+mNj6TRBdYqJpHR3AfoINuN/E8=",
- "dev": true
- },
- "streamify": {
- "version": "0.2.9",
- "resolved": "https://registry.npmjs.org/streamify/-/streamify-0.2.9.tgz",
- "integrity": "sha512-8pUxeLEef9UO1FxtTt5iikAiyzGI4SZRnGuJ3sz8axZ5Xk+/7ezEV5kuJQsMEFxw7AKYw3xp0Ow+20mmSaJbQQ==",
- "requires": {
- "hashish": "~0.0.4"
- }
- },
- "streamsearch": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
- "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=",
- "dev": true
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
- "dev": true
- },
- "strip-eof": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
- "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
- },
- "strip-hex-prefix": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz",
- "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=",
- "dev": true,
- "requires": {
- "is-hex-prefixed": "1.0.0"
- }
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
- "dev": true
- },
- "subtext": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/subtext/-/subtext-5.0.0.tgz",
- "integrity": "sha512-2nXG1G1V+K64Z20cQII7k0s38J2DSycMXBLMAk9RXUFG0uAkAbLSVoa88croX9VhTdBCJbLAe9g6LmzKwpJhhQ==",
- "dev": true,
- "requires": {
- "boom": "5.x.x",
- "content": "3.x.x",
- "hoek": "4.x.x",
- "pez": "2.x.x",
- "wreck": "12.x.x"
- },
- "dependencies": {
- "boom": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
- "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
- "dev": true,
- "requires": {
- "hoek": "4.x.x"
- }
- },
- "hoek": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
- "dev": true
- }
- }
- },
- "supports-color": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
- "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "table": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
- "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
- "dev": true,
- "requires": {
- "ajv": "^5.2.3",
- "ajv-keywords": "^2.1.0",
- "chalk": "^2.1.0",
- "lodash": "^4.17.4",
- "slice-ansi": "1.0.0",
- "string-width": "^2.1.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "tar-fs": {
- "version": "1.16.2",
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.2.tgz",
- "integrity": "sha512-LdknWjPEiZC1nOBwhv0JBzfJBGPJar08dZg2rwZe0ZTLQoRGEzgrl7vF3qUEkCHpI/wN9e7RyCuDhMsJUCLPPQ==",
- "dev": true,
- "requires": {
- "chownr": "^1.0.1",
- "mkdirp": "^0.5.1",
- "pump": "^1.0.0",
- "tar-stream": "^1.1.2"
- },
- "dependencies": {
- "pump": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz",
- "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- }
- }
- },
- "tar-stream": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.0.tgz",
- "integrity": "sha512-lh2iAPG/BHNmN6WB9Ybdynk9rEJ5GD/dy4zscHmVlwa1dq2tpE+BH78i5vjYwYVWEaOXGBjzxr89aVACF17Cpw==",
- "dev": true,
- "requires": {
- "bl": "^1.0.0",
- "buffer-alloc": "^1.1.0",
- "end-of-stream": "^1.0.0",
- "fs-constants": "^1.0.0",
- "readable-stream": "^2.0.0",
- "to-buffer": "^1.1.0",
- "xtend": "^4.0.0"
- }
- },
- "tdigest": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.1.tgz",
- "integrity": "sha1-Ljyyw56kSeVdHmzZEReszKRYgCE=",
- "dev": true,
- "requires": {
- "bintrees": "1.0.1"
- }
- },
- "temp": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz",
- "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=",
- "dev": true,
- "requires": {
- "os-tmpdir": "^1.0.0",
- "rimraf": "~2.2.6"
- }
- },
- "term-size": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
- "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
- "dev": true,
- "requires": {
- "execa": "^0.7.0"
- }
- },
- "text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
- "dev": true
- },
- "through": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
- "dev": true
- },
- "through2": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
- "requires": {
- "readable-stream": "^2.1.5",
- "xtend": "~4.0.1"
- }
- },
- "thunky": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.2.tgz",
- "integrity": "sha1-qGLgGOP7HqLsP85dVWBc9X8kc3E=",
- "dev": true
- },
- "time-cache": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/time-cache/-/time-cache-0.3.0.tgz",
- "integrity": "sha1-7Q388P2kXNyV+9YB/agw6/G9XYs=",
- "dev": true,
- "requires": {
- "lodash.throttle": "^4.1.1"
- }
- },
- "timed-out": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
- "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
- "dev": true
- },
- "timed-tape": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/timed-tape/-/timed-tape-0.1.1.tgz",
- "integrity": "sha1-m25WnxfmbHnx7tLSX/eWL8dBjkk=",
- "dev": true
- },
- "tmp": {
- "version": "0.0.33",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
- "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
- "dev": true,
- "requires": {
- "os-tmpdir": "~1.0.2"
- }
- },
- "to-array": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
- "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=",
- "dev": true
- },
- "to-arraybuffer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
- "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
- "dev": true
- },
- "to-buffer": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
- "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==",
- "dev": true
- },
- "topo": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz",
- "integrity": "sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI=",
- "dev": true,
- "requires": {
- "hoek": "4.x.x"
- },
- "dependencies": {
- "hoek": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
- "dev": true
- }
- }
- },
- "tough-cookie": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
- "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
- "requires": {
- "punycode": "^1.4.1"
- },
- "dependencies": {
- "punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
- }
- }
- },
- "traverse": {
- "version": "0.6.6",
- "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz",
- "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc="
- },
- "truncate-utf8-bytes": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz",
- "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=",
- "dev": true,
- "requires": {
- "utf8-byte-length": "^1.0.1"
- }
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "tweetnacl": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.0.tgz",
- "integrity": "sha1-cT2LgY2kIGh0C/aDhtBHnmb8ins=",
- "dev": true
- },
- "type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
- "dev": true,
- "requires": {
- "prelude-ls": "~1.1.2"
- }
- },
- "type-is": {
- "version": "1.6.16",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
- "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
- "requires": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.18"
- }
- },
- "typedarray": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
- "dev": true
- },
- "typedarray-to-buffer": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz",
- "integrity": "sha1-m7i6DoQfs/TPH+fCRenz+opf6Zw=",
- "dev": true
- },
- "typeforce": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/typeforce/-/typeforce-1.12.0.tgz",
- "integrity": "sha512-fvnkvueAOFLhtAqDgIA/wMP21SMwS/NQESFKZuwVrj5m/Ew6eK2S0z0iB++cwtROPWDOhaT6OUfla8UwMw4Adg==",
- "dev": true
- },
- "ua-parser-js": {
- "version": "0.7.18",
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.18.tgz",
- "integrity": "sha512-LtzwHlVHwFGTptfNSgezHp7WUlwiqb0gA9AALRbKaERfxwJoiX0A73QbTToxteIAuIaFshhgIZfqK8s7clqgnA==",
- "dev": true
- },
- "ultron": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz",
- "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=",
- "dev": true
- },
- "uniq": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
- "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
- "dev": true
- },
- "unique-string": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
- "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
- "dev": true,
- "requires": {
- "crypto-random-string": "^1.0.0"
- }
- },
- "unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
- },
- "unzip-response": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
- "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=",
- "dev": true
- },
- "update-notifier": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz",
- "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==",
- "dev": true,
- "requires": {
- "boxen": "^1.2.1",
- "chalk": "^2.0.1",
- "configstore": "^3.0.0",
- "import-lazy": "^2.1.0",
- "is-ci": "^1.0.10",
- "is-installed-globally": "^0.1.0",
- "is-npm": "^1.0.0",
- "latest-version": "^3.0.0",
- "semver-diff": "^2.0.0",
- "xdg-basedir": "^3.0.0"
- }
- },
- "urijs": {
- "version": "1.19.1",
- "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.1.tgz",
- "integrity": "sha512-xVrGVi94ueCJNrBSTjWqjvtgvl3cyOTThp2zaMaFNGp3F542TR6sM3f2o8RqZl+AwteClSVmoCyt0ka4RjQOQg=="
- },
- "url-parse-lax": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
- "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
- "dev": true,
- "requires": {
- "prepend-http": "^1.0.1"
- }
- },
- "utf8-byte-length": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz",
- "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=",
- "dev": true
- },
- "util": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
- "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
- "dev": true,
- "requires": {
- "inherits": "2.0.1"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
- "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
- "dev": true
- }
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
- },
- "utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
- },
- "uuid": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
- "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA=="
- },
- "validate-npm-package-license": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
- "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
- "dev": true,
- "requires": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "varint": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.0.tgz",
- "integrity": "sha1-2Ca4n3SQcy+rwMDtaT7Uddyynr8=",
- "dev": true
- },
- "varint-decoder": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/varint-decoder/-/varint-decoder-0.1.1.tgz",
- "integrity": "sha1-YT1i8HHX51dqIO/RbvTB4zWg3f0=",
- "dev": true,
- "requires": {
- "varint": "^5.0.0"
- }
- },
- "varuint-bitcoin": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/varuint-bitcoin/-/varuint-bitcoin-1.1.0.tgz",
- "integrity": "sha512-jCEPG+COU/1Rp84neKTyDJQr478/hAfVp5xxYn09QEH0yBjbmPeMfuuQIrp+BUD83hybtYZKhr5elV3bvdV1bA==",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.1"
- }
- },
- "vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
- },
- "verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
- "requires": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "vise": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/vise/-/vise-2.0.2.tgz",
- "integrity": "sha1-awjo+0y3bjpQzW3Q7DczjoEaDTk=",
- "dev": true,
- "requires": {
- "hoek": "4.x.x"
- },
- "dependencies": {
- "hoek": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
- "dev": true
- }
- }
- },
- "webcrypto-shim": {
- "version": "github:dignifiedquire/webcrypto-shim#190bc9ec341375df6025b17ae12ddb2428ea49c8",
- "from": "github:dignifiedquire/webcrypto-shim#master",
- "dev": true
- },
- "webrtcsupport": {
- "version": "github:ipfs/webrtcsupport#0669f576582c53a3a42aa5ac014fcc5966809615",
- "from": "github:ipfs/webrtcsupport",
- "dev": true
- },
- "whatwg-fetch": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz",
- "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==",
- "dev": true
- },
- "when": {
- "version": "3.7.8",
- "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz",
- "integrity": "sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I="
- },
- "which": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
- "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
- },
- "which-pm-runs": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz",
- "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=",
- "dev": true
- },
- "wide-align": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
- "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
- "dev": true,
- "requires": {
- "string-width": "^1.0.2"
- }
- },
- "widest-line": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz",
- "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=",
- "dev": true,
- "requires": {
- "string-width": "^2.1.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "wif": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz",
- "integrity": "sha1-CNP1IFbGZnkplyb63g1DKudLRwQ=",
- "dev": true,
- "requires": {
- "bs58check": "<3.0.0"
- }
- },
- "wordwrap": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
- "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
- "dev": true
- },
- "wrap-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
- "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
- },
- "wreck": {
- "version": "12.5.1",
- "resolved": "https://registry.npmjs.org/wreck/-/wreck-12.5.1.tgz",
- "integrity": "sha512-l5DUGrc+yDyIflpty1x9XuMj1ehVjC/dTbF3/BasOO77xk0EdEa4M/DuOY8W88MQDAD0fEDqyjc8bkIMHd2E9A==",
- "dev": true,
- "requires": {
- "boom": "5.x.x",
- "hoek": "4.x.x"
- },
- "dependencies": {
- "boom": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
- "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
- "dev": true,
- "requires": {
- "hoek": "4.x.x"
- }
- },
- "hoek": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
- "dev": true
- }
- }
- },
- "write": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
- "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
- "dev": true,
- "requires": {
- "mkdirp": "^0.5.1"
- }
- },
- "write-file-atomic": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz",
- "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.11",
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.2"
- }
- },
- "ws": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz",
- "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==",
- "dev": true,
- "requires": {
- "options": ">=0.0.5",
- "ultron": "1.0.x"
- }
- },
- "xdg-basedir": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
- "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=",
- "dev": true
- },
- "xmlhttprequest-ssl": {
- "version": "1.5.5",
- "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
- "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=",
- "dev": true
- },
- "xor-distance": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/xor-distance/-/xor-distance-1.0.0.tgz",
- "integrity": "sha1-2nNdmyT8yo282bN00W0qAe6VQcY=",
- "dev": true
- },
- "xtend": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
- "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
- },
- "y18n": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
- "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
- },
- "yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
- },
- "yargs": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.0.0.tgz",
- "integrity": "sha512-Rjp+lMYQOWtgqojx1dEWorjCofi1YN7AoFvYV7b1gx/7dAAeuI4kN5SZiEvr0ZmsZTOpDRcCqrpI10L31tFkBw==",
- "requires": {
- "cliui": "^4.0.0",
- "decamelize": "^1.1.1",
- "find-up": "^2.1.0",
- "get-caller-file": "^1.0.1",
- "os-locale": "^2.0.0",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^2.0.0",
- "which-module": "^2.0.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^9.0.2"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- },
- "yargs-parser": {
- "version": "9.0.2",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz",
- "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=",
- "requires": {
- "camelcase": "^4.1.0"
- }
- }
- }
- },
- "yargs-parser": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.0.0.tgz",
- "integrity": "sha512-+DHejWujTVYeMHLff8U96rLc4uE4Emncoftvn5AjhB1Jw1pWxLzgBUT/WYbPrHmy6YPEBTZQx5myHhVcuuu64g==",
- "dev": true,
- "requires": {
- "camelcase": "^4.1.0"
- }
- },
- "yeast": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
- "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=",
- "dev": true
- },
- "youtube-dl": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/youtube-dl/-/youtube-dl-1.12.2.tgz",
- "integrity": "sha512-TDGmUxzEsQCp1Ux3IEkEhJ2LfRlUjBo5AaaGmW5Hqm8uX8jd2sB+Rq37S9vy505qnFhpy05uUSQsBtpvBuQBYA==",
- "requires": {
- "hh-mm-ss": "^1.2.0",
- "mkdirp": "^0.5.1",
- "request": "^2.83.0",
- "streamify": "^0.2.9"
- }
- },
- "ytdl-core": {
- "version": "0.20.4",
- "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-0.20.4.tgz",
- "integrity": "sha512-d+jthiJxSQ6yqCeCwwMggXYOjFSOJsD7ahvAAE1sFW9nVNnsA/roz91SFH1FzaMGS7/y7AnJfhVgpE9i8uYjJQ==",
- "requires": {
- "html-entities": "^1.1.3",
- "m3u8stream": "^0.2.1",
- "miniget": "^1.1.0",
- "sax": "^1.1.3"
- }
- },
- "zcash-bitcore-lib": {
- "version": "0.13.20-rc3",
- "resolved": "https://registry.npmjs.org/zcash-bitcore-lib/-/zcash-bitcore-lib-0.13.20-rc3.tgz",
- "integrity": "sha1-gToPVtz4t2vBQplRvqbRI2xQcAg=",
- "dev": true,
- "requires": {
- "bn.js": "=2.0.4",
- "bs58": "=2.0.0",
- "buffer-compare": "=1.0.0",
- "elliptic": "=3.0.3",
- "inherits": "=2.0.1",
- "lodash": "=3.10.1"
- },
- "dependencies": {
- "bn.js": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-2.0.4.tgz",
- "integrity": "sha1-Igp81nf38b+pNif/QZN3b+eBlIA=",
- "dev": true
- },
- "bs58": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/bs58/-/bs58-2.0.0.tgz",
- "integrity": "sha1-crcTvtIjoKxRi72g484/SBfznrU=",
- "dev": true
- },
- "buffer-compare": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/buffer-compare/-/buffer-compare-1.0.0.tgz",
- "integrity": "sha1-rKp6lm6Y7un64Usxw5pfFY+zxKI=",
- "dev": true
- },
- "elliptic": {
- "version": "3.0.3",
- "resolved": "http://registry.npmjs.org/elliptic/-/elliptic-3.0.3.tgz",
- "integrity": "sha1-hlybQgv75VAGuflp+XoNLESWZZU=",
- "dev": true,
- "requires": {
- "bn.js": "^2.0.0",
- "brorand": "^1.0.1",
- "hash.js": "^1.0.0",
- "inherits": "^2.0.1"
- },
- "dependencies": {
- "brorand": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.0.5.tgz",
- "integrity": "sha1-B7VMowKGq9Fxig4qgwgD79yb+gQ=",
- "dev": true
- },
- "hash.js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.0.3.tgz",
- "integrity": "sha1-EzL/ABVsCg/92CNgE9B7d6BFFXM=",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1"
- }
- }
- }
- },
- "inherits": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
- "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
- "dev": true
- },
- "lodash": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
- "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
- "dev": true
- }
- }
- },
- "zero-fill": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/zero-fill/-/zero-fill-2.2.3.tgz",
- "integrity": "sha1-o97wa6XjmuZEhQu0yirUEStIVek="
- }
- }
-}
diff --git a/package.json b/package.json
index 8772b02..a9bcf8e 100644
--- a/package.json
+++ b/package.json
@@ -1,32 +1,63 @@
{
"name": "record-node",
"version": "0.0.1",
- "description": "Library, CLI and REST API for Record.",
+ "description": "Library, CLI and REST API for Record: a distributed system for audio files",
"main": "index.js",
+ "bin": {
+ "record": "./bin/cli.js"
+ },
"scripts": {
- "lint": "$(npm bin)/standard '**/*.js'",
- "lint:fix": "$(npm bin)/standard --fix '**/*.js'",
- "test": "echo \"Error: no test specified\" && exit 1",
- "start": "node --trace-warnings bin/run.js"
+ "benchmark": "node --inspect --expose-gc benchmark/index.js -r --grep baseline",
+ "benchmark:stress": "node --inspect --expose-gc benchmark/index.js -r --grep stress",
+ "lint": "standard '**/*.js'",
+ "lint:fix": "standard --fix '**/*.js'",
+ "test": "NODE_ENV=test TEST=all mocha --exit",
+ "start": "node --trace-warnings bin/cli.js"
},
"author": "",
"license": "MIT",
"dependencies": {
- "async": "^2.6.0",
+ "bitboot": "^0.1.0",
"body-parser": "^1.18.3",
- "crypto-hash": "^0.1.0",
- "debug": "^3.1.0",
- "deep-extend": "^0.5.1",
+ "buffer-peek-stream": "^1.0.1",
+ "deep-extend": "^0.6.0",
"express": "^4.16.3",
- "morgan": "^1.9.0",
- "morgan-debug": "^2.0.0",
- "promisify-es6": "^1.0.3",
- "record-resolver": "github:mistakia/record-resolver#8588af5"
+ "file-type": "16.2.0",
+ "flexsearch": "^0.6.22",
+ "fluent-ffmpeg": "github:fluent-ffmpeg/node-fluent-ffmpeg#1266709",
+ "fpcalc": "^1.3.0",
+ "ipfs-http-client": "48.2.1",
+ "ipfs-log": "mistakia/ipfs-log#proto/record",
+ "ipfs-pubsub-peer-monitor": "0.0.10",
+ "is-ipfs": "2.0.0",
+ "it-to-stream": "^0.1.1",
+ "jsonfile": "^6.0.1",
+ "knex": "0.21.17",
+ "leveldown": "^5.1.1",
+ "libp2p-crypto": "0.19.0",
+ "mime-types": "2.1.28",
+ "morgan": "^1.10.0",
+ "music-metadata": "6.3.7",
+ "node-fetch": "^2.6.0",
+ "orbit-db": "mistakia/orbit-db#proto/record",
+ "orbit-db-cache": "^0.3.0",
+ "orbit-db-identity-provider": "^0.3.0",
+ "orbit-db-keystore": "0.3.5",
+ "orbit-db-storage-adapter": "^0.5.3",
+ "orbit-db-store": "mistakia/orbit-db-store#proto/record",
+ "p-queue": "^6.3.0",
+ "record-resolver": "mistakia/record-resolver#499873d",
+ "secp256k1": "3.8.0",
+ "sqlite3": "5.0.1"
},
"devDependencies": {
- "ipfs": "github:ipfs/js-ipfs#4486acc",
- "logplease": "^1.2.14",
- "orbit-db": "^0.19.7",
- "standard": "^11.0.1"
+ "expose-gc": "^1.0.0",
+ "go-ipfs": "0.8.0",
+ "ipfsd-ctl": "7.2.0",
+ "mocha": "8.2.1",
+ "record-ipfsd": "mistakia/record-ipfsd#d6bec86",
+ "rimraf": "^3.0.2",
+ "standard": "16.0.3",
+ "yargs": "^16.2.0"
}
}
diff --git a/routes/info.js b/routes/info.js
deleted file mode 100644
index bf128c7..0000000
--- a/routes/info.js
+++ /dev/null
@@ -1,13 +0,0 @@
-const express = require('express')
-const router = express.Router()
-
-router.get('/?', async (req, res) => {
- try {
- const data = await req.app.locals.info()
- res.send(data)
- } catch (err) {
- res.send({ error: err })
- }
-})
-
-module.exports = router
diff --git a/routes/logs.js b/routes/logs.js
deleted file mode 100644
index a3dc3d3..0000000
--- a/routes/logs.js
+++ /dev/null
@@ -1,69 +0,0 @@
-const express = require('express')
-const router = express.Router()
-
-const loadLog = async (req, res, next) => {
- const logAddress = `/${req.params.logAddress}`
-
- try {
- res.locals.log = await req.app.locals.loadLog(logAddress)
- next()
- } catch (err) {
- res.send(500).send({ error: err.toString() })
- }
-}
-
-router.get('/tracks/:logAddress(*)', loadLog, (req, res) => {
- const data = res.locals.log.tracks.all()
- return res.send(data)
-})
-
-router.post('/tracks/:logAddress(*)', loadLog, async (req, res) => {
- // TODO: validate title
- // TODO: validate if you have write permissions for database
-
- const { title, url } = req.body
-
- try {
- const data = await res.locals.log.tracks.findOrCreate({ url, title })
- res.send(data)
- } catch (err) {
- res.status(500).send({ error: err.toString() })
- }
-})
-
-router.get('/contacts/:logAddress(*)', loadLog, (req, res) => {
- const data = res.locals.log.contacts.all()
-
- return res.send(data)
-})
-
-router.post('/contacts/:logAddress(*)', loadLog, (req, res, next) => {
- const { address, alias } = req.body
-
- let errors = []
-
- // TODO: sanitize
- // TODO: validate address (OrbitDB)
- if (!address) errors.push('Missing address field')
-
- if (!alias) errors.push('Missing alias field')
-
- if (!errors.length) {
- res.locals.data = { address, alias }
- return next()
- }
-
- res.status(422).send({
- error: errors.join(', ')
- })
-}, async (req, res) => {
- try {
- const { address, alias } = res.locals.data
- const data = await res.locals.log.contacts.findOrCreate({ address, alias })
- res.send(data)
- } catch (err) {
- res.status(500).send({ error: err.toString() })
- }
-})
-
-module.exports = router
diff --git a/store/ListensIndex.js b/store/ListensIndex.js
new file mode 100644
index 0000000..caed50e
--- /dev/null
+++ b/store/ListensIndex.js
@@ -0,0 +1,12 @@
+class ListensIndex {
+ constructor (id) {
+ this.id = id
+ this._index = {}
+ }
+
+ async updateIndex (oplog) {
+ // placeholder
+ }
+}
+
+module.exports = ListensIndex
diff --git a/store/ListensStore.js b/store/ListensStore.js
new file mode 100644
index 0000000..df521c1
--- /dev/null
+++ b/store/ListensStore.js
@@ -0,0 +1,49 @@
+const RecordStore = require('./RecordStore')
+const ListensIndex = require('./ListensIndex')
+
+class ListensStore extends RecordStore {
+ constructor (ipfs, id, dbname, options = {}) {
+ if (!options.Index) Object.assign(options, { Index: ListensIndex })
+ super(ipfs, id, dbname, options)
+ this._type = ListensStore.type
+
+ this.afterAdd = options.afterAdd
+ }
+
+ async list ({ start = 0, limit = 20 } = {}) {
+ const end = start + limit
+ const entryHashes = Array.from(this._oplog._hashIndex.keys()).reverse().slice(start, end)
+ const entries = []
+ for (const entryHash of entryHashes) {
+ const entry = await this._oplog.get(entryHash)
+ entries.push(entry)
+ }
+ return entries.map(e => e.payload)
+ }
+
+ async add ({ trackId, address }) {
+ if (!trackId) {
+ throw new Error('missing trackId')
+ }
+
+ const entry = await this._addOperation({
+ trackId,
+ address,
+ timestamp: Date.now()
+ })
+
+ if (this.afterAdd) {
+ await this.afterAdd(entry)
+ }
+
+ await this._ipfs.pin.add(entry.hash, { recursive: false })
+
+ return entry.hash
+ }
+
+ static get type () {
+ return 'listens'
+ }
+}
+
+module.exports = ListensStore
diff --git a/store/RecordEntry.js b/store/RecordEntry.js
new file mode 100644
index 0000000..5991e51
--- /dev/null
+++ b/store/RecordEntry.js
@@ -0,0 +1,83 @@
+const { sha256 } = require('../utils')
+const { CID } = require('ipfs-http-client')
+
+class Entry {
+ constructor () {
+ this._entry = {}
+ }
+
+ async create (ipfs, id, content) {
+ this._entry = {
+ id,
+ timestamp: Date.now(),
+ v: 0,
+ type: this._type,
+ ...this._entry
+ }
+
+ const cid = await ipfs.dag.put(content, { format: 'dag-cbor', hashAlg: 'sha3-512' })
+ this._entry.content = cid.toBaseEncodedString('base58btc')
+ await ipfs.pin.add(cid.toString(), { recursive: false })
+
+ return this._entry
+ }
+}
+
+class TrackEntry extends Entry {
+ constructor () {
+ super()
+ this._type = 'track'
+ }
+
+ async create (ipfs, content, { tags = [] } = {}) {
+ const id = sha256(content.tags.acoustid_fingerprint)
+ this._entry = {
+ tags
+ }
+
+ if (content.hash && !CID.isCID(content.hash)) {
+ content.hash = new CID(content.hash)
+ }
+
+ if (content.artwork && content.artwork.length) {
+ content.artwork = content.artwork.map((a) => {
+ return CID.isCID(a) ? a : new CID(a)
+ })
+ }
+
+ return super.create(ipfs, id, content)
+ }
+}
+
+class LogEntry extends Entry {
+ constructor () {
+ super()
+
+ this._type = 'log'
+ }
+
+ async create (ipfs, content) {
+ const id = sha256(content.address)
+ return super.create(ipfs, id, content)
+ }
+}
+
+class AboutEntry extends Entry {
+ constructor () {
+ super()
+
+ this._type = 'about'
+ }
+
+ async create (ipfs, content) {
+ const id = sha256(content.address)
+ return super.create(ipfs, id, content)
+ }
+}
+
+module.exports = {
+ Entry,
+ AboutEntry,
+ TrackEntry,
+ LogEntry
+}
diff --git a/store/RecordIndex.js b/store/RecordIndex.js
new file mode 100644
index 0000000..dcbfaef
--- /dev/null
+++ b/store/RecordIndex.js
@@ -0,0 +1,12 @@
+class RecordIndex {
+ constructor (id) {
+ this.id = id
+ this._index = []
+ }
+
+ async updateIndex (oplog) {
+ // placeholder
+ }
+}
+
+module.exports = RecordIndex
diff --git a/store/RecordStore.js b/store/RecordStore.js
new file mode 100644
index 0000000..ff65442
--- /dev/null
+++ b/store/RecordStore.js
@@ -0,0 +1,94 @@
+const Store = require('orbit-db-store')
+
+const RecordIndex = require('./RecordIndex')
+const tracks = require('./type/tracks')
+const logs = require('./type/logs')
+const about = require('./type/about')
+
+const { loadEntryContent } = require('../utils')
+
+class RecordStore extends Store {
+ constructor (ipfs, id, dbname, options = {}) {
+ if (!options.indexBy) Object.assign(options, { indexBy: 'id' })
+ if (!options.Index) Object.assign(options, { Index: RecordIndex })
+ super(ipfs, id, dbname, options)
+ this._type = RecordStore.type
+
+ this.tracks = tracks(this)
+ this.logs = logs(this)
+ this.about = about(this)
+ this.beforePut = options.beforePut
+ this.afterWrite = options.afterWrite
+ }
+
+ async getEntryWithContent (hash) {
+ if (!hash) {
+ return undefined
+ }
+
+ const entry = await this.get(hash)
+ if (!entry) {
+ return undefined
+ }
+
+ return loadEntryContent(this._ipfs, entry)
+ }
+
+ async get (hash) {
+ if (!hash) {
+ return undefined
+ }
+
+ return this._oplog.get(hash) // async
+ }
+
+ async put (doc) {
+ if (!doc[this.options.indexBy]) {
+ throw new Error(`The provided document doesn't contain field '${this.options.indexBy}'`)
+ }
+
+ if (this.beforePut) {
+ await this.beforePut(doc, { id: this.id })
+ }
+
+ const entry = await this._addOperation({
+ op: 'PUT',
+ key: doc[this.options.indexBy],
+ value: doc
+ })
+
+ if (this.afterWrite) {
+ await this.afterWrite(entry)
+ }
+
+ await this._ipfs.pin.add(entry.hash, { recursive: false })
+
+ return entry
+ }
+
+ async del (id, type) {
+ if (type !== 'track' && type !== 'log') {
+ throw new Error(`Invalid type: ${type}`)
+ }
+
+ const entry = await this._addOperation({
+ op: 'DEL',
+ key: id,
+ value: { type, timestamp: Date.now() }
+ })
+
+ if (this.afterWrite) {
+ await this.afterWrite(entry)
+ }
+
+ await this._ipfs.pin.add(entry.hash, { recursive: false })
+
+ return entry.hash
+ }
+
+ static get type () {
+ return 'recordstore'
+ }
+}
+
+module.exports = RecordStore
diff --git a/store/index.js b/store/index.js
new file mode 100644
index 0000000..a9b491e
--- /dev/null
+++ b/store/index.js
@@ -0,0 +1,2 @@
+module.exports.RecordStore = require('./RecordStore')
+module.exports.ListensStore = require('./ListensStore')
diff --git a/store/type/about.js b/store/type/about.js
new file mode 100644
index 0000000..da849dd
--- /dev/null
+++ b/store/type/about.js
@@ -0,0 +1,13 @@
+const { AboutEntry } = require('../RecordEntry')
+const { loadEntryContent } = require('../../utils')
+
+module.exports = function (self) {
+ return {
+ put: async function (data) {
+ data.address = self.address.toString()
+ const recordEntry = await new AboutEntry().create(self._ipfs, data)
+ const logEntry = await self.put(recordEntry)
+ return loadEntryContent(self._ipfs, logEntry)
+ }
+ }
+}
diff --git a/store/type/logs.js b/store/type/logs.js
new file mode 100644
index 0000000..637127a
--- /dev/null
+++ b/store/type/logs.js
@@ -0,0 +1,14 @@
+const { LogEntry } = require('../RecordEntry')
+const { loadEntryContent } = require('../../utils')
+
+module.exports = function (self) {
+ return {
+ put: async function (data) {
+ const recordEntry = await new LogEntry().create(self._ipfs, data)
+ const logEntry = await self.put(recordEntry)
+ return loadEntryContent(self._ipfs, logEntry)
+ },
+
+ del: async (id) => self.del(id, 'log')
+ }
+}
diff --git a/store/type/tracks.js b/store/type/tracks.js
new file mode 100644
index 0000000..7a18c6b
--- /dev/null
+++ b/store/type/tracks.js
@@ -0,0 +1,14 @@
+const { TrackEntry } = require('../RecordEntry')
+const { loadEntryContent } = require('../../utils')
+
+module.exports = function (self) {
+ return {
+ put: async function (content, tags) {
+ const recordEntry = await new TrackEntry().create(self._ipfs, content, { tags })
+ const logEntry = await self.put(recordEntry)
+ return loadEntryContent(self._ipfs, logEntry)
+ },
+
+ del: async (id) => self.del(id, 'track')
+ }
+}
diff --git a/test/components.about.test.js b/test/components.about.test.js
new file mode 100644
index 0000000..36df4ef
--- /dev/null
+++ b/test/components.about.test.js
@@ -0,0 +1,52 @@
+/* global describe it before after */
+
+const assert = require('assert')
+const {
+ config,
+ startRecord
+} = require('./utils')
+
+describe('record.components', function () {
+ this.timeout(config.timeout)
+ let record
+
+ before(async () => ({ record } = await startRecord('0')))
+ after(async () => record && record.stop())
+
+ describe('record.components.about', function () {
+ let aboutEntry
+ const about = {
+ name: 'Test Node',
+ bio: 'a test node',
+ location: 'test world'
+ }
+
+ describe('add', function () {
+ it('contentCID', async function () {
+ aboutEntry = await record.about.set(about)
+ assert.ok(aboutEntry.contentCID)
+ })
+ })
+
+ describe('get', async function () {
+ it('contentCID', async function () {
+ const entry = await record.about.get(record.address)
+ assert.strictEqual(entry.contentCID, aboutEntry.contentCID)
+ })
+ })
+
+ describe('add duplicate', async function () {
+ let duplicateEntry
+ before(async () => { duplicateEntry = await record.about.set(about) })
+
+ it('contentCID', function () {
+ assert.strictEqual(duplicateEntry.contentCID, aboutEntry.contentCID)
+ })
+
+ it('duplicate detected', function () {
+ const log = record.log.mine()
+ assert.strictEqual(log._oplog.length, 1)
+ })
+ })
+ })
+})
diff --git a/test/components.importer.js b/test/components.importer.js
new file mode 100644
index 0000000..e2ce881
--- /dev/null
+++ b/test/components.importer.js
@@ -0,0 +1,83 @@
+/* global describe it beforeEach afterEach */
+
+const assert = require('assert')
+const path = require('path')
+const {
+ config,
+ startRecord
+} = require('./utils')
+
+describe('record', function () {
+ this.timeout(config.timeout)
+ let record
+
+ beforeEach(async () => {
+ try {
+ ({ record } = await startRecord('0'))
+ } catch (error) {
+ console.log(error)
+ }
+ })
+ afterEach(async () => record && record.stop())
+
+ describe('components.importer', function () {
+ const filepath = path.join(__dirname, 'fixtures/tracks/Dj Falcon And Thomas Bangalter - So Much Love To Give(Original Mix).mp3')
+ const dirpath = path.join(__dirname, 'fixtures/tracks/')
+ const startImporter = (filepath) => new Promise((resolve, reject) => {
+ const events = []
+ record.on('redux', ({ type, payload }) => {
+ switch (type) {
+ case 'IMPORTER_FINISHED':
+ events.push({ type, payload })
+ return resolve(events)
+
+ case 'IMPORTER_PROCESSED_FILE':
+ return events.push({ type, payload })
+ }
+ })
+ record.importer.add(filepath)
+ })
+
+ it('add file', async () => {
+ const events = await startImporter(filepath)
+
+ const processedEvents = events.filter(e => e.type === 'IMPORTER_PROCESSED_FILE')
+ const finishedEvents = events.filter(e => e.type === 'IMPORTER_FINISHED')
+ assert.strictEqual(events.length, 2)
+ assert.strictEqual(processedEvents.length, 1)
+ assert.strictEqual(finishedEvents.length, 1)
+
+ assert.strictEqual(processedEvents[0].payload.completed, 1)
+ assert.strictEqual(processedEvents[0].payload.remaining, 0)
+ assert.notStrictEqual(processedEvents[0].payload.trackId, undefined)
+
+ const tracks = await record.tracks.list({ addresses: [record.address] })
+
+ assert.strictEqual(tracks.length, 1)
+ assert.strictEqual(processedEvents[0].payload.trackId, tracks[0].id)
+ })
+
+ it('add directory', async () => {
+ const events = await startImporter(dirpath)
+
+ const processedEvents = events.filter(e => e.type === 'IMPORTER_PROCESSED_FILE')
+ const finishedEvents = events.filter(e => e.type === 'IMPORTER_FINISHED')
+ assert.strictEqual(events.length, 3)
+ assert.strictEqual(processedEvents.length, 2)
+ assert.strictEqual(finishedEvents.length, 1)
+
+ assert.strictEqual(processedEvents[0].payload.completed, 1)
+ assert.strictEqual(processedEvents[0].payload.remaining, 1)
+ assert.notStrictEqual(processedEvents[0].payload.trackId, undefined)
+
+ assert.strictEqual(processedEvents[1].payload.completed, 2)
+ assert.strictEqual(processedEvents[1].payload.remaining, 0)
+ assert.notStrictEqual(processedEvents[1].payload.trackId, undefined)
+
+ const tracks = await record.tracks.list({ addresses: [record.address] })
+
+ assert.strictEqual(tracks.length, 2)
+ assert.strictEqual(processedEvents[1].payload.trackId, tracks[0].id)
+ })
+ })
+})
diff --git a/test/components.listens.test.js b/test/components.listens.test.js
new file mode 100644
index 0000000..7f48f31
--- /dev/null
+++ b/test/components.listens.test.js
@@ -0,0 +1,75 @@
+/* global describe it beforeEach afterEach */
+
+const assert = require('assert')
+const {
+ config,
+ startRecord
+} = require('./utils')
+
+describe('record', function () {
+ this.timeout(config.timeout)
+ let record
+
+ beforeEach(async () => ({ record } = await startRecord('0')))
+ afterEach(async () => record && record.stop())
+
+ describe('components.listens', function () {
+ const trackId = 'trackId'
+ const cid = 'trackCID'
+ it('add + get listen', async () => {
+ await record.listens.add({ trackId, address: record.address, cid })
+ const listens = await record._listens.list()
+ assert.strictEqual(listens.length, 1)
+ assert.strictEqual(listens[0].trackId, trackId)
+ assert.strictEqual(listens[0].address, record.address)
+
+ const count = await record.listens.getCount(trackId)
+ assert.strictEqual(count.trackId, trackId)
+ assert.strictEqual(count.count, 1)
+ })
+
+ it('add multiple + get count', async () => {
+ const limit = 4
+ for (let i = 0; i < limit; i++) {
+ await record.listens.add({ trackId, address: record.address, cid })
+ }
+
+ const results = await record.listens.getCount(trackId)
+ assert.strictEqual(results.trackId, trackId)
+ assert.strictEqual(results.count, limit)
+
+ const trackId2 = 'trackId2'
+ for (let i = 0; i < limit; i++) {
+ await record.listens.add({ trackId: trackId2, address: record.address, cid })
+ }
+
+ const result2 = await record.listens.getCount(trackId2)
+ assert.strictEqual(result2.trackId, trackId2)
+ assert.strictEqual(result2.count, limit)
+
+ const result3 = await record._listens.list()
+ assert.strictEqual(result3.length, limit * 2)
+ assert.strictEqual(result3[0].trackId, trackId2)
+ assert.strictEqual(result3[result3.length - 1].trackId, trackId)
+ })
+
+ it('add 100 listens', async () => {
+ const listenLimit = 100
+ for (let i = 0; i < listenLimit; i++) {
+ await record.listens.add({ trackId: `trackId${i}`, address: record.address, cid })
+ }
+
+ const limit = 20
+ let result = await record._listens.list({ limit })
+ assert.strictEqual(result.length, 20)
+ assert.strictEqual(result[0].trackId, `trackId${listenLimit - 1}`)
+
+ result = await record._listens.list({ start: limit, limit })
+ assert.strictEqual(result.length, 20)
+ assert.strictEqual(result[0].trackId, `trackId${(listenLimit - limit) - 1}`)
+ })
+
+ // TODO (medium) - test list
+ // TODO (high) - test list with missing cids
+ })
+})
diff --git a/test/components.log.test.js b/test/components.log.test.js
new file mode 100644
index 0000000..f2aa365
--- /dev/null
+++ b/test/components.log.test.js
@@ -0,0 +1,94 @@
+/* global describe it before after */
+
+const assert = require('assert')
+const {
+ config,
+ startRecord,
+ connectNode
+} = require('./utils')
+
+describe('record.components', function () {
+ this.timeout(config.timeout)
+ let record1, record2
+
+ before(async () => {
+ // eslint-disable-next-line
+ ({ record: record1 } = await startRecord('0'));
+ // eslint-disable-next-line
+ ({ record: record2 } = await startRecord('1'));
+ await connectNode(record1, record2)
+ })
+ after(async () => {
+ try {
+ record1 && await record1.stop()
+ record2 && await record2.stop()
+ } catch (e) {
+ console.log(e)
+ }
+ })
+
+ describe('record.components.log', function () {
+ it('mine', function () {
+ const log = record1.log.mine()
+ assert.strictEqual(log.address.toString(), record1.address)
+ })
+
+ it('isMine', async function () {
+ const log = await record1.log.get(record1.address)
+ const isMine = record1.log.isMine(log)
+ assert.strictEqual(isMine, true)
+ })
+
+ it('isOpen', function () {
+ const isOpen = record1.log.isOpen(record1.address)
+ assert.strictEqual(isOpen, true)
+ })
+
+ it('canAppend', async function () {
+ const canAppend1 = await record1.log.canAppend(record1.address)
+ assert.strictEqual(canAppend1, true)
+ const canAppend2 = await record1.log.canAppend(record2.address)
+ assert.strictEqual(canAppend2, false)
+ })
+
+ it('getManifest', async function () {
+ const addr = record1.parseAddress(record1.address)
+ const manifest = await record1.log.getManifest(addr.root)
+ assert.strictEqual(manifest.name, 'record')
+ assert.strictEqual(manifest.type, 'recordstore')
+ assert.strictEqual(manifest.accessController.substring(0, 6), '/ipfs/')
+ })
+
+ it('getLocalAddresses', async function () {
+ const addresses = await record1.log.getLocalAddresses()
+ assert.strictEqual(addresses.length, 1)
+ assert.strictEqual(addresses[0], record2.address)
+ })
+
+ describe('get', function () {
+ it('no address given', async function () {
+ const log = await record1.log.get()
+ assert.strictEqual(log.address.toString(), record1.address)
+ })
+
+ it('address given', async function () {
+ const log = await record1.log.get(record1.address)
+ assert.strictEqual(log.address.toString(), record1.address)
+ })
+ })
+
+ describe('errors', function () {
+ it('throws an error if given invalid OrbitDB address', async function () {
+ let error
+ const address = 'invalid address'
+ try {
+ await record1.log.get(address, { create: true })
+ } catch (e) {
+ error = e.toString()
+ }
+
+ assert.strictEqual(error, `Error: ${address} is not a valid log name`)
+ })
+ })
+ })
+})
diff --git a/test/components.logs.connect.test.js b/test/components.logs.connect.test.js
new file mode 100644
index 0000000..5b0df9c
--- /dev/null
+++ b/test/components.logs.connect.test.js
@@ -0,0 +1,88 @@
+/* global describe it beforeEach afterEach */
+
+const assert = require('assert')
+const {
+ config,
+ startRecord,
+ connectNode
+} = require('./utils')
+
+describe('record.components.logs.connect', function () {
+ this.timeout(config.timeout)
+ let record1, record2
+
+ beforeEach(async () => {
+ // eslint-disable-next-line
+ ({ record: record1 } = await startRecord('0'));
+ // eslint-disable-next-line
+ ({ record: record2 } = await startRecord('1'));
+ await connectNode(record1, record2)
+ })
+
+ afterEach(async () => {
+ try {
+ record1 && await record1.stop()
+ record2 && await record2.stop()
+ } catch (e) {
+ console.log(e)
+ }
+ })
+
+ it('connect + isReplicating', async function () {
+ await record1.logs.link({ linkAddress: record2.address })
+ await record1.logs.connect(record2.address)
+ const isReplicating = await record1.logs.isReplicating(record2.address)
+ assert.strictEqual(isReplicating, true)
+ })
+
+ it('connect + add + has + isReplicating', async function () {
+ await record1.logs.connect(record2.address)
+ const linkedLog = await record1.logs.link({ linkAddress: record2.address })
+ const has = await record1.logs.has(record1.address, linkedLog.content.address)
+ const isReplicating = await record1.logs.isReplicating(record2.address)
+ assert.strictEqual(isReplicating, true)
+ assert.strictEqual(has, true)
+ })
+
+ it('connect + add + remove + disconnect + has + isReplicating', async function () {
+ await record1.logs.connect(record2.address)
+ const linkedLog = await record1.logs.link({ linkAddress: record2.address })
+ await record1.logs.unlink(linkedLog.content.address)
+ await record1.logs.disconnect(record2.address)
+ const has = await record1.logs.has(record1.address, linkedLog.content.address)
+ const isReplicating = await record1.logs.isReplicating(record2.address)
+ assert.strictEqual(isReplicating, false)
+ assert.strictEqual(has, false)
+ // TODO (medium) check pubsub subscriptions
+ // TODO (medium) check log OrbitDB replicator
+ })
+
+ it('connect + disconnect + add + has + isReplicating', async function () {
+ await record1.logs.connect(record2.address)
+ await record1.logs.disconnect(record2.address)
+ const linkedLog = await record1.logs.link({ linkAddress: record2.address })
+ const has = await record1.logs.has(record1.address, linkedLog.content.address)
+ const isReplicating = await record1.logs.isReplicating(record2.address)
+ assert.strictEqual(isReplicating, false)
+ assert.strictEqual(has, true)
+ // TODO (medium) check pubsub subscriptions
+ // TODO (medium) check log OrbitDB replicator
+ })
+
+ it('disconnect + has + isReplicating', async function () {
+ await record1.logs.disconnect(record2.address)
+ const has = await record1.logs.has(record1.address, record2.address)
+ const isReplicating = await record1.logs.isReplicating(record2.address)
+ assert.strictEqual(isReplicating, false)
+ assert.strictEqual(has, false)
+ // TODO (medium) check pubsub subscriptions
+ // TODO (medium) check log OrbitDB replicator
+ })
+
+ // TODO (high)
+ /* describe('errors', function () {
+ * it('invalid address', async function () {
+
+ * })
+ * }) */
+})
diff --git a/test/components.logs.remove.test.js b/test/components.logs.remove.test.js
new file mode 100644
index 0000000..71239a5
--- /dev/null
+++ b/test/components.logs.remove.test.js
@@ -0,0 +1,16 @@
+/* global describe */
+
+describe('record.components.logs.remove', function () {
+ // before
+ // after
+
+ describe('audio & artwork pin', async () => {
+ // TODO (medium) make sure audio & artwork pin is removed
+ // TODO (medium) make sure non-exclusive audio & artwork is not removed
+ })
+
+ describe('resolver', async () => {
+ // TODO (medium) make sure resolver is removed
+ // TODO (medium) make sure non-exclusive resolver is not removed
+ })
+})
diff --git a/test/components.logs.test.js b/test/components.logs.test.js
new file mode 100644
index 0000000..a2cc9b9
--- /dev/null
+++ b/test/components.logs.test.js
@@ -0,0 +1,97 @@
+/* global describe it before after */
+
+const assert = require('assert')
+const {
+ config,
+ startRecord,
+ connectNode
+} = require('./utils')
+
+describe('record.components.logs', function () {
+ this.timeout(config.timeout)
+ let record1, record2, link
+
+ before(async () => {
+ // eslint-disable-next-line
+ ({ record: record1 } = await startRecord('0'));
+ // eslint-disable-next-line
+ ({ record: record2 } = await startRecord('1'));
+ await connectNode(record1, record2)
+
+ link = {
+ linkAddress: record2.address,
+ alias: 'test node2'
+ }
+ })
+
+ after(async () => {
+ try {
+ record1 && await record1.stop()
+ record2 && await record2.stop()
+ } catch (e) {
+ console.log(e)
+ }
+ })
+
+ describe('record.logs.add', function () {
+ it('add + list', async function () {
+ const linkedLog = await record1.logs.link(link)
+ assert.strictEqual(linkedLog.content.address, record2.address)
+
+ const linkedLogs = await record1.logs.list()
+ assert.strictEqual(linkedLogs[0].content.address, record2.address)
+ assert.strictEqual(linkedLogs.length, 1)
+ })
+
+ it('duplicate + list', async function () {
+ await record1.logs.link(link)
+ const linkedLogs = await record1.logs.list()
+ assert.strictEqual(linkedLogs.length, 1)
+ assert.strictEqual(record1._log._oplog.length, 1)
+ })
+
+ it('remove + list', async function () {
+ await record1.logs.unlink(link.linkAddress)
+ const linkedLogs = await record1.logs.list()
+ assert.strictEqual(linkedLogs.length, 0)
+ assert.strictEqual(record1._log._oplog.length, 2)
+ })
+
+ it('re-add + list', async function () {
+ await record1.logs.link(link)
+ const linkedLogs = await record1.logs.list()
+ assert.strictEqual(linkedLogs.length, 1)
+ assert.strictEqual(record1._log._oplog.length, 3)
+ })
+
+ it('rename + list', async function () {
+ const newAlias = 'test node2 rename'
+ await record1.logs.link({ ...link, alias: newAlias })
+ const linkedLogs = await record1.logs.list()
+ assert.strictEqual(linkedLogs.length, 1)
+ assert.strictEqual(record1._log._oplog.length, 4)
+ })
+
+ describe('errors', function () {
+ it('add yourself', async function () {
+ let error
+ try {
+ await record1.logs.link({ linkAddress: record1.address })
+ } catch (e) {
+ error = e
+ }
+ assert.ok(error)
+ })
+
+ it('invalid address', async function () {
+ let error
+ try {
+ await record1.logs.link({ linkAddress: 'invalid address' })
+ } catch (e) {
+ error = e
+ }
+ assert.ok(error)
+ })
+ })
+ })
+})
diff --git a/test/components.tags.test.js b/test/components.tags.test.js
new file mode 100644
index 0000000..488cc90
--- /dev/null
+++ b/test/components.tags.test.js
@@ -0,0 +1,160 @@
+/* global describe it before after */
+
+const assert = require('assert')
+const path = require('path')
+const {
+ config,
+ startRecord,
+ connectNode
+} = require('./utils')
+
+describe('record.components', function () {
+ this.timeout(config.timeout)
+ let record1, record2
+
+ before(async () => {
+ // eslint-disable-next-line
+ ({ record: record1 } = await startRecord('0'));
+ // eslint-disable-next-line
+ ({ record: record2 } = await startRecord('1'));
+ await connectNode(record1, record2)
+ })
+
+ after(async () => {
+ record1 && await record1.stop()
+ record2 && await record2.stop()
+ })
+
+ describe('record.components.tags', function () {
+ let track1
+ const tagName1 = 'hello world'
+ const tagName2 = 'hello dance'
+ const tagName3 = 'hello disco'
+ const tagName4 = 'hello dark'
+ const filepath1 = path.join(__dirname, 'fixtures/tracks/Dj Falcon And Thomas Bangalter - So Much Love To Give(Original Mix).mp3')
+
+ describe('add', async function () {
+ it('list', async () => {
+ track1 = await record1.tracks.addTrackFromFile(filepath1)
+ const track = await record2.tags.add(track1.contentCID, tagName1)
+ const tracks = await record2.tracks.list({ addresses: [record2.address] })
+ const tags = await record2.tags.list(record2.address)
+ assert.strictEqual(track.tags.length, 1)
+ assert.strictEqual(track.tags[0].tag, tagName1)
+ assert.strictEqual(tags.length, 1)
+ assert.strictEqual(tracks.length, 1)
+ assert.strictEqual(tracks[0].tags.length, 1)
+ assert.strictEqual(tracks[0].tags[0].tag, tagName1)
+ assert.strictEqual(record2._log._oplog.length, 1)
+ })
+
+ it('index', async () => {
+ const tags = await record2._db('tags')
+ assert.strictEqual(tags.length, 1)
+ const tag = tags[0]
+ assert.strictEqual(tag.address, record2.address)
+ assert.strictEqual(tag.trackid, track1.id)
+ assert.strictEqual(tag.tag, tagName1)
+ })
+ })
+
+ describe('delete', async function () {
+ it('list', async () => {
+ const track = await record2.tags.remove(track1.id, tagName1)
+ const tracks = await record2.tracks.list({ addresses: [record2.address] })
+ const tags = await record2.tags.list(record2.address)
+ assert.strictEqual(track.tags.length, 0)
+ assert.strictEqual(tags.length, 0)
+ assert.strictEqual(tracks.length, 1)
+ assert.strictEqual(tracks[0].tags.length, 0)
+ assert.strictEqual(tracks[0].tags.find(t => t.tag === tagName1), undefined)
+ })
+
+ it('index', async () => {
+ const tags = await record2._db('tags')
+ assert.strictEqual(tags.length, 0)
+ })
+ })
+
+ describe('re-add', async function () {
+ it('list', async () => {
+ const track = await record2.tags.add(track1.contentCID, tagName1)
+ const tracks = await record2.tracks.list({ addresses: [record2.address] })
+ const tags = await record2.tags.list(record2.address)
+ assert.strictEqual(track.tags.length, 1)
+ assert.strictEqual(track.tags[0].tag, tagName1)
+ assert.strictEqual(tags.length, 1)
+ assert.strictEqual(tracks.length, 1)
+ assert.strictEqual(tracks[0].tags.length, 1)
+ assert.strictEqual(tracks[0].tags[0].tag, tagName1)
+ })
+
+ it('index', async () => {
+ const tags = await record2._db('tags')
+ assert.strictEqual(tags.length, 1)
+ const tag = tags[0]
+ assert.strictEqual(tag.address, record2.address)
+ assert.strictEqual(tag.trackid, track1.id)
+ assert.strictEqual(tag.tag, tagName1)
+ })
+ })
+
+ describe('multiple', async function () {
+ it('list', async () => {
+ await record2.tags.add(track1.contentCID, tagName2)
+ await record2.tags.add(track1.contentCID, tagName3)
+ const tag4 = await record2.tags.add(track1.contentCID, tagName4)
+ const tracks = await record2.tracks.list({ addresses: [record2.address] })
+ const tags = await record2.tags.list(record2.address)
+ assert.strictEqual(tag4.tags.length, 4)
+ assert.strictEqual(tracks[0].tags.some(t => t.tag === tagName2), true)
+ assert.strictEqual(tracks[0].tags.some(t => t.tag === tagName3), true)
+ assert.strictEqual(tracks[0].tags.some(t => t.tag === tagName4), true)
+ assert.strictEqual(tags.length, 4)
+ assert.strictEqual(tracks.length, 1)
+ })
+
+ it('index', async () => {
+ const tags = await record2._db('tags')
+ assert.strictEqual(tags.length, 4)
+ const tag = tags[3]
+ assert.strictEqual(tag.address, record2.address)
+ assert.strictEqual(tag.trackid, track1.id)
+ assert.strictEqual(tag.tag, tagName4)
+ })
+ })
+
+ describe('remove one', async function () {
+ it('list', async () => {
+ const track = await record2.tags.remove(track1.id, tagName2)
+ const tracks = await record2.tracks.list({ addresses: [record2.address] })
+ const tags = await record2.tags.list(record2.address)
+ assert.strictEqual(track.tags.length, 3)
+ assert.strictEqual(tags.length, 3)
+ assert.strictEqual(tracks.length, 1)
+ assert.strictEqual(tracks[0].tags.length, 3)
+ assert.strictEqual(tracks[0].tags.some(t => t.tag === tagName1), true)
+ assert.strictEqual(tracks[0].tags.some(t => t.tag === tagName2), false)
+ assert.strictEqual(tracks[0].tags.some(t => t.tag === tagName3), true)
+ assert.strictEqual(tracks[0].tags.some(t => t.tag === tagName4), true)
+ })
+
+ it('index', async () => {
+ const tags = await record2._db('tags')
+ assert.strictEqual(tags.length, 3)
+ const tagNames = tags.map(t => t.tag)
+ assert.strictEqual(tagNames.includes(tagName2), false)
+ })
+ })
+
+ it('duplicate', async function () {
+ // TODO (high) add test to detect duplicate tags
+ // TODO (high) assert oplog length
+ })
+
+ it('reordered duplicate', async function () {
+ // TODO (high) add test to detect duplicate tags in shifted order
+ // TODO (high) assert oplog length
+ })
+ })
+})
diff --git a/test/components.track.add.test.js b/test/components.track.add.test.js
new file mode 100644
index 0000000..3b8a95b
--- /dev/null
+++ b/test/components.track.add.test.js
@@ -0,0 +1,274 @@
+/* global describe it before after */
+
+const path = require('path')
+const assert = require('assert')
+const {
+ config,
+ startRecord
+} = require('./utils')
+
+describe('record.components.track.add', function () {
+ this.timeout(config.timeout)
+ let record
+
+ before(async () => ({ record } = await startRecord('0')))
+ after(async () => record && record.stop())
+
+ describe('record.components.track.addTrackFromFile', function () {
+ let track1
+ const filepath1 = path.join(__dirname, 'fixtures/tracks/Dj Falcon And Thomas Bangalter - So Much Love To Give(Original Mix).mp3')
+ const filepath2 = path.join(__dirname, 'fixtures/tracks/8000 (Clouds Remix).mp3')
+
+ describe('add', async function () {
+ it('added with log length of 1', async function () {
+ track1 = await record.tracks.addTrackFromFile(filepath1)
+ assert.notStrictEqual(track1, undefined)
+ assert.strictEqual(track1.type, 'track')
+ assert.strictEqual(record._log._oplog.length, 1)
+ assert.strictEqual(track1.content.audio.duration, 644.7804081632653)
+ })
+
+ it('entries index', async () => {
+ const entries = await record._db('entries')
+ assert.strictEqual(entries.length, 1)
+ const entry = entries[0]
+ assert.strictEqual(entry.address, record.address)
+ // assert.strictEqual(entry.hash, track1)
+ assert.strictEqual(entry.type, 'track')
+ assert.strictEqual(entry.op, 'PUT')
+ assert.strictEqual(entry.clock, 1)
+ assert.strictEqual(entry.key, '0db212b18c9093b6d77090e4764d3f2210c091fafda6d8f11e5d937575ffb2c0')
+ assert.strictEqual(entry.cid, 'zBwWX7a3zJnTHiSM5SrTRS2XnavGF42zHq5Fom3hxmxs7zAgfRcsiNeuUJtAqmkGTsFzXLVNvFxc1dABnRUqVjGSxfa3d')
+ })
+
+ it('tracks index', async () => {
+ const tracks = await record._db('tracks')
+ assert.strictEqual(tracks.length, 1)
+ const track = tracks[0]
+ assert.strictEqual(track.address, record.address)
+ assert.strictEqual(track.id, '0db212b18c9093b6d77090e4764d3f2210c091fafda6d8f11e5d937575ffb2c0')
+ assert.strictEqual(track.title, 'So Much Love To Give(Original Mix)')
+ assert.strictEqual(track.artist, 'Dj Falcon And Thomas Bangalter')
+ assert.strictEqual(track.artists, 'Dj Falcon And Thomas Bangalter')
+ assert.strictEqual(track.albumartist, null)
+ assert.strictEqual(track.album, null)
+ assert.strictEqual(track.remixer, null)
+ assert.strictEqual(track.bpm, null)
+ assert.strictEqual(track.duration, 644.7804081632653)
+ assert.strictEqual(track.bitrate, 192000)
+ })
+
+ it('contentCID', function () {
+ assert.strictEqual(track1.contentCID, 'zBwWX7a3zJnTHiSM5SrTRS2XnavGF42zHq5Fom3hxmxs7zAgfRcsiNeuUJtAqmkGTsFzXLVNvFxc1dABnRUqVjGSxfa3d')
+ })
+
+ it('audio file hash', function () {
+ assert.strictEqual(track1.content.hash, 'QmQNBMWZexMA2EEhsc7BMoqnjWRqf5irXk6osNnh7oqNjS')
+ })
+ })
+
+ describe('get', async function () {
+ let track
+ before(async () => { track = await record.tracks.get({ address: record.address, trackId: track1.id }) })
+
+ it('contentCID', function () {
+ assert.strictEqual(track.contentCID, track1.contentCID)
+ })
+
+ it('audio file hash', function () {
+ assert.strictEqual(track.content.hash, track1.content.hash)
+ })
+ })
+
+ describe('list', async function () {
+ let tracks
+ before(async () => { tracks = await record.tracks.list({ addresses: [record.address] }) })
+
+ it('has one track', function () {
+ assert.strictEqual(tracks.length, 1)
+ })
+
+ it('contentCID', function () {
+ assert.strictEqual(tracks[0].contentCID, track1.contentCID)
+ })
+
+ it('audio file hash', function () {
+ assert.strictEqual(tracks[0].content.hash, track1.content.hash)
+ })
+ })
+
+ describe('add duplicate', async function () {
+ let track
+ before(async () => { track = await record.tracks.addTrackFromFile(filepath1) })
+
+ it('duplicate detected', async function () {
+ assert.notStrictEqual(track1, undefined)
+ assert.strictEqual(track1.type, 'track')
+ assert.strictEqual(record._log._oplog.length, 1)
+ // TODO (high) assert oplog length
+ })
+
+ it('entries index', async () => {
+ const entries = await record._db('entries')
+ assert.strictEqual(entries.length, 1)
+ const entry = entries[0]
+ assert.strictEqual(entry.address, record.address)
+ // assert.strictEqual(entry.hash, track1)
+ assert.strictEqual(entry.type, 'track')
+ assert.strictEqual(entry.op, 'PUT')
+ assert.strictEqual(entry.clock, 1)
+ assert.strictEqual(entry.key, '0db212b18c9093b6d77090e4764d3f2210c091fafda6d8f11e5d937575ffb2c0')
+ assert.strictEqual(entry.cid, 'zBwWX7a3zJnTHiSM5SrTRS2XnavGF42zHq5Fom3hxmxs7zAgfRcsiNeuUJtAqmkGTsFzXLVNvFxc1dABnRUqVjGSxfa3d')
+ })
+
+ it('tracks index', async () => {
+ const tracks = await record._db('tracks')
+ assert.strictEqual(tracks.length, 1)
+ const track = tracks[0]
+ assert.strictEqual(track.address, record.address)
+ assert.strictEqual(track.id, '0db212b18c9093b6d77090e4764d3f2210c091fafda6d8f11e5d937575ffb2c0')
+ assert.strictEqual(track.title, 'So Much Love To Give(Original Mix)')
+ assert.strictEqual(track.artist, 'Dj Falcon And Thomas Bangalter')
+ assert.strictEqual(track.artists, 'Dj Falcon And Thomas Bangalter')
+ assert.strictEqual(track.albumartist, null)
+ assert.strictEqual(track.album, null)
+ assert.strictEqual(track.remixer, null)
+ assert.strictEqual(track.bpm, null)
+ assert.strictEqual(track.duration, 644.7804081632653)
+ assert.strictEqual(track.bitrate, 192000)
+ })
+
+ it('list includes one track', async function () {
+ const tracks = await record.tracks.list({ addresses: [record.address] })
+ assert.strictEqual(tracks.length, 1)
+ })
+
+ it('contentCID', function () {
+ assert.strictEqual(track.contentCID, track1.contentCID)
+ })
+
+ it('audio file hash', function () {
+ assert.strictEqual(track.content.hash, track1.content.hash)
+ })
+ })
+
+ describe('remove track', async function () {
+ before(async () => { await record.tracks.remove(track1.id) })
+
+ it('list doesnt include track', async function () {
+ const tracks = await record.tracks.list({ addresses: [record.address] })
+ assert.strictEqual(tracks.length, 0)
+ })
+
+ it('entries index', async () => {
+ const entries = await record._db('entries')
+ assert.strictEqual(entries.length, 0)
+ })
+
+ it('tracks index', async () => {
+ const tracks = await record._db('tracks')
+ assert.strictEqual(tracks.length, 0)
+ })
+ })
+
+ describe('re-add track', async function () {
+ let track
+ before(async () => { track = await record.tracks.addTrackFromFile(filepath1) })
+
+ it('track added', async function () {
+ assert.notStrictEqual(track, undefined)
+ assert.strictEqual(track.type, 'track')
+ assert.strictEqual(record._log._oplog.length, 3)
+ assert.strictEqual(track.content.audio.duration, 644.7804081632653)
+ })
+
+ it('entries index', async () => {
+ const entries = await record._db('entries')
+ assert.strictEqual(entries.length, 1)
+ const entry = entries[0]
+ assert.strictEqual(entry.address, record.address)
+ // assert.strictEqual(entry.hash, track1)
+ assert.strictEqual(entry.type, 'track')
+ assert.strictEqual(entry.op, 'PUT')
+ assert.strictEqual(entry.clock, 3)
+ assert.strictEqual(entry.key, '0db212b18c9093b6d77090e4764d3f2210c091fafda6d8f11e5d937575ffb2c0')
+ assert.strictEqual(entry.cid, 'zBwWX7a3zJnTHiSM5SrTRS2XnavGF42zHq5Fom3hxmxs7zAgfRcsiNeuUJtAqmkGTsFzXLVNvFxc1dABnRUqVjGSxfa3d')
+ })
+
+ it('tracks index', async () => {
+ const tracks = await record._db('tracks')
+ assert.strictEqual(tracks.length, 1)
+ const track = tracks[0]
+ assert.strictEqual(track.address, record.address)
+ assert.strictEqual(track.id, '0db212b18c9093b6d77090e4764d3f2210c091fafda6d8f11e5d937575ffb2c0')
+ assert.strictEqual(track.title, 'So Much Love To Give(Original Mix)')
+ assert.strictEqual(track.artist, 'Dj Falcon And Thomas Bangalter')
+ assert.strictEqual(track.artists, 'Dj Falcon And Thomas Bangalter')
+ assert.strictEqual(track.albumartist, null)
+ assert.strictEqual(track.album, null)
+ assert.strictEqual(track.remixer, null)
+ assert.strictEqual(track.bpm, null)
+ assert.strictEqual(track.duration, 644.7804081632653)
+ assert.strictEqual(track.bitrate, 192000)
+ })
+
+ it('contentCID', function () {
+ assert.strictEqual(track.contentCID, 'zBwWX7a3zJnTHiSM5SrTRS2XnavGF42zHq5Fom3hxmxs7zAgfRcsiNeuUJtAqmkGTsFzXLVNvFxc1dABnRUqVjGSxfa3d')
+ })
+
+ it('audio file hash', function () {
+ assert.strictEqual(track.content.hash, 'QmQNBMWZexMA2EEhsc7BMoqnjWRqf5irXk6osNnh7oqNjS')
+ })
+ })
+
+ describe('add new track', async function () {
+ let track
+ before(async () => { track = await record.tracks.addTrackFromFile(filepath2) })
+
+ it('track added', async function () {
+ assert.notStrictEqual(track, undefined)
+ assert.strictEqual(track.type, 'track')
+ assert.strictEqual(record._log._oplog.length, 4)
+ assert.strictEqual(track.content.audio.duration, 361.97877551020406)
+ })
+
+ it('entries index', async () => {
+ const entries = await record._db('entries')
+ assert.strictEqual(entries.length, 2)
+ const entry = entries[1]
+ assert.strictEqual(entry.address, record.address)
+ // assert.strictEqual(entry.hash, track1)
+ assert.strictEqual(entry.type, 'track')
+ assert.strictEqual(entry.op, 'PUT')
+ assert.strictEqual(entry.clock, 4)
+ assert.strictEqual(entry.key, 'bc48ea541d77cf4957e4081d61a771f7f18fc72753cc5c55cae0c8ed76e7109b')
+ assert.strictEqual(entry.cid, 'zBwWX7RGxWSQV43w8JB7abwsV1j5HqGZL8BYbTqRTh8CZBe9D68foYWk4xjXr9ChF9zNgXWejTk89c5Sa3ho2iYdb45WN')
+ })
+
+ it('tracks index', async () => {
+ const tracks = await record._db('tracks')
+ assert.strictEqual(tracks.length, 2)
+ const track = tracks[1]
+ assert.strictEqual(track.address, record.address)
+ assert.strictEqual(track.id, 'bc48ea541d77cf4957e4081d61a771f7f18fc72753cc5c55cae0c8ed76e7109b')
+ assert.strictEqual(track.title, '8000 (Clouds Remix)')
+ assert.strictEqual(track.artist, 'Proxy')
+ assert.strictEqual(track.artists, 'Proxy')
+ assert.strictEqual(track.albumartist, null)
+ assert.strictEqual(track.album, null)
+ assert.strictEqual(track.remixer, null)
+ assert.strictEqual(track.bpm, null)
+ assert.strictEqual(track.duration, 361.97877551020406)
+ assert.strictEqual(track.bitrate, 320000)
+ })
+
+ it('contentCID', function () {
+ assert.strictEqual(track.contentCID, 'zBwWX7RGxWSQV43w8JB7abwsV1j5HqGZL8BYbTqRTh8CZBe9D68foYWk4xjXr9ChF9zNgXWejTk89c5Sa3ho2iYdb45WN')
+ })
+
+ it('audio file hash', function () {
+ assert.strictEqual(track.content.hash, 'QmUBX28q1teBSUMmvnbCDfXtYgM7kLqkjrWRrzeQx2qPoB')
+ })
+ })
+ })
+})
diff --git a/test/components.track.list.test.js b/test/components.track.list.test.js
new file mode 100644
index 0000000..f21108c
--- /dev/null
+++ b/test/components.track.list.test.js
@@ -0,0 +1,174 @@
+/* global describe it before after */
+
+const assert = require('assert')
+const {
+ config,
+ startRecord,
+ createTrack
+} = require('./utils')
+
+describe('record.components.track.list', function () {
+ this.timeout(config.timeout)
+ let record
+ const count = 20
+ const artists = [
+ 'Clouds',
+ 'Fake Blood',
+ 'Boys Noize',
+ 'The Chemical Brothers',
+ 'Kris Menace',
+ 'Amtrac',
+ 'Todd Terje',
+ 'Siriusmo',
+ 'Monarchy',
+ 'SebastiAn',
+ 'Tensnake',
+ 'Azari & III',
+ 'Jimmy Edgar',
+ 'Aeroplane',
+ 'Yelle',
+ 'Danger',
+ 'Nero',
+ 'Nadastrom',
+ 'Robyn',
+ 'U-Tern'
+ ]
+
+ before(async () => {
+ // eslint-disable-next-line
+ ({ record } = await startRecord('0'));
+
+ for (let i = 0; i < count; i++) {
+ process.stdout.write(`\rPreparing - Writing: ${i}/${count}`)
+ const options = {
+ title: `${artists[i]}`, // TODO (low) use title fixtures
+ artist: `${artists[i]}`,
+ album: `${artists[i]}`, // TODO (low) use album fixtures
+ bpm: i,
+ duration: i,
+ bitrate: i
+ }
+ await record.tracks.add(createTrack(`Hello${i}`, options))
+ }
+ })
+ after(async () => record && record.stop())
+
+ describe('order', function () {
+ it('list', async () => {
+ const tracks = await record.tracks.list({ addresses: [record.address] })
+ assert.strictEqual(tracks.length, count)
+ assert.strictEqual(tracks[3].content.tags.title, artists[count - 4])
+ assert.strictEqual(tracks[0].content.tags.title, artists[count - 1])
+ })
+ })
+
+ describe('sort', function () {
+ // TODO (high) add asc
+
+ it('artist', async () => {
+ const tracks = await record.tracks.list({ addresses: [record.address], sort: 'artist', order: 'desc' })
+ assert.strictEqual(tracks.length, count)
+ assert.strictEqual(tracks[3].content.tags.artist, 'The Chemical Brothers')
+ assert.strictEqual(tracks[0].content.tags.artist, 'Yelle')
+ })
+
+ it('title', async () => {
+ const tracks = await record.tracks.list({ addresses: [record.address], sort: 'title', order: 'desc' })
+ assert.strictEqual(tracks.length, count)
+ assert.strictEqual(tracks[3].content.tags.title, 'The Chemical Brothers')
+ assert.strictEqual(tracks[0].content.tags.title, 'Yelle')
+ })
+
+ it('album', async () => {
+ const tracks = await record.tracks.list({ addresses: [record.address], sort: 'album', order: 'desc' })
+ assert.strictEqual(tracks.length, count)
+ assert.strictEqual(tracks[3].content.tags.album, 'The Chemical Brothers')
+ assert.strictEqual(tracks[0].content.tags.album, 'Yelle')
+ })
+
+ it('bpm', async () => {
+ const tracks = await record.tracks.list({ addresses: [record.address], sort: 'bpm', order: 'desc' })
+ assert.strictEqual(tracks.length, count)
+ assert.strictEqual(tracks[3].content.tags.bpm, count - 4)
+ assert.strictEqual(tracks[0].content.tags.bpm, count - 1)
+ })
+
+ it('duration', async () => {
+ const tracks = await record.tracks.list({ addresses: [record.address], sort: 'duration', order: 'desc' })
+ assert.strictEqual(tracks.length, count)
+ assert.strictEqual(tracks[3].content.audio.duration, count - 4)
+ assert.strictEqual(tracks[0].content.audio.duration, count - 1)
+ })
+
+ it('bitrate', async () => {
+ const tracks = await record.tracks.list({ addresses: [record.address], sort: 'bitrate', order: 'desc' })
+ assert.strictEqual(tracks.length, count)
+ assert.strictEqual(tracks[3].content.audio.bitrate, count - 4)
+ assert.strictEqual(tracks[0].content.audio.bitrate, count - 1)
+ })
+
+ it('errors', async () => {
+ // TODO (high) use invalid sort param
+ // TODO (high) use invalid order param
+ })
+ })
+
+ describe('filter', function () {
+ /* it('artist', function () {
+
+ * })
+ */
+
+ it('bpm', function () {
+
+ })
+
+ it('duration', function () {
+
+ })
+
+ it('bitrate', function () {
+
+ })
+
+ /* it('remixer', function () {
+
+ * })
+ */
+
+ it('tags', async () => {
+ // TODO (high) add tags fixture data for testing
+ const tracks = await record.tracks.list({ addresses: [record.address], tags: ['Nero'] })
+ assert.strictEqual(tracks.length, 0)
+ // assert.strictEqual(tracks[0].content.tags.artist, 'Nero')
+ })
+ })
+
+ describe('search', function () {
+ it('query', async () => {
+ const tracks = await record.tracks.list({ addresses: [record.address], query: 'Nero' })
+ assert.strictEqual(tracks.length, 1)
+ assert.strictEqual(tracks[0].content.tags.artist, 'Nero')
+ })
+
+ it('artist', async () => {
+
+ })
+
+ it('title', async () => {
+
+ })
+
+ it('album', async () => {
+
+ })
+
+ it('remixer', async () => {
+
+ })
+
+ it('resolvers', async () => {
+
+ })
+ })
+})
diff --git a/test/components.track.remove.test.js b/test/components.track.remove.test.js
new file mode 100644
index 0000000..4dda7ea
--- /dev/null
+++ b/test/components.track.remove.test.js
@@ -0,0 +1,53 @@
+/* global describe it before after */
+
+const path = require('path')
+const assert = require('assert')
+const {
+ config,
+ startRecord
+} = require('./utils')
+
+describe('record.components.track.remove', function () {
+ this.timeout(config.timeout)
+ let record
+ let track1
+ const filepath1 = path.join(__dirname, 'fixtures/tracks/Dj Falcon And Thomas Bangalter - So Much Love To Give(Original Mix).mp3')
+
+ before(async () => {
+ ({ record } = await startRecord('0'))
+ track1 = await record.tracks.addTrackFromFile(filepath1)
+ await record.tracks.remove(track1.id)
+ })
+ after(async () => record && record.stop())
+
+ describe('remove track', function () {
+ it('list', async function () {
+ const tracks = await record.tracks.list({ addresses: [record.address] })
+ assert.strictEqual(tracks.length, 0)
+ })
+
+ it('entries index', async function () {
+ const entries = await record._db('entries')
+ assert.strictEqual(entries.length, 0)
+ })
+
+ it('tracks index', async function () {
+ const tracks = await record._db('tracks')
+ assert.strictEqual(tracks.length, 0)
+ })
+
+ it('pins', async function () {
+ const pins = []
+ for await (const { cid } of record._ipfs.pin.ls({ type: 'direct' })) {
+ pins.push(cid.toBaseEncodedString('base58btc'))
+ }
+ // TODO (low) compare pins
+ assert.strictEqual(pins.length, 2)
+ })
+ })
+
+ describe('resolver', async () => {
+ // TODO (medium) make sure resolver is removed
+ // TODO (medium) make sure non-exclusive resolver is not removed
+ })
+})
diff --git a/test/components.track.url.test.js b/test/components.track.url.test.js
new file mode 100644
index 0000000..2b37820
--- /dev/null
+++ b/test/components.track.url.test.js
@@ -0,0 +1,143 @@
+/* global describe it before after */
+
+const assert = require('assert')
+const {
+ config,
+ startRecord
+} = require('./utils')
+
+describe('record.components.track', function () {
+ this.timeout(config.timeout)
+ let record
+
+ before(async () => ({ record } = await startRecord('0')))
+ after(async () => record && record.stop())
+
+ describe('record.components.track.addTrackFromUrl', function () {
+ let tracks
+ const urlpath1 = 'https://soundcloud.com/asa-moto101/kifesh?in=deewee-2/sets/asa-moto-playtime-deewee030'
+ const urlpath2 = 'https://www.youtube.com/watch?v=a7jdHdR-oF8'
+
+ describe('add', function () {
+ it('added with log length of 1', async function () {
+ tracks = await record.tracks.addTrackFromUrl(urlpath1)
+ assert.notStrictEqual(tracks[0], undefined)
+ assert.strictEqual(tracks[0].type, 'track')
+ assert.strictEqual(record._log._oplog.length, 1)
+ assert.strictEqual(tracks[0].content.audio.duration, 276.34938775510204)
+ })
+
+ it('contentCID', function () {
+ assert.strictEqual(tracks[0].contentCID, 'zBwWX9K3D55gieRxaF2iDSCSoKxLfuDjL7fGytKp9hFM6RumJbQrEkcoyjCaoVAzD9vkcH5uzEJLjX6ePd33ng7bfc6ij')
+ })
+
+ it('audio file hash', function () {
+ assert.strictEqual(tracks[0].content.hash, 'QmSn3parzLeoSEThmfJNbRPtfMt91QQWCPjWdrP9x3WxS3')
+ })
+ })
+
+ describe('get', function () {
+ let track
+ before(async () => { track = await record.tracks.get({ address: record.address, trackId: tracks[0].id }) })
+
+ it('contentCID', function () {
+ assert.strictEqual(track.contentCID, tracks[0].contentCID)
+ })
+
+ it('audio file hash', function () {
+ assert.strictEqual(track.content.hash, tracks[0].content.hash)
+ })
+ })
+
+ describe('list', function () {
+ let tracks
+ before(async () => { tracks = await record.tracks.list({ address: [record.address] }) })
+
+ it('has one track', function () {
+ assert.strictEqual(tracks.length, 1)
+ })
+
+ it('contentCID', function () {
+ assert.strictEqual(tracks[0].contentCID, tracks[0].contentCID)
+ })
+
+ it('audio file hash', function () {
+ assert.strictEqual(tracks[0].content.hash, tracks[0].content.hash)
+ })
+ })
+
+ describe('add duplicate', function () {
+ let track
+ before(async () => { track = await record.tracks.addTrackFromUrl(urlpath1) })
+
+ it('duplicate detected', async function () {
+ assert.notStrictEqual(tracks[0], undefined)
+ assert.strictEqual(tracks[0].type, 'track')
+ assert.strictEqual(record._log._oplog.length, 1)
+ // TODO (high) assert oplog length
+ })
+
+ it('list includes one track', async function () {
+ const tracks = await record.tracks.list({ address: [record.address] })
+ assert.strictEqual(tracks.length, 1)
+ })
+
+ it('contentCID', function () {
+ assert.strictEqual(track[0].contentCID, tracks[0].contentCID)
+ })
+
+ it('audio file hash', function () {
+ assert.strictEqual(track[0].content.hash, tracks[0].content.hash)
+ })
+ })
+
+ describe('remove track', function () {
+ before(async () => { await record.tracks.remove(tracks[0].id) })
+
+ it('list doesnt include track', async function () {
+ const tracks = await record.tracks.list({ address: [record.address] })
+ assert.strictEqual(tracks.length, 0)
+ })
+ })
+
+ describe('re-add track', function () {
+ let track
+ before(async () => { track = await record.tracks.addTrackFromUrl(urlpath1) })
+
+ it('track added', async function () {
+ assert.notStrictEqual(track[0], undefined)
+ assert.strictEqual(track[0].type, 'track')
+ assert.strictEqual(record._log._oplog.length, 3)
+ assert.strictEqual(track[0].content.audio.duration, 276.34938775510204)
+ })
+
+ it('contentCID', function () {
+ assert.strictEqual(track[0].contentCID, 'zBwWX9K3D55gieRxaF2iDSCSoKxLfuDjL7fGytKp9hFM6RumJbQrEkcoyjCaoVAzD9vkcH5uzEJLjX6ePd33ng7bfc6ij')
+ })
+
+ it('audio file hash', function () {
+ assert.strictEqual(track[0].content.hash, 'QmSn3parzLeoSEThmfJNbRPtfMt91QQWCPjWdrP9x3WxS3')
+ })
+ })
+
+ describe('add new track', function () {
+ let track
+ before(async () => { track = await record.tracks.addTrackFromUrl(urlpath2) })
+
+ it('track added', async function () {
+ assert.notStrictEqual(track[0], undefined)
+ assert.strictEqual(track[0].type, 'track')
+ assert.strictEqual(record._log._oplog.length, 4)
+ assert.strictEqual(track[0].content.audio.duration, 560.9186167800453)
+ })
+
+ it('contentCID', function () {
+ assert.strictEqual(track[0].contentCID, 'zBwWX5dPcTAKjurHvbUA62qEp2RG23WVzXFF1qpbH2RcYwWCEihAayJfnqqWcVSS4jJAJRJUXa3cL6iqEdfTG3bpwH7hk')
+ })
+
+ it('audio file hash', function () {
+ assert.strictEqual(track[0].content.hash, 'QmYzoASpXMiUVs7nAq7vdga31N5ZmsSMEFzwvrPyioT7yC')
+ })
+ })
+ })
+})
diff --git a/test/fixtures/tracks/8000 (Clouds Remix).mp3 b/test/fixtures/tracks/8000 (Clouds Remix).mp3
new file mode 100644
index 0000000..97249f7
Binary files /dev/null and b/test/fixtures/tracks/8000 (Clouds Remix).mp3 differ
diff --git a/test/fixtures/tracks/Dj Falcon And Thomas Bangalter - So Much Love To Give(Original Mix).mp3 b/test/fixtures/tracks/Dj Falcon And Thomas Bangalter - So Much Love To Give(Original Mix).mp3
new file mode 100644
index 0000000..43fe774
Binary files /dev/null and b/test/fixtures/tracks/Dj Falcon And Thomas Bangalter - So Much Love To Give(Original Mix).mp3 differ
diff --git a/test/network.js b/test/network.js
new file mode 100644
index 0000000..42d85a4
--- /dev/null
+++ b/test/network.js
@@ -0,0 +1,112 @@
+/* global describe it before after */
+
+const assert = require('assert')
+const debug = require('debug')
+
+debug.enable('libp2p:transports,libp2p:circuit*')
+
+const {
+ config,
+ startRecord,
+ connectNode
+} = require('./utils')
+
+describe('record', function () {
+ this.timeout(config.timeout)
+ const nodes = []
+
+ before(async () => {
+ const limit = 4
+ for (let i = 0; i < limit; i++) {
+ const { record } = await startRecord(i)
+ nodes.push(record)
+
+ const peer = nodes[i - 1]
+ if (peer) {
+ await connectNode(record, peer)
+ }
+ }
+ })
+
+ after(async () => {
+ for (const node of nodes) {
+ node && await node.stop()
+ }
+ })
+
+ describe('record.network', () => {
+ it('route ipfs content amoung connected peers', async () => {
+ const about = await nodes[1].about.set({ name: 'Hello Network' })
+ const dag = await nodes[0]._ipfs.dag.get(about.cid)
+
+ assert.deepStrictEqual(about.content, dag.value)
+ })
+
+ it('route ipfs content amoung un-connected peers', async () => {
+ const about = await nodes[1].about.get(nodes[1].address)
+ const dag = await nodes[3]._ipfs.dag.get(about.cid)
+
+ assert.deepStrictEqual(about.content, dag.value)
+ })
+
+ it('sync logs among connected peers', async () => {
+ /* for (const node of nodes) {
+ * const peerLogs = await node.peers.list()
+ * const peerIds = peerLogs.map(p => p.peers).flat()
+ * const result = {
+ * address: node.address,
+ * peerId: node._orbitdb.id,
+ * peerIds
+ * }
+ * }
+ */
+ const waitForSync = () => new Promise((resolve, reject) => {
+ const events = []
+ nodes[0].on('redux', (event) => {
+ events.push(event)
+ if (event.type === 'LOG_REPLICATED') {
+ resolve(events)
+ }
+ })
+ nodes[0].logs.link({ linkAddress: nodes[1].address }).then(() => nodes[0].logs.connect())
+ })
+
+ const events = await waitForSync()
+ const logPeerJoined = events.filter(e => e.type === 'LOG_PEER_JOINED')
+ const logReplicateProgress = events.filter(e => e.type === 'LOG_REPLICATE_PROGRESS')
+ const logIndexUpdated = events.filter(e => e.type === 'LOG_INDEX_UPDATED')
+ const logReplicated = events.filter(e => e.type === 'LOG_REPLICATED')
+
+ assert.strictEqual(logPeerJoined[0].payload.address, nodes[1].address)
+ assert.strictEqual(logReplicateProgress[0].payload.address, nodes[1].address)
+ assert.notStrictEqual(logReplicateProgress[0].payload.hash, undefined)
+ assert.strictEqual(logIndexUpdated[0].payload.address, nodes[0].address)
+ assert.strictEqual(logReplicated[0].payload.address, nodes[1].address)
+ assert.strictEqual(logReplicated[0].payload.length, 1)
+ })
+
+ it('sync logs among un-connected peers', async () => {
+
+ })
+
+ it('track', function () {
+
+ })
+
+ it('tag', function () {
+
+ })
+
+ it('complete - restart - load', function () {
+
+ })
+
+ it('interrupt/restart - resume', function () {
+
+ })
+
+ it('pause - resume', function () {
+
+ })
+ })
+})
diff --git a/test/record.gc.test.js b/test/record.gc.test.js
new file mode 100644
index 0000000..9111e96
--- /dev/null
+++ b/test/record.gc.test.js
@@ -0,0 +1,201 @@
+/* global describe it beforeEach afterEach */
+
+const path = require('path')
+const assert = require('assert')
+const {
+ config,
+ startRecord,
+ connectNode
+} = require('./utils')
+
+describe('record.gc', function () {
+ this.timeout(config.timeout)
+ let record, ipfsd
+ let record2, ipfsd2
+
+ beforeEach(async () => {
+ try {
+ // do not remove semicolons
+ // eslint-disable-next-line
+ ({ record, ipfsd } = await startRecord('0', { restartable: true }));
+ // eslint-disable-next-line
+ ({ record: record2, ipfsd: ipfsd2 } = await startRecord('1'));
+ await connectNode(record, record2)
+ } catch (err) {
+ console.log(err)
+ }
+ })
+
+ afterEach(async () => {
+ record && await record.stop()
+ ipfsd && await ipfsd.stop()
+ record2 && await record2.stop()
+ ipfsd2 && await ipfsd2.stop()
+ })
+
+ const runGC = async () => {
+ // eslint-disable-next-line
+ for await (const res of record._ipfs.repo.gc()) {
+ // TODO (low) collect garbage collected pins for test assertions
+ }
+ }
+
+ describe('gc', function () {
+ const about = {
+ name: 'Test Node',
+ bio: 'a test node',
+ location: 'test world'
+ }
+
+ it('manifest & access controller', async function () {
+ const { address } = record2
+ await record.logs.connect(address)
+ await record2.stop()
+ await ipfsd2.stop()
+ await runGC()
+
+ const log = await record.log.get(address)
+ assert.strictEqual(log.id, address)
+ // TODO (medium) check manifest address is in pinset
+ // TODO (medium) check ac & ipfs ac address are in pinset
+ })
+
+ it('about', async function () {
+ const aboutEntry = await record.about.set(about)
+ assert.ok(aboutEntry.contentCID)
+ const content = await record._ipfs.dag.get(aboutEntry.cid)
+
+ await runGC()
+
+ const entry = await record.about.get(record.address)
+ assert.deepStrictEqual(aboutEntry, entry)
+ const afterContent = await record._ipfs.dag.get(aboutEntry.cid)
+ assert.deepStrictEqual(content, afterContent)
+
+ // TODO (medium) check log entry hash is in pinset
+ // TODO (medium) check log entry content cid is in pinset
+ })
+
+ it('track', async function () {
+ const filepath = path.join(__dirname, 'fixtures/tracks/Dj Falcon And Thomas Bangalter - So Much Love To Give(Original Mix).mp3')
+ const track = await record.tracks.addTrackFromFile(filepath)
+ const entry = await record.log.getLogEntryFromId(record.address, track.id)
+
+ const dagEntry = await record._ipfs.dag.get(entry.hash)
+ const dagContent = await record._ipfs.dag.get(entry.payload.value.contentCID)
+ const dagAudio = await record._ipfs.dag.get(entry.payload.value.content.hash)
+
+ await runGC()
+
+ const afterEntry = await record.log.getLogEntryFromId(record.address, track.id)
+ const afterDagEntry = await record._ipfs.dag.get(entry.hash)
+ const afterDagContent = await record._ipfs.dag.get(entry.payload.value.contentCID)
+ const afterDagAudio = await record._ipfs.dag.get(entry.payload.value.content.hash)
+
+ assert.deepStrictEqual(afterEntry, entry)
+ assert.deepStrictEqual(afterDagEntry, dagEntry)
+ assert.deepStrictEqual(afterDagContent, dagContent)
+ assert.deepStrictEqual(afterDagAudio, dagAudio)
+
+ // TODO (high) check log entry content cid is in pinset
+ // TODO (high) check audio hash is in pinset
+ // TODO (high) check artwork hash is in pinset
+
+ const statsBefore = await record._ipfs.repo.stat()
+
+ await record.tracks.remove(track.id)
+
+ await runGC()
+
+ const statsAfter = await record._ipfs.repo.stat()
+
+ const removedEntry = await record.log.getLogEntryFromId(record.address, track.id)
+ const removedDagEntry = await record._ipfs.dag.get(entry.hash)
+ const removedDagContent = await record._ipfs.dag.get(entry.payload.value.contentCID)
+ let removedDagAudio
+ try {
+ removedDagAudio = await record._ipfs.dag.get(entry.payload.value.content.hash, { timeout: 2000 })
+ } catch (e) {
+
+ }
+
+ // TODO (high) check log entry hash is in pinset
+ // TODO (high) check log entry content cid is not in pinset
+ // TODO (high) check audio hash is not in pinset
+ // TODO (high) check artwork hash is not in pinset
+
+ assert.ok(!removedEntry)
+ assert.ok(removedDagEntry)
+ assert.ok(removedDagContent)
+ assert.ok(!removedDagAudio)
+ assert.strictEqual(statsAfter.repoSize.toNumber() < statsBefore.repoSize.toNumber(), true)
+ })
+
+ it('track in linked log', async function () {
+ // add track in log 2
+ const filepath = path.join(__dirname, 'fixtures/tracks/Dj Falcon And Thomas Bangalter - So Much Love To Give(Original Mix).mp3')
+ const track = await record2.tracks.addTrackFromFile(filepath)
+ const entry = await record2.log.getLogEntryFromId(record2.address, track.id)
+
+ // add link to log 2
+ await record.logs.link({
+ alias: 'record2',
+ linkAddress: record2.address
+ })
+ await record.logs.connect(record2.address)
+
+ const dagEntry = await record._ipfs.dag.get(entry.hash)
+ const dagContent = await record._ipfs.dag.get(entry.payload.value.contentCID)
+ const dagAudio = await record._ipfs.dag.get(entry.payload.value.content.hash)
+
+ // pin track in log 2
+ await record._ipfs.pin.add(track.content.hash)
+
+ await record2.stop()
+ await ipfsd2.stop()
+ await runGC()
+
+ const afterLinkEntry = await record.log.getLogEntryFromId(record2.address, track.id)
+ const afterLinkDagEntry = await record._ipfs.dag.get(entry.hash)
+ const afterLinkDagContent = await record._ipfs.dag.get(entry.payload.value.contentCID)
+ const afterLinkDagAudio = await record._ipfs.dag.get(entry.payload.value.content.hash)
+ assert.deepStrictEqual(afterLinkEntry, entry)
+ assert.deepStrictEqual(afterLinkDagEntry, dagEntry)
+ assert.deepStrictEqual(afterLinkDagContent, dagContent)
+ assert.deepStrictEqual(afterLinkDagAudio, dagAudio)
+
+ await record.logs.unlink(record2.address)
+ await runGC()
+
+ const afterUnlinkEntry = await record.log.getLogEntryFromId(record2.address, track.id)
+
+ let afterUnlinkDagEntry
+ try {
+ afterUnlinkDagEntry = await record._ipfs.dag.get(entry.hash, { timeout: 2000 })
+ } catch (e) {
+
+ }
+
+ let afterUnlinkDagContent
+ try {
+ afterUnlinkDagContent = await record._ipfs.dag.get(entry.payload.value.contentCID, { timeout: 2000 })
+ } catch (e) {
+
+ }
+
+ let afterUnlinkDagAudio
+ try {
+ afterUnlinkDagAudio = await record._ipfs.dag.get(entry.payload.value.content.hash, { timeout: 2000 })
+ } catch (e) {
+
+ }
+
+ assert.deepStrictEqual(afterUnlinkEntry, undefined)
+ assert.deepStrictEqual(afterUnlinkDagEntry, undefined)
+ assert.deepStrictEqual(afterUnlinkDagContent, undefined)
+ assert.deepStrictEqual(afterUnlinkDagAudio, undefined)
+ })
+
+ // TODO (high) add test for checking pins for log links
+ })
+})
diff --git a/test/record.restart.test.js b/test/record.restart.test.js
new file mode 100644
index 0000000..035e312
--- /dev/null
+++ b/test/record.restart.test.js
@@ -0,0 +1,43 @@
+/* global describe it before after */
+
+const assert = require('assert')
+const {
+ config,
+ startRecord
+} = require('./utils')
+
+describe('record.restart', function () {
+ this.timeout(config.timeout)
+ let record, ipfsd
+
+ before(async () => {
+ ({ record, ipfsd } = await startRecord('0', { restartable: true }))
+ })
+
+ after(async () => {
+ record && await record.stop()
+ ipfsd && await ipfsd.stop()
+ })
+
+ describe('restart', function () {
+ const about = {
+ name: 'Test Node',
+ bio: 'a test node',
+ location: 'test world'
+ }
+
+ it('reload about', async function () {
+ const aboutEntry = await record.about.set(about)
+ assert.ok(aboutEntry.contentCID)
+
+ await record.stop()
+ await ipfsd.stop()
+
+ await ipfsd.start()
+ await record.start()
+
+ const entry = await record.about.get(record.address)
+ assert.deepStrictEqual(aboutEntry, entry)
+ })
+ })
+})
diff --git a/test/record.test.js b/test/record.test.js
new file mode 100644
index 0000000..7d02f09
--- /dev/null
+++ b/test/record.test.js
@@ -0,0 +1,65 @@
+/* global describe it before after */
+
+const assert = require('assert')
+const {
+ config,
+ startRecord
+} = require('./utils')
+
+describe('record', function () {
+ this.timeout(config.timeout)
+ let record
+
+ before(async () => ({ record } = await startRecord('0')))
+ after(async () => record && record.stop())
+
+ describe('record.constructor', function () {
+ it('returns an instance', function () {
+ // components
+ assert.strictEqual(typeof record.about, 'object')
+ assert.strictEqual(typeof record.bootstrap, 'object')
+ assert.strictEqual(typeof record.logs, 'object')
+ assert.strictEqual(typeof record.info, 'object')
+ assert.strictEqual(typeof record.listens, 'object')
+ assert.strictEqual(typeof record.log, 'object')
+ assert.strictEqual(typeof record.tags, 'object')
+ assert.strictEqual(typeof record.tracks, 'object')
+ assert.strictEqual(typeof record.peers, 'object')
+
+ assert.strictEqual(typeof record.init, 'function')
+ assert.strictEqual(typeof record.stop, 'function')
+ assert.strictEqual(typeof record.start, 'function')
+ assert.strictEqual(typeof record.gc, 'function')
+ assert.strictEqual(typeof record.getKeys, 'function')
+ assert.strictEqual(typeof record.createIdentity, 'function')
+ assert.strictEqual(typeof record.setIdentity, 'function')
+
+ assert.strictEqual(typeof record.address, 'string')
+ assert.strictEqual(typeof record.isMe, 'function')
+
+ // utils
+ assert.strictEqual(typeof record.isValidAddress, 'function')
+ assert.strictEqual(typeof record.parseAddress, 'function')
+ assert.strictEqual(typeof record.resolve, 'function')
+ })
+
+ it('address', async function () {
+ const log = await record.log.get()
+ assert.strictEqual(record.address, log.address.toString())
+ })
+
+ it('isMe', async function () {
+ const log = await record.log.get()
+ const isMe = await record.isMe(log.address.toString())
+ assert.strictEqual(isMe, true)
+ })
+ })
+
+ it('load existing account', function () {
+
+ })
+
+ it('generate new account', function () {
+
+ })
+})
diff --git a/test/utils/config.js b/test/utils/config.js
new file mode 100644
index 0000000..bf50843
--- /dev/null
+++ b/test/utils/config.js
@@ -0,0 +1,3 @@
+module.exports = {
+ timeout: 90000
+}
diff --git a/test/utils/connect-node.js b/test/utils/connect-node.js
new file mode 100644
index 0000000..084fde2
--- /dev/null
+++ b/test/utils/connect-node.js
@@ -0,0 +1,15 @@
+const connectNode = (node1, node2) => new Promise((resolve, reject) => {
+ setTimeout(() => reject(new Error('peer timed out')), 25000)
+
+ node1.on('redux', ({ type, payload }) => {
+ if (type === 'RECORD_PEER_JOINED' && payload.address === node2.address) {
+ resolve()
+ }
+ })
+
+ node2._ipfs.id().then((identity) => {
+ node1._ipfs.swarm.connect(identity.addresses[0])
+ })
+})
+
+module.exports = connectNode
diff --git a/test/utils/create-track.js b/test/utils/create-track.js
new file mode 100644
index 0000000..7db34a4
--- /dev/null
+++ b/test/utils/create-track.js
@@ -0,0 +1,19 @@
+module.exports = (id, { title, artist, album, bpm = null, duration = 30, bitrate = 192000 } = {}) => ({
+ hash: 'bafybeig6xv5nwphfmvcnektpnojts33jqcuam7bmye2pb54adnrtccjlsu',
+ tags: {
+ title: title || id,
+ artist: artist || null,
+ artists: null,
+ albumartist: null,
+ album: album || null,
+ remixer: null,
+ bpm: bpm,
+ acoustid_fingerprint: id
+ },
+ audio: {
+ duration: duration,
+ bitrate: bitrate
+ },
+ resolver: [],
+ artwork: []
+})
diff --git a/test/utils/index.js b/test/utils/index.js
new file mode 100644
index 0000000..53a0fbc
--- /dev/null
+++ b/test/utils/index.js
@@ -0,0 +1,4 @@
+exports.config = require('./config')
+exports.startRecord = require('./start-record')
+exports.connectNode = require('./connect-node')
+exports.createTrack = require('./create-track')
diff --git a/test/utils/start-record.js b/test/utils/start-record.js
new file mode 100644
index 0000000..d740057
--- /dev/null
+++ b/test/utils/start-record.js
@@ -0,0 +1,93 @@
+const fs = require('fs')
+const path = require('path')
+const Ctl = require('ipfsd-ctl')
+const rimraf = require('rimraf')
+const exec = require('child_process').exec
+const Record = require('../../index')
+
+function hasLocal (ipfsBin, path) {
+ const command = `${ipfsBin} dag stat --offline --config ${path}`
+ return function (cid) {
+ return new Promise((resolve, reject) => {
+ exec(`${command} ${cid}`, (err, stdout, stderr) => {
+ if (err || stderr.toLowerCase().includes('error')) {
+ return resolve(false)
+ }
+ resolve(true)
+ })
+ })
+ }
+}
+
+const startRecord = (id, { restartable = false } = {}) => new Promise((resolve, reject) => {
+ const directory = path.join(__dirname, `../tmp/nodes/${id}`)
+ try {
+ rimraf.sync(directory)
+ fs.mkdirSync(directory, { recursive: true })
+ } catch (error) {
+ console.log(error)
+ }
+
+ const ipfsBin = require('go-ipfs').path()
+ Ctl.createController({
+ test: !restartable,
+ disposable: !restartable,
+ ipfsHttpModule: require('ipfs-http-client'),
+ ipfsBin,
+ args: [
+ '--enable-pubsub-experiment'
+ ],
+ ipfsOptions: {
+ repo: directory,
+ config: {
+ Pubsub: {
+ Router: 'gossipsub'
+ },
+ Boostrap: null,
+ Addresses: {
+ Swarm: [
+ '/ip4/127.0.0.1/tcp/0/ws'
+ ]
+ },
+ Discovery: {
+ MDNS: {
+ Enabled: false
+ }
+ },
+ Swarm: {
+ ConnMgr: {
+ highWater: 2,
+ lowWater: 1
+ }
+ }
+ }
+ }
+ }).then(async (ipfsd) => {
+ if (restartable) {
+ await ipfsd.init({
+ emptyRepo: true
+ })
+
+ await ipfsd.start()
+ }
+
+ const recordOpts = {
+ directory,
+ api: false,
+ bitboot: { enabled: false }
+ }
+ const record = new Record(recordOpts)
+ record.on('error', err => reject(err))
+ record.on('ready', () => resolve({ record, ipfsd }))
+
+ ipfsd.hasLocal = hasLocal(ipfsBin, ipfsd.path)
+
+ try {
+ record.init(ipfsd)
+ } catch (error) {
+ reject(error)
+ }
+ })
+})
+
+module.exports = startRecord
diff --git a/utils/index.js b/utils/index.js
new file mode 100644
index 0000000..9bf9092
--- /dev/null
+++ b/utils/index.js
@@ -0,0 +1,8 @@
+const crypto = require('crypto')
+
+const sha256 = (d) => crypto.createHash('sha256').update(d).digest('hex')
+
+exports.sha256 = sha256
+exports.throttle = require('./throttle')
+exports.loadEntryContent = require('./load-entry-content')
+exports.loadContentFromCID = require('./load-content-from-cid')
diff --git a/utils/load-content-from-cid.js b/utils/load-content-from-cid.js
new file mode 100644
index 0000000..2acefb7
--- /dev/null
+++ b/utils/load-content-from-cid.js
@@ -0,0 +1,29 @@
+const { CID } = require('ipfs-http-client')
+
+const loadContentFromCID = async (ipfs, cid, type) => {
+ const item = {}
+
+ const dagNode = await ipfs.dag.get(cid)
+ if (!dagNode.value) {
+ return item
+ }
+
+ item.content = dagNode.value
+ item.cid = new CID(cid)
+ item.contentCID = item.cid.toBaseEncodedString('base58btc')
+
+ // convert track hash & artwork cids to strings
+ if (type === 'track') {
+ if (CID.isCID(item.content.hash)) {
+ item.content.hash = item.content.hash.toBaseEncodedString('base58btc')
+ }
+
+ item.content.artwork = item.content.artwork.map((a) => {
+ return CID.isCID(a) ? a.toBaseEncodedString('base58btc') : a
+ })
+ }
+
+ return item
+}
+
+module.exports = loadContentFromCID
diff --git a/utils/load-entry-content.js b/utils/load-entry-content.js
new file mode 100644
index 0000000..61a1721
--- /dev/null
+++ b/utils/load-entry-content.js
@@ -0,0 +1,32 @@
+const { CID } = require('ipfs-http-client')
+const loadContentFromCID = require('./load-content-from-cid')
+
+const loadEntryContent = async (ipfs, e) => {
+ if (!e) {
+ return null
+ }
+
+ // clone
+ const entry = JSON.parse(JSON.stringify(e))
+
+ // has no content to load
+ if (!entry.payload.value.content) {
+ return entry
+ }
+
+ // content already loaded
+ if (entry.payload.value.contentCID) {
+ entry.payload.value.cid = new CID(entry.payload.value.contentCID)
+ return entry
+ }
+
+ const { type } = entry.payload.value
+ const cid = new CID(entry.payload.value.content)
+ const content = await loadContentFromCID(ipfs, cid, type)
+
+ entry.payload.value = Object.assign(entry.payload.value, content)
+
+ return entry
+}
+
+module.exports = loadEntryContent
diff --git a/utils/throttle.js b/utils/throttle.js
new file mode 100644
index 0000000..082d27f
--- /dev/null
+++ b/utils/throttle.js
@@ -0,0 +1,16 @@
+const throttle = (func, timeout) => {
+ let wait = false
+
+ return function (...args) {
+ if (!wait) {
+ func(...args)
+ wait = true
+
+ setTimeout(function () {
+ wait = false
+ }, timeout)
+ }
+ }
+}
+
+module.exports = throttle
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000..53b862a
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,7187 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/code-frame@^7.0.0":
+ version "7.12.11"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"
+ integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==
+ dependencies:
+ "@babel/highlight" "^7.10.4"
+
+"@babel/helper-validator-identifier@^7.10.4":
+ version "7.12.11"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed"
+ integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==
+
+"@babel/highlight@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143"
+ integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.10.4"
+ chalk "^2.0.0"
+ js-tokens "^4.0.0"
+
+"@eslint/eslintrc@^0.2.1":
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.2.tgz#d01fc791e2fc33e88a29d6f3dc7e93d0cd784b76"
+ integrity sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.1.1"
+ espree "^7.3.0"
+ globals "^12.1.0"
+ ignore "^4.0.6"
+ import-fresh "^3.2.1"
+ js-yaml "^3.13.1"
+ lodash "^4.17.19"
+ minimatch "^3.0.4"
+ strip-json-comments "^3.1.1"
+
+"@ethersproject/abi@5.0.10", "@ethersproject/abi@^5.0.10":
+ version "5.0.10"
+ resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.10.tgz#c32baa919ad0e5cddabb2f3a8aed0eaeeed7fa4a"
+ integrity sha512-cfC3lGgotfxX3SMri4+CisOPwignoj/QGHW9J29spC4R4Qqcnk/SYuVkPFBMdLbvBp3f/pGiVqPNwont0TSXhg==
+ dependencies:
+ "@ethersproject/address" "^5.0.9"
+ "@ethersproject/bignumber" "^5.0.13"
+ "@ethersproject/bytes" "^5.0.9"
+ "@ethersproject/constants" "^5.0.8"
+ "@ethersproject/hash" "^5.0.10"
+ "@ethersproject/keccak256" "^5.0.7"
+ "@ethersproject/logger" "^5.0.8"
+ "@ethersproject/properties" "^5.0.7"
+ "@ethersproject/strings" "^5.0.8"
+
+"@ethersproject/abstract-provider@5.0.8", "@ethersproject/abstract-provider@^5.0.8":
+ version "5.0.8"
+ resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.0.8.tgz#880793c29bfed33dff4c2b2be7ecb9ba966d52c0"
+ integrity sha512-fqJXkewcGdi8LogKMgRyzc/Ls2js07yor7+g9KfPs09uPOcQLg7cc34JN+lk34HH9gg2HU0DIA5797ZR8znkfw==
+ dependencies:
+ "@ethersproject/bignumber" "^5.0.13"
+ "@ethersproject/bytes" "^5.0.9"
+ "@ethersproject/logger" "^5.0.8"
+ "@ethersproject/networks" "^5.0.7"
+ "@ethersproject/properties" "^5.0.7"
+ "@ethersproject/transactions" "^5.0.9"
+ "@ethersproject/web" "^5.0.12"
+
+"@ethersproject/abstract-signer@5.0.11", "@ethersproject/abstract-signer@^5.0.10":
+ version "5.0.11"
+ resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.0.11.tgz#675da9ec168905c60ee79a6da95f7157ca956f46"
+ integrity sha512-RKOgPSEYafknA62SrD3OCK42AllHE4YBfKYXyQeM+sBP7Nq3X5FpzeoY4uzC43P4wIhmNoTHCKQuwnX7fBqb6Q==
+ dependencies:
+ "@ethersproject/abstract-provider" "^5.0.8"
+ "@ethersproject/bignumber" "^5.0.13"
+ "@ethersproject/bytes" "^5.0.9"
+ "@ethersproject/logger" "^5.0.8"
+ "@ethersproject/properties" "^5.0.7"
+
+"@ethersproject/address@5.0.9", "@ethersproject/address@^5.0.9":
+ version "5.0.9"
+ resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.9.tgz#347ef30dc8243c682574a3f23ff63f73c8f8cbf1"
+ integrity sha512-gKkmbZDMyGbVjr8nA5P0md1GgESqSGH7ILIrDidPdNXBl4adqbuA3OAuZx/O2oGpL6PtJ9BDa0kHheZ1ToHU3w==
+ dependencies:
+ "@ethersproject/bignumber" "^5.0.13"
+ "@ethersproject/bytes" "^5.0.9"
+ "@ethersproject/keccak256" "^5.0.7"
+ "@ethersproject/logger" "^5.0.8"
+ "@ethersproject/rlp" "^5.0.7"
+
+"@ethersproject/base64@5.0.7", "@ethersproject/base64@^5.0.7":
+ version "5.0.7"
+ resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.0.7.tgz#d5da73699b4a33dc92bd8e5056ad1880b262057d"
+ integrity sha512-S5oh5DVfCo06xwJXT8fQC68mvJfgScTl2AXvbYMsHNfIBTDb084Wx4iA9MNlEReOv6HulkS+gyrUM/j3514rSw==
+ dependencies:
+ "@ethersproject/bytes" "^5.0.9"
+
+"@ethersproject/basex@5.0.7", "@ethersproject/basex@^5.0.7":
+ version "5.0.7"
+ resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.0.7.tgz#2f7026b12c9dee6cdc7b7bf1805461836e635495"
+ integrity sha512-OsXnRsujGmYD9LYyJlX+cVe5KfwgLUbUJrJMWdzRWogrygXd5HvGd7ygX1AYjlu1z8W/+t2FoQnczDR/H2iBjA==
+ dependencies:
+ "@ethersproject/bytes" "^5.0.9"
+ "@ethersproject/properties" "^5.0.7"
+
+"@ethersproject/bignumber@5.0.13", "@ethersproject/bignumber@^5.0.13":
+ version "5.0.13"
+ resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.13.tgz#a5466412b3b80104097b9c694f6ae827df4353fe"
+ integrity sha512-b89bX5li6aK492yuPP5mPgRVgIxxBP7ksaBtKX5QQBsrZTpNOjf/MR4CjcUrAw8g+RQuD6kap9lPjFgY4U1/5A==
+ dependencies:
+ "@ethersproject/bytes" "^5.0.9"
+ "@ethersproject/logger" "^5.0.8"
+ bn.js "^4.4.0"
+
+"@ethersproject/bytes@5.0.9", "@ethersproject/bytes@^5.0.9":
+ version "5.0.9"
+ resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.9.tgz#2748247402ad20df69f3a3e935dc7b58c0d75c08"
+ integrity sha512-k+17ZViDtAugC0s7HM6rdsTWEdIYII4RPCDkPEuxKc6i40Bs+m6tjRAtCECX06wKZnrEoR9pjOJRXHJ/VLoOcA==
+ dependencies:
+ "@ethersproject/logger" "^5.0.8"
+
+"@ethersproject/constants@5.0.8", "@ethersproject/constants@^5.0.8":
+ version "5.0.8"
+ resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.0.8.tgz#50f2e23f48c0d1d0de3759ea79b68ec3e06435a1"
+ integrity sha512-sCc73pFBsl59eDfoQR5OCEZCRv5b0iywadunti6MQIr5lt3XpwxK1Iuzd8XSFO02N9jUifvuZRrt0cY0+NBgTg==
+ dependencies:
+ "@ethersproject/bignumber" "^5.0.13"
+
+"@ethersproject/contracts@5.0.9":
+ version "5.0.9"
+ resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.0.9.tgz#6c67c0ebe20ee1af903f7f43568401023334a181"
+ integrity sha512-CCTxVeDh6sjdSEbjzONhtwPjECvaHE62oGkY8M7kP0CHmgLD2SEGel0HZib8e5oQKRKGly9AKcUFW4g3rQ0AQw==
+ dependencies:
+ "@ethersproject/abi" "^5.0.10"
+ "@ethersproject/abstract-provider" "^5.0.8"
+ "@ethersproject/abstract-signer" "^5.0.10"
+ "@ethersproject/address" "^5.0.9"
+ "@ethersproject/bignumber" "^5.0.13"
+ "@ethersproject/bytes" "^5.0.9"
+ "@ethersproject/constants" "^5.0.8"
+ "@ethersproject/logger" "^5.0.8"
+ "@ethersproject/properties" "^5.0.7"
+
+"@ethersproject/hash@5.0.10", "@ethersproject/hash@^5.0.10":
+ version "5.0.10"
+ resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.0.10.tgz#41bf37428e8ddbc229ffd81c47af667174cb491a"
+ integrity sha512-Tf0bvs6YFhw28LuHnhlDWyr0xfcDxSXdwM4TcskeBbmXVSKLv3bJQEEEBFUcRX0fJuslR3gCVySEaSh7vuMx5w==
+ dependencies:
+ "@ethersproject/abstract-signer" "^5.0.10"
+ "@ethersproject/address" "^5.0.9"
+ "@ethersproject/bignumber" "^5.0.13"
+ "@ethersproject/bytes" "^5.0.9"
+ "@ethersproject/keccak256" "^5.0.7"
+ "@ethersproject/logger" "^5.0.8"
+ "@ethersproject/properties" "^5.0.7"
+ "@ethersproject/strings" "^5.0.8"
+
+"@ethersproject/hdnode@5.0.8", "@ethersproject/hdnode@^5.0.8":
+ version "5.0.8"
+ resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.0.8.tgz#2b52ede921cfbce8de49da774ec5a74025fc2bb1"
+ integrity sha512-Mscpjd7BBjxYSWghaNMwV0xrBBkOoCq6YEPRm9MgE24CiBlzzbfEB5DGq6hiZqhQaxPkdCUtKKqZi3nt9hx43g==
+ dependencies:
+ "@ethersproject/abstract-signer" "^5.0.10"
+ "@ethersproject/basex" "^5.0.7"
+ "@ethersproject/bignumber" "^5.0.13"
+ "@ethersproject/bytes" "^5.0.9"
+ "@ethersproject/logger" "^5.0.8"
+ "@ethersproject/pbkdf2" "^5.0.7"
+ "@ethersproject/properties" "^5.0.7"
+ "@ethersproject/sha2" "^5.0.7"
+ "@ethersproject/signing-key" "^5.0.8"
+ "@ethersproject/strings" "^5.0.8"
+ "@ethersproject/transactions" "^5.0.9"
+ "@ethersproject/wordlists" "^5.0.8"
+
+"@ethersproject/json-wallets@5.0.10", "@ethersproject/json-wallets@^5.0.10":
+ version "5.0.10"
+ resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.0.10.tgz#cdc9c27cb486762a3313e25f6f2fef0eb890dbaf"
+ integrity sha512-Ux36u+d7Dm0M5AQ+mWuHdvfGPMN8K1aaLQgwzrsD4ELTWlwRuHuQbmn7/GqeOpbfaV6POLwdYcBk2TXjlGp/IQ==
+ dependencies:
+ "@ethersproject/abstract-signer" "^5.0.10"
+ "@ethersproject/address" "^5.0.9"
+ "@ethersproject/bytes" "^5.0.9"
+ "@ethersproject/hdnode" "^5.0.8"
+ "@ethersproject/keccak256" "^5.0.7"
+ "@ethersproject/logger" "^5.0.8"
+ "@ethersproject/pbkdf2" "^5.0.7"
+ "@ethersproject/properties" "^5.0.7"
+ "@ethersproject/random" "^5.0.7"
+ "@ethersproject/strings" "^5.0.8"
+ "@ethersproject/transactions" "^5.0.9"
+ aes-js "3.0.0"
+ scrypt-js "3.0.1"
+
+"@ethersproject/keccak256@5.0.7", "@ethersproject/keccak256@^5.0.7":
+ version "5.0.7"
+ resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.0.7.tgz#2eedb5e4c160fcdf0079660f8ae362d7855ea943"
+ integrity sha512-zpUBmofWvx9PGfc7IICobgFQSgNmTOGTGLUxSYqZzY/T+b4y/2o5eqf/GGmD7qnTGzKQ42YlLNo+LeDP2qe55g==
+ dependencies:
+ "@ethersproject/bytes" "^5.0.9"
+ js-sha3 "0.5.7"
+
+"@ethersproject/logger@5.0.8", "@ethersproject/logger@^5.0.8":
+ version "5.0.8"
+ resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.8.tgz#135c1903d35c878265f3cbf2b287042c4c20d5d4"
+ integrity sha512-SkJCTaVTnaZ3/ieLF5pVftxGEFX56pTH+f2Slrpv7cU0TNpUZNib84QQdukd++sWUp/S7j5t5NW+WegbXd4U/A==
+
+"@ethersproject/networks@5.0.7", "@ethersproject/networks@^5.0.7":
+ version "5.0.7"
+ resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.0.7.tgz#8d06e41197b27c2404d89a29ca21f741a01acbfc"
+ integrity sha512-dI14QATndIcUgcCBL1c5vUr/YsI5cCHLN81rF7PU+yS7Xgp2/Rzbr9+YqpC6NBXHFUASjh6GpKqsVMpufAL0BQ==
+ dependencies:
+ "@ethersproject/logger" "^5.0.8"
+
+"@ethersproject/pbkdf2@5.0.7", "@ethersproject/pbkdf2@^5.0.7":
+ version "5.0.7"
+ resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.0.7.tgz#a36fdb7327760ec0096857053e01c923a63417da"
+ integrity sha512-0SNLNixPMqnosH6pyc4yPiUu/C9/Jbu+f6I8GJW9U2qNpMBddmRJviwseoha5Zw1V+Aw0Z/yvYyzIIE8yPXqLA==
+ dependencies:
+ "@ethersproject/bytes" "^5.0.9"
+ "@ethersproject/sha2" "^5.0.7"
+
+"@ethersproject/properties@5.0.7", "@ethersproject/properties@^5.0.7":
+ version "5.0.7"
+ resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.0.7.tgz#951d11ba592ff90bbe8ec34c5a03a5157e3b3360"
+ integrity sha512-812H1Rus2vjw0zbasfDI1GLNPDsoyX1pYqiCgaR1BuyKxUTbwcH1B+214l6VGe1v+F6iEVb7WjIwMjKhb4EUsg==
+ dependencies:
+ "@ethersproject/logger" "^5.0.8"
+
+"@ethersproject/providers@5.0.19":
+ version "5.0.19"
+ resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.0.19.tgz#94c8f1a86755ee4187911fc6250e94b1116c089a"
+ integrity sha512-G+flo1jK1y/rvQy6b71+Nu7qOlkOKz+XqpgqFMZslkCzGuzQRmk9Qp7Ln4soK8RSyP1e5TCujaRf1H+EZahoaw==
+ dependencies:
+ "@ethersproject/abstract-provider" "^5.0.8"
+ "@ethersproject/abstract-signer" "^5.0.10"
+ "@ethersproject/address" "^5.0.9"
+ "@ethersproject/basex" "^5.0.7"
+ "@ethersproject/bignumber" "^5.0.13"
+ "@ethersproject/bytes" "^5.0.9"
+ "@ethersproject/constants" "^5.0.8"
+ "@ethersproject/hash" "^5.0.10"
+ "@ethersproject/logger" "^5.0.8"
+ "@ethersproject/networks" "^5.0.7"
+ "@ethersproject/properties" "^5.0.7"
+ "@ethersproject/random" "^5.0.7"
+ "@ethersproject/rlp" "^5.0.7"
+ "@ethersproject/sha2" "^5.0.7"
+ "@ethersproject/strings" "^5.0.8"
+ "@ethersproject/transactions" "^5.0.9"
+ "@ethersproject/web" "^5.0.12"
+ bech32 "1.1.4"
+ ws "7.2.3"
+
+"@ethersproject/random@5.0.7", "@ethersproject/random@^5.0.7":
+ version "5.0.7"
+ resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.0.7.tgz#e364268ce68bf6d300c36d654e622fd9d26b3a86"
+ integrity sha512-PxSRWwN3s+FH9AWMZU6AcWJsNQ9KzqKV6NgdeKPtxahdDjCuXxTAuzTZNXNRK+qj+Il351UnweAGd+VuZcOAlQ==
+ dependencies:
+ "@ethersproject/bytes" "^5.0.9"
+ "@ethersproject/logger" "^5.0.8"
+
+"@ethersproject/rlp@5.0.7", "@ethersproject/rlp@^5.0.7":
+ version "5.0.7"
+ resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.0.7.tgz#cfa4fa6415960a435b7814e1a29bdfea657e2b6e"
+ integrity sha512-ulUTVEuV7PT4jJTPpfhRHK57tkLEDEY9XSYJtrSNHOqdwMvH0z7BM2AKIMq4LVDlnu4YZASdKrkFGEIO712V9w==
+ dependencies:
+ "@ethersproject/bytes" "^5.0.9"
+ "@ethersproject/logger" "^5.0.8"
+
+"@ethersproject/sha2@5.0.7", "@ethersproject/sha2@^5.0.7":
+ version "5.0.7"
+ resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.0.7.tgz#ef9f18770c9f90a6cfd73840b0c3400910219099"
+ integrity sha512-MbUqz68hhp5RsaZdqi1eg1rrtiqt5wmhRYqdA7MX8swBkzW2KiLgK+Oh25UcWhUhdi1ImU9qrV6if5j0cC7Bxg==
+ dependencies:
+ "@ethersproject/bytes" "^5.0.9"
+ "@ethersproject/logger" "^5.0.8"
+ hash.js "1.1.3"
+
+"@ethersproject/signing-key@5.0.8", "@ethersproject/signing-key@^5.0.8":
+ version "5.0.8"
+ resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.0.8.tgz#156522e542916b9aa9135527b40c5b6f9235af02"
+ integrity sha512-YKxQM45eDa6WAD+s3QZPdm1uW1MutzVuyoepdRRVmMJ8qkk7iOiIhUkZwqKLNxKzEJijt/82ycuOREc9WBNAKg==
+ dependencies:
+ "@ethersproject/bytes" "^5.0.9"
+ "@ethersproject/logger" "^5.0.8"
+ "@ethersproject/properties" "^5.0.7"
+ elliptic "6.5.3"
+
+"@ethersproject/solidity@5.0.8":
+ version "5.0.8"
+ resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.0.8.tgz#a260116a794bc97558d89e98f59831ce8d25c733"
+ integrity sha512-OJkyBq9KaoGsi8E8mYn6LX+vKyCURvxSp0yuGBcOqEFM3vkn9PsCiXsHdOXdNBvlHG5evJXwAYC2UR0TzgJeKA==
+ dependencies:
+ "@ethersproject/bignumber" "^5.0.13"
+ "@ethersproject/bytes" "^5.0.9"
+ "@ethersproject/keccak256" "^5.0.7"
+ "@ethersproject/sha2" "^5.0.7"
+ "@ethersproject/strings" "^5.0.8"
+
+"@ethersproject/strings@5.0.8", "@ethersproject/strings@^5.0.8":
+ version "5.0.8"
+ resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.0.8.tgz#11a1b0ed1e8417408693789839f0b5f4e323c0c9"
+ integrity sha512-5IsdXf8tMY8QuHl8vTLnk9ehXDDm6x9FB9S9Og5IA1GYhLe5ZewydXSjlJlsqU2t9HRbfv97OJZV/pX8DVA/Hw==
+ dependencies:
+ "@ethersproject/bytes" "^5.0.9"
+ "@ethersproject/constants" "^5.0.8"
+ "@ethersproject/logger" "^5.0.8"
+
+"@ethersproject/transactions@5.0.9", "@ethersproject/transactions@^5.0.9":
+ version "5.0.9"
+ resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.0.9.tgz#ccfcc1d395b5e3ce7342545fa28bfe5541182fd6"
+ integrity sha512-0Fu1yhdFBkrbMjenEr+39tmDxuHmaw0pe9Jb18XuKoItj7Z3p7+UzdHLr2S/okvHDHYPbZE5gtANDdQ3ZL1nBA==
+ dependencies:
+ "@ethersproject/address" "^5.0.9"
+ "@ethersproject/bignumber" "^5.0.13"
+ "@ethersproject/bytes" "^5.0.9"
+ "@ethersproject/constants" "^5.0.8"
+ "@ethersproject/keccak256" "^5.0.7"
+ "@ethersproject/logger" "^5.0.8"
+ "@ethersproject/properties" "^5.0.7"
+ "@ethersproject/rlp" "^5.0.7"
+ "@ethersproject/signing-key" "^5.0.8"
+
+"@ethersproject/units@5.0.9":
+ version "5.0.9"
+ resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.0.9.tgz#f8dc406f593eadcba883d6e86cc077203b03e7da"
+ integrity sha512-4jIkcMVrJ3lCgXMO4M/2ww0/T/IN08vJTZld7FIAwa6aoBDTAy71+sby3sShl1SG3HEeKYbI3fBWauCUgPRUpQ==
+ dependencies:
+ "@ethersproject/bignumber" "^5.0.13"
+ "@ethersproject/constants" "^5.0.8"
+ "@ethersproject/logger" "^5.0.8"
+
+"@ethersproject/wallet@5.0.10":
+ version "5.0.10"
+ resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.0.10.tgz#16ad0864d9e0e2b57fb32d768ea4161891d62727"
+ integrity sha512-5siYr38NhqZKH6DUr6u4PdhgOKur8Q6sw+JID2TitEUmW0tOl8f6rpxAe77tw6SJT60D2UcvgsyLtl32+Nl+ig==
+ dependencies:
+ "@ethersproject/abstract-provider" "^5.0.8"
+ "@ethersproject/abstract-signer" "^5.0.10"
+ "@ethersproject/address" "^5.0.9"
+ "@ethersproject/bignumber" "^5.0.13"
+ "@ethersproject/bytes" "^5.0.9"
+ "@ethersproject/hash" "^5.0.10"
+ "@ethersproject/hdnode" "^5.0.8"
+ "@ethersproject/json-wallets" "^5.0.10"
+ "@ethersproject/keccak256" "^5.0.7"
+ "@ethersproject/logger" "^5.0.8"
+ "@ethersproject/properties" "^5.0.7"
+ "@ethersproject/random" "^5.0.7"
+ "@ethersproject/signing-key" "^5.0.8"
+ "@ethersproject/transactions" "^5.0.9"
+ "@ethersproject/wordlists" "^5.0.8"
+
+"@ethersproject/web@5.0.12", "@ethersproject/web@^5.0.12":
+ version "5.0.12"
+ resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.0.12.tgz#f123397c107f863c31fce5f31a97c66ec155e755"
+ integrity sha512-gVxS5iW0bgidZ76kr7LsTxj4uzN5XpCLzvZrLp8TP+4YgxHfCeetFyQkRPgBEAJdNrexdSBayvyJvzGvOq0O8g==
+ dependencies:
+ "@ethersproject/base64" "^5.0.7"
+ "@ethersproject/bytes" "^5.0.9"
+ "@ethersproject/logger" "^5.0.8"
+ "@ethersproject/properties" "^5.0.7"
+ "@ethersproject/strings" "^5.0.8"
+
+"@ethersproject/wordlists@5.0.8", "@ethersproject/wordlists@^5.0.8":
+ version "5.0.8"
+ resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.0.8.tgz#593319b710a5a1f4e839b72641aa765b4f111137"
+ integrity sha512-px2mloc1wAcdTbzv0ZotTx+Uh/dfnDO22D9Rx8xr7+/PUwAhZQjoJ9t7Hn72nsaN83rWBXsLvFcIRZju4GIaEQ==
+ dependencies:
+ "@ethersproject/bytes" "^5.0.9"
+ "@ethersproject/hash" "^5.0.10"
+ "@ethersproject/logger" "^5.0.8"
+ "@ethersproject/properties" "^5.0.7"
+ "@ethersproject/strings" "^5.0.8"
+
+"@hapi/accept@^5.0.1":
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/@hapi/accept/-/accept-5.0.1.tgz#068553e867f0f63225a506ed74e899441af53e10"
+ integrity sha512-fMr4d7zLzsAXo28PRRQPXR1o2Wmu+6z+VY1UzDp0iFo13Twj8WePakwXBiqn3E1aAlTpSNzCXdnnQXFhst8h8Q==
+ dependencies:
+ "@hapi/boom" "9.x.x"
+ "@hapi/hoek" "9.x.x"
+
+"@hapi/ammo@^5.0.1":
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/@hapi/ammo/-/ammo-5.0.1.tgz#9d34560f5c214eda563d838c01297387efaab490"
+ integrity sha512-FbCNwcTbnQP4VYYhLNGZmA76xb2aHg9AMPiy18NZyWMG310P5KdFGyA9v2rm5ujrIny77dEEIkMOwl0Xv+fSSA==
+ dependencies:
+ "@hapi/hoek" "9.x.x"
+
+"@hapi/b64@5.x.x":
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/@hapi/b64/-/b64-5.0.0.tgz#b8210cbd72f4774985e78569b77e97498d24277d"
+ integrity sha512-ngu0tSEmrezoiIaNGG6rRvKOUkUuDdf4XTPnONHGYfSGRmDqPZX5oJL6HAdKTo1UQHECbdB4OzhWrfgVppjHUw==
+ dependencies:
+ "@hapi/hoek" "9.x.x"
+
+"@hapi/boom@9.x.x", "@hapi/boom@^9.1.0":
+ version "9.1.1"
+ resolved "https://registry.yarnpkg.com/@hapi/boom/-/boom-9.1.1.tgz#89e6f0e01637c2a4228da0d113e8157c93677b04"
+ integrity sha512-VNR8eDbBrOxBgbkddRYIe7+8DZ+vSbV6qlmaN2x7eWjsUjy2VmQgChkOKcVZIeupEZYj+I0dqNg430OhwzagjA==
+ dependencies:
+ "@hapi/hoek" "9.x.x"
+
+"@hapi/bounce@2.x.x":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@hapi/bounce/-/bounce-2.0.0.tgz#e6ef56991c366b1e2738b2cd83b01354d938cf3d"
+ integrity sha512-JesW92uyzOOyuzJKjoLHM1ThiOvHPOLDHw01YV8yh5nCso7sDwJho1h0Ad2N+E62bZyz46TG3xhAi/78Gsct6A==
+ dependencies:
+ "@hapi/boom" "9.x.x"
+ "@hapi/hoek" "9.x.x"
+
+"@hapi/bourne@2.x.x":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-2.0.0.tgz#5bb2193eb685c0007540ca61d166d4e1edaf918d"
+ integrity sha512-WEezM1FWztfbzqIUbsDzFRVMxSoLy3HugVcux6KDDtTqzPsLE8NDRHfXvev66aH1i2oOKKar3/XDjbvh/OUBdg==
+
+"@hapi/call@8.x.x":
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/@hapi/call/-/call-8.0.1.tgz#9e64cd8ba6128eb5be6e432caaa572b1ed8cd7c0"
+ integrity sha512-bOff6GTdOnoe5b8oXRV3lwkQSb/LAWylvDMae6RgEWWntd0SHtkYbQukDHKlfaYtVnSAgIavJ0kqszF/AIBb6g==
+ dependencies:
+ "@hapi/boom" "9.x.x"
+ "@hapi/hoek" "9.x.x"
+
+"@hapi/catbox-memory@5.x.x":
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/@hapi/catbox-memory/-/catbox-memory-5.0.0.tgz#6c18dad1a80737480d1c33bfbefd5d028deec86d"
+ integrity sha512-ByuxVJPHNaXwLzbBv4GdTr6ccpe1nG+AfYt+8ftDWEJY7EWBWzD+Klhy5oPTDGzU26pNUh1e7fcYI1ILZRxAXQ==
+ dependencies:
+ "@hapi/boom" "9.x.x"
+ "@hapi/hoek" "9.x.x"
+
+"@hapi/catbox@^11.1.1":
+ version "11.1.1"
+ resolved "https://registry.yarnpkg.com/@hapi/catbox/-/catbox-11.1.1.tgz#d277e2d5023fd69cddb33d05b224ea03065fec0c"
+ integrity sha512-u/8HvB7dD/6X8hsZIpskSDo4yMKpHxFd7NluoylhGrL6cUfYxdQPnvUp9YU2C6F9hsyBVLGulBd9vBN1ebfXOQ==
+ dependencies:
+ "@hapi/boom" "9.x.x"
+ "@hapi/hoek" "9.x.x"
+ "@hapi/podium" "4.x.x"
+ "@hapi/validate" "1.x.x"
+
+"@hapi/content@^5.0.2":
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/@hapi/content/-/content-5.0.2.tgz#ae57954761de570392763e64cdd75f074176a804"
+ integrity sha512-mre4dl1ygd4ZyOH3tiYBrOUBzV7Pu/EOs8VLGf58vtOEECWed8Uuw6B4iR9AN/8uQt42tB04qpVaMyoMQh0oMw==
+ dependencies:
+ "@hapi/boom" "9.x.x"
+
+"@hapi/cryptiles@5.x.x":
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/@hapi/cryptiles/-/cryptiles-5.1.0.tgz#655de4cbbc052c947f696148c83b187fc2be8f43"
+ integrity sha512-fo9+d1Ba5/FIoMySfMqPBR/7Pa29J2RsiPrl7bkwo5W5o+AN1dAYQRi4SPrPwwVxVGKjgLOEWrsvt1BonJSfLA==
+ dependencies:
+ "@hapi/boom" "9.x.x"
+
+"@hapi/file@2.x.x":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@hapi/file/-/file-2.0.0.tgz#2ecda37d1ae9d3078a67c13b7da86e8c3237dfb9"
+ integrity sha512-WSrlgpvEqgPWkI18kkGELEZfXr0bYLtr16iIN4Krh9sRnzBZN6nnWxHFxtsnP684wueEySBbXPDg/WfA9xJdBQ==
+
+"@hapi/hapi@^20.0.0":
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/@hapi/hapi/-/hapi-20.0.3.tgz#e72cad460394e6d2c15f9c57abb5d3332dea27e3"
+ integrity sha512-aqJVHVjoY3phiZsgsGjDRG15CoUNIs1azScqLZDOCZUSKYGTbzPi+K0QP+RUjUJ0m8L9dRuTZ27c8HKxG3wEhA==
+ dependencies:
+ "@hapi/accept" "^5.0.1"
+ "@hapi/ammo" "^5.0.1"
+ "@hapi/boom" "9.x.x"
+ "@hapi/bounce" "2.x.x"
+ "@hapi/call" "8.x.x"
+ "@hapi/catbox" "^11.1.1"
+ "@hapi/catbox-memory" "5.x.x"
+ "@hapi/heavy" "^7.0.1"
+ "@hapi/hoek" "9.x.x"
+ "@hapi/mimos" "5.x.x"
+ "@hapi/podium" "^4.1.1"
+ "@hapi/shot" "^5.0.1"
+ "@hapi/somever" "3.x.x"
+ "@hapi/statehood" "^7.0.3"
+ "@hapi/subtext" "^7.0.3"
+ "@hapi/teamwork" "5.x.x"
+ "@hapi/topo" "5.x.x"
+ "@hapi/validate" "^1.1.0"
+
+"@hapi/heavy@^7.0.1":
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/@hapi/heavy/-/heavy-7.0.1.tgz#73315ae33b6e7682a0906b7a11e8ca70e3045874"
+ integrity sha512-vJ/vzRQ13MtRzz6Qd4zRHWS3FaUc/5uivV2TIuExGTM9Qk+7Zzqj0e2G7EpE6KztO9SalTbiIkTh7qFKj/33cA==
+ dependencies:
+ "@hapi/boom" "9.x.x"
+ "@hapi/hoek" "9.x.x"
+ "@hapi/validate" "1.x.x"
+
+"@hapi/hoek@9.x.x", "@hapi/hoek@^9.0.0", "@hapi/hoek@^9.0.4":
+ version "9.1.1"
+ resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.1.1.tgz#9daf5745156fd84b8e9889a2dc721f0c58e894aa"
+ integrity sha512-CAEbWH7OIur6jEOzaai83jq3FmKmv4PmX1JYfs9IrYcGEVI/lyL1EXJGCj7eFVJ0bg5QR8LMxBlEtA+xKiLpFw==
+
+"@hapi/iron@6.x.x":
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/@hapi/iron/-/iron-6.0.0.tgz#ca3f9136cda655bdd6028de0045da0de3d14436f"
+ integrity sha512-zvGvWDufiTGpTJPG1Y/McN8UqWBu0k/xs/7l++HVU535NLHXsHhy54cfEMdW7EjwKfbBfM9Xy25FmTiobb7Hvw==
+ dependencies:
+ "@hapi/b64" "5.x.x"
+ "@hapi/boom" "9.x.x"
+ "@hapi/bourne" "2.x.x"
+ "@hapi/cryptiles" "5.x.x"
+ "@hapi/hoek" "9.x.x"
+
+"@hapi/mimos@5.x.x":
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/@hapi/mimos/-/mimos-5.0.0.tgz#245c6c98b1cc2c13395755c730321b913de074eb"
+ integrity sha512-EVS6wJYeE73InTlPWt+2e3Izn319iIvffDreci3qDNT+t3lA5ylJ0/SoTaID8e0TPNUkHUSsgJZXEmLHvoYzrA==
+ dependencies:
+ "@hapi/hoek" "9.x.x"
+ mime-db "1.x.x"
+
+"@hapi/nigel@4.x.x":
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/@hapi/nigel/-/nigel-4.0.2.tgz#8f84ef4bca4fb03b2376463578f253b0b8e863c4"
+ integrity sha512-ht2KoEsDW22BxQOEkLEJaqfpoKPXxi7tvabXy7B/77eFtOyG5ZEstfZwxHQcqAiZhp58Ae5vkhEqI03kawkYNw==
+ dependencies:
+ "@hapi/hoek" "^9.0.4"
+ "@hapi/vise" "^4.0.0"
+
+"@hapi/pez@^5.0.1":
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/@hapi/pez/-/pez-5.0.3.tgz#b75446e6fef8cbb16816573ab7da1b0522e7a2a1"
+ integrity sha512-mpikYRJjtrbJgdDHG/H9ySqYqwJ+QU/D7FXsYciS9P7NYBXE2ayKDAy3H0ou6CohOCaxPuTV4SZ0D936+VomHA==
+ dependencies:
+ "@hapi/b64" "5.x.x"
+ "@hapi/boom" "9.x.x"
+ "@hapi/content" "^5.0.2"
+ "@hapi/hoek" "9.x.x"
+ "@hapi/nigel" "4.x.x"
+
+"@hapi/podium@4.x.x", "@hapi/podium@^4.1.1":
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/@hapi/podium/-/podium-4.1.1.tgz#106e5849f2cb19b8767cc16007e0107f27c3c791"
+ integrity sha512-jh7a6+5Z4FUWzx8fgmxjaAa1DTBu+Qfg+NbVdo0f++rE5DgsVidUYrLDp3db65+QjDLleA2MfKQXkpT8ylBDXA==
+ dependencies:
+ "@hapi/hoek" "9.x.x"
+ "@hapi/teamwork" "5.x.x"
+ "@hapi/validate" "1.x.x"
+
+"@hapi/shot@^5.0.1":
+ version "5.0.4"
+ resolved "https://registry.yarnpkg.com/@hapi/shot/-/shot-5.0.4.tgz#6c978314f21a054c041f4becc50095dd78d3d775"
+ integrity sha512-PcEz0WJgFDA3xNSMeONgQmothFr7jhbbRRSAKaDh7chN7zOXBlhl13bvKZW6CMb2xVfJUmt34CW3e/oExMgBhQ==
+ dependencies:
+ "@hapi/hoek" "9.x.x"
+ "@hapi/validate" "1.x.x"
+
+"@hapi/somever@3.x.x":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@hapi/somever/-/somever-3.0.0.tgz#f4e9b16a948415b926b4dd898013602b0cb45758"
+ integrity sha512-Upw/kmKotC9iEmK4y047HMYe4LDKsE5NWfjgX41XNKmFvxsQL7OiaCWVhuyyhU0ShDGBfIAnCH8jZr49z/JzZA==
+ dependencies:
+ "@hapi/bounce" "2.x.x"
+ "@hapi/hoek" "9.x.x"
+
+"@hapi/statehood@^7.0.3":
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/@hapi/statehood/-/statehood-7.0.3.tgz#655166f3768344ed3c3b50375a303cdeca8040d9"
+ integrity sha512-pYB+pyCHkf2Amh67QAXz7e/DN9jcMplIL7Z6N8h0K+ZTy0b404JKPEYkbWHSnDtxLjJB/OtgElxocr2fMH4G7w==
+ dependencies:
+ "@hapi/boom" "9.x.x"
+ "@hapi/bounce" "2.x.x"
+ "@hapi/bourne" "2.x.x"
+ "@hapi/cryptiles" "5.x.x"
+ "@hapi/hoek" "9.x.x"
+ "@hapi/iron" "6.x.x"
+ "@hapi/validate" "1.x.x"
+
+"@hapi/subtext@^7.0.3":
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/@hapi/subtext/-/subtext-7.0.3.tgz#f7440fc7c966858e1f39681e99eb6171c71e7abd"
+ integrity sha512-CekDizZkDGERJ01C0+TzHlKtqdXZxzSWTOaH6THBrbOHnsr3GY+yiMZC+AfNCypfE17RaIakGIAbpL2Tk1z2+A==
+ dependencies:
+ "@hapi/boom" "9.x.x"
+ "@hapi/bourne" "2.x.x"
+ "@hapi/content" "^5.0.2"
+ "@hapi/file" "2.x.x"
+ "@hapi/hoek" "9.x.x"
+ "@hapi/pez" "^5.0.1"
+ "@hapi/wreck" "17.x.x"
+
+"@hapi/teamwork@5.x.x":
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/@hapi/teamwork/-/teamwork-5.1.0.tgz#7801a61fc727f702fd2196ef7625eb4e389f4124"
+ integrity sha512-llqoQTrAJDTXxG3c4Kz/uzhBS1TsmSBa/XG5SPcVXgmffHE1nFtyLIK0hNJHCB3EuBKT84adzd1hZNY9GJLWtg==
+
+"@hapi/topo@5.x.x", "@hapi/topo@^5.0.0":
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.0.0.tgz#c19af8577fa393a06e9c77b60995af959be721e7"
+ integrity sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==
+ dependencies:
+ "@hapi/hoek" "^9.0.0"
+
+"@hapi/validate@1.x.x", "@hapi/validate@^1.1.0":
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/@hapi/validate/-/validate-1.1.3.tgz#f750a07283929e09b51aa16be34affb44e1931ad"
+ integrity sha512-/XMR0N0wjw0Twzq2pQOzPBZlDzkekGcoCtzO314BpIEsbXdYGthQUbxgkGDf4nhk1+IPDAsXqWjMohRQYO06UA==
+ dependencies:
+ "@hapi/hoek" "^9.0.0"
+ "@hapi/topo" "^5.0.0"
+
+"@hapi/vise@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@hapi/vise/-/vise-4.0.0.tgz#c6a94fe121b94a53bf99e7489f7fcc74c104db02"
+ integrity sha512-eYyLkuUiFZTer59h+SGy7hUm+qE9p+UemePTHLlIWppEd+wExn3Df5jO04bFQTm7nleF5V8CtuYQYb+VFpZ6Sg==
+ dependencies:
+ "@hapi/hoek" "9.x.x"
+
+"@hapi/wreck@17.x.x":
+ version "17.1.0"
+ resolved "https://registry.yarnpkg.com/@hapi/wreck/-/wreck-17.1.0.tgz#fbdc380c6f3fa1f8052dc612b2d3b6ce3e88dbec"
+ integrity sha512-nx6sFyfqOpJ+EFrHX+XWwJAxs3ju4iHdbB/bwR8yTNZOiYmuhA8eCe7lYPtYmb4j7vyK/SlbaQsmTtUrMvPEBw==
+ dependencies:
+ "@hapi/boom" "9.x.x"
+ "@hapi/bourne" "2.x.x"
+ "@hapi/hoek" "9.x.x"
+
+"@multiformats/base-x@^4.0.1":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@multiformats/base-x/-/base-x-4.0.1.tgz#95ff0fa58711789d53aefb2590a8b7a4e715d121"
+ integrity sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==
+
+"@sideway/address@^4.1.0":
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.0.tgz#0b301ada10ac4e0e3fa525c90615e0b61a72b78d"
+ integrity sha512-wAH/JYRXeIFQRsxerIuLjgUu2Xszam+O5xKeatJ4oudShOOirfmsQ1D6LL54XOU2tizpCYku+s1wmU0SYdpoSA==
+ dependencies:
+ "@hapi/hoek" "^9.0.0"
+
+"@sideway/formula@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c"
+ integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==
+
+"@sideway/pinpoint@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df"
+ integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==
+
+"@sindresorhus/is@^0.7.0":
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd"
+ integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==
+
+"@tokenizer/token@^0.1.1":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.1.1.tgz#f0d92c12f87079ddfd1b29f614758b9696bc29e3"
+ integrity sha512-XO6INPbZCxdprl+9qa/AAbFFOMzzwqYxpjPgLICrMD6C2FCw6qfJOPcBk6JqqPLSaZ/Qx87qn4rpPmPMwaAK6w==
+
+"@types/debug@^4.1.5":
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.5.tgz#b14efa8852b7768d898906613c23f688713e02cd"
+ integrity sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==
+
+"@types/json5@^0.0.29":
+ version "0.0.29"
+ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
+ integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
+
+"@types/node@*":
+ version "14.14.22"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.22.tgz#0d29f382472c4ccf3bd96ff0ce47daf5b7b84b18"
+ integrity sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw==
+
+"@types/readable-stream@^2.3.9":
+ version "2.3.9"
+ resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.9.tgz#40a8349e6ace3afd2dd1b6d8e9b02945de4566a9"
+ integrity sha512-sqsgQqFT7HmQz/V5jH1O0fvQQnXAJO46Gg9LRO/JPfjmVmGUlcx831TZZO3Y3HtWhIkzf3kTsNT0Z0kzIhIvZw==
+ dependencies:
+ "@types/node" "*"
+ safe-buffer "*"
+
+"@ungap/promise-all-settled@1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44"
+ integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==
+
+abbrev@1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+ integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+
+abort-controller@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
+ integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==
+ dependencies:
+ event-target-shim "^5.0.0"
+
+abstract-leveldown@0.12.3:
+ version "0.12.3"
+ resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-0.12.3.tgz#116b1ec5c7710ef7a2d5706768bbdb4440be1070"
+ integrity sha1-EWsexcdxDvei1XBnaLvbREC+EHA=
+ dependencies:
+ xtend "~3.0.0"
+
+abstract-leveldown@^6.2.1:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz#d25221d1e6612f820c35963ba4bd739928f6026a"
+ integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==
+ dependencies:
+ buffer "^5.5.0"
+ immediate "^3.2.3"
+ level-concat-iterator "~2.0.0"
+ level-supports "~1.0.0"
+ xtend "~4.0.0"
+
+abstract-leveldown@~6.0.0, abstract-leveldown@~6.0.1, abstract-leveldown@~6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.0.3.tgz#b4b6159343c74b0c5197b2817854782d8f748c4a"
+ integrity sha512-jzewKKpZbaYUa6HTThnrl+GrJhzjEAeuc7hTVpZdzg7kupXZFoqQDFwyOwLNbmJKJlmzw8yiipMPkDiuKkT06Q==
+ dependencies:
+ level-concat-iterator "~2.0.0"
+ xtend "~4.0.0"
+
+abstract-leveldown@~6.2.1:
+ version "6.2.3"
+ resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb"
+ integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==
+ dependencies:
+ buffer "^5.5.0"
+ immediate "^3.2.3"
+ level-concat-iterator "~2.0.0"
+ level-supports "~1.0.0"
+ xtend "~4.0.0"
+
+accepts@~1.3.7:
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
+ integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
+ dependencies:
+ mime-types "~2.1.24"
+ negotiator "0.6.2"
+
+acorn-jsx@^5.3.1:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b"
+ integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==
+
+acorn@^7.4.0:
+ version "7.4.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
+ integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
+
+aes-js@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d"
+ integrity sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=
+
+aggregate-error@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
+ integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
+ dependencies:
+ clean-stack "^2.0.0"
+ indent-string "^4.0.0"
+
+ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4:
+ version "6.12.6"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+ansi-colors@4.1.1, ansi-colors@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
+ integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+ integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+
+ansi-regex@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
+ integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+
+ansi-regex@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
+ integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
+
+ansi-styles@^3.2.0, ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+any-signal@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/any-signal/-/any-signal-1.2.0.tgz#d755f690896f3e75c4a07480f429a1ee7f8db3b4"
+ integrity sha512-Cl08k4xItix3jvu4cxO/dt2rQ6iUAjO66pTyRMub+WL1VXeAyZydCpD8GqWTPKfdL28U0R0UucmQVsUsBnvCmQ==
+ dependencies:
+ abort-controller "^3.0.0"
+
+any-signal@^2.0.0, any-signal@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/any-signal/-/any-signal-2.1.1.tgz#6458f7ce08cfdd8df21953016ae03ca129b07e35"
+ integrity sha512-kjyMTtHQsB3yZAVDZlLVucPJnmnrXhamB/rm3Td3jse5Q+16FXXolP4elWU0yLFDyrxTkjjDXtIdjSPiEznf3w==
+ dependencies:
+ abort-controller "^3.0.0"
+ native-abort-controller "0.0.3"
+
+anymatch@~3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142"
+ integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+aproba@^1.0.3:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+ integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+
+are-we-there-yet@~1.1.2:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
+ integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.6"
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+argsarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/argsarray/-/argsarray-0.0.1.tgz#6e7207b4ecdb39b0af88303fa5ae22bda8df61cb"
+ integrity sha1-bnIHtOzbObCviDA/pa4ivajfYcs=
+
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+ integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+
+arr-flatten@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+ integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+ integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+
+array-each@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f"
+ integrity sha1-p5SvDAWrF1KEbudTofIRoFugxE8=
+
+array-flatten@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+ integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
+
+array-includes@^3.1.1, array-includes@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.2.tgz#a8db03e0b88c8c6aeddc49cb132f9bcab4ebf9c8"
+ integrity sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw==
+ dependencies:
+ call-bind "^1.0.0"
+ define-properties "^1.1.3"
+ es-abstract "^1.18.0-next.1"
+ get-intrinsic "^1.0.1"
+ is-string "^1.0.5"
+
+array-slice@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4"
+ integrity sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==
+
+array-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+ integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+
+array.prototype.flat@^1.2.3:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123"
+ integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==
+ dependencies:
+ call-bind "^1.0.0"
+ define-properties "^1.1.3"
+ es-abstract "^1.18.0-next.1"
+
+array.prototype.flatmap@^1.2.3:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9"
+ integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==
+ dependencies:
+ call-bind "^1.0.0"
+ define-properties "^1.1.3"
+ es-abstract "^1.18.0-next.1"
+ function-bind "^1.1.1"
+
+asmcrypto.js@^2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/asmcrypto.js/-/asmcrypto.js-2.3.2.tgz#b9f84bd0a1fb82f21f8c29cc284a707ad17bba2e"
+ integrity sha512-3FgFARf7RupsZETQ1nHnhLUUvpcttcCq1iZCaVAbJZbCZ5VNRrNyvpDyHTOb0KC3llFcsyOT/a99NZcCbeiEsA==
+
+asn1.js@^5.0.1:
+ version "5.4.1"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07"
+ integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==
+ dependencies:
+ bn.js "^4.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+ safer-buffer "^2.1.0"
+
+asn1@~0.2.3:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
+ integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
+ dependencies:
+ safer-buffer "~2.1.0"
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
+
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
+astral-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
+ integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
+
+async@>=0.2.9:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720"
+ integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==
+
+async@^2.6.1, async@^2.6.2:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
+ integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
+ dependencies:
+ lodash "^4.17.14"
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+at-least-node@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
+ integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
+
+atob@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+ integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
+aws-sign2@~0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+ integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
+
+aws4@^1.8.0:
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
+ integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
+
+balanced-match@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+ integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+
+base-x@^3.0.2, base-x@^3.0.8:
+ version "3.0.8"
+ resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.8.tgz#1e1106c2537f0162e8b52474a557ebb09000018d"
+ integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==
+ dependencies:
+ safe-buffer "^5.0.1"
+
+base64-js@^1.3.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+ integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
+base@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+ dependencies:
+ cache-base "^1.0.1"
+ class-utils "^0.3.5"
+ component-emitter "^1.2.1"
+ define-property "^1.0.0"
+ isobject "^3.0.1"
+ mixin-deep "^1.2.0"
+ pascalcase "^0.1.1"
+
+basic-auth@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a"
+ integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==
+ dependencies:
+ safe-buffer "5.1.2"
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+ integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
+ dependencies:
+ tweetnacl "^0.14.3"
+
+bech32@1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9"
+ integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==
+
+bencode@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/bencode/-/bencode-1.0.0.tgz#0b83aea885b3547b579ada0c6a5e7739fe4d073e"
+ integrity sha512-N+VOSP5MkoX+xgnp6Y056iCY5TmCZg9rgPNPQe0bIiXchxYFP4vs/Tf0dTdQ+qQhP7HM2gvfFq+sUVjQsGy5Zw==
+ dependencies:
+ safe-buffer "^5.1.1"
+
+bencode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/bencode/-/bencode-2.0.1.tgz#667a6a31c5e038d558608333da6b7c94e836c85b"
+ integrity sha512-2uhEl8FdjSBUyb69qDTgOEeeqDTa+n3yMQzLW0cOzNf1Ow5bwcg3idf+qsWisIKRH8Bk8oC7UXL8irRcPA8ZEQ==
+ dependencies:
+ safe-buffer "^5.1.1"
+
+bignumber.js@^9.0.0:
+ version "9.0.1"
+ resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5"
+ integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==
+
+binary-extensions@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+ integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+
+binary@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79"
+ integrity sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=
+ dependencies:
+ buffers "~0.1.1"
+ chainsaw "~0.1.0"
+
+bindings@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
+ integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
+ dependencies:
+ file-uri-to-path "1.0.0"
+
+bip66@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/bip66/-/bip66-1.1.5.tgz#01fa8748785ca70955d5011217d1b3139969ca22"
+ integrity sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=
+ dependencies:
+ safe-buffer "^5.0.1"
+
+bitboot@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/bitboot/-/bitboot-0.1.0.tgz#936c2d013889cb735df8f8c5d61263ab5feec49b"
+ integrity sha512-c+mI5FBjdzdD3dZhCTH44I0PZoQJEhv4tEC5wx2kYT48HY8CespJxeD0IDqUIyYGsapI/+F/wWpDDSQHn/USgQ==
+ dependencies:
+ bittorrent-dht "^7.2.2"
+ bitwise "^0.2.0"
+ debug "^2.2.0"
+ k-bucket "^3.0.1"
+
+bittorrent-dht@^7.2.2:
+ version "7.10.0"
+ resolved "https://registry.yarnpkg.com/bittorrent-dht/-/bittorrent-dht-7.10.0.tgz#c5d47ddb21b0003a4ce22b11202a505b350ac0ff"
+ integrity sha512-fvb6M58Ceiv/S94nu6zeaiMoJvUYOeIqRbgaClm+kJTzCAqJPtAR/31pXNYB5iEReOoKqQB5zY33gY0W6ZRWQQ==
+ dependencies:
+ bencode "^1.0.0"
+ buffer-equals "^1.0.3"
+ debug "^3.1.0"
+ inherits "^2.0.1"
+ k-bucket "^3.3.0"
+ k-rpc "^4.2.1"
+ lru "^3.1.0"
+ randombytes "^2.0.5"
+ safe-buffer "^5.0.1"
+ simple-sha1 "^2.1.0"
+
+bitwise@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/bitwise/-/bitwise-0.2.0.tgz#99e5dfbfa4ee1c32073dc242266753c025f1e276"
+ integrity sha1-meXfv6TuHDIHPcJCJmdTwCXx4nY=
+
+bl@^4.0.0, bl@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489"
+ integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==
+ dependencies:
+ buffer "^5.5.0"
+ inherits "^2.0.4"
+ readable-stream "^3.4.0"
+
+blakejs@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5"
+ integrity sha1-ad+S75U6qIylGjLfarHFShVfx6U=
+
+blob-to-it@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/blob-to-it/-/blob-to-it-0.0.2.tgz#851b4db0be4acebc86dd1c14c14b77fdc473e9b0"
+ integrity sha512-3/NRr0mUWQTkS71MYEC1teLbT5BTs7RZ6VMPXDV6qApjw3B4TAZspQuvDkYfHuD/XzL5p/RO91x5XRPeJvcCqg==
+ dependencies:
+ browser-readablestream-to-it "^0.0.2"
+
+blob-to-it@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/blob-to-it/-/blob-to-it-1.0.1.tgz#a520e21351badd50064d776589639aa197ef97e4"
+ integrity sha512-papO4swPtR4MtNQ2foUkaS9e7HlD8XFQEBL3HZNhT4Qp6RQ/7t4C6bo4kRKtJV6A3AIgKR05Z9sbB+na6u+QYA==
+ dependencies:
+ browser-readablestream-to-it "^1.0.1"
+
+block-stream@*:
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
+ integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=
+ dependencies:
+ inherits "~2.0.0"
+
+bn.js@^4.0.0, bn.js@^4.11.8, bn.js@^4.4.0:
+ version "4.11.9"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828"
+ integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==
+
+body-parser@1.19.0, body-parser@^1.18.3:
+ version "1.19.0"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
+ integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
+ dependencies:
+ bytes "3.1.0"
+ content-type "~1.0.4"
+ debug "2.6.9"
+ depd "~1.1.2"
+ http-errors "1.7.2"
+ iconv-lite "0.4.24"
+ on-finished "~2.3.0"
+ qs "6.7.0"
+ raw-body "2.4.0"
+ type-is "~1.6.17"
+
+borc@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/borc/-/borc-2.1.2.tgz#6ce75e7da5ce711b963755117dd1b187f6f8cf19"
+ integrity sha512-Sy9eoUi4OiKzq7VovMn246iTo17kzuyHJKomCfpWMlI6RpfN1gk95w7d7gH264nApVLg0HZfcpz62/g4VH1Y4w==
+ dependencies:
+ bignumber.js "^9.0.0"
+ buffer "^5.5.0"
+ commander "^2.15.0"
+ ieee754 "^1.1.13"
+ iso-url "~0.4.7"
+ json-text-sequence "~0.1.0"
+ readable-stream "^3.6.0"
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^2.3.1:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.1"
+
+braces@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+brorand@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+ integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
+
+browser-readablestream-to-it@0.0.2, browser-readablestream-to-it@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/browser-readablestream-to-it/-/browser-readablestream-to-it-0.0.2.tgz#4a5c2a20567623c106125ca6b640f68b081cea25"
+ integrity sha512-bbiTccngeAbPmpTUJcUyr6JhivADKV9xkNJVLdA91vjdzXyFBZ6fgrzElQsV3k1UNGQACRTl3p4y+cEGG9U48A==
+
+browser-readablestream-to-it@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/browser-readablestream-to-it/-/browser-readablestream-to-it-1.0.1.tgz#50ac349f38f6c0ace3c338f90699f7dc936c46ca"
+ integrity sha512-vLeoyPpVY8IL5R4AEMI5nICVpuK1VBwBi6OUyuD1U9NUOL7UmAgP4agfbkkkZf+cBZaYtCYrgASd6YyVbIbsjA==
+
+browser-stdout@1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
+ integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
+
+browserify-aes@^1.0.6, browserify-aes@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
+ integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
+ dependencies:
+ buffer-xor "^1.0.3"
+ cipher-base "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.3"
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+browserify-zlib@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
+ integrity sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=
+ dependencies:
+ pako "~0.2.0"
+
+bs58@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a"
+ integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo=
+ dependencies:
+ base-x "^3.0.2"
+
+buffer-equals@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/buffer-equals/-/buffer-equals-1.0.4.tgz#0353b54fd07fd9564170671ae6f66b9cf10d27f5"
+ integrity sha1-A1O1T9B/2VZBcGca5vZrnPENJ/U=
+
+buffer-from@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-0.1.2.tgz#15f4b9bcef012044df31142c14333caf6e0260d0"
+ integrity sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==
+
+buffer-from@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+ integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
+buffer-peek-stream@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/buffer-peek-stream/-/buffer-peek-stream-1.1.0.tgz#4d0c3605274e1af479a2654b9b9674458897cd86"
+ integrity sha512-b3MXlJ52rPOL5xCAQsiCOy/tY9WXOP/hwATporJriUDxnT3MjJgVppDzTFegpg2Nw7NMS28MKC6IKvaXLnGr+Q==
+
+buffer-xor@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+ integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
+
+buffer@^5.4.3, buffer@^5.5.0, buffer@^5.6.0:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
+ integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
+ dependencies:
+ base64-js "^1.3.1"
+ ieee754 "^1.1.13"
+
+buffer@^6.0.1:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
+ integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==
+ dependencies:
+ base64-js "^1.3.1"
+ ieee754 "^1.2.1"
+
+buffers@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb"
+ integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s=
+
+bytes@3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
+ integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
+
+cache-base@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+ dependencies:
+ collection-visit "^1.0.0"
+ component-emitter "^1.2.1"
+ get-value "^2.0.6"
+ has-value "^1.0.0"
+ isobject "^3.0.1"
+ set-value "^2.0.0"
+ to-object-path "^0.3.0"
+ union-value "^1.0.0"
+ unset-value "^1.0.0"
+
+call-bind@^1.0.0, call-bind@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
+ integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
+ dependencies:
+ function-bind "^1.1.1"
+ get-intrinsic "^1.0.2"
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camelcase@^5.0.0:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+ integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+
+camelcase@^6.0.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809"
+ integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==
+
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+ integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
+
+chainsaw@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98"
+ integrity sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=
+ dependencies:
+ traverse ">=0.3.0 <0.4"
+
+chalk@^2.0.0:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
+ integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+chokidar@3.4.3:
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b"
+ integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==
+ dependencies:
+ anymatch "~3.1.1"
+ braces "~3.0.2"
+ glob-parent "~5.1.0"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.5.0"
+ optionalDependencies:
+ fsevents "~2.1.2"
+
+chownr@^1.1.1:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
+ integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
+
+chrome-dgram@^3.0.2:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/chrome-dgram/-/chrome-dgram-3.0.6.tgz#2288b5c7471f66f073691206d36319dda713cf55"
+ integrity sha512-bqBsUuaOiXiqxXt/zA/jukNJJ4oaOtc7ciwqJpZVEaaXwwxqgI2/ZdG02vXYWUhHGziDlvGMQWk0qObgJwVYKA==
+ dependencies:
+ inherits "^2.0.4"
+ run-series "^1.1.9"
+
+chrome-dns@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/chrome-dns/-/chrome-dns-1.0.1.tgz#6870af680a40d2c4b2efc2154a378793f5a4ce4b"
+ integrity sha512-HqsYJgIc8ljJJOqOzLphjAs79EUuWSX3nzZi2LNkzlw3GIzAeZbaSektC8iT/tKvLqZq8yl1GJu5o6doA4TRbg==
+ dependencies:
+ chrome-net "^3.3.2"
+
+chrome-net@^3.3.2:
+ version "3.3.4"
+ resolved "https://registry.yarnpkg.com/chrome-net/-/chrome-net-3.3.4.tgz#0e604a31d226ebfb8d2d1c381cab47d35309825d"
+ integrity sha512-Jzy2EnzmE+ligqIZUsmWnck9RBXLuUy6CaKyuNMtowFG3ZvLt8d+WBJCTPEludV0DHpIKjAOlwjFmTaEdfdWCw==
+ dependencies:
+ inherits "^2.0.1"
+
+cids@^0.7.1:
+ version "0.7.5"
+ resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2"
+ integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==
+ dependencies:
+ buffer "^5.5.0"
+ class-is "^1.1.0"
+ multibase "~0.6.0"
+ multicodec "^1.0.0"
+ multihashes "~0.4.15"
+
+cids@^1.0.0, cids@^1.0.2, cids@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/cids/-/cids-1.1.5.tgz#778bf8b70de3a0bf70989fd7d89c28fe23c685cb"
+ integrity sha512-i0V7tF2Jf78BKXyy2rpy1H/ozaJEP8b3Z7ZcHe9J86RRvJZ4e7daaJP3xwL09e14/Bl/mYX5WVc36fbQtjH7Sg==
+ dependencies:
+ multibase "^3.0.1"
+ multicodec "^2.1.0"
+ multihashes "^3.1.0"
+ uint8arrays "^2.0.5"
+
+cids@~0.8.0:
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/cids/-/cids-0.8.3.tgz#aaf48ac8ed857c3d37dad94d8db1d8c9407b92db"
+ integrity sha512-yoXTbV3llpm+EBGWKeL9xKtksPE/s6DPoDSY4fn8I8TEW1zehWXPSB0pwAXVDlLaOlrw+sNynj995uD9abmPhA==
+ dependencies:
+ buffer "^5.6.0"
+ class-is "^1.1.0"
+ multibase "^1.0.0"
+ multicodec "^1.0.1"
+ multihashes "^1.0.1"
+
+cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+ integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+class-is@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825"
+ integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==
+
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
+clean-stack@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
+ integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+
+cliui@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
+ integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
+ dependencies:
+ string-width "^3.1.0"
+ strip-ansi "^5.2.0"
+ wrap-ansi "^5.1.0"
+
+cliui@^7.0.2:
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
+ integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+ wrap-ansi "^7.0.0"
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+ dependencies:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+colorette@1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b"
+ integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==
+
+combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@^2.15.0:
+ version "2.20.3"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+commander@^6.2.0:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c"
+ integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==
+
+component-emitter@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+ integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+concat-stream@^1.5.0:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+
+contains-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
+ integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
+
+content-disposition@0.5.3:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
+ integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
+ dependencies:
+ safe-buffer "5.1.2"
+
+content-type@^1.0.4, content-type@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
+ integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
+
+cookie-signature@1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+ integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
+
+cookie@0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
+ integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
+
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+ integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
+
+core-util-is@1.0.2, core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+crdts@~0.1.2:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/crdts/-/crdts-0.1.5.tgz#89413e8adfc3ab943300a890ee6392db5ba60c06"
+ integrity sha512-4Z/dQqa9qzMPlrE+zd0ecl53QFwaTZVVYTUgxvpF0k8OcOy4HY7c+C9brXp81eigLE0EKENTVp3CjIMY9b/ezg==
+
+create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
+ integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
+ dependencies:
+ cipher-base "^1.0.1"
+ inherits "^2.0.1"
+ md5.js "^1.3.4"
+ ripemd160 "^2.0.1"
+ sha.js "^2.4.0"
+
+create-hmac@^1.1.4:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
+ integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
+ dependencies:
+ cipher-base "^1.0.3"
+ create-hash "^1.1.0"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+cross-spawn@^7.0.2, cross-spawn@^7.0.3:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+d64@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/d64/-/d64-1.0.0.tgz#4002a87e850cbfc9f9d9706b60fca613a3336e90"
+ integrity sha1-QAKofoUMv8n52XBrYPymE6MzbpA=
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
+ dependencies:
+ assert-plus "^1.0.0"
+
+debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ dependencies:
+ ms "2.0.0"
+
+debug@4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1"
+ integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==
+ dependencies:
+ ms "2.1.2"
+
+debug@4.3.1, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@~4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
+ integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
+ dependencies:
+ ms "2.1.2"
+
+debug@^3.1.0, debug@^3.2.6:
+ version "3.2.7"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
+ integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
+ dependencies:
+ ms "^2.1.1"
+
+decamelize@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+decamelize@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837"
+ integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==
+
+decode-uri-component@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+ integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+
+deep-extend@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+ integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
+deep-is@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+ integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
+
+deferred-leveldown@~5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.1.0.tgz#c21e40641a8e48530255a4ad31371cc7fe76b332"
+ integrity sha512-PvDY+BT2ONu2XVRgxHb77hYelLtMYxKSGuWuJJdVRXh9ntqx9GYTFJno/SKAz5xcd+yjQwyQeIZrUPjPvA52mg==
+ dependencies:
+ abstract-leveldown "~6.0.0"
+ inherits "^2.0.3"
+
+deferred-leveldown@~5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058"
+ integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==
+ dependencies:
+ abstract-leveldown "~6.2.1"
+ inherits "^2.0.3"
+
+define-properties@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+ integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
+ dependencies:
+ object-keys "^1.0.12"
+
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+ dependencies:
+ is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+ dependencies:
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+delimit-stream@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/delimit-stream/-/delimit-stream-0.1.0.tgz#9b8319477c0e5f8aeb3ce357ae305fc25ea1cd2b"
+ integrity sha1-m4MZR3wOX4rrPONXrjBfwl6hzSs=
+
+depd@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+ integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
+
+depd@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
+ integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
+
+destroy@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
+ integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
+
+detect-file@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
+ integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=
+
+detect-libc@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
+ integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
+
+diff@4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
+ integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
+
+dns-over-http-resolver@^1.0.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/dns-over-http-resolver/-/dns-over-http-resolver-1.2.1.tgz#52367113aa6d62dffa9dc45f7bde798aa860e703"
+ integrity sha512-bYGLGLraOc1tllkC0Xaw+zBiQBnPyooNDpaXNYZprLn0bI6zLmX73QfR+jODz6rZ9oAUn1pw5OWxlEsSoho5TQ==
+ dependencies:
+ debug "^4.2.0"
+ native-fetch "^2.0.1"
+ receptacle "^1.3.2"
+
+doctrine@1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
+ integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
+ dependencies:
+ esutils "^2.0.2"
+ isarray "^1.0.0"
+
+doctrine@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+ integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
+ dependencies:
+ esutils "^2.0.2"
+
+doctrine@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+ integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ dependencies:
+ esutils "^2.0.2"
+
+drbg.js@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/drbg.js/-/drbg.js-1.0.1.tgz#3e36b6c42b37043823cdbc332d58f31e2445480b"
+ integrity sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=
+ dependencies:
+ browserify-aes "^1.0.6"
+ create-hash "^1.1.2"
+ create-hmac "^1.1.4"
+
+duplexer@^0.1.1, duplexer@~0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
+ integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
+
+duplexify@^3.5.0, duplexify@^3.6.0:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
+ integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
+ dependencies:
+ end-of-stream "^1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
+ecc-jsbn@~0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+ integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
+ dependencies:
+ jsbn "~0.1.0"
+ safer-buffer "^2.1.0"
+
+ee-first@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+ integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
+
+electron-fetch@^1.7.2:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/electron-fetch/-/electron-fetch-1.7.3.tgz#06cf363d7f64073ec00a37e9949ec9d29ce6b08a"
+ integrity sha512-1AVMaxrHXTTMqd7EK0MGWusdqNr07Rpj8Th6bG4at0oNgIi/1LBwa9CjT/0Zy+M0k/tSJPS04nFxHj0SXDVgVw==
+ dependencies:
+ encoding "^0.1.13"
+
+elliptic@6.5.3, elliptic@^6.5.2, elliptic@^6.5.3:
+ version "6.5.3"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6"
+ integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==
+ dependencies:
+ bn.js "^4.4.0"
+ brorand "^1.0.1"
+ hash.js "^1.0.0"
+ hmac-drbg "^1.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.0"
+
+emoji-regex@^7.0.1:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
+ integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+encodeurl@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+ integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
+
+encoding-down@^6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b"
+ integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==
+ dependencies:
+ abstract-leveldown "^6.2.1"
+ inherits "^2.0.3"
+ level-codec "^9.0.0"
+ level-errors "^2.0.0"
+
+encoding@^0.1.13:
+ version "0.1.13"
+ resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
+ integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
+ dependencies:
+ iconv-lite "^0.6.2"
+
+end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ dependencies:
+ once "^1.4.0"
+
+enquirer@^2.3.5:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
+ integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
+ dependencies:
+ ansi-colors "^4.1.1"
+
+err-code@^2.0.0, err-code@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9"
+ integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==
+
+errno@~0.1.1:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f"
+ integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==
+ dependencies:
+ prr "~1.0.1"
+
+error-ex@^1.2.0, error-ex@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ dependencies:
+ is-arrayish "^0.2.1"
+
+es-abstract@^1.17.0-next.1:
+ version "1.17.7"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c"
+ integrity sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==
+ dependencies:
+ es-to-primitive "^1.2.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.1"
+ is-callable "^1.2.2"
+ is-regex "^1.1.1"
+ object-inspect "^1.8.0"
+ object-keys "^1.1.1"
+ object.assign "^4.1.1"
+ string.prototype.trimend "^1.0.1"
+ string.prototype.trimstart "^1.0.1"
+
+es-abstract@^1.18.0-next.1:
+ version "1.18.0-next.2"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.2.tgz#088101a55f0541f595e7e057199e27ddc8f3a5c2"
+ integrity sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==
+ dependencies:
+ call-bind "^1.0.2"
+ es-to-primitive "^1.2.1"
+ function-bind "^1.1.1"
+ get-intrinsic "^1.0.2"
+ has "^1.0.3"
+ has-symbols "^1.0.1"
+ is-callable "^1.2.2"
+ is-negative-zero "^2.0.1"
+ is-regex "^1.1.1"
+ object-inspect "^1.9.0"
+ object-keys "^1.1.1"
+ object.assign "^4.1.2"
+ string.prototype.trimend "^1.0.3"
+ string.prototype.trimstart "^1.0.3"
+
+es-to-primitive@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+ integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+ dependencies:
+ is-callable "^1.1.4"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.2"
+
+escalade@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+ integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
+escape-html@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+ integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
+
+escape-string-regexp@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+eslint-config-standard-jsx@10.0.0:
+ version "10.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-10.0.0.tgz#dc24992661325a2e480e2c3091d669f19034e18d"
+ integrity sha512-hLeA2f5e06W1xyr/93/QJulN/rLbUVUmqTlexv9PRKHFwEC9ffJcH2LvJhMoEqYQBEYafedgGZXH2W8NUpt5lA==
+
+eslint-config-standard@16.0.2:
+ version "16.0.2"
+ resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-16.0.2.tgz#71e91727ac7a203782d0a5ca4d1c462d14e234f6"
+ integrity sha512-fx3f1rJDsl9bY7qzyX8SAtP8GBSk6MfXFaTfaGgk12aAYW4gJSyRm7dM790L6cbXv63fvjY4XeSzXnb4WM+SKw==
+
+eslint-import-resolver-node@^0.3.4:
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717"
+ integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==
+ dependencies:
+ debug "^2.6.9"
+ resolve "^1.13.1"
+
+eslint-module-utils@^2.6.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6"
+ integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==
+ dependencies:
+ debug "^2.6.9"
+ pkg-dir "^2.0.0"
+
+eslint-plugin-es@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893"
+ integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==
+ dependencies:
+ eslint-utils "^2.0.0"
+ regexpp "^3.0.0"
+
+eslint-plugin-import@~2.22.1:
+ version "2.22.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702"
+ integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==
+ dependencies:
+ array-includes "^3.1.1"
+ array.prototype.flat "^1.2.3"
+ contains-path "^0.1.0"
+ debug "^2.6.9"
+ doctrine "1.5.0"
+ eslint-import-resolver-node "^0.3.4"
+ eslint-module-utils "^2.6.0"
+ has "^1.0.3"
+ minimatch "^3.0.4"
+ object.values "^1.1.1"
+ read-pkg-up "^2.0.0"
+ resolve "^1.17.0"
+ tsconfig-paths "^3.9.0"
+
+eslint-plugin-node@~11.1.0:
+ version "11.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d"
+ integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==
+ dependencies:
+ eslint-plugin-es "^3.0.0"
+ eslint-utils "^2.0.0"
+ ignore "^5.1.1"
+ minimatch "^3.0.4"
+ resolve "^1.10.1"
+ semver "^6.1.0"
+
+eslint-plugin-promise@~4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a"
+ integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==
+
+eslint-plugin-react@~7.21.5:
+ version "7.21.5"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz#50b21a412b9574bfe05b21db176e8b7b3b15bff3"
+ integrity sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g==
+ dependencies:
+ array-includes "^3.1.1"
+ array.prototype.flatmap "^1.2.3"
+ doctrine "^2.1.0"
+ has "^1.0.3"
+ jsx-ast-utils "^2.4.1 || ^3.0.0"
+ object.entries "^1.1.2"
+ object.fromentries "^2.0.2"
+ object.values "^1.1.1"
+ prop-types "^15.7.2"
+ resolve "^1.18.1"
+ string.prototype.matchall "^4.0.2"
+
+eslint-scope@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
+ integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^4.1.1"
+
+eslint-utils@^2.0.0, eslint-utils@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
+ integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
+ dependencies:
+ eslint-visitor-keys "^1.1.0"
+
+eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
+ integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
+
+eslint-visitor-keys@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8"
+ integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==
+
+eslint@~7.13.0:
+ version "7.13.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.13.0.tgz#7f180126c0dcdef327bfb54b211d7802decc08da"
+ integrity sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@eslint/eslintrc" "^0.2.1"
+ ajv "^6.10.0"
+ chalk "^4.0.0"
+ cross-spawn "^7.0.2"
+ debug "^4.0.1"
+ doctrine "^3.0.0"
+ enquirer "^2.3.5"
+ eslint-scope "^5.1.1"
+ eslint-utils "^2.1.0"
+ eslint-visitor-keys "^2.0.0"
+ espree "^7.3.0"
+ esquery "^1.2.0"
+ esutils "^2.0.2"
+ file-entry-cache "^5.0.1"
+ functional-red-black-tree "^1.0.1"
+ glob-parent "^5.0.0"
+ globals "^12.1.0"
+ ignore "^4.0.6"
+ import-fresh "^3.0.0"
+ imurmurhash "^0.1.4"
+ is-glob "^4.0.0"
+ js-yaml "^3.13.1"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.4.1"
+ lodash "^4.17.19"
+ minimatch "^3.0.4"
+ natural-compare "^1.4.0"
+ optionator "^0.9.1"
+ progress "^2.0.0"
+ regexpp "^3.1.0"
+ semver "^7.2.1"
+ strip-ansi "^6.0.0"
+ strip-json-comments "^3.1.0"
+ table "^5.2.3"
+ text-table "^0.2.0"
+ v8-compile-cache "^2.0.3"
+
+esm@^3.2.25:
+ version "3.2.25"
+ resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10"
+ integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==
+
+espree@^7.3.0:
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6"
+ integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==
+ dependencies:
+ acorn "^7.4.0"
+ acorn-jsx "^5.3.1"
+ eslint-visitor-keys "^1.3.0"
+
+esprima@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esquery@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57"
+ integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==
+ dependencies:
+ estraverse "^5.1.0"
+
+esrecurse@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+ dependencies:
+ estraverse "^5.2.0"
+
+estraverse@^4.1.1:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+ integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+estraverse@^5.1.0, estraverse@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
+ integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
+
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+etag@~1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
+ integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
+
+ethers@^5.0.8:
+ version "5.0.26"
+ resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.0.26.tgz#ef43c6b6aad71f10c1a184003f69b142d7d03bae"
+ integrity sha512-MqA8Fvutn3qEW0yBJOHeV6KZmRpF2rqlL2B5058AGkUFsuu6j5Ns/FRlMsbGeQwBz801IB23jQp7vjRfFsKSkg==
+ dependencies:
+ "@ethersproject/abi" "5.0.10"
+ "@ethersproject/abstract-provider" "5.0.8"
+ "@ethersproject/abstract-signer" "5.0.11"
+ "@ethersproject/address" "5.0.9"
+ "@ethersproject/base64" "5.0.7"
+ "@ethersproject/basex" "5.0.7"
+ "@ethersproject/bignumber" "5.0.13"
+ "@ethersproject/bytes" "5.0.9"
+ "@ethersproject/constants" "5.0.8"
+ "@ethersproject/contracts" "5.0.9"
+ "@ethersproject/hash" "5.0.10"
+ "@ethersproject/hdnode" "5.0.8"
+ "@ethersproject/json-wallets" "5.0.10"
+ "@ethersproject/keccak256" "5.0.7"
+ "@ethersproject/logger" "5.0.8"
+ "@ethersproject/networks" "5.0.7"
+ "@ethersproject/pbkdf2" "5.0.7"
+ "@ethersproject/properties" "5.0.7"
+ "@ethersproject/providers" "5.0.19"
+ "@ethersproject/random" "5.0.7"
+ "@ethersproject/rlp" "5.0.7"
+ "@ethersproject/sha2" "5.0.7"
+ "@ethersproject/signing-key" "5.0.8"
+ "@ethersproject/solidity" "5.0.8"
+ "@ethersproject/strings" "5.0.8"
+ "@ethersproject/transactions" "5.0.9"
+ "@ethersproject/units" "5.0.9"
+ "@ethersproject/wallet" "5.0.10"
+ "@ethersproject/web" "5.0.12"
+ "@ethersproject/wordlists" "5.0.8"
+
+event-stream@^3.3.1:
+ version "3.3.5"
+ resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.5.tgz#e5dd8989543630d94c6cf4d657120341fa31636b"
+ integrity sha512-vyibDcu5JL20Me1fP734QBH/kenBGLZap2n0+XXM7mvuUPzJ20Ydqj1aKcIeMdri1p+PU+4yAKugjN8KCVst+g==
+ dependencies:
+ duplexer "^0.1.1"
+ from "^0.1.7"
+ map-stream "0.0.7"
+ pause-stream "^0.0.11"
+ split "^1.0.1"
+ stream-combiner "^0.2.2"
+ through "^2.3.8"
+
+event-target-shim@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
+ integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
+
+eventemitter3@^4.0.4:
+ version "4.0.7"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
+ integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
+
+evp_bytestokey@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+ integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
+ dependencies:
+ md5.js "^1.3.4"
+ safe-buffer "^5.1.1"
+
+execa@^5.0.0, execa@~5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376"
+ integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==
+ dependencies:
+ cross-spawn "^7.0.3"
+ get-stream "^6.0.0"
+ human-signals "^2.1.0"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^4.0.1"
+ onetime "^5.1.2"
+ signal-exit "^3.0.3"
+ strip-final-newline "^2.0.0"
+
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+expand-tilde@^2.0.0, expand-tilde@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
+ integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=
+ dependencies:
+ homedir-polyfill "^1.0.1"
+
+expose-gc@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/expose-gc/-/expose-gc-1.0.0.tgz#ba0e825b390cc3e7ab38fc5b945cd2b4018584b3"
+ integrity sha512-ecOHrdm+zyOCGIwX18/1RHkUWgxDqGGRiGhaNC+42jReTtudbm2ID/DMa/wpaHwqy5YQHPZvsDqRM2F2iZ0uVA==
+
+express@^4.16.3:
+ version "4.17.1"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"
+ integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==
+ dependencies:
+ accepts "~1.3.7"
+ array-flatten "1.1.1"
+ body-parser "1.19.0"
+ content-disposition "0.5.3"
+ content-type "~1.0.4"
+ cookie "0.4.0"
+ cookie-signature "1.0.6"
+ debug "2.6.9"
+ depd "~1.1.2"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ finalhandler "~1.1.2"
+ fresh "0.5.2"
+ merge-descriptors "1.0.1"
+ methods "~1.1.2"
+ on-finished "~2.3.0"
+ parseurl "~1.3.3"
+ path-to-regexp "0.1.7"
+ proxy-addr "~2.0.5"
+ qs "6.7.0"
+ range-parser "~1.2.1"
+ safe-buffer "5.1.2"
+ send "0.17.1"
+ serve-static "1.14.1"
+ setprototypeof "1.1.1"
+ statuses "~1.5.0"
+ type-is "~1.6.18"
+ utils-merge "1.0.1"
+ vary "~1.1.2"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+extend@^3.0.0, extend@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+extglob@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+ dependencies:
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+extsprintf@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+ integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
+
+extsprintf@^1.2.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
+ integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
+
+fast-deep-equal@^3.1.1:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+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-stable-stringify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+
+file-entry-cache@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
+ integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
+ dependencies:
+ flat-cache "^2.0.1"
+
+file-type@16.2.0:
+ version "16.2.0"
+ resolved "https://registry.yarnpkg.com/file-type/-/file-type-16.2.0.tgz#d4f1da71ddda758db7f15f93adfaed09ce9e2715"
+ integrity sha512-1Wwww3mmZCMmLjBfslCluwt2mxH80GsAXYrvPnfQ42G1EGWag336kB1iyCgyn7UXiKY3cJrNykXPrCwA7xb5Ag==
+ dependencies:
+ readable-web-to-node-stream "^3.0.0"
+ strtok3 "^6.0.3"
+ token-types "^2.0.0"
+ typedarray-to-buffer "^3.1.5"
+
+file-type@^14.1.4:
+ version "14.7.1"
+ resolved "https://registry.yarnpkg.com/file-type/-/file-type-14.7.1.tgz#f748732b3e70478bff530e1cf0ec2fe33608b1bb"
+ integrity sha512-sXAMgFk67fQLcetXustxfKX+PZgHIUFn96Xld9uH8aXPdX3xOp0/jg9OdouVTvQrf7mrn+wAa4jN/y9fUOOiRA==
+ dependencies:
+ readable-web-to-node-stream "^2.0.0"
+ strtok3 "^6.0.3"
+ token-types "^2.0.0"
+ typedarray-to-buffer "^3.1.5"
+
+file-uri-to-path@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+ integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
+
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+finalhandler@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
+ integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
+ dependencies:
+ debug "2.6.9"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ on-finished "~2.3.0"
+ parseurl "~1.3.3"
+ statuses "~1.5.0"
+ unpipe "~1.0.0"
+
+find-up@5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
+ integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
+ dependencies:
+ locate-path "^6.0.0"
+ path-exists "^4.0.0"
+
+find-up@^2.0.0, find-up@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
+ dependencies:
+ locate-path "^2.0.0"
+
+find-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+ integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+ dependencies:
+ locate-path "^3.0.0"
+
+findup-sync@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1"
+ integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==
+ dependencies:
+ detect-file "^1.0.0"
+ is-glob "^4.0.0"
+ micromatch "^3.0.4"
+ resolve-dir "^1.0.1"
+
+fined@^1.0.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/fined/-/fined-1.2.0.tgz#d00beccf1aa2b475d16d423b0238b713a2c4a37b"
+ integrity sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==
+ dependencies:
+ expand-tilde "^2.0.2"
+ is-plain-object "^2.0.3"
+ object.defaults "^1.1.0"
+ object.pick "^1.2.0"
+ parse-filepath "^1.0.1"
+
+flagged-respawn@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41"
+ integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==
+
+flat-cache@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
+ integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
+ dependencies:
+ flatted "^2.0.0"
+ rimraf "2.6.3"
+ write "1.0.3"
+
+flat@^5.0.2:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
+ integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
+
+flatted@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
+ integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
+
+flexsearch@^0.6.22:
+ version "0.6.32"
+ resolved "https://registry.yarnpkg.com/flexsearch/-/flexsearch-0.6.32.tgz#1e20684d317af65baa445cdd9864a5f5b320f510"
+ integrity sha512-EF1BWkhwoeLtbIlDbY/vDSLBen/E5l/f1Vg7iX5CDymQCamcx1vhlc3tIZxIDplPjgi0jhG37c67idFbjg+v+Q==
+
+"fluent-ffmpeg@github:fluent-ffmpeg/node-fluent-ffmpeg#1266709":
+ version "2.1.2"
+ resolved "https://codeload.github.com/fluent-ffmpeg/node-fluent-ffmpeg/tar.gz/12667091eeea09b0d6a55b87eb886aa131178608"
+ dependencies:
+ async ">=0.2.9"
+ which "^1.1.1"
+
+for-in@^1.0.1, for-in@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+
+for-own@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b"
+ integrity sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=
+ dependencies:
+ for-in "^1.0.1"
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+
+form-data@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682"
+ integrity sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ mime-types "^2.1.12"
+
+form-data@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+ integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.6"
+ mime-types "^2.1.12"
+
+forwarded@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
+ integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=
+
+fpcalc@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/fpcalc/-/fpcalc-1.3.0.tgz#b481db8d87f689c8b19d1ce8ed2c09c7ef74b736"
+ integrity sha512-9K52Vwoet877S1iTnIG5QiA5l61WDl9skY0dsmKK8HuzKChyX1Sp5YBXP1RTTLYf4YmLyCsC6rghVT9lompFDg==
+ dependencies:
+ concat-stream "^1.5.0"
+ event-stream "^3.3.1"
+ once "^1.3.2"
+ stream-filter "^1.0.0"
+ stream-reduce "^1.0.3"
+
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+ dependencies:
+ map-cache "^0.2.2"
+
+fresh@0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+ integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
+
+from@^0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe"
+ integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=
+
+fs-constants@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
+ integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
+
+fs-extra@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
+ integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
+fs-extra@^9.0.0, fs-extra@^9.0.1:
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
+ integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
+ dependencies:
+ at-least-node "^1.0.0"
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^2.0.0"
+
+fs-minipass@^1.2.5:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"
+ integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==
+ dependencies:
+ minipass "^2.6.0"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@~2.1.2:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e"
+ integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==
+
+fstream@^1.0.0, fstream@^1.0.12:
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045"
+ integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==
+ dependencies:
+ graceful-fs "^4.1.2"
+ inherits "~2.0.0"
+ mkdirp ">=0.5 0"
+ rimraf "2"
+
+function-bind@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+functional-red-black-tree@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
+ integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+
+gauge@~2.7.3:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+ integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wide-align "^1.1.0"
+
+get-caller-file@^2.0.1, get-caller-file@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-intrinsic@^1.0.1, get-intrinsic@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.2.tgz#6820da226e50b24894e08859469dc68361545d49"
+ integrity sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==
+ dependencies:
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.1"
+
+get-iterator@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/get-iterator/-/get-iterator-1.0.2.tgz#cd747c02b4c084461fac14f48f6b45a80ed25c82"
+ integrity sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg==
+
+get-stdin@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53"
+ integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==
+
+get-stream@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718"
+ integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==
+
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+
+getopts@2.2.5:
+ version "2.2.5"
+ resolved "https://registry.yarnpkg.com/getopts/-/getopts-2.2.5.tgz#67a0fe471cacb9c687d817cab6450b96dde8313b"
+ integrity sha512-9jb7AW5p3in+IiJWhQiZmmwkpLaR/ccTWdWQCtZM66HJcHHLegowh4q4tSD7gouUyeNvFWRavfK9GXosQHDpFA==
+
+getpass@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
+ dependencies:
+ assert-plus "^1.0.0"
+
+glob-parent@^5.0.0, glob-parent@~5.1.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229"
+ integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob@7.1.6, glob@^7.0.3, glob@^7.1.3:
+ version "7.1.6"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+ integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+global-modules@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
+ integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==
+ dependencies:
+ global-prefix "^1.0.1"
+ is-windows "^1.0.1"
+ resolve-dir "^1.0.0"
+
+global-prefix@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
+ integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=
+ dependencies:
+ expand-tilde "^2.0.2"
+ homedir-polyfill "^1.0.1"
+ ini "^1.3.4"
+ is-windows "^1.0.1"
+ which "^1.2.14"
+
+globals@^12.1.0:
+ version "12.4.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8"
+ integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==
+ dependencies:
+ type-fest "^0.8.1"
+
+globalthis@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.1.tgz#40116f5d9c071f9e8fb0037654df1ab3a83b7ef9"
+ integrity sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw==
+ dependencies:
+ define-properties "^1.1.3"
+
+go-ipfs@0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/go-ipfs/-/go-ipfs-0.8.0.tgz#e5a14f2bc36b76174305e596d29af6712f5465c1"
+ integrity sha512-T2nE6UgsmGeAAlr3//4sL3uNrU76RStJasD7lTNYCQV6mz13ynfku63paZRI5V2oGZTWh8ik7O7d0TXD0qD3rA==
+ dependencies:
+ go-platform "^1.0.0"
+ gunzip-maybe "^1.4.2"
+ node-fetch "^2.6.0"
+ pkg-conf "^3.1.0"
+ tar-fs "^2.1.0"
+ unzip-stream "^0.3.0"
+
+go-platform@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/go-platform/-/go-platform-1.0.0.tgz#b05ff6b9274007d246b164235f03f7f6a59626c7"
+ integrity sha1-sF/2uSdAB9JGsWQjXwP39qWWJsc=
+
+graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0:
+ version "4.2.4"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
+ integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
+
+growl@1.10.5:
+ version "1.10.5"
+ resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
+ integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==
+
+gunzip-maybe@^1.4.2:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz#b913564ae3be0eda6f3de36464837a9cd94b98ac"
+ integrity sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==
+ dependencies:
+ browserify-zlib "^0.1.4"
+ is-deflate "^1.0.0"
+ is-gzip "^1.0.0"
+ peek-stream "^1.1.0"
+ pumpify "^1.3.3"
+ through2 "^2.0.3"
+
+har-schema@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+ integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
+
+har-validator@~5.1.3:
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd"
+ integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==
+ dependencies:
+ ajv "^6.12.3"
+ har-schema "^2.0.0"
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-localstorage@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has-localstorage/-/has-localstorage-1.0.1.tgz#fe62406c4767fbd6d784dac6905928108b82971b"
+ integrity sha1-/mJAbEdn+9bXhNrGkFkoEIuClxs=
+
+has-symbols@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
+ integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
+
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
+ dependencies:
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
+
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
+ dependencies:
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+ integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+has@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+ integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+ dependencies:
+ function-bind "^1.1.1"
+
+hash-base@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"
+ integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==
+ dependencies:
+ inherits "^2.0.4"
+ readable-stream "^3.6.0"
+ safe-buffer "^5.2.0"
+
+hash.js@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846"
+ integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==
+ dependencies:
+ inherits "^2.0.3"
+ minimalistic-assert "^1.0.0"
+
+hash.js@^1.0.0, hash.js@^1.0.3:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
+ integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
+ dependencies:
+ inherits "^2.0.3"
+ minimalistic-assert "^1.0.1"
+
+hashish@~0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/hashish/-/hashish-0.0.4.tgz#6d60bc6ffaf711b6afd60e426d077988014e6554"
+ integrity sha1-bWC8b/r3Ebav1g5CbQd5iAFOZVQ=
+ dependencies:
+ traverse ">=0.2.4"
+
+he@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
+ integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+
+hh-mm-ss@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/hh-mm-ss/-/hh-mm-ss-1.2.0.tgz#6d0f0b8280824a634cb1d1f20e0bc7bc8b689948"
+ integrity sha512-f4I9Hz1dLpX/3mrEs7yq30+FiuO3tt5NWAqAGeBTaoeoBfB8vhcQ3BphuDc5DjZb/K809agqrAaFlP0jhEU/8w==
+ dependencies:
+ zero-fill "^2.2.3"
+
+hmac-drbg@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+ integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
+ dependencies:
+ hash.js "^1.0.3"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.1"
+
+homedir-polyfill@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
+ integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
+ dependencies:
+ parse-passwd "^1.0.0"
+
+hosted-git-info@^2.1.4:
+ version "2.8.8"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
+ integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==
+
+http-errors@1.7.2:
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
+ integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.3"
+ setprototypeof "1.1.1"
+ statuses ">= 1.5.0 < 2"
+ toidentifier "1.0.0"
+
+http-errors@~1.7.2:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
+ integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.4"
+ setprototypeof "1.1.1"
+ statuses ">= 1.5.0 < 2"
+ toidentifier "1.0.0"
+
+http-signature@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
+ dependencies:
+ assert-plus "^1.0.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+human-signals@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
+ integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
+
+humble-localstorage@^1.4.2:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/humble-localstorage/-/humble-localstorage-1.4.2.tgz#d05ab0d526c4edbddbf7c6a60df6ff5805283469"
+ integrity sha1-0Fqw1SbE7b3b98amDfb/WAUoNGk=
+ dependencies:
+ has-localstorage "^1.0.1"
+ localstorage-memory "^1.0.1"
+
+iconv-lite@0.4.24, iconv-lite@^0.4.4:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+iconv-lite@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01"
+ integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3.0.0"
+
+ieee754@^1.1.13, ieee754@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+ integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
+ignore-walk@^3.0.1:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37"
+ integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==
+ dependencies:
+ minimatch "^3.0.4"
+
+ignore@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
+ integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
+
+ignore@^5.1.1:
+ version "5.1.8"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
+ integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
+
+immediate@^3.2.3:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266"
+ integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==
+
+immediate@~3.2.3:
+ version "3.2.3"
+ resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c"
+ integrity sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=
+
+import-fresh@^3.0.0, import-fresh@^3.2.1:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
+ integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+
+indent-string@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+ integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+inherits@2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+ini@^1.3.4, ini@~1.3.0:
+ version "1.3.8"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
+ integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
+
+internal-slot@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3"
+ integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==
+ dependencies:
+ es-abstract "^1.17.0-next.1"
+ has "^1.0.3"
+ side-channel "^1.0.2"
+
+interpret@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9"
+ integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
+
+ip-regex@^4.0.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.2.0.tgz#a03f5eb661d9a154e3973a03de8b23dd0ad6892e"
+ integrity sha512-n5cDDeTWWRwK1EBoWwRti+8nP4NbytBBY0pldmnIkq6Z55KNFmWofh4rl9dPZpj+U/nVq7gweR3ylrvMt4YZ5A==
+
+ipaddr.js@1.9.1:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
+ integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
+
+ipfs-core-types@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/ipfs-core-types/-/ipfs-core-types-0.2.0.tgz#7985c89aa0e8004ccbc4cf18a14a2e4483541258"
+ integrity sha512-Cen7q8rEhXBRrhM5VWOtIVNsTw7dQvs7E6guXTKFpWAqzTeV39KOO5rC69HY2Boiom9pqVMZRxeqq2UKVvCACw==
+ dependencies:
+ cids "^1.1.5"
+ multiaddr "^8.0.0"
+ peer-id "^0.14.1"
+
+ipfs-core-utils@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/ipfs-core-utils/-/ipfs-core-utils-0.4.0.tgz#f633b0e51be6374f8caa1b15d5107e056123137a"
+ integrity sha512-IBPFvYjWPfVFpCeYUL/0gCUOabdBhh7aO5i4tU//UlF2gVCXPH4PRYlbBH9WM83zE2+o4vDi+dBXsdAI6nLPAg==
+ dependencies:
+ blob-to-it "0.0.2"
+ browser-readablestream-to-it "0.0.2"
+ cids "^1.0.0"
+ err-code "^2.0.0"
+ ipfs-utils "^3.0.0"
+ it-all "^1.0.1"
+ it-map "^1.0.2"
+ it-peekable "0.0.1"
+ uint8arrays "^1.1.0"
+
+ipfs-core-utils@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/ipfs-core-utils/-/ipfs-core-utils-0.6.0.tgz#b89e7decf49f92b3539a47c01479494d891fb8d9"
+ integrity sha512-w5uoE3RLO5ReNt0E9BwIRdSGbjz9NzFxGqMDCW9zMPUAkiDWC8FTksYOifAVQcdekI4oP8kMHVDzJ/5YKyba/Q==
+ dependencies:
+ any-signal "^2.0.0"
+ blob-to-it "^1.0.1"
+ browser-readablestream-to-it "^1.0.1"
+ cids "^1.1.5"
+ err-code "^2.0.3"
+ ipfs-core-types "^0.2.0"
+ ipfs-utils "^5.0.0"
+ it-all "^1.0.4"
+ it-map "^1.0.4"
+ it-peekable "^1.0.1"
+ multiaddr "^8.0.0"
+ multiaddr-to-uri "^6.0.0"
+ parse-duration "^0.4.4"
+ timeout-abort-controller "^1.1.1"
+ uint8arrays "^1.1.0"
+
+ipfs-http-client@47.0.1:
+ version "47.0.1"
+ resolved "https://registry.yarnpkg.com/ipfs-http-client/-/ipfs-http-client-47.0.1.tgz#509c6c742ab405bc2a7e6e0fe373e19e9b85633b"
+ integrity sha512-IAQf+uTLvXw5QFOzbyhu/5lH3rn7jEwwwdCGaNKVhoPI7yfyOV0wRse3hVWejjP1Id0P9mKuMKG8rhcY7pVAdQ==
+ dependencies:
+ abort-controller "^3.0.0"
+ any-signal "^1.1.0"
+ bignumber.js "^9.0.0"
+ cids "^1.0.0"
+ debug "^4.1.0"
+ form-data "^3.0.0"
+ ipfs-core-utils "^0.4.0"
+ ipfs-utils "^3.0.0"
+ ipld-block "^0.10.0"
+ ipld-dag-cbor "^0.17.0"
+ ipld-dag-pb "^0.20.0"
+ ipld-raw "^6.0.0"
+ iso-url "^0.4.7"
+ it-last "^1.0.2"
+ it-map "^1.0.2"
+ it-tar "^1.2.2"
+ it-to-buffer "^1.0.0"
+ it-to-stream "^0.1.1"
+ merge-options "^2.0.0"
+ multiaddr "^8.0.0"
+ multiaddr-to-uri "^6.0.0"
+ multibase "^3.0.0"
+ multicodec "^2.0.0"
+ multihashes "^3.0.1"
+ nanoid "^3.0.2"
+ node-fetch "^2.6.0"
+ parse-duration "^0.4.4"
+ stream-to-it "^0.2.1"
+ uint8arrays "^1.1.0"
+
+ipfs-http-client@48.2.1:
+ version "48.2.1"
+ resolved "https://registry.yarnpkg.com/ipfs-http-client/-/ipfs-http-client-48.2.1.tgz#9b0a098d673d8729071dd620c5050b234dfe903a"
+ integrity sha512-fK8bF0C+wX7POczu3fcrO0B3aaS35L8HxOUCi1V2yBPZ8+xeuGxV4YS6N8RgFev5Mxd7mklxEljy2RCigZRP6Q==
+ dependencies:
+ any-signal "^2.0.0"
+ bignumber.js "^9.0.0"
+ cids "^1.1.5"
+ debug "^4.1.1"
+ form-data "^3.0.0"
+ ipfs-core-types "^0.2.0"
+ ipfs-core-utils "^0.6.0"
+ ipfs-utils "^5.0.0"
+ ipld-block "^0.11.0"
+ ipld-dag-cbor "^0.17.0"
+ ipld-dag-pb "^0.20.0"
+ ipld-raw "^6.0.0"
+ it-last "^1.0.4"
+ it-map "^1.0.4"
+ it-tar "^1.2.2"
+ it-to-stream "^0.1.2"
+ merge-options "^2.0.0"
+ multiaddr "^8.0.0"
+ multibase "^3.0.0"
+ multicodec "^2.0.1"
+ multihashes "^3.0.1"
+ nanoid "^3.1.12"
+ native-abort-controller "~0.0.3"
+ parse-duration "^0.4.4"
+ stream-to-it "^0.2.2"
+ uint8arrays "^1.1.0"
+
+"ipfs-log@github:mistakia/ipfs-log#proto/record", ipfs-log@mistakia/ipfs-log#proto/record:
+ version "5.1.1"
+ uid "44b9a775ff3914167c47c7cc79835e733ee4842c"
+ resolved "https://codeload.github.com/mistakia/ipfs-log/tar.gz/44b9a775ff3914167c47c7cc79835e733ee4842c"
+ dependencies:
+ json-stringify-deterministic "^1.0.1"
+ lru-cache "^6.0.0"
+ multihashing-async "^2.0.1"
+ orbit-db-identity-provider "~0.3.1"
+ orbit-db-io "~0.4.0"
+ p-do-whilst "^1.1.0"
+ p-each-series "^2.1.0"
+ p-map "^4.0.0"
+ p-whilst "^2.1.0"
+
+"ipfs-pubsub-1on1@github:mistakia/ipfs-pubsub-1on1#fix/waitForPeers":
+ version "0.0.6"
+ resolved "https://codeload.github.com/mistakia/ipfs-pubsub-1on1/tar.gz/8ba47d3fa87d8638644b98166ea7e1148001737f"
+ dependencies:
+ safe-buffer "~5.1.2"
+
+ipfs-pubsub-peer-monitor@0.0.10, ipfs-pubsub-peer-monitor@~0.0.5:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/ipfs-pubsub-peer-monitor/-/ipfs-pubsub-peer-monitor-0.0.10.tgz#42b148ed53858a2c9391ca7730f9b5b50f753a0d"
+ integrity sha512-9bwI02MRruP0BDR8Mn4ujboLJhJ+6nm8X6JdGHdM9P1zlfy1MSJQNOXGhk2e1FInEZvFseFLYiCFuSS1BL7BnA==
+ dependencies:
+ p-forever "^2.1.0"
+
+ipfs-utils@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ipfs-utils/-/ipfs-utils-3.0.0.tgz#58f8345ff26c4ae6b4a8e3a2366bd25de3e1460e"
+ integrity sha512-qahDc+fghrM57sbySr2TeWjaVR/RH/YEB/hvdAjiTbjESeD87qZawrXwj+19Q2LtGmFGusKNLo5wExeuI5ZfDQ==
+ dependencies:
+ abort-controller "^3.0.0"
+ any-signal "^1.1.0"
+ buffer "^5.6.0"
+ err-code "^2.0.0"
+ fs-extra "^9.0.1"
+ is-electron "^2.2.0"
+ iso-url "^0.4.7"
+ it-glob "0.0.8"
+ merge-options "^2.0.0"
+ nanoid "^3.1.3"
+ node-fetch "^2.6.0"
+ stream-to-it "^0.2.0"
+
+ipfs-utils@^5.0.0, ipfs-utils@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/ipfs-utils/-/ipfs-utils-5.0.1.tgz#7c0053d5e77686f45577257a73905d4523e6b4f7"
+ integrity sha512-28KZPgO4Uf5duT2ORLAYfboUp98iUshDD7yRAfbNxNAR8Dtidfn6o20rZfoXnkri2zKBVIPlJkuCPmPJB+6erg==
+ dependencies:
+ abort-controller "^3.0.0"
+ any-signal "^2.1.0"
+ buffer "^6.0.1"
+ electron-fetch "^1.7.2"
+ err-code "^2.0.0"
+ fs-extra "^9.0.1"
+ is-electron "^2.2.0"
+ iso-url "^1.0.0"
+ it-glob "0.0.10"
+ it-to-stream "^0.1.2"
+ merge-options "^2.0.0"
+ nanoid "^3.1.3"
+ native-abort-controller "0.0.3"
+ native-fetch "^2.0.0"
+ node-fetch "^2.6.0"
+ stream-to-it "^0.2.0"
+
+ipfsd-ctl@7.2.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/ipfsd-ctl/-/ipfsd-ctl-7.2.0.tgz#1d2c25d9d348cb66e515240601d83a15cd7bbdcf"
+ integrity sha512-mBhrMVWz8QHQ/4P+3p0pBkeeV5R41t/6aHsu44gsvnt7JPqkDlNpjU6IpsRP9fw1OgCtsax6lz1n8BMixz9epw==
+ dependencies:
+ "@hapi/boom" "^9.1.0"
+ "@hapi/hapi" "^20.0.0"
+ debug "^4.1.1"
+ execa "^5.0.0"
+ fs-extra "^9.0.0"
+ ipfs-utils "^5.0.1"
+ joi "^17.2.1"
+ merge-options "^3.0.1"
+ multiaddr "^8.0.0"
+ nanoid "^3.1.3"
+ p-wait-for "^3.1.0"
+ temp-write "^4.0.0"
+
+ipld-block@^0.10.0:
+ version "0.10.1"
+ resolved "https://registry.yarnpkg.com/ipld-block/-/ipld-block-0.10.1.tgz#a9de6185257cf56903cc7f71de450672f4871b65"
+ integrity sha512-lPMfW9tA2hVZw9hdO/YSppTxFmA0+5zxcefBOlCTOn+12RLyy+pdepKMbQw8u0KESFu3pYVmabNRWuFGcgHLLw==
+ dependencies:
+ cids "^1.0.0"
+ class-is "^1.1.0"
+
+ipld-block@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/ipld-block/-/ipld-block-0.11.0.tgz#71b24b70f4d867b0609a738efa4872ef4df84c7a"
+ integrity sha512-Kk56OOPmlWAjXfBJXvx2jX5RA6R9qUrcc2JXwF7Y4IL9mlmxcxTNkgcsJYR78DbyMllQbi7yreghjGjtCTYKaw==
+ dependencies:
+ cids "^1.0.0"
+
+ipld-dag-cbor@^0.17.0:
+ version "0.17.0"
+ resolved "https://registry.yarnpkg.com/ipld-dag-cbor/-/ipld-dag-cbor-0.17.0.tgz#760d15515275261d0da6b9d60bc387fb2866f068"
+ integrity sha512-YprSTQClJQUyC+RhbWrVXhg7ysII5R/jrmZZ4en4n9Mav+MRbntAW699zd1PHRLB71lNCJbxABE2Uc9QU2Ka7g==
+ dependencies:
+ borc "^2.1.2"
+ cids "^1.0.0"
+ is-circular "^1.0.2"
+ multicodec "^2.0.0"
+ multihashing-async "^2.0.0"
+ uint8arrays "^1.0.0"
+
+ipld-dag-pb@^0.18.1:
+ version "0.18.5"
+ resolved "https://registry.yarnpkg.com/ipld-dag-pb/-/ipld-dag-pb-0.18.5.tgz#29e736dcdab10a4dffbef9dec27723e2e56be962"
+ integrity sha512-8IAPZrkRjgTpkxV9JOwXSBe0GXNxd4B2lubPgbifTGL92rZOEKWutpijsWsWvjXOltDFHKMQIIIhkgLC5RPqbA==
+ dependencies:
+ buffer "^5.6.0"
+ cids "~0.8.0"
+ class-is "^1.1.0"
+ multicodec "^1.0.1"
+ multihashing-async "~0.8.1"
+ protons "^1.0.2"
+ stable "^0.1.8"
+
+ipld-dag-pb@^0.20.0:
+ version "0.20.0"
+ resolved "https://registry.yarnpkg.com/ipld-dag-pb/-/ipld-dag-pb-0.20.0.tgz#025c0343aafe6cb9db395dd1dc93c8c60a669360"
+ integrity sha512-zfM0EdaolqNjAxIrtpuGKvXxWk5YtH9jKinBuQGTcngOsWFQhyybGCTJHGNGGtRjHNJi2hz5Udy/8pzv4kcKyg==
+ dependencies:
+ cids "^1.0.0"
+ class-is "^1.1.0"
+ multicodec "^2.0.0"
+ multihashing-async "^2.0.0"
+ protons "^2.0.0"
+ reset "^0.1.0"
+ run "^1.4.0"
+ stable "^0.1.8"
+ uint8arrays "^1.0.0"
+
+ipld-raw@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/ipld-raw/-/ipld-raw-6.0.0.tgz#74d947fcd2ce4e0e1d5bb650c1b5754ed8ea6da0"
+ integrity sha512-UK7fjncAzs59iu/o2kwYtb8jgTtW6B+cNWIiNpAJkfRwqoMk1xD/6i25ktzwe4qO8gQgoR9RxA5ibC23nq8BLg==
+ dependencies:
+ cids "^1.0.0"
+ multicodec "^2.0.0"
+ multihashing-async "^2.0.0"
+
+is-absolute@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576"
+ integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==
+ dependencies:
+ is-relative "^1.0.0"
+ is-windows "^1.0.1"
+
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-binary-path@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
+
+is-buffer@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-callable@^1.1.4, is-callable@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9"
+ integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==
+
+is-circular@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-circular/-/is-circular-1.0.2.tgz#2e0ab4e9835f4c6b0ea2b9855a84acd501b8366c"
+ integrity sha512-YttjnrswnUYRVJvxCvu8z+PGMUSzC2JttP0OEXezlAEdp3EXzhf7IZ3j0gRAybJBQupedIZFhY61Tga6E0qASA==
+
+is-core-module@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a"
+ integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==
+ dependencies:
+ has "^1.0.3"
+
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-date-object@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"
+ integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==
+
+is-deflate@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-deflate/-/is-deflate-1.0.0.tgz#c862901c3c161fb09dac7cdc7e784f80e98f2f14"
+ integrity sha1-yGKQHDwWH7CdrHzcfnhPgOmPLxQ=
+
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
+is-electron@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-electron/-/is-electron-2.2.0.tgz#8943084f09e8b731b3a7a0298a7b5d56f6b7eef0"
+ integrity sha512-SpMppC2XR3YdxSzczXReBjqs2zGscWQpBIKqwXYBFic0ERaxNVgwLCHwOLZeESfdJQjX0RDvrJ1lBXX2ij+G1Q==
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+ integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
+ integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-gzip@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-gzip/-/is-gzip-1.0.0.tgz#6ca8b07b99c77998025900e555ced8ed80879a83"
+ integrity sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=
+
+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@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-ipfs/-/is-ipfs-2.0.0.tgz#c046622e4daf5435b671aeb9739a832107e06805"
+ integrity sha512-X4Cg/JO+h/ygBCrIQSMgicHRLo5QpB+i5tHLhFgGBksKi3zvX6ByFCshDxNBvcq4NFxF3coI2AaLqwzugNzKcw==
+ dependencies:
+ cids "^1.0.0"
+ iso-url "~0.4.7"
+ mafmt "^8.0.0"
+ multiaddr "^8.0.0"
+ multibase "^3.0.0"
+ multihashes "^3.0.1"
+ uint8arrays "^1.1.0"
+
+is-negative-zero@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24"
+ integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==
+
+is-node@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-node/-/is-node-1.0.2.tgz#d7d002745ef7debbb7477e988956ab0a4fccb653"
+ integrity sha1-19ACdF733ru3R36YiVarCk/MtlM=
+
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-plain-obj@^2.0.0, is-plain-obj@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
+ integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
+
+is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+ dependencies:
+ isobject "^3.0.1"
+
+is-promise@~1, is-promise@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-1.0.1.tgz#31573761c057e33c2e91aab9e96da08cefbe76e5"
+ integrity sha1-MVc3YcBX4zwukaq56W2gjO++duU=
+
+is-regex@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9"
+ integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==
+ dependencies:
+ has-symbols "^1.0.1"
+
+is-relative@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d"
+ integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==
+ dependencies:
+ is-unc-path "^1.0.0"
+
+is-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
+ integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
+
+is-string@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
+ integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==
+
+is-symbol@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"
+ integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==
+ dependencies:
+ has-symbols "^1.0.1"
+
+is-typedarray@^1.0.0, is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+is-unc-path@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d"
+ integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==
+ dependencies:
+ unc-path-regex "^0.1.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==
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+
+iso-constants@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/iso-constants/-/iso-constants-0.1.2.tgz#3d2456ed5aeaa55d18564f285ba02a47a0d885b4"
+ integrity sha512-OTCM5ZCQsHBCI4Wdu4tSxvDIkmDHd5EwJDps5mKqnQnWJSKlnwMs3EDZ4n3Fh1tmkWkDlyd2vCDbEYuPbyrUNQ==
+
+iso-random-stream@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/iso-random-stream/-/iso-random-stream-1.1.1.tgz#83824bba77fbb3480dd6b35fbb06de7f9e93e80f"
+ integrity sha512-YEt/7xOwTdu4KXIgtdgGFkiLUsBaddbnkmHyaFdjJYIcD7V4gpQHPvYC5tyh3kA0PQ01y9lWm1ruVdf8Mqzovg==
+ dependencies:
+ buffer "^5.4.3"
+ readable-stream "^3.4.0"
+
+iso-url@^0.4.7, iso-url@~0.4.7:
+ version "0.4.7"
+ resolved "https://registry.yarnpkg.com/iso-url/-/iso-url-0.4.7.tgz#de7e48120dae46921079fe78f325ac9e9217a385"
+ integrity sha512-27fFRDnPAMnHGLq36bWTpKET+eiXct3ENlCcdcMdk+mjXrb2kw3mhBUg1B7ewAC0kVzlOPhADzQgz1SE6Tglog==
+
+iso-url@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/iso-url/-/iso-url-1.0.0.tgz#2dd32e5915eb0ecca3a6ff419eb35a0c60eeabc8"
+ integrity sha512-n/MsHgKOoHcFrhsxfbM3aaSdUujoFrrZ3537p3RW80AL7axL36acCseoMwIW4tNOl0n0SnkzNyVh4bREwmHoPQ==
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ dependencies:
+ isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+
+it-all@^1.0.1:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/it-all/-/it-all-1.0.5.tgz#e880510d7e73ebb79063a76296a2eb3cb77bbbdb"
+ integrity sha512-ygD4kA4vp8fi+Y+NBgEKt6W06xSbv6Ub/0V8d1r3uCyJ9Izwa1UspkIOlqY9fOee0Z1w3WRo1+VWyAU4DgtufA==
+
+it-all@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/it-all/-/it-all-1.0.4.tgz#5a1aac996e2516c0d030911a631190b330afdb6d"
+ integrity sha512-7K+gjHHzZ7t+bCkrtulYiow35k3UgqH7miC+iUa9RGiyDRXJ6hVDeFsDrnWrlscjrkLFOJRKHxNOke4FNoQnhw==
+
+it-concat@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/it-concat/-/it-concat-1.0.2.tgz#7229fedb935bcf7b2fcac23e040e7588b34143e6"
+ integrity sha512-YZtXOe10qBcTDOsz59AscfmsKRoVPYX5AFxCans2L/QL20Jah1H1/+wzWDaJj8zu0KiA9gys3vBoZIZwhsUeeg==
+ dependencies:
+ bl "^4.0.0"
+
+it-glob@0.0.10:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/it-glob/-/it-glob-0.0.10.tgz#4defd9286f693847c3ff483d2ff65f22e1359ad8"
+ integrity sha512-p1PR15djgPV7pxdLOW9j4WcJdla8+91rJdUU2hU2Jm68vkxpIEXK55VHBeH8Lvqh2vqLtM83t8q4BuJxue6niA==
+ dependencies:
+ fs-extra "^9.0.1"
+ minimatch "^3.0.4"
+
+it-glob@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/it-glob/-/it-glob-0.0.8.tgz#b63d24945c18b35de8bb593a8c872fd0257c0cac"
+ integrity sha512-PmIAgb64aJPM6wwT1UTlNDAJnNgdGrvr0vRr3AYCngcUuq1KaAovuz0dQAmUkaXudDG3EQzc7OttuLW9DaL3YQ==
+ dependencies:
+ fs-extra "^8.1.0"
+ minimatch "^3.0.4"
+
+it-last@^1.0.2:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/it-last/-/it-last-1.0.5.tgz#5c711c7d58948bcbc8e0cb129af3a039ba2a585b"
+ integrity sha512-PV/2S4zg5g6dkVuKfgrQfN2rUN4wdTI1FzyAvU+i8RV96syut40pa2s9Dut5X7SkjwA3P0tOhLABLdnOJ0Y/4Q==
+
+it-last@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/it-last/-/it-last-1.0.4.tgz#4009aac79ee76e3417443c6c1dfb64cd380e9e5b"
+ integrity sha512-h0aV43BaD+1nubAKwStWcda6vlbejPSTQKfOrQvyNrrceluWfoq8DrBXnL0PSz6RkyHSiVSHtAEaqUijYMPo8Q==
+
+it-map@^1.0.2:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/it-map/-/it-map-1.0.5.tgz#2f6a9b8f0ba1ed1aeadabf86e00b38c73a1dc299"
+ integrity sha512-EElupuWhHVStUgUY+OfTJIS2MZed96lDrAXzJUuqiiqLnIKoBRqtX1ZG2oR0bGDsSppmz83MtzCeKLZ9TVAUxQ==
+
+it-map@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/it-map/-/it-map-1.0.4.tgz#d413d2b0c3d8d9703df9e8a915ad96cb74a837ac"
+ integrity sha512-LZgYdb89XMo8cFUp6jF0cn5j3gF7wcZnKRVFS3qHHn0bPB2rpToh2vIkTBKduZLZxRRjWx1VW/udd98x+j2ulg==
+
+it-peekable@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/it-peekable/-/it-peekable-0.0.1.tgz#e3f91583d172444b9cd894ed2df6e26f0c176617"
+ integrity sha512-fd0JzbNldseeq+FFWthbqYB991UpKNyjPG6LqFhIOmJviCxSompMyoopKIXvLPLY+fBhhv2CT5PT31O/lEnTHw==
+
+it-peekable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/it-peekable/-/it-peekable-1.0.1.tgz#7e2c485164a37618cb546e8809ae660bb38ed84b"
+ integrity sha512-civpIsgG1N+nYXNhm4Qzb9S89QZOfn4M6wVpH9IIilkJ9UFcDElWQuO1qmjXkdm3M5yg5fk+blW0aSCmu4SGlA==
+
+it-reader@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/it-reader/-/it-reader-2.1.0.tgz#b1164be343f8538d8775e10fb0339f61ccf71b0f"
+ integrity sha512-hSysqWTO9Tlwc5EGjVf8JYZzw0D2FsxD/g+eNNWrez9zODxWt6QlN6JAMmycK72Mv4jHEKEXoyzUN4FYGmJaZw==
+ dependencies:
+ bl "^4.0.0"
+
+it-tar@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/it-tar/-/it-tar-1.2.2.tgz#8d79863dad27726c781a4bcc491f53c20f2866cf"
+ integrity sha512-M8V4a9I+x/vwXTjqvixcEZbQZHjwDIb8iUQ+D4M2QbhAdNs3WKVSl+45u5/F2XFx6jYMFOGzMVlKNK/uONgNIA==
+ dependencies:
+ bl "^4.0.0"
+ buffer "^5.4.3"
+ iso-constants "^0.1.2"
+ it-concat "^1.0.0"
+ it-reader "^2.0.0"
+ p-defer "^3.0.0"
+
+it-to-buffer@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/it-to-buffer/-/it-to-buffer-1.0.5.tgz#70c5aa1dd055621e862b58973534148af302f3e3"
+ integrity sha512-dczvg0VeXkfr2i2IQ3GGWEATBbk4Uggr+YnvBz76/Yp0zFJZTIOeDCz2KyFDxSDHNI62OlldbJXWmDPb5nFQeg==
+ dependencies:
+ buffer "^5.5.0"
+
+it-to-stream@^0.1.1, it-to-stream@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/it-to-stream/-/it-to-stream-0.1.2.tgz#7163151f75b60445e86b8ab1a968666acaacfe7b"
+ integrity sha512-DTB5TJRZG3untmZehcaFN0kGWl2bNv7tnJRgQHAO9QEt8jfvVRrebZtnD5NZd4SCj4WVPjl0LSrugNWE/UaZRQ==
+ dependencies:
+ buffer "^5.6.0"
+ fast-fifo "^1.0.0"
+ get-iterator "^1.0.2"
+ p-defer "^3.0.0"
+ p-fifo "^1.0.0"
+ readable-stream "^3.6.0"
+
+joi@^17.2.1:
+ version "17.3.0"
+ resolved "https://registry.yarnpkg.com/joi/-/joi-17.3.0.tgz#f1be4a6ce29bc1716665819ac361dfa139fff5d2"
+ integrity sha512-Qh5gdU6niuYbUIUV5ejbsMiiFmBdw8Kcp8Buj2JntszCkCfxJ9Cz76OtHxOZMPXrt5810iDIXs+n1nNVoquHgg==
+ dependencies:
+ "@hapi/hoek" "^9.0.0"
+ "@hapi/topo" "^5.0.0"
+ "@sideway/address" "^4.1.0"
+ "@sideway/formula" "^3.0.0"
+ "@sideway/pinpoint" "^2.0.0"
+
+js-sha3@0.5.7:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7"
+ integrity sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=
+
+js-sha3@^0.8.0, js-sha3@~0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840"
+ integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@3.14.0:
+ version "3.14.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482"
+ integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+js-yaml@^3.13.1:
+ version "3.14.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
+ integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+ integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
+
+json-parse-better-errors@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+ integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+ integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
+
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+ integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
+
+json-stringify-deterministic@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-deterministic/-/json-stringify-deterministic-1.0.1.tgz#3334798c374d723d46f7ba0e47d6e5e5ac8511f9"
+ integrity sha512-9Fg0OY3uyzozpvJ8TVbUk09PjzhT7O2Q5kEe30g6OrKhbA/Is92igcx0XDDX7E3yAwnIlUcYLRl+ZkVrBYVP7A==
+
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+
+json-text-sequence@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/json-text-sequence/-/json-text-sequence-0.1.1.tgz#a72f217dc4afc4629fff5feb304dc1bd51a2f3d2"
+ integrity sha1-py8hfcSvxGKf/1/rME3BvVGi89I=
+ dependencies:
+ delimit-stream "0.1.0"
+
+json5@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
+ integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
+ dependencies:
+ minimist "^1.2.0"
+
+jsonfile@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+ integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsonfile@^6.0.1, jsonfile@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
+ integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
+ dependencies:
+ universalify "^2.0.0"
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsprim@^1.2.2:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+ integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
+ dependencies:
+ assert-plus "1.0.0"
+ extsprintf "1.3.0"
+ json-schema "0.2.3"
+ verror "1.10.0"
+
+"jsx-ast-utils@^2.4.1 || ^3.0.0":
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82"
+ integrity sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==
+ dependencies:
+ array-includes "^3.1.2"
+ object.assign "^4.1.2"
+
+k-bucket@^3.0.1, k-bucket@^3.3.0:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/k-bucket/-/k-bucket-3.3.1.tgz#de219f00b310ca17fdd7e2790a077d78b70d92c8"
+ integrity sha512-kgwWqYT79rAahn4maIVTP8dIe+m1KulufWW+f1bB9DlZrRFiGpZ4iJOg2HUp4xJYBWONP3+rOPIWF/RXABU6mw==
+ dependencies:
+ buffer-equals "^1.0.3"
+ inherits "^2.0.1"
+ randombytes "^2.0.3"
+
+k-bucket@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/k-bucket/-/k-bucket-4.0.1.tgz#3fc2e5693f0b7bff90d7b6b476edd6087955d542"
+ integrity sha512-YvDpmY3waI999h1zZoW1rJ04fZrgZ+5PAlVmvwDHT6YO/Q1AOhdel07xsKy9eAvJjQ9xZV1wz3rXKqEfaWvlcQ==
+ dependencies:
+ inherits "^2.0.1"
+ randombytes "^2.0.3"
+
+k-rpc-socket@^1.7.2:
+ version "1.11.1"
+ resolved "https://registry.yarnpkg.com/k-rpc-socket/-/k-rpc-socket-1.11.1.tgz#f14b4b240a716c6cad7b6434b21716dbd7c7b0e8"
+ integrity sha512-8xtA8oqbZ6v1Niryp2/g4GxW16EQh5MvrUylQoOG+zcrDff5CKttON2XUXvMwlIHq4/2zfPVFiinAccJ+WhxoA==
+ dependencies:
+ bencode "^2.0.0"
+ chrome-dgram "^3.0.2"
+ chrome-dns "^1.0.0"
+ chrome-net "^3.3.2"
+
+k-rpc@^4.2.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/k-rpc/-/k-rpc-4.3.1.tgz#e2b86376c773d5919b4d3c02b9aae435fee7b318"
+ integrity sha512-mgAJZeFYbpP0xzJzmS0TQTYoFI0sjy3GnKFhg8wyboL+KvWg2WLaA2Oy9PthLPx2Rxz4WeBMk4y3MSOrDJ95FA==
+ dependencies:
+ buffer-equals "^1.0.3"
+ k-bucket "^4.0.0"
+ k-rpc-socket "^1.7.2"
+ randombytes "^2.0.5"
+ safe-buffer "^5.1.1"
+
+keypair@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/keypair/-/keypair-1.0.1.tgz#7603719270afb6564ed38a22087a06fc9aa4ea1b"
+ integrity sha1-dgNxknCvtlZO04oiCHoG/Jqk6hs=
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+ integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+ integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+knex@0.21.17:
+ version "0.21.17"
+ resolved "https://registry.yarnpkg.com/knex/-/knex-0.21.17.tgz#f99f5b90132b9bb9c6eb5c81f0a035e0232c870f"
+ integrity sha512-kAt58lRwjzqwedApKF7luYPa7HsLb0oDiczwKrkZcekIzTmSow5YGK149S2C8HjH63R3NcOBo9+1rjvWnC1Paw==
+ dependencies:
+ colorette "1.2.1"
+ commander "^6.2.0"
+ debug "4.3.1"
+ esm "^3.2.25"
+ getopts "2.2.5"
+ interpret "^2.2.0"
+ liftoff "3.1.0"
+ lodash "^4.17.20"
+ pg-connection-string "2.4.0"
+ tarn "^3.0.1"
+ tildify "2.0.0"
+ v8flags "^3.2.0"
+
+level-codec@^9.0.0:
+ version "9.0.2"
+ resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc"
+ integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==
+ dependencies:
+ buffer "^5.6.0"
+
+level-concat-iterator@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263"
+ integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==
+
+level-errors@^2.0.0, level-errors@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.1.tgz#2132a677bf4e679ce029f517c2f17432800c05c8"
+ integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==
+ dependencies:
+ errno "~0.1.1"
+
+level-iterator-stream@~4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c"
+ integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==
+ dependencies:
+ inherits "^2.0.4"
+ readable-stream "^3.4.0"
+ xtend "^4.0.2"
+
+level-js@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/level-js/-/level-js-4.0.2.tgz#fa51527fa38b87c4d111b0d0334de47fcda38f21"
+ integrity sha512-PeGjZsyMG4O89KHiez1zoMJxStnkM+oBIqgACjoo5PJqFiSUUm3GNod/KcbqN5ktyZa8jkG7I1T0P2u6HN9lIg==
+ dependencies:
+ abstract-leveldown "~6.0.1"
+ immediate "~3.2.3"
+ inherits "^2.0.3"
+ ltgt "^2.1.2"
+ typedarray-to-buffer "~3.1.5"
+
+level-packager@^5.0.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939"
+ integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==
+ dependencies:
+ encoding-down "^6.3.0"
+ levelup "^4.3.2"
+
+level-supports@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d"
+ integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==
+ dependencies:
+ xtend "^4.0.2"
+
+level@^5.0.1, level@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/level/-/level-5.0.1.tgz#8528cc1ee37ac413270129a1eab938c610be3ccb"
+ integrity sha512-wcak5OQeA4rURGacqS62R/xNHjCYnJSQDBOlm4KNUGJVE9bWv2B04TclqReYejN+oD65PzD4FsqeWoI5wNC5Lg==
+ dependencies:
+ level-js "^4.0.0"
+ level-packager "^5.0.0"
+ leveldown "^5.0.0"
+ opencollective-postinstall "^2.0.0"
+
+leveldown@^5.0.0, leveldown@^5.1.1:
+ version "5.6.0"
+ resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-5.6.0.tgz#16ba937bb2991c6094e13ac5a6898ee66d3eee98"
+ integrity sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==
+ dependencies:
+ abstract-leveldown "~6.2.1"
+ napi-macros "~2.0.0"
+ node-gyp-build "~4.1.0"
+
+leveldown@~5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-5.1.1.tgz#5d3a043f0ec76e91e189117ec3627bef0436c0dc"
+ integrity sha512-4n2R/vEA/sssh5TKtFwM9gshW2tirNoURLqekLRUUzuF+eUBLFAufO8UW7bz8lBbG2jw8tQDF3LC+LcUCc12kg==
+ dependencies:
+ abstract-leveldown "~6.0.3"
+ napi-macros "~1.8.1"
+ node-gyp-build "~4.1.0"
+
+levelup@^4.3.2:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6"
+ integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==
+ dependencies:
+ deferred-leveldown "~5.3.0"
+ level-errors "~2.0.0"
+ level-iterator-stream "~4.0.0"
+ level-supports "~1.0.0"
+ xtend "~4.0.0"
+
+levelup@~4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.1.0.tgz#49ab5d3a341731cd102f91c6bc17a1acb1969a17"
+ integrity sha512-+Qhe2/jb5affN7BeFgWUUWVdYoGXO2nFS3QLEZKZynnQyP9xqA+7wgOz3fD8SST2UKpHQuZgjyJjTcB2nMl2dQ==
+ dependencies:
+ deferred-leveldown "~5.1.0"
+ level-errors "~2.0.0"
+ level-iterator-stream "~4.0.0"
+ xtend "~4.0.0"
+
+levn@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
+ integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+ dependencies:
+ prelude-ls "^1.2.1"
+ type-check "~0.4.0"
+
+libp2p-crypto-secp256k1@^0.3.0, libp2p-crypto-secp256k1@~0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/libp2p-crypto-secp256k1/-/libp2p-crypto-secp256k1-0.3.1.tgz#4cbeb857f5cfe5fefb1253e6b2994420c0ca166e"
+ integrity sha512-evrfK/CeUSd/lcELUdDruyPBvxDmLairth75S32OLl3H+++2m2fV24JEtxzdFS9JH3xEFw0h6JFO8DBa1bP9dA==
+ dependencies:
+ async "^2.6.2"
+ bs58 "^4.0.1"
+ multihashing-async "~0.6.0"
+ nodeify "^1.0.1"
+ safe-buffer "^5.1.2"
+ secp256k1 "^3.6.2"
+
+libp2p-crypto@0.19.0:
+ version "0.19.0"
+ resolved "https://registry.yarnpkg.com/libp2p-crypto/-/libp2p-crypto-0.19.0.tgz#321a5901e2a559edf3a3dbf848b13778ec69ed2d"
+ integrity sha512-w4tduG32px1i6TwekYZBSvizZTvDdMReZkE4DhUkf9IQ8WSqSo98K+6IZaYYM6PzWd5arbcAQQcFCRalJu9Ytw==
+ dependencies:
+ err-code "^2.0.0"
+ is-typedarray "^1.0.0"
+ iso-random-stream "^1.1.0"
+ keypair "^1.0.1"
+ multibase "^3.0.0"
+ multicodec "^2.0.0"
+ multihashing-async "^2.0.1"
+ node-forge "^0.10.0"
+ pem-jwk "^2.0.0"
+ protons "^2.0.0"
+ secp256k1 "^4.0.0"
+ uint8arrays "^1.1.0"
+ ursa-optional "^0.10.1"
+
+libp2p-crypto@^0.16.0:
+ version "0.16.3"
+ resolved "https://registry.yarnpkg.com/libp2p-crypto/-/libp2p-crypto-0.16.3.tgz#a4012361a6b6b3328d3d6b67cd1cb278e8d58f59"
+ integrity sha512-ro7/5Tu+f8p2+qDS1JrROnO++nNaAaBFs+VVXVHLuTMnbnMASu1eUtSlWPk1uOwikAlBFTvfqe5J1bK6Bpq6Pg==
+ dependencies:
+ asmcrypto.js "^2.3.2"
+ asn1.js "^5.0.1"
+ async "^2.6.1"
+ bn.js "^4.11.8"
+ browserify-aes "^1.2.0"
+ bs58 "^4.0.1"
+ iso-random-stream "^1.1.0"
+ keypair "^1.0.1"
+ libp2p-crypto-secp256k1 "~0.3.0"
+ multihashing-async "~0.5.1"
+ node-forge "~0.9.1"
+ pem-jwk "^2.0.0"
+ protons "^1.0.1"
+ rsa-pem-to-jwk "^1.1.3"
+ tweetnacl "^1.0.0"
+ ursa-optional "~0.10.0"
+
+libp2p-crypto@^0.18.0:
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/libp2p-crypto/-/libp2p-crypto-0.18.0.tgz#b467c68e48cb62342c897e5615ae4addbf41dfe2"
+ integrity sha512-zNMHDwf2J4t1LRjrBPMiSa4+14u0SfZRu66FyIVZtOnBGo3V/8imbJsOp8RPT8IgeHRN7EVIUt9lp8dcgXHMOw==
+ dependencies:
+ err-code "^2.0.0"
+ is-typedarray "^1.0.0"
+ iso-random-stream "^1.1.0"
+ keypair "^1.0.1"
+ multibase "^3.0.0"
+ multicodec "^2.0.0"
+ multihashing-async "^2.0.1"
+ node-forge "^0.9.1"
+ pem-jwk "^2.0.0"
+ protons "^2.0.0"
+ secp256k1 "^4.0.0"
+ uint8arrays "^1.1.0"
+ ursa-optional "^0.10.1"
+
+liftoff@3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3"
+ integrity sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==
+ dependencies:
+ extend "^3.0.0"
+ findup-sync "^3.0.0"
+ fined "^1.0.1"
+ flagged-respawn "^1.0.0"
+ is-plain-object "^2.0.4"
+ object.map "^1.0.0"
+ rechoir "^0.6.2"
+ resolve "^1.1.7"
+
+load-json-file@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
+ integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ strip-bom "^3.0.0"
+
+load-json-file@^5.2.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3"
+ integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==
+ dependencies:
+ graceful-fs "^4.1.15"
+ parse-json "^4.0.0"
+ pify "^4.0.1"
+ strip-bom "^3.0.0"
+ type-fest "^0.3.0"
+
+localstorage-down@^0.6.7:
+ version "0.6.7"
+ resolved "https://registry.yarnpkg.com/localstorage-down/-/localstorage-down-0.6.7.tgz#d0799a93b31e6c5fa5188ec06242eb1cce9d6d15"
+ integrity sha1-0Hmak7MebF+lGI7AYkLrHM6dbRU=
+ dependencies:
+ abstract-leveldown "0.12.3"
+ argsarray "0.0.1"
+ buffer-from "^0.1.1"
+ d64 "^1.0.0"
+ humble-localstorage "^1.4.2"
+ inherits "^2.0.1"
+ tiny-queue "0.2.0"
+
+localstorage-memory@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/localstorage-memory/-/localstorage-memory-1.0.3.tgz#566b37968fe0c4d76ba36a6da564fa613945ca72"
+ integrity sha512-t9P8WB6DcVttbw/W4PIE8HOqum8Qlvx5SjR6oInwR9Uia0EEmyUeBh7S+weKByW+l/f45Bj4L/dgZikGFDM6ng==
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+ integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+ dependencies:
+ p-locate "^3.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
+ integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+ dependencies:
+ p-locate "^5.0.0"
+
+lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.20:
+ version "4.17.21"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+ integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+log-symbols@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920"
+ integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==
+ dependencies:
+ chalk "^4.0.0"
+
+logplease@^1.2.14, logplease@~1.2.14, logplease@~1.2.15:
+ version "1.2.15"
+ resolved "https://registry.yarnpkg.com/logplease/-/logplease-1.2.15.tgz#3da442e93751a5992cc19010a826b08d0293c48a"
+ integrity sha512-jLlHnlsPSJjpwUfcNyUxXCl33AYg2cHhIf9QhGL2T4iPT0XPB+xP1LRKFPgIg1M/sg9kAJvy94w9CzBNrfnstA==
+
+loose-envify@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+lru-cache@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+ integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+ dependencies:
+ yallist "^4.0.0"
+
+lru@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/lru/-/lru-3.1.0.tgz#ea7fb8546d83733396a13091d76cfeb4c06837d5"
+ integrity sha1-6n+4VG2DczOWoTCR12z+tMBoN9U=
+ dependencies:
+ inherits "^2.0.1"
+
+ltgt@^2.1.2:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5"
+ integrity sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=
+
+mafmt@^8.0.0:
+ version "8.0.4"
+ resolved "https://registry.yarnpkg.com/mafmt/-/mafmt-8.0.4.tgz#5b158a28bd800fb8d0e5c28bd9ee15120bed2a61"
+ integrity sha512-wwZ5+PU0vQw10kwQRyZin1Z0dqVOp0BnYlX1xvXHS2fmLwrrQCfU1+3tlW5MRcihUwGz1virnVhbRAU1biKfiw==
+ dependencies:
+ multiaddr "^8.0.0"
+
+make-dir@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
+ integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
+ dependencies:
+ semver "^6.0.0"
+
+make-iterator@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6"
+ integrity sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==
+ dependencies:
+ kind-of "^6.0.2"
+
+map-cache@^0.2.0, map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+ integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+
+map-stream@0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.0.7.tgz#8a1f07896d82b10926bd3744a2420009f88974a8"
+ integrity sha1-ih8HiW2CsQkmvTdEokIACfiJdKg=
+
+map-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+ dependencies:
+ object-visit "^1.0.0"
+
+md5.js@^1.3.4:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
+ integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+media-typer@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+ integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
+
+media-typer@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-1.1.0.tgz#6ab74b8f2d3320f2064b2a87a38e7931ff3a5561"
+ integrity sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==
+
+merge-descriptors@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+ integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
+
+merge-options@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-2.0.0.tgz#36ca5038badfc3974dbde5e58ba89d3df80882c3"
+ integrity sha512-S7xYIeWHl2ZUKF7SDeBhGg6rfv5bKxVBdk95s/I7wVF8d+hjLSztJ/B271cnUiF6CAFduEQ5Zn3HYwAjT16DlQ==
+ dependencies:
+ is-plain-obj "^2.0.0"
+
+merge-options@^3.0.1:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-3.0.4.tgz#84709c2aa2a4b24c1981f66c179fe5565cc6dbb7"
+ integrity sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==
+ dependencies:
+ is-plain-obj "^2.1.0"
+
+merge-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+ integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+methods@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+ integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
+
+micromatch@^3.0.4:
+ version "3.1.10"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.1"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ extglob "^2.0.4"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.2"
+ nanomatch "^1.2.9"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.2"
+
+mime-db@1.45.0, mime-db@1.x.x:
+ version "1.45.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea"
+ integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==
+
+mime-types@2.1.28, mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24:
+ version "2.1.28"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd"
+ integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==
+ dependencies:
+ mime-db "1.45.0"
+
+mime@1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+ integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+
+mimic-fn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+ integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+ integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+
+minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+ integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
+
+minimatch@*, minimatch@3.0.4, minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist@^1.2.0, minimist@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
+ integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
+
+minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6"
+ integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==
+ dependencies:
+ safe-buffer "^5.1.2"
+ yallist "^3.0.0"
+
+minizlib@^1.2.1:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d"
+ integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==
+ dependencies:
+ minipass "^2.9.0"
+
+mixin-deep@^1.2.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+ integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
+mkdirp-classic@^0.5.2:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
+ integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
+
+"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.5:
+ version "0.5.5"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
+ integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
+ dependencies:
+ minimist "^1.2.5"
+
+mkdirp@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
+ integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+
+mocha@8.2.1:
+ version "8.2.1"
+ resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.2.1.tgz#f2fa68817ed0e53343d989df65ccd358bc3a4b39"
+ integrity sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w==
+ dependencies:
+ "@ungap/promise-all-settled" "1.1.2"
+ ansi-colors "4.1.1"
+ browser-stdout "1.3.1"
+ chokidar "3.4.3"
+ debug "4.2.0"
+ diff "4.0.2"
+ escape-string-regexp "4.0.0"
+ find-up "5.0.0"
+ glob "7.1.6"
+ growl "1.10.5"
+ he "1.2.0"
+ js-yaml "3.14.0"
+ log-symbols "4.0.0"
+ minimatch "3.0.4"
+ ms "2.1.2"
+ nanoid "3.1.12"
+ serialize-javascript "5.0.1"
+ strip-json-comments "3.1.1"
+ supports-color "7.2.0"
+ which "2.0.2"
+ wide-align "1.1.3"
+ workerpool "6.0.2"
+ yargs "13.3.2"
+ yargs-parser "13.1.2"
+ yargs-unparser "2.0.0"
+
+morgan@^1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7"
+ integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==
+ dependencies:
+ basic-auth "~2.0.1"
+ debug "2.6.9"
+ depd "~2.0.0"
+ on-finished "~2.3.0"
+ on-headers "~1.0.2"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
+ integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
+
+ms@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+ms@^2.1.1:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+ integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+multiaddr-to-uri@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/multiaddr-to-uri/-/multiaddr-to-uri-6.0.0.tgz#8f08a75c6eeb2370d5d24b77b8413e3f0fa9bcc0"
+ integrity sha512-OjpkVHOXEmIKMO8WChzzQ7aZQcSQX8squxmvtDbRpy7/QNmJ3Z7jv6qyD74C28QtaeNie8O8ngW2AkeiMmKP7A==
+ dependencies:
+ multiaddr "^8.0.0"
+
+multiaddr@^8.0.0:
+ version "8.1.2"
+ resolved "https://registry.yarnpkg.com/multiaddr/-/multiaddr-8.1.2.tgz#74060ff8636ba1c01b2cf0ffd53950b852fa9b1f"
+ integrity sha512-r13IzW8+Sv9zab9Gt8RPMIN2WkptIPq99EpAzg4IbJ/zTELhiEwXWr9bAmEatSCI4j/LSA6ESJzvz95JZ+ZYXQ==
+ dependencies:
+ cids "^1.0.0"
+ class-is "^1.1.0"
+ dns-over-http-resolver "^1.0.0"
+ err-code "^2.0.3"
+ is-ip "^3.1.0"
+ multibase "^3.0.0"
+ uint8arrays "^1.1.0"
+ varint "^5.0.0"
+
+multibase@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b"
+ integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==
+ dependencies:
+ base-x "^3.0.8"
+ buffer "^5.5.0"
+
+multibase@^1.0.0, multibase@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/multibase/-/multibase-1.0.1.tgz#4adbe1de0be8a1ab0274328b653c3f1903476724"
+ integrity sha512-KcCxpBVY8fdVKu4dJMAahq4F/2Z/9xqEjIiR7PiMe7LRGeorFn2NLmicN6nLBCqQvft6MG2Lc9X5P0IdyvnxEw==
+ dependencies:
+ base-x "^3.0.8"
+ buffer "^5.5.0"
+
+multibase@^3.0.0, multibase@^3.0.1, multibase@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/multibase/-/multibase-3.1.1.tgz#fb4c0fc169c2d89d80cbf0cbbec4e00ffed8cf3a"
+ integrity sha512-kkSd8jWGznDNEC2eDwtnvSGlZeTeEt0+oHieNWUhv8rIi8JU3voIUo02HpJBNOtgmtxT2CPwkElub7Y9kz3nrw==
+ dependencies:
+ "@multiformats/base-x" "^4.0.1"
+ web-encoding "^1.0.6"
+
+multibase@~0.6.0:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b"
+ integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==
+ dependencies:
+ base-x "^3.0.8"
+ buffer "^5.5.0"
+
+multicodec@^1.0.0, multicodec@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f"
+ integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==
+ dependencies:
+ buffer "^5.6.0"
+ varint "^5.0.0"
+
+multicodec@^2.0.0, multicodec@^2.0.1, multicodec@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-2.1.0.tgz#b66dff2184e91e74ac68981e0deba2591bbf1f87"
+ integrity sha512-7AYpK/avswOWvnqQ9/jOkQCS7Fp4aKxw5ojvn5gyK2VQTZz3YVXeLMzoIZDBy745JSfJMXkTS0ptnHci5Mt1mA==
+ dependencies:
+ uint8arrays "1.1.0"
+ varint "^6.0.0"
+
+multihashes@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-1.0.1.tgz#a89415d68283cf6287c6e219e304e75ce7fb73fe"
+ integrity sha512-S27Tepg4i8atNiFaU5ZOm3+gl3KQlUanLs/jWcBxQHFttgq+5x1OgbQmf2d8axJ/48zYGBd/wT9d723USMFduw==
+ dependencies:
+ buffer "^5.6.0"
+ multibase "^1.0.1"
+ varint "^5.0.0"
+
+multihashes@^3.0.1, multihashes@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-3.1.1.tgz#4e0bbf1e4f3d5118f3621ec8d4404aee47a7d32b"
+ integrity sha512-oF4BesRWbr5BbcRr1/QCDlZK+An8LWBPHVPYKt/foDpqNtXX/l0lm/rmAjI8dDYruPO90OaGcAWI3KS5vNJdNw==
+ dependencies:
+ multibase "^3.1.0"
+ uint8arrays "^2.0.5"
+ varint "^6.0.0"
+
+multihashes@~0.4.13, multihashes@~0.4.15:
+ version "0.4.21"
+ resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5"
+ integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==
+ dependencies:
+ buffer "^5.5.0"
+ multibase "^0.7.0"
+ varint "^5.0.0"
+
+multihashes@~3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-3.0.1.tgz#607c243d5e04ec022ac76c9c114e08416216f019"
+ integrity sha512-fFY67WOtb0359IjDZxaCU3gJILlkwkFbxbwrK9Bej5+NqNaYztzLOj8/NgMNMg/InxmhK+Uu8S/U4EcqsHzB7Q==
+ dependencies:
+ multibase "^3.0.0"
+ uint8arrays "^1.0.0"
+ varint "^5.0.0"
+
+multihashing-async@^2.0.0, multihashing-async@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/multihashing-async/-/multihashing-async-2.0.1.tgz#cc50e05e88b02ed0a2d8a9518d8a6cf1fcf12aa1"
+ integrity sha512-LZcH8PqW4iEKymaJ3RpsgpSJhXF29kAvO02ccqbysiXkQhZpVce8rrg+vzRKWO89hhyIBnQHI2e/ZoRVxmiJ2Q==
+ dependencies:
+ blakejs "^1.1.0"
+ err-code "^2.0.0"
+ js-sha3 "^0.8.0"
+ multihashes "^3.0.1"
+ murmurhash3js-revisited "^3.0.0"
+ uint8arrays "^1.0.0"
+
+multihashing-async@~0.5.1:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/multihashing-async/-/multihashing-async-0.5.2.tgz#4af40e0dde2f1dbb12a7c6b265181437ac26b9de"
+ integrity sha512-mmyG6M/FKxrpBh9xQDUvuJ7BbqT93ZeEeH5X6LeMYKoYshYLr9BDdCsvDtZvn+Egf+/Xi+aOznrWL4vp3s+p0Q==
+ dependencies:
+ blakejs "^1.1.0"
+ js-sha3 "~0.8.0"
+ multihashes "~0.4.13"
+ murmurhash3js "^3.0.1"
+ nodeify "^1.0.1"
+
+multihashing-async@~0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/multihashing-async/-/multihashing-async-0.6.0.tgz#c1fc6696a624b9bf39b160b0c4c4e7ba3f394453"
+ integrity sha512-Qv8pgg99Lewc191A5nlXy0bSd2amfqlafNJZmarU6Sj7MZVjpR94SCxQjf4DwPtgWZkiLqsjUQBXA2RSq+hYyA==
+ dependencies:
+ blakejs "^1.1.0"
+ js-sha3 "~0.8.0"
+ multihashes "~0.4.13"
+ murmurhash3js "^3.0.1"
+ nodeify "^1.0.1"
+
+multihashing-async@~0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/multihashing-async/-/multihashing-async-0.8.2.tgz#3d5da05df27d83be923f6d04143a0954ff87f27f"
+ integrity sha512-2lKa1autuCy8x7KIEj9aVNbAb3aIMRFYIwN7mq/zD4pxgNIVgGlm+f6GKY4880EOF2Y3GktHYssRy7TAJQ2DyQ==
+ dependencies:
+ blakejs "^1.1.0"
+ buffer "^5.4.3"
+ err-code "^2.0.0"
+ js-sha3 "^0.8.0"
+ multihashes "^1.0.1"
+ murmurhash3js-revisited "^3.0.0"
+
+murmurhash3js-revisited@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/murmurhash3js-revisited/-/murmurhash3js-revisited-3.0.0.tgz#6bd36e25de8f73394222adc6e41fa3fac08a5869"
+ integrity sha512-/sF3ee6zvScXMb1XFJ8gDsSnY+X8PbOyjIuBhtgis10W2Jx4ZjIhikUCIF9c4gpJxVnQIsPAFrSwTCuAjicP6g==
+
+murmurhash3js@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/murmurhash3js/-/murmurhash3js-3.0.1.tgz#3e983e5b47c2a06f43a713174e7e435ca044b998"
+ integrity sha1-Ppg+W0fCoG9DpxMXTn5DXKBEuZg=
+
+music-metadata@6.3.7:
+ version "6.3.7"
+ resolved "https://registry.yarnpkg.com/music-metadata/-/music-metadata-6.3.7.tgz#5c4f0e1f869c6efcf80cbd3f430c19f81737efda"
+ integrity sha512-YKdEql/iJTxSlNEiPh2bxaS2DhZDluQGwc33K/IZQ68qIgJU1VyhU/Rwho7DQwpX2/7W6GudCpwfjTnDO6/WTQ==
+ dependencies:
+ content-type "^1.0.4"
+ debug "^4.1.0"
+ file-type "^14.1.4"
+ media-typer "^1.1.0"
+ strtok3 "^6.0.0"
+ token-types "^2.0.0"
+
+nan@^2.14.0, nan@^2.14.2:
+ version "2.14.2"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19"
+ integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==
+
+nanoid@3.1.12:
+ version "3.1.12"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.12.tgz#6f7736c62e8d39421601e4a0c77623a97ea69654"
+ integrity sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==
+
+nanoid@^3.0.2, nanoid@^3.1.12, nanoid@^3.1.3:
+ version "3.1.20"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788"
+ integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==
+
+nanomatch@^1.2.9:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ fragment-cache "^0.2.1"
+ is-windows "^1.0.2"
+ kind-of "^6.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+napi-macros@~1.8.1:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-1.8.2.tgz#299265c1d8aa401351ad0675107d751228c03eda"
+ integrity sha512-Tr0DNY4RzTaBG2W2m3l7ZtFuJChTH6VZhXVhkGGjF/4cZTt+i8GcM9ozD+30Lmr4mDoZ5Xx34t2o4GJqYWDGcg==
+
+napi-macros@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b"
+ integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==
+
+native-abort-controller@0.0.3, native-abort-controller@~0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/native-abort-controller/-/native-abort-controller-0.0.3.tgz#4c528a6c9c7d3eafefdc2c196ac9deb1a5edf2f8"
+ integrity sha512-YIxU5nWqSHG1Xbu3eOu3pdFRD882ivQpIcu6AiPVe2oSVoRbfYW63DVkZm3g1gHiMtZSvZzF6THSzTGEBYl8YA==
+ dependencies:
+ globalthis "^1.0.1"
+
+native-fetch@^2.0.0, native-fetch@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/native-fetch/-/native-fetch-2.0.1.tgz#319d53741a7040def92d5dc8ea5fe9416b1fad89"
+ integrity sha512-gv4Bea+ga9QdXINurpkEqun3ap3vnB+WYoe4c8ddqUYEH7B2h6iD39RF8uVN7OwmSfMY3RDxkvBnoI4e2/vLXQ==
+ dependencies:
+ globalthis "^1.0.1"
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
+
+needle@^2.2.1:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/needle/-/needle-2.6.0.tgz#24dbb55f2509e2324b4a99d61f413982013ccdbe"
+ integrity sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==
+ dependencies:
+ debug "^3.2.6"
+ iconv-lite "^0.4.4"
+ sax "^1.2.4"
+
+negotiator@0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
+ integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
+
+node-addon-api@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32"
+ integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==
+
+node-addon-api@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.1.0.tgz#98b21931557466c6729e51cb77cd39c965f42239"
+ integrity sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==
+
+node-fetch@^2.6.0:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
+ integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
+
+node-forge@^0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3"
+ integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==
+
+node-forge@^0.9.1, node-forge@~0.9.1:
+ version "0.9.2"
+ resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.2.tgz#b35a44c28889b2ea55cabf8c79e3563f9676190a"
+ integrity sha512-naKSScof4Wn+aoHU6HBsifh92Zeicm1GDQKd1vp3Y/kOi8ub0DozCa9KpvYNCXslFHYRmLNiqRopGdTGwNLpNw==
+
+node-gyp-build@^4.2.0:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739"
+ integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==
+
+node-gyp-build@~4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.1.1.tgz#d7270b5d86717068d114cc57fff352f96d745feb"
+ integrity sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==
+
+node-gyp@3.x:
+ version "3.8.0"
+ resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c"
+ integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==
+ dependencies:
+ fstream "^1.0.0"
+ glob "^7.0.3"
+ graceful-fs "^4.1.2"
+ mkdirp "^0.5.0"
+ nopt "2 || 3"
+ npmlog "0 || 1 || 2 || 3 || 4"
+ osenv "0"
+ request "^2.87.0"
+ rimraf "2"
+ semver "~5.3.0"
+ tar "^2.0.0"
+ which "1"
+
+node-pre-gyp@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz#db1f33215272f692cd38f03238e3e9b47c5dd054"
+ integrity sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==
+ dependencies:
+ detect-libc "^1.0.2"
+ mkdirp "^0.5.1"
+ needle "^2.2.1"
+ nopt "^4.0.1"
+ npm-packlist "^1.1.6"
+ npmlog "^4.0.2"
+ rc "^1.2.7"
+ rimraf "^2.6.1"
+ semver "^5.3.0"
+ tar "^4"
+
+nodeify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/nodeify/-/nodeify-1.0.1.tgz#64ab69a7bdbaf03ce107b4f0335c87c0b9e91b1d"
+ integrity sha1-ZKtpp7268DzhB7TwM1yHwLnpGx0=
+ dependencies:
+ is-promise "~1.0.0"
+ promise "~1.3.0"
+
+"nopt@2 || 3":
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+ integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
+ dependencies:
+ abbrev "1"
+
+nopt@^4.0.1:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
+ integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==
+ dependencies:
+ abbrev "1"
+ osenv "^0.1.4"
+
+normalize-package-data@^2.3.2:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
+ integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
+ dependencies:
+ hosted-git-info "^2.1.4"
+ resolve "^1.10.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+npm-bundled@^1.0.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b"
+ integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==
+ dependencies:
+ npm-normalize-package-bin "^1.0.1"
+
+npm-normalize-package-bin@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2"
+ integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==
+
+npm-packlist@^1.1.6:
+ version "1.4.8"
+ resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e"
+ integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==
+ dependencies:
+ ignore-walk "^3.0.1"
+ npm-bundled "^1.0.1"
+ npm-normalize-package-bin "^1.0.1"
+
+npm-run-path@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
+ integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
+ dependencies:
+ path-key "^3.0.0"
+
+"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+ integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.3"
+ set-blocking "~2.0.0"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+oauth-sign@~0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
+ integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
+
+object-assign@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa"
+ integrity sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=
+
+object-assign@^4.1.0, object-assign@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
+object-inspect@^1.8.0, object-inspect@^1.9.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a"
+ integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==
+
+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==
+
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+ dependencies:
+ isobject "^3.0.0"
+
+object.assign@^4.1.1, object.assign@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
+ integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==
+ dependencies:
+ call-bind "^1.0.0"
+ define-properties "^1.1.3"
+ has-symbols "^1.0.1"
+ object-keys "^1.1.1"
+
+object.defaults@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf"
+ integrity sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=
+ dependencies:
+ array-each "^1.0.1"
+ array-slice "^1.0.0"
+ for-own "^1.0.0"
+ isobject "^3.0.0"
+
+object.entries@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.3.tgz#c601c7f168b62374541a07ddbd3e2d5e4f7711a6"
+ integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==
+ dependencies:
+ call-bind "^1.0.0"
+ define-properties "^1.1.3"
+ es-abstract "^1.18.0-next.1"
+ has "^1.0.3"
+
+object.fromentries@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.3.tgz#13cefcffa702dc67750314a3305e8cb3fad1d072"
+ integrity sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw==
+ dependencies:
+ call-bind "^1.0.0"
+ define-properties "^1.1.3"
+ es-abstract "^1.18.0-next.1"
+ has "^1.0.3"
+
+object.map@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37"
+ integrity sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=
+ dependencies:
+ for-own "^1.0.0"
+ make-iterator "^1.0.0"
+
+object.pick@^1.2.0, object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+ dependencies:
+ isobject "^3.0.1"
+
+object.values@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.2.tgz#7a2015e06fcb0f546bd652486ce8583a4731c731"
+ integrity sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==
+ dependencies:
+ call-bind "^1.0.0"
+ define-properties "^1.1.3"
+ es-abstract "^1.18.0-next.1"
+ has "^1.0.3"
+
+on-finished@~2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
+ integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
+ dependencies:
+ ee-first "1.1.1"
+
+on-headers@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
+ integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
+
+once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+ dependencies:
+ wrappy "1"
+
+onetime@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
+ integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
+ dependencies:
+ mimic-fn "^2.1.0"
+
+opencollective-postinstall@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259"
+ integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==
+
+optimist@~0.3.5:
+ version "0.3.7"
+ resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.3.7.tgz#c90941ad59e4273328923074d2cf2e7cbc6ec0d9"
+ integrity sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=
+ dependencies:
+ wordwrap "~0.0.2"
+
+optionator@^0.9.1:
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
+ integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
+ dependencies:
+ deep-is "^0.1.3"
+ fast-levenshtein "^2.0.6"
+ levn "^0.4.1"
+ prelude-ls "^1.2.1"
+ type-check "^0.4.0"
+ word-wrap "^1.2.3"
+
+orbit-db-access-controllers@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/orbit-db-access-controllers/-/orbit-db-access-controllers-0.3.0.tgz#48814ab2965a73a0d0d218b56be93318c478a0fb"
+ integrity sha512-H7xfgpcyAx9ToFYMvpP7StCt269uaqM33lnMdY9T1o3gbP8IYe0wPurkPQwg6IVZHrDeeBvTDA7kbOqShf9vJw==
+ dependencies:
+ orbit-db-io "^0.3.0"
+ p-map-series "^1.0.0"
+
+orbit-db-cache@^0.3.0, orbit-db-cache@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/orbit-db-cache/-/orbit-db-cache-0.3.0.tgz#a1be218f7c3c16dd6e51c9e137cebbaa577b6db8"
+ integrity sha512-jUsS+D3jXCwvFy92rqvsEroBMRD1SVyBwRJO248F/0/xIJ7zg+DGmhgukivUDvCrx3cpAXqYqh3Ob+kS+K9QBA==
+ dependencies:
+ logplease "~1.2.15"
+
+orbit-db-counterstore@~1.12.0:
+ version "1.12.0"
+ resolved "https://registry.yarnpkg.com/orbit-db-counterstore/-/orbit-db-counterstore-1.12.0.tgz#5a04dc20142ae1e9dadd6d5999895b955c4047f9"
+ integrity sha512-ElaW8OXsSOORtuLREkq3IJ2xZPZXGzLZ6SUP9/VxqyNZQz+XNX7G7DE/kl4hy2kHjahF2+6M3BngJSvuJmc1Bw==
+ dependencies:
+ crdts "~0.1.2"
+
+orbit-db-docstore@~1.12.0:
+ version "1.12.0"
+ resolved "https://registry.yarnpkg.com/orbit-db-docstore/-/orbit-db-docstore-1.12.0.tgz#33479043a9da0004f684344de42305626be2669e"
+ integrity sha512-AivU+G1y55qon2M8KY2SOV0nlCqzkc1+UpaFqtRtzH2NSPjsjnyr4Bhv+X/K+lXKQJPFnOMCiga+FspDjiKe3w==
+ dependencies:
+ p-map "~1.1.1"
+
+orbit-db-eventstore@~1.12.0:
+ version "1.12.0"
+ resolved "https://registry.yarnpkg.com/orbit-db-eventstore/-/orbit-db-eventstore-1.12.0.tgz#f89f544058d77bf2d1fa6eedf05a72e77c8b93e4"
+ integrity sha512-KOTBa5Xj4EGlOEqNTNVdHeoMoJRc90x1LQrOfXKkF3XjN6qL92peIfBvVReLhbwG1mDRVdmtRpMNRcaA9eDI5Q==
+
+orbit-db-feedstore@~1.12.0:
+ version "1.12.0"
+ resolved "https://registry.yarnpkg.com/orbit-db-feedstore/-/orbit-db-feedstore-1.12.0.tgz#c5d3edd643c9ce95c573b568ee388507d00ff08c"
+ integrity sha512-hsNJTMb+AJI0ZeIKJVeTVngNbW9Zsh9/PF4qDFykITOwH7uqdNYosm3rR7psmmXtUmIgzPNolrHvyI2KmMsOIQ==
+ dependencies:
+ orbit-db-eventstore "~1.12.0"
+
+orbit-db-identity-provider@^0.3.0, orbit-db-identity-provider@~0.3.0, orbit-db-identity-provider@~0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/orbit-db-identity-provider/-/orbit-db-identity-provider-0.3.1.tgz#ed2eaccf14981fd105984644052bb28e32b2fa20"
+ integrity sha512-kR6uUCovNecTTPTDsCkm07VEEg1nozx5bz0/ZUO7Oo+0EhCACPO9DZ3g5Wy9bPBHyaaRYqcocQfqAvTdfwyWLQ==
+ dependencies:
+ ethers "^5.0.8"
+ orbit-db-keystore "~0.3.5"
+
+orbit-db-io@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/orbit-db-io/-/orbit-db-io-0.2.0.tgz#53be6e4067c02e2fbff9d371aedeb6da8dbb89ee"
+ integrity sha512-wOunD4ZRgtTsAXJEu9NNEeJ8s98tZTtFlrLiI/ThuDKBy4AwpIvr+vMkzMD0DMSUTurRtK+xz7AfkP0nd9bcxQ==
+ dependencies:
+ cids "^0.7.1"
+ ipld-dag-pb "^0.18.1"
+
+orbit-db-io@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/orbit-db-io/-/orbit-db-io-0.3.0.tgz#cbc84c629431ea63a2c32d73f4638c8c92ebc444"
+ integrity sha512-yWyhDR9vqw2+8tuOT+erKWkc9cL2QuemSVZgPjEm7nn+zkBzbacbfUdbgKtbtgUp8VDKhCzph2LfEEVhs6F5HA==
+ dependencies:
+ cids "^1.0.0"
+ ipld-dag-pb "^0.20.0"
+
+orbit-db-io@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/orbit-db-io/-/orbit-db-io-0.4.0.tgz#dd1f3dcdc65761d0fa9e379758492161549ed2e6"
+ integrity sha512-xwCbQlV5okIhRyXrCzjAp37mAyKJO9LL1+y69UzkNfNuxIkcplZHVP9uUChYSkuKRosptf8/V2TWwDC7sQnGsA==
+ dependencies:
+ cids "^1.0.2"
+ ipld-dag-pb "^0.20.0"
+
+orbit-db-keystore@0.3.5, orbit-db-keystore@~0.3.0, orbit-db-keystore@~0.3.5:
+ version "0.3.5"
+ resolved "https://registry.yarnpkg.com/orbit-db-keystore/-/orbit-db-keystore-0.3.5.tgz#72e9f8cec58909d68b2d4cb8acaa0484ef581111"
+ integrity sha512-oyu8BndnGnX+7tEHfkXBxiSPMSeztLweIUUY4OwyKysXaqd5CWvNDGT3tVZ4jq8dJ13LNmfQzdr20PjIRcBVig==
+ dependencies:
+ elliptic "^6.5.3"
+ level "~5.0.1"
+ leveldown "~5.1.1"
+ levelup "~4.1.0"
+ libp2p-crypto "^0.16.0"
+ libp2p-crypto-secp256k1 "^0.3.0"
+ lru "^3.1.0"
+ mkdirp "^0.5.5"
+ safe-buffer "^5.2.1"
+
+orbit-db-kvstore@~1.12.0:
+ version "1.12.0"
+ resolved "https://registry.yarnpkg.com/orbit-db-kvstore/-/orbit-db-kvstore-1.12.0.tgz#bbb578c609705078a920b3b07694ff1fbe6507f4"
+ integrity sha512-v4V0bG17WhXlk5GPt9ICnP/owCds3uhIWaTgrix9nwnolfCMlX0hKDjrTrrZ8HKsTn1cm5Me/ID8i7WJvi5xoA==
+
+orbit-db-pubsub@~0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/orbit-db-pubsub/-/orbit-db-pubsub-0.6.0.tgz#31cbf193e94da8bab74a649671d9c8f0956483d1"
+ integrity sha512-+hQoeev6rl0S4805KDHVz7tU3zUk97a8udCH8LLtKG0Lh1xjc+qCIk5Pcknu6OjppkECmEz68e2wcYyfEqXufw==
+ dependencies:
+ ipfs-pubsub-peer-monitor "~0.0.5"
+ logplease "~1.2.14"
+ p-series "^1.1.0"
+
+orbit-db-storage-adapter@^0.5.3, orbit-db-storage-adapter@~0.5.3:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/orbit-db-storage-adapter/-/orbit-db-storage-adapter-0.5.3.tgz#f1a28cf91d6b47011585346670026318e85867e9"
+ integrity sha512-K/YDVcKkhzEnqK1WFtjcADTtNZdskBJyaTCUY+m0dCuf39VHsXO4kRq5htpT1wJ6yI9dlG6TysVh+duA3o+Xig==
+ dependencies:
+ level "^5.0.1"
+ mkdirp "^0.5.1"
+
+"orbit-db-store@github:mistakia/orbit-db-store#proto/record", orbit-db-store@mistakia/orbit-db-store#proto/record:
+ version "4.0.1"
+ resolved "https://codeload.github.com/mistakia/orbit-db-store/tar.gz/c68d08aae1e5886c4e95e9ba003a874e688245c7"
+ dependencies:
+ ipfs-log "github:mistakia/ipfs-log#proto/record"
+ it-to-stream "^0.1.2"
+ logplease "^1.2.14"
+ orbit-db-io "~0.4.0"
+ p-each-series "^2.1.0"
+ p-map "^4.0.0"
+ p-queue "^6.6.1"
+ readable-stream "~3.6.0"
+
+orbit-db@mistakia/orbit-db#proto/record:
+ version "0.26.0"
+ resolved "https://codeload.github.com/mistakia/orbit-db/tar.gz/c1455ea9f6d913350391d4cf9fee1ce7459bc4d2"
+ dependencies:
+ cids "^0.7.1"
+ ipfs-pubsub-1on1 "github:mistakia/ipfs-pubsub-1on1#fix/waitForPeers"
+ is-node "^1.0.2"
+ localstorage-down "^0.6.7"
+ logplease "^1.2.14"
+ multihashes "~3.0.1"
+ orbit-db-access-controllers "^0.3.0"
+ orbit-db-cache "~0.3.0"
+ orbit-db-counterstore "~1.12.0"
+ orbit-db-docstore "~1.12.0"
+ orbit-db-eventstore "~1.12.0"
+ orbit-db-feedstore "~1.12.0"
+ orbit-db-identity-provider "~0.3.0"
+ orbit-db-io "^0.2.0"
+ orbit-db-keystore "~0.3.0"
+ orbit-db-kvstore "~1.12.0"
+ orbit-db-pubsub "~0.6.0"
+ orbit-db-storage-adapter "~0.5.3"
+ orbit-db-store "github:mistakia/orbit-db-store#proto/record"
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+ integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
+
+os-tmpdir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+osenv@0, osenv@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
+ integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.0"
+
+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-do-whilst@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/p-do-whilst/-/p-do-whilst-1.1.0.tgz#acb0305c01aa9be6c4dfe3b340221b9c57e865c8"
+ integrity sha512-ntAQbyZJAqCBoTrW3M8XEn1+45wkWgoG6EKRKGCrSvMs0wBY2a3W3mY0I5OErEweFrQsTLAhIv3KN6yyujQnzQ==
+
+p-each-series@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a"
+ integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==
+
+p-fifo@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-fifo/-/p-fifo-1.0.0.tgz#e29d5cf17c239ba87f51dde98c1d26a9cfe20a63"
+ 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"
+ integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
+
+p-forever@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/p-forever/-/p-forever-2.1.0.tgz#3b8d1de4b572c9c1f8ecf0346cc79e61d024b9ec"
+ integrity sha512-kqZrNBsD8fUPCpZLYJoHTiONQVrdkA2nKwSsTfIr5h7P8jGpSy+Vzkxu6nVcZcz3c/rSx/Ys3AACd/BkMKvqbw==
+
+p-limit@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+ integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
+ dependencies:
+ p-try "^1.0.0"
+
+p-limit@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+ integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+ dependencies:
+ p-try "^2.0.0"
+
+p-limit@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+ integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+ dependencies:
+ yocto-queue "^0.1.0"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
+ dependencies:
+ p-limit "^1.1.0"
+
+p-locate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+ integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+ dependencies:
+ p-limit "^2.0.0"
+
+p-locate@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
+ integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+ dependencies:
+ p-limit "^3.0.2"
+
+p-map-series@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca"
+ integrity sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=
+ dependencies:
+ p-reduce "^1.0.0"
+
+p-map@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
+ integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
+ dependencies:
+ aggregate-error "^3.0.0"
+
+p-map@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.1.1.tgz#05f5e4ae97a068371bc2a5cc86bfbdbc19c4ae7a"
+ integrity sha1-BfXkrpegaDcbwqXMhr+9vBnErno=
+
+p-queue@^6.3.0, p-queue@^6.6.1:
+ version "6.6.2"
+ resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426"
+ integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==
+ dependencies:
+ eventemitter3 "^4.0.4"
+ p-timeout "^3.2.0"
+
+p-reduce@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa"
+ integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=
+
+p-series@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/p-series/-/p-series-1.1.0.tgz#f2d8522cdfd58b464eb9685651d465037ee3c957"
+ integrity sha512-356covArc9UCfj2twY/sxCJKGMzzO+pJJtucizsPC6aS1xKSTBc9PQrQhvFR3+7F+fa2KBKdJjdIcv6NEWDcIQ==
+ dependencies:
+ "@sindresorhus/is" "^0.7.0"
+ p-reduce "^1.0.0"
+
+p-timeout@^3.0.0, p-timeout@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe"
+ integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==
+ dependencies:
+ p-finally "^1.0.0"
+
+p-try@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+ integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
+
+p-try@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+p-wait-for@^3.1.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/p-wait-for/-/p-wait-for-3.2.0.tgz#640429bcabf3b0dd9f492c31539c5718cb6a3f1f"
+ integrity sha512-wpgERjNkLrBiFmkMEjuZJEWKKDrNfHCKA1OhyN1wg1FrLkULbviEy6py1AyJUgZ72YWFbZ38FIpnqvVqAlDUwA==
+ dependencies:
+ p-timeout "^3.0.0"
+
+p-whilst@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/p-whilst/-/p-whilst-2.1.0.tgz#d8f3aa3a68f5595ab8b40a62cc3d49d8f9cf082c"
+ integrity sha512-uzp1HPgqzokEmZN+VpfQ9PO4YY5xm+jpLJeL9FN1NPU4d4IZh8eEV+mtQXd+/22R1P7C5j19b7Y//oUc7k0+RQ==
+
+pako@~0.2.0:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
+ integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+parse-duration@^0.4.4:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/parse-duration/-/parse-duration-0.4.4.tgz#11c0f51a689e97d06c57bd772f7fda7dc013243c"
+ integrity sha512-KbAJuYGUhZkB9gotDiKLnZ7Z3VTacK3fgwmDdB6ZVDtJbMBT6MfLga0WJaYpPDu0mzqT0NgHtHDt5PY4l0nidg==
+
+parse-filepath@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891"
+ integrity sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=
+ dependencies:
+ is-absolute "^1.0.0"
+ map-cache "^0.2.0"
+ path-root "^0.1.1"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+ dependencies:
+ error-ex "^1.2.0"
+
+parse-json@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
+ integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
+ dependencies:
+ error-ex "^1.3.1"
+ json-parse-better-errors "^1.0.1"
+
+parse-passwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
+ integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=
+
+parseurl@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
+ integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
+
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+ integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-key@^3.0.0, path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
+ integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
+
+path-root-regex@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d"
+ integrity sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=
+
+path-root@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7"
+ integrity sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=
+ dependencies:
+ path-root-regex "^0.1.0"
+
+path-to-regexp@0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+ integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
+
+path-type@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
+ integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
+ dependencies:
+ pify "^2.0.0"
+
+pause-stream@^0.0.11:
+ version "0.0.11"
+ resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445"
+ integrity sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=
+ dependencies:
+ through "~2.3"
+
+peek-readable@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-3.1.3.tgz#932480d46cf6aa553c46c68566c4fb69a82cd2b1"
+ integrity sha512-mpAcysyRJxmICBcBa5IXH7SZPvWkcghm6Fk8RekoS3v+BpbSzlZzuWbMx+GXrlUwESi9qHar4nVEZNMKylIHvg==
+
+peek-stream@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/peek-stream/-/peek-stream-1.1.3.tgz#3b35d84b7ccbbd262fff31dc10da56856ead6d67"
+ integrity sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==
+ dependencies:
+ buffer-from "^1.0.0"
+ duplexify "^3.5.0"
+ through2 "^2.0.3"
+
+peer-id@^0.14.1:
+ version "0.14.2"
+ resolved "https://registry.yarnpkg.com/peer-id/-/peer-id-0.14.2.tgz#3ddd752092a54f06b750b5e67d0db98fb4ee40bc"
+ integrity sha512-8iZWaUT7jq8rVyyFZUHYUwFCvhoI5B1Q2MAJjUF9MTf4TsNRQPnod4Mycf2jrK/uXFBN5/9K1NhPoieFyz/PRw==
+ dependencies:
+ cids "^1.0.0"
+ class-is "^1.1.0"
+ libp2p-crypto "^0.18.0"
+ minimist "^1.2.5"
+ multihashes "^3.0.1"
+ protons "^2.0.0"
+ uint8arrays "^1.1.0"
+
+pem-jwk@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pem-jwk/-/pem-jwk-2.0.0.tgz#1c5bb264612fc391340907f5c1de60c06d22f085"
+ integrity sha512-rFxu7rVoHgQ5H9YsP50dDWf0rHjreVA2z0yPiWr5WdH/UHb29hKtF7h6l8vNd1cbYR1t0QL+JKhW55a2ZV4KtA==
+ dependencies:
+ asn1.js "^5.0.1"
+
+performance-now@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+ integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
+
+pg-connection-string@2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.4.0.tgz#c979922eb47832999a204da5dbe1ebf2341b6a10"
+ integrity sha512-3iBXuv7XKvxeMrIgym7njT+HlZkwZqqGX4Bu9cci8xHZNT+Um1gWKqCsAzcC0d95rcKMU5WBg6YRUcHyV0HZKQ==
+
+picomatch@^2.0.4, picomatch@^2.2.1:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
+ integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
+
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+
+pify@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+ integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
+pkg-conf@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-3.1.0.tgz#d9f9c75ea1bae0e77938cde045b276dac7cc69ae"
+ integrity sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==
+ dependencies:
+ find-up "^3.0.0"
+ load-json-file "^5.2.0"
+
+pkg-dir@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
+ integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
+ dependencies:
+ find-up "^2.1.0"
+
+posix-character-classes@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+ integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+
+prelude-ls@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
+ integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+
+process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+progress@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+ integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+promise@~1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/promise/-/promise-1.3.0.tgz#e5cc9a4c8278e4664ffedc01c7da84842b040175"
+ integrity sha1-5cyaTIJ45GZP/twBx9qEhCsEAXU=
+ dependencies:
+ is-promise "~1"
+
+prop-types@^15.7.2:
+ version "15.7.2"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
+ integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.8.1"
+
+protocol-buffers-schema@^3.3.1:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.5.1.tgz#8388e768d383ac8cbea23e1280dfadb79f4122ad"
+ integrity sha512-YVCvdhxWNDP8/nJDyXLuM+UFsuPk4+1PB7WGPVDzm3HTHbzFLxQYeW2iZpS4mmnXrQJGBzt230t/BbEb7PrQaw==
+
+protons@^1.0.1, protons@^1.0.2:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/protons/-/protons-1.2.1.tgz#5f1e0db8b2139469cd1c3b4e332a4c2d95d0a218"
+ integrity sha512-2oqDyc/SN+tNcJf8XxrXhYL7sQn2/OMl8mSdD7NVGsWjMEmAbks4eDVnCyf0vAoRbBWyWTEXWk4D8XfuKVl3zg==
+ dependencies:
+ buffer "^5.5.0"
+ protocol-buffers-schema "^3.3.1"
+ signed-varint "^2.0.1"
+ varint "^5.0.0"
+
+protons@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/protons/-/protons-2.0.0.tgz#a6910161f0ed0f3a9007c1503acda7a402023cd8"
+ integrity sha512-BTrE9D6/d1NGis+0D8TqAO1THdn4evHQhfjapA0NUaRH4+ecJJcbqaF7TE/DKv5czE9VB/TeOllBOmCyJhHnhg==
+ dependencies:
+ protocol-buffers-schema "^3.3.1"
+ signed-varint "^2.0.1"
+ uint8arrays "^1.0.0"
+ varint "^5.0.0"
+
+proxy-addr@~2.0.5:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf"
+ integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==
+ dependencies:
+ forwarded "~0.1.2"
+ ipaddr.js "1.9.1"
+
+prr@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
+ integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
+
+psl@^1.1.28:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
+ integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
+
+pump@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+ integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pumpify@^1.3.3:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
+ integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
+ dependencies:
+ duplexify "^3.6.0"
+ inherits "^2.0.3"
+ pump "^2.0.0"
+
+punycode@^2.1.0, punycode@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+qs@6.7.0:
+ version "6.7.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
+ integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
+
+qs@~6.5.2:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
+ integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
+
+randombytes@^2.0.3, randombytes@^2.0.5, randombytes@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+ integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+ dependencies:
+ safe-buffer "^5.1.0"
+
+range-parser@~1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
+ integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
+
+raw-body@2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332"
+ integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==
+ dependencies:
+ bytes "3.1.0"
+ http-errors "1.7.2"
+ iconv-lite "0.4.24"
+ unpipe "1.0.0"
+
+rc@^1.2.7:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+ integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+ dependencies:
+ deep-extend "^0.6.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+react-is@^16.8.1:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+ integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+read-pkg-up@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
+ integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
+ dependencies:
+ find-up "^2.0.0"
+ read-pkg "^2.0.0"
+
+read-pkg@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
+ integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
+ dependencies:
+ load-json-file "^2.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^2.0.0"
+
+readable-stream@^2.0.0, readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@~2.3.6:
+ version "2.3.7"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+ integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0, readable-stream@~3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
+ integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
+readable-web-to-node-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-2.0.0.tgz#751e632f466552ac0d5c440cc01470352f93c4b7"
+ integrity sha512-+oZJurc4hXpaaqsN68GoZGQAQIA3qr09Or4fqEsargABnbe5Aau8hFn6ISVleT3cpY/0n/8drn7huyyEvTbghA==
+
+readable-web-to-node-stream@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.1.tgz#3f619b1bc5dd73a4cfe5c5f9b4f6faba55dff845"
+ integrity sha512-4zDC6CvjUyusN7V0QLsXVB7pJCD9+vtrM9bYDRv6uBQ+SKfx36rp5AFNPRgh9auKRul/a1iFZJYXcCbwRL+SaA==
+ dependencies:
+ "@types/readable-stream" "^2.3.9"
+ readable-stream "^3.6.0"
+
+readdirp@~3.5.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e"
+ integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==
+ dependencies:
+ picomatch "^2.2.1"
+
+receptacle@^1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/receptacle/-/receptacle-1.3.2.tgz#a7994c7efafc7a01d0e2041839dab6c4951360d2"
+ integrity sha512-HrsFvqZZheusncQRiEE7GatOAETrARKV/lnfYicIm8lbvp/JQOdADOfhjBd2DajvoszEyxSM6RlAAIZgEoeu/A==
+ dependencies:
+ ms "^2.1.1"
+
+rechoir@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
+ integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=
+ dependencies:
+ resolve "^1.1.6"
+
+record-ipfsd@mistakia/record-ipfsd#d6bec86:
+ version "0.0.1"
+ resolved "https://codeload.github.com/mistakia/record-ipfsd/tar.gz/d6bec8650dfa77b86f4e1ded15a753bdd14d0962"
+ dependencies:
+ ipfs-http-client "47.0.1"
+ ipfsd-ctl "7.2.0"
+ jsonfile "^6.1.0"
+
+record-resolver@mistakia/record-resolver#499873d:
+ version "0.0.1"
+ resolved "https://codeload.github.com/mistakia/record-resolver/tar.gz/499873d96898b5240914346c9fe30c702097b6da"
+ dependencies:
+ youtube-dl "^3.0.2"
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
+regexp.prototype.flags@^1.3.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26"
+ integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+
+regexpp@^3.0.0, regexpp@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"
+ integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==
+
+repeat-element@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
+ integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
+
+repeat-string@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+request@^2.87.0, request@~2.88.0:
+ version "2.88.2"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
+ integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.8.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.6"
+ extend "~3.0.2"
+ forever-agent "~0.6.1"
+ form-data "~2.3.2"
+ har-validator "~5.1.3"
+ http-signature "~1.2.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.19"
+ oauth-sign "~0.9.0"
+ performance-now "^2.1.0"
+ qs "~6.5.2"
+ safe-buffer "^5.1.2"
+ tough-cookie "~2.5.0"
+ tunnel-agent "^0.6.0"
+ uuid "^3.3.2"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+
+require-main-filename@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
+ integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
+
+reset@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/reset/-/reset-0.1.0.tgz#9fc7314171995ae6cb0b7e58b06ce7522af4bafb"
+ integrity sha1-n8cxQXGZWubLC35YsGznUir0uvs=
+
+resolve-dir@^1.0.0, resolve-dir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
+ integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=
+ dependencies:
+ expand-tilde "^2.0.0"
+ global-modules "^1.0.0"
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+
+resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.18.1:
+ version "1.19.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c"
+ integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==
+ dependencies:
+ is-core-module "^2.1.0"
+ path-parse "^1.0.6"
+
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+retimer@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/retimer/-/retimer-2.0.0.tgz#e8bd68c5e5a8ec2f49ccb5c636db84c04063bbca"
+ integrity sha512-KLXY85WkEq2V2bKex/LOO1ViXVn2KGYe4PYysAdYdjmraYIUsVkXu8O4am+8+5UbaaGl1qho4aqAAPHNQ4GSbg==
+
+rimraf@2, rimraf@^2.6.1:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+ integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+ dependencies:
+ glob "^7.1.3"
+
+rimraf@2.6.3:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
+ integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+ dependencies:
+ glob "^7.1.3"
+
+rimraf@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
+ integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+
+rsa-pem-to-jwk@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/rsa-pem-to-jwk/-/rsa-pem-to-jwk-1.1.3.tgz#245e76bdb7e7234cfee7ca032d31b54c38fab98e"
+ integrity sha1-JF52vbfnI0z+58oDLTG1TDj6uY4=
+ dependencies:
+ object-assign "^2.0.0"
+ rsa-unpack "0.0.6"
+
+rsa-unpack@0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/rsa-unpack/-/rsa-unpack-0.0.6.tgz#f50ebd56a628378e631f297161026ce9ab4eddba"
+ integrity sha1-9Q69VqYoN45jHylxYQJs6atO3bo=
+ dependencies:
+ optimist "~0.3.5"
+
+run-series@^1.1.9:
+ version "1.1.9"
+ resolved "https://registry.yarnpkg.com/run-series/-/run-series-1.1.9.tgz#15ba9cb90e6a6c054e67c98e1dc063df0ecc113a"
+ integrity sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g==
+
+run@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/run/-/run-1.4.0.tgz#e17d9e9043ab2fe17776cb299e1237f38f0b4ffa"
+ integrity sha1-4X2ekEOrL+F3dsspnhI3848LT/o=
+ dependencies:
+ minimatch "*"
+
+rusha@^0.8.1:
+ version "0.8.13"
+ resolved "https://registry.yarnpkg.com/rusha/-/rusha-0.8.13.tgz#9a084e7b860b17bff3015b92c67a6a336191513a"
+ integrity sha1-mghOe4YLF7/zAVuSxnpqM2GRUTo=
+
+safe-buffer@*, 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, safe-buffer@^5.2.1, safe-buffer@~5.2.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+ integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1, safe-buffer@~5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+ dependencies:
+ ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sax@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+ integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+scrypt-js@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312"
+ integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==
+
+secp256k1@3.8.0, secp256k1@^3.6.2:
+ version "3.8.0"
+ resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-3.8.0.tgz#28f59f4b01dbee9575f56a47034b7d2e3b3b352d"
+ integrity sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw==
+ dependencies:
+ bindings "^1.5.0"
+ bip66 "^1.1.5"
+ bn.js "^4.11.8"
+ create-hash "^1.2.0"
+ drbg.js "^1.0.1"
+ elliptic "^6.5.2"
+ nan "^2.14.0"
+ safe-buffer "^5.1.2"
+
+secp256k1@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.2.tgz#15dd57d0f0b9fdb54ac1fa1694f40e5e9a54f4a1"
+ integrity sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg==
+ dependencies:
+ elliptic "^6.5.2"
+ node-addon-api "^2.0.0"
+ node-gyp-build "^4.2.0"
+
+"semver@2 || 3 || 4 || 5", semver@^5.3.0:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+ integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
+semver@^6.0.0, semver@^6.1.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+ integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+semver@^7.2.1:
+ version "7.3.4"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97"
+ integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==
+ dependencies:
+ lru-cache "^6.0.0"
+
+semver@~5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
+ integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8=
+
+send@0.17.1:
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"
+ integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==
+ dependencies:
+ debug "2.6.9"
+ depd "~1.1.2"
+ destroy "~1.0.4"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ fresh "0.5.2"
+ http-errors "~1.7.2"
+ mime "1.6.0"
+ ms "2.1.1"
+ on-finished "~2.3.0"
+ range-parser "~1.2.1"
+ statuses "~1.5.0"
+
+serialize-javascript@5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4"
+ integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==
+ dependencies:
+ randombytes "^2.1.0"
+
+serve-static@1.14.1:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9"
+ integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==
+ dependencies:
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ parseurl "~1.3.3"
+ send "0.17.1"
+
+set-blocking@^2.0.0, set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-value@^2.0.0, set-value@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+ integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
+setprototypeof@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
+ integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
+
+sha.js@^2.4.0, sha.js@^2.4.8:
+ version "2.4.11"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
+ integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+side-channel@^1.0.2, side-channel@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
+ integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
+ dependencies:
+ call-bind "^1.0.0"
+ get-intrinsic "^1.0.2"
+ object-inspect "^1.9.0"
+
+signal-exit@^3.0.0, signal-exit@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
+ integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
+
+signed-varint@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/signed-varint/-/signed-varint-2.0.1.tgz#50a9989da7c98c2c61dad119bc97470ef8528129"
+ integrity sha1-UKmYnafJjCxh2tEZvJdHDvhSgSk=
+ dependencies:
+ varint "~5.0.0"
+
+simple-sha1@^2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/simple-sha1/-/simple-sha1-2.1.2.tgz#de40cbd5aae278fde8e3bb3250a35d74c67326b1"
+ integrity sha512-TQl9rm4rdKAVmhO++sXAb8TNN0D6JAD5iyI1mqEPNpxUzTRrtm4aOG1pDf/5W/qCFihiaoK6uuL9rvQz1x1VKw==
+ dependencies:
+ rusha "^0.8.1"
+
+slice-ansi@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
+ integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
+ dependencies:
+ ansi-styles "^3.2.0"
+ astral-regex "^1.0.0"
+ is-fullwidth-code-point "^2.0.0"
+
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
+
+source-map-resolve@^0.5.0:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
+ integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
+ dependencies:
+ atob "^2.1.2"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
+
+source-map-url@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
+ integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
+
+source-map@^0.5.6:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+
+spdx-correct@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
+ integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==
+ dependencies:
+ spdx-expression-parse "^3.0.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
+ integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
+
+spdx-expression-parse@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
+ integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
+ dependencies:
+ spdx-exceptions "^2.1.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+ version "3.0.7"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65"
+ integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==
+
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+ dependencies:
+ extend-shallow "^3.0.0"
+
+split@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9"
+ integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==
+ dependencies:
+ through "2"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+
+sqlite3@5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.0.1.tgz#d5b58c8d1568bbaf13062eb9465982f36324f78a"
+ integrity sha512-kh2lTIcYNfmVcvhVJihsYuPj9U0xzBbh6bmqILO2hkryWSC9RRhzYmkIDtJkJ+d8Kg4wZRJ0T1reyHUEspICfg==
+ dependencies:
+ node-addon-api "^3.0.0"
+ node-pre-gyp "^0.11.0"
+ optionalDependencies:
+ node-gyp "3.x"
+
+sshpk@^1.7.0:
+ version "1.16.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
+ integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ bcrypt-pbkdf "^1.0.0"
+ dashdash "^1.12.0"
+ ecc-jsbn "~0.1.1"
+ getpass "^0.1.1"
+ jsbn "~0.1.0"
+ safer-buffer "^2.0.2"
+ tweetnacl "~0.14.0"
+
+stable@^0.1.8:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
+ integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==
+
+standard-engine@^14.0.1:
+ version "14.0.1"
+ resolved "https://registry.yarnpkg.com/standard-engine/-/standard-engine-14.0.1.tgz#fe568e138c3d9768fc59ff81001f7049908a8156"
+ integrity sha512-7FEzDwmHDOGva7r9ifOzD3BGdTbA7ujJ50afLVdW/tK14zQEptJjbFuUfn50irqdHDcTbNh0DTIoMPynMCXb0Q==
+ dependencies:
+ get-stdin "^8.0.0"
+ minimist "^1.2.5"
+ pkg-conf "^3.1.0"
+ xdg-basedir "^4.0.0"
+
+standard@16.0.3:
+ version "16.0.3"
+ resolved "https://registry.yarnpkg.com/standard/-/standard-16.0.3.tgz#a854c0dd2dea6b9f0b8d20c65260210bd0cee619"
+ integrity sha512-70F7NH0hSkNXosXRltjSv6KpTAOkUkSfyu3ynyM5dtRUiLtR+yX9EGZ7RKwuGUqCJiX/cnkceVM6HTZ4JpaqDg==
+ dependencies:
+ eslint "~7.13.0"
+ eslint-config-standard "16.0.2"
+ eslint-config-standard-jsx "10.0.0"
+ eslint-plugin-import "~2.22.1"
+ eslint-plugin-node "~11.1.0"
+ eslint-plugin-promise "~4.2.1"
+ eslint-plugin-react "~7.21.5"
+ standard-engine "^14.0.1"
+
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
+"statuses@>= 1.5.0 < 2", statuses@~1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+ integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
+
+stream-combiner@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.2.2.tgz#aec8cbac177b56b6f4fa479ced8c1912cee52858"
+ integrity sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=
+ dependencies:
+ duplexer "~0.1.1"
+ through "~2.3.4"
+
+stream-filter@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/stream-filter/-/stream-filter-1.0.0.tgz#3f0a4c6d5981011e9862a32afdb0df16a4b67ede"
+ integrity sha1-PwpMbVmBAR6YYqMq/bDfFqS2ft4=
+ dependencies:
+ through "~2"
+
+stream-reduce@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/stream-reduce/-/stream-reduce-1.0.3.tgz#56d3621fa84370619ae402ffc0468528991b36a9"
+ integrity sha1-VtNiH6hDcGGa5AL/wEaFKJkbNqk=
+ dependencies:
+ through "~2.3.4"
+
+stream-shift@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
+ integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
+
+stream-to-it@^0.2.0, stream-to-it@^0.2.1, stream-to-it@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/stream-to-it/-/stream-to-it-0.2.2.tgz#fb3de7917424c354a987c7bc2aab2d0facbd7d94"
+ integrity sha512-waULBmQpVdr6TkDzci6t1P7dIaSZ0bHC1TaPXDUeJC5PpSK7U3T0H0Zeo/LWUnd6mnhXOmGGDKAkjUCHw5IOng==
+ dependencies:
+ get-iterator "^1.0.2"
+
+streamify@~0.2.9:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/streamify/-/streamify-0.2.9.tgz#8938b14db491e2b6be4f8d99cc4133c9f0384f0b"
+ integrity sha512-8pUxeLEef9UO1FxtTt5iikAiyzGI4SZRnGuJ3sz8axZ5Xk+/7ezEV5kuJQsMEFxw7AKYw3xp0Ow+20mmSaJbQQ==
+ dependencies:
+ hashish "~0.0.4"
+
+string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+"string-width@^1.0.2 || 2":
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
+
+string-width@^3.0.0, string-width@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
+ integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
+ dependencies:
+ emoji-regex "^7.0.1"
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^5.1.0"
+
+string-width@^4.1.0, string-width@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
+ integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.0"
+
+string.prototype.matchall@^4.0.2:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.3.tgz#24243399bc31b0a49d19e2b74171a15653ec996a"
+ integrity sha512-OBxYDA2ifZQ2e13cP82dWFMaCV9CGF8GzmN4fljBVw5O5wep0lu4gacm1OL6MjROoUnB8VbkWRThqkV2YFLNxw==
+ dependencies:
+ call-bind "^1.0.0"
+ define-properties "^1.1.3"
+ es-abstract "^1.18.0-next.1"
+ has-symbols "^1.0.1"
+ internal-slot "^1.0.2"
+ regexp.prototype.flags "^1.3.0"
+ side-channel "^1.0.3"
+
+string.prototype.trimend@^1.0.1, string.prototype.trimend@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b"
+ integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==
+ dependencies:
+ call-bind "^1.0.0"
+ define-properties "^1.1.3"
+
+string.prototype.trimstart@^1.0.1, string.prototype.trimstart@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa"
+ integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==
+ dependencies:
+ call-bind "^1.0.0"
+ define-properties "^1.1.3"
+
+string_decoder@^1.1.1:
+ 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@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+ dependencies:
+ ansi-regex "^3.0.0"
+
+strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+ integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
+ dependencies:
+ ansi-regex "^4.1.0"
+
+strip-ansi@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
+ integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
+ dependencies:
+ ansi-regex "^5.0.0"
+
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+ integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+
+strip-final-newline@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
+ integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
+
+strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+ integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+
+strtok3@^6.0.0, strtok3@^6.0.3:
+ version "6.0.8"
+ resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-6.0.8.tgz#c839157f615c10ba0f4ae35067dad9959eeca346"
+ integrity sha512-QLgv+oiXwXgCgp2PdPPa+Jpp4D9imK9e/0BsyfeFMr6QL6wMVqoVn9+OXQ9I7MZbmUzN6lmitTJ09uwS2OmGcw==
+ dependencies:
+ "@tokenizer/token" "^0.1.1"
+ "@types/debug" "^4.1.5"
+ peek-readable "^3.1.3"
+
+supports-color@7.2.0, supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-color@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+table@^5.2.3:
+ version "5.4.6"
+ resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
+ integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==
+ dependencies:
+ ajv "^6.10.2"
+ lodash "^4.17.14"
+ slice-ansi "^2.1.0"
+ string-width "^3.0.0"
+
+tar-fs@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784"
+ integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==
+ dependencies:
+ chownr "^1.1.1"
+ mkdirp-classic "^0.5.2"
+ pump "^3.0.0"
+ tar-stream "^2.1.4"
+
+tar-stream@^2.1.4:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287"
+ integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==
+ dependencies:
+ bl "^4.0.3"
+ end-of-stream "^1.4.1"
+ fs-constants "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^3.1.1"
+
+tar@^2.0.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40"
+ integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==
+ dependencies:
+ block-stream "*"
+ fstream "^1.0.12"
+ inherits "2"
+
+tar@^4:
+ version "4.4.13"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525"
+ integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==
+ dependencies:
+ chownr "^1.1.1"
+ fs-minipass "^1.2.5"
+ minipass "^2.8.6"
+ minizlib "^1.2.1"
+ mkdirp "^0.5.0"
+ safe-buffer "^5.1.2"
+ yallist "^3.0.3"
+
+tarn@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/tarn/-/tarn-3.0.1.tgz#ebac2c6dbc6977d34d4526e0a7814200386a8aec"
+ integrity sha512-6usSlV9KyHsspvwu2duKH+FMUhqJnAh6J5J/4MITl8s94iSUQTLkJggdiewKv4RyARQccnigV48Z+khiuVZDJw==
+
+temp-dir@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d"
+ integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=
+
+temp-write@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-4.0.0.tgz#cd2e0825fc826ae72d201dc26eef3bf7e6fc9320"
+ integrity sha512-HIeWmj77uOOHb0QX7siN3OtwV3CTntquin6TNVg6SHOqCP3hYKmox90eeFOGaY1MqJ9WYDDjkyZrW6qS5AWpbw==
+ dependencies:
+ graceful-fs "^4.1.15"
+ is-stream "^2.0.0"
+ make-dir "^3.0.0"
+ temp-dir "^1.0.0"
+ uuid "^3.3.2"
+
+text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+ integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+
+through2@^2.0.3:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
+ integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+ dependencies:
+ readable-stream "~2.3.6"
+ xtend "~4.0.1"
+
+through@2, through@^2.3.8, through@~2, through@~2.3, through@~2.3.4:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+
+tildify@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/tildify/-/tildify-2.0.0.tgz#f205f3674d677ce698b7067a99e949ce03b4754a"
+ integrity sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==
+
+timeout-abort-controller@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/timeout-abort-controller/-/timeout-abort-controller-1.1.1.tgz#2c3c3c66f13c783237987673c276cbd7a9762f29"
+ integrity sha512-BsF9i3NAJag6T0ZEjki9j654zoafI2X6ayuNd6Tp8+Ul6Tr5s4jo973qFeiWrRSweqvskC+AHDKUmIW4b7pdhQ==
+ dependencies:
+ abort-controller "^3.0.0"
+ retimer "^2.0.0"
+
+tiny-queue@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/tiny-queue/-/tiny-queue-0.2.0.tgz#c49fcb5c87555be1b4a5df7eb87101d5b78bc9dc"
+ integrity sha1-xJ/LXIdVW+G0pd9+uHEB1beLydw=
+
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+ dependencies:
+ kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
+toidentifier@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
+ integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
+
+token-types@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/token-types/-/token-types-2.1.1.tgz#bd585d64902aaf720b8979d257b4b850b4d45c45"
+ integrity sha512-wnQcqlreS6VjthyHO3Y/kpK/emflxDBNhlNUPfh7wE39KnuDdOituXomIbyI79vBtF0Ninpkh72mcuRHo+RG3Q==
+ dependencies:
+ "@tokenizer/token" "^0.1.1"
+ ieee754 "^1.2.1"
+
+tough-cookie@~2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
+ integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
+ dependencies:
+ psl "^1.1.28"
+ punycode "^2.1.1"
+
+traverse@>=0.2.4:
+ version "0.6.6"
+ resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137"
+ integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=
+
+"traverse@>=0.3.0 <0.4":
+ version "0.3.9"
+ resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9"
+ integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=
+
+tsconfig-paths@^3.9.0:
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b"
+ integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==
+ dependencies:
+ "@types/json5" "^0.0.29"
+ json5 "^1.0.1"
+ minimist "^1.2.0"
+ strip-bom "^3.0.0"
+
+tunnel-agent@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
+ dependencies:
+ safe-buffer "^5.0.1"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+
+tweetnacl@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596"
+ integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==
+
+type-check@^0.4.0, type-check@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
+ integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+ dependencies:
+ prelude-ls "^1.2.1"
+
+type-fest@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1"
+ integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==
+
+type-fest@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
+ integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
+
+type-is@~1.6.17, type-is@~1.6.18:
+ version "1.6.18"
+ resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
+ integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
+ dependencies:
+ media-typer "0.3.0"
+ mime-types "~2.1.24"
+
+typedarray-to-buffer@^3.1.5, typedarray-to-buffer@~3.1.5:
+ version "3.1.5"
+ resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
+ integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
+ dependencies:
+ is-typedarray "^1.0.0"
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+
+uint8arrays@1.1.0, uint8arrays@^1.0.0, uint8arrays@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-1.1.0.tgz#d034aa65399a9fd213a1579e323f0b29f67d0ed2"
+ integrity sha512-cLdlZ6jnFczsKf5IH1gPHTtcHtPGho5r4CvctohmQjw8K7Q3gFdfIGHxSTdTaCKrL4w09SsPRJTqRS0drYeszA==
+ dependencies:
+ multibase "^3.0.0"
+ web-encoding "^1.0.2"
+
+uint8arrays@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-2.0.5.tgz#763d0c3dd8e1d05b656d2e60c8a9a53096a47d9e"
+ integrity sha512-1HSktgwqtYIwVn1mg3GcnqKhHH9oC4kVgdD/43cxMWwhP8rihKcFPmToDzS1XtbvVvlR8XxTk/DUBf0C83qNIg==
+ dependencies:
+ multibase "^3.0.0"
+ web-encoding "^1.0.5"
+
+unc-path-regex@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
+ integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo=
+
+union-value@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+ integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^2.0.1"
+
+universalify@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+ integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+
+universalify@^2.0.0, universalify@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
+ integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
+
+unpipe@1.0.0, unpipe@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+ integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
+
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
+
+unzip-stream@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/unzip-stream/-/unzip-stream-0.3.1.tgz#2333b5cd035d29db86fb701ca212cf8517400083"
+ integrity sha512-RzaGXLNt+CW+T41h1zl6pGz3EaeVhYlK+rdAap+7DxW5kqsqePO8kRtWPaCiVqdhZc86EctSPVYNix30YOMzmw==
+ dependencies:
+ binary "^0.3.0"
+ mkdirp "^0.5.1"
+
+uri-js@^4.2.2:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+ dependencies:
+ punycode "^2.1.0"
+
+urix@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+ integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+
+ursa-optional@^0.10.1, ursa-optional@~0.10.0:
+ version "0.10.2"
+ resolved "https://registry.yarnpkg.com/ursa-optional/-/ursa-optional-0.10.2.tgz#bd74e7d60289c22ac2a69a3c8dea5eb2817f9681"
+ integrity sha512-TKdwuLboBn7M34RcvVTuQyhvrA8gYKapuVdm0nBP0mnBc7oECOfUQZrY91cefL3/nm64ZyrejSRrhTVdX7NG/A==
+ dependencies:
+ bindings "^1.5.0"
+ nan "^2.14.2"
+
+use@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+ integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
+util-deprecate@^1.0.1, util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+utils-merge@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
+ integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
+
+uuid@^3.3.2:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
+ integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
+
+v8-compile-cache@^2.0.3:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132"
+ integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==
+
+v8flags@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656"
+ integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==
+ dependencies:
+ homedir-polyfill "^1.0.1"
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+ integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+ dependencies:
+ spdx-correct "^3.0.0"
+ spdx-expression-parse "^3.0.0"
+
+varint@^5.0.0, varint@~5.0.0:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4"
+ integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==
+
+varint@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/varint/-/varint-6.0.0.tgz#9881eb0ce8feaea6512439d19ddf84bf551661d0"
+ integrity sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==
+
+vary@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+ integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
+
+verror@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
+ dependencies:
+ assert-plus "^1.0.0"
+ core-util-is "1.0.2"
+ extsprintf "^1.2.0"
+
+web-encoding@^1.0.2, web-encoding@^1.0.5, web-encoding@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/web-encoding/-/web-encoding-1.0.6.tgz#ec631356ee523b4474ecbcae680440bd1e79416a"
+ integrity sha512-26wEnRPEFAc5d5lmH1Q/DuvWEYsRF1D2alX2jlKpdmqv7cj+BbANL7Xlcl9r4s72Eg9kItZa9RWVbBMC9dMv4w==
+
+which-module@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+ integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
+
+which@1, which@^1.1.1, which@^1.2.14:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+ dependencies:
+ isexe "^2.0.0"
+
+which@2.0.2, which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+wide-align@1.1.3, wide-align@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
+ integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
+ dependencies:
+ string-width "^1.0.2 || 2"
+
+word-wrap@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+ integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+
+wordwrap@~0.0.2:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+ integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
+
+workerpool@6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.0.2.tgz#e241b43d8d033f1beb52c7851069456039d1d438"
+ integrity sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q==
+
+wrap-ansi@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
+ integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
+ dependencies:
+ ansi-styles "^3.2.0"
+ string-width "^3.0.0"
+ strip-ansi "^5.0.0"
+
+wrap-ansi@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+write@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
+ integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
+ dependencies:
+ mkdirp "^0.5.1"
+
+ws@7.2.3:
+ version "7.2.3"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46"
+ integrity sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ==
+
+xdg-basedir@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"
+ integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==
+
+xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
+xtend@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a"
+ integrity sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=
+
+y18n@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4"
+ integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==
+
+y18n@^5.0.5:
+ version "5.0.5"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18"
+ integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==
+
+yallist@^3.0.0, yallist@^3.0.3:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+ integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
+yallist@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+ integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yargs-parser@13.1.2, yargs-parser@^13.1.2:
+ version "13.1.2"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
+ integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+yargs-parser@^20.2.2:
+ version "20.2.4"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54"
+ integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==
+
+yargs-unparser@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb"
+ integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==
+ dependencies:
+ camelcase "^6.0.0"
+ decamelize "^4.0.0"
+ flat "^5.0.2"
+ is-plain-obj "^2.1.0"
+
+yargs@13.3.2:
+ version "13.3.2"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
+ integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
+ dependencies:
+ cliui "^5.0.0"
+ find-up "^3.0.0"
+ get-caller-file "^2.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^2.0.0"
+ set-blocking "^2.0.0"
+ string-width "^3.0.0"
+ which-module "^2.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^13.1.2"
+
+yargs@^16.2.0:
+ version "16.2.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
+ integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
+ dependencies:
+ cliui "^7.0.2"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ require-directory "^2.1.1"
+ string-width "^4.2.0"
+ y18n "^5.0.5"
+ yargs-parser "^20.2.2"
+
+yocto-queue@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+ integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
+
+youtube-dl@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/youtube-dl/-/youtube-dl-3.1.0.tgz#dda6daa07905e52012b0186fb0b8430a1b4a894d"
+ integrity sha512-0DEHyusehEHgN9y/PTsIbp/RioRL9eZM0MNSWBPpHo2fSTSEgbkE/trumk9N8sr2f7LrKo5WuvN0bAf90w8UQQ==
+ dependencies:
+ debug "~4.3.1"
+ execa "~5.0.0"
+ hh-mm-ss "~1.2.0"
+ mkdirp "~1.0.4"
+ request "~2.88.0"
+ streamify "~0.2.9"
+ universalify "~2.0.0"
+
+zero-fill@^2.2.3:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/zero-fill/-/zero-fill-2.2.4.tgz#b041320973dbcb03cd90193270ac8d4a3da05fc1"
+ integrity sha512-/N5GEDauLHz2uGnuJXWO1Wfib4EC+q4yp9C1jojM7RubwEKADqIqMcYpETMm1lRop403fi3v1qTOdgDE8DIOdw==