From a895a653faa12ffd9e027ec03f04ac528c154533 Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Tue, 15 Jan 2019 23:33:06 -0500 Subject: [PATCH] add support for .lbry sandbox applications --- .eslintrc.json | 3 +- build/downloadDaemon.js | 52 ++- package.json | 6 +- src/main/index.js | 6 +- src/main/startSandbox.js | 28 ++ src/main/unpackByOutpoint.js | 25 ++ src/renderer/component/fileRender/view.jsx | 78 ++++ .../component/fileViewer/internal/player.jsx | 35 +- src/renderer/component/fileViewer/view.jsx | 1 + yarn.lock | 373 ++++++++++-------- 10 files changed, 414 insertions(+), 193 deletions(-) create mode 100644 src/main/startSandbox.js create mode 100644 src/main/unpackByOutpoint.js diff --git a/.eslintrc.json b/.eslintrc.json index a21517c96..826d60329 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -49,6 +49,7 @@ "consistent-return": 0, "no-prototype-builtins": 0, "flowtype/space-after-type-colon": [2, "always", { "allowLineBreak": true }], - "no-restricted-syntax": 0 + "no-restricted-syntax": 0, + "no-empty": 0 } } diff --git a/build/downloadDaemon.js b/build/downloadDaemon.js index 4bb955d4e..3423686f1 100644 --- a/build/downloadDaemon.js +++ b/build/downloadDaemon.js @@ -2,7 +2,7 @@ const path = require('path'); const fs = require('fs'); const packageJSON = require('../package.json'); -const axios = require('axios'); +const fetch = require('node-fetch'); const decompress = require('decompress'); const os = require('os'); const del = require('del'); @@ -11,16 +11,16 @@ const downloadDaemon = targetPlatform => new Promise((resolve, reject) => { const daemonURLTemplate = packageJSON.lbrySettings.lbrynetDaemonUrlTemplate; const daemonVersion = packageJSON.lbrySettings.lbrynetDaemonVersion; - const daemonDir = path.join(__dirname,'..',packageJSON.lbrySettings.lbrynetDaemonDir); + const daemonDir = path.join(__dirname, '..', packageJSON.lbrySettings.lbrynetDaemonDir); let daemonFileName = packageJSON.lbrySettings.lbrynetDaemonFileName; - let currentPlatform = os.platform(); + const currentPlatform = os.platform(); - var daemonPlatform = process.env.TARGET || targetPlatform || currentPlatform; + let daemonPlatform = process.env.TARGET || targetPlatform || currentPlatform; if (daemonPlatform === 'mac' || daemonPlatform === 'darwin') daemonPlatform = 'mac'; if (daemonPlatform === 'win32' || daemonPlatform === 'windows') { - daemonPlatform = 'windows'; - daemonFileName = daemonFileName + '.exe'; + daemonPlatform = 'windows'; + daemonFileName += '.exe'; } const daemonFilePath = path.join(daemonDir, daemonFileName); const daemonVersionPath = path.join(__dirname, 'daemon.ver'); @@ -34,24 +34,21 @@ const downloadDaemon = targetPlatform => const hasDaemonVersion = fs.existsSync(daemonVersionPath); let downloadedDaemonVersion; if (hasDaemonVersion) { - downloadedDaemonVersion = fs.readFileSync(daemonVersionPath, "utf8"); + downloadedDaemonVersion = fs.readFileSync(daemonVersionPath, 'utf8'); } if (hasDaemonDownloaded && hasDaemonVersion && downloadedDaemonVersion === daemonVersion) { console.log('\x1b[34minfo\x1b[0m Daemon already downloaded'); resolve('Done'); - return; } else { console.log('\x1b[34minfo\x1b[0m Downloading daemon...'); - axios - .request({ - responseType: 'arraybuffer', - url: daemonURL, - method: 'get', - headers: { - 'Content-Type': 'application/zip', - }, - }) + fetch(daemonURL, { + method: 'GET', + headers: { + 'Content-Type': 'application/zip', + }, + }) + .then(response => response.buffer()) .then( result => new Promise((newResolve, newReject) => { @@ -62,24 +59,25 @@ const downloadDaemon = targetPlatform => fs.mkdirSync(distPath); } - fs.writeFile(tmpZipPath, result.data, error => { + fs.writeFile(tmpZipPath, result, error => { if (error) return newReject(error); return newResolve(); }); - }) + }) ) .then(() => del(`${daemonFilePath}*`)) - .then(() => decompress(tmpZipPath, daemonDir, { - filter: file => - path.basename(file.path) === daemonFileName, - })) + .then(() => + decompress(tmpZipPath, daemonDir, { + filter: file => path.basename(file.path) === daemonFileName, + }) + ) .then(() => { console.log('\x1b[32msuccess\x1b[0m Daemon downloaded!'); if (hasDaemonVersion) { del(daemonVersionPath); } - fs.writeFileSync(daemonVersionPath, daemonVersion, "utf8") + fs.writeFileSync(daemonVersionPath, daemonVersion, 'utf8'); resolve('Done'); }) .catch(error => { @@ -87,12 +85,12 @@ const downloadDaemon = targetPlatform => `\x1b[31merror\x1b[0m Daemon download failed due to: \x1b[35m${error}\x1b[0m` ); reject(error); - }) - }; + }); + } }); module.exports = downloadDaemon; require('make-runnable/custom')({ - printOutputFrame: false + printOutputFrame: false, }); diff --git a/package.json b/package.json index 225a8cfda..1986032b1 100644 --- a/package.json +++ b/package.json @@ -46,10 +46,12 @@ "electron-log": "^2.2.12", "electron-updater": "^2.23.3", "electron-window-state": "^4.1.1", + "express": "^4.16.4", "find-process": "^1.1.0", "formik": "^0.10.4", "hast-util-sanitize": "^1.1.2", "keytar": "^4.2.1", + "lbry-format": "https://github.com/lbryio/lbry-format.git", "lbry-redux": "lbryio/lbry-redux#a22f8284110f957f3f645d42abc457ab8fb3fa8a", "lbryinc": "lbryio/lbryinc#b3bb8c67745235ef54baea95accaedaa4bb86d4d", "localforage": "^1.7.1", @@ -57,6 +59,7 @@ "mime": "^2.3.1", "mixpanel-browser": "^2.17.1", "moment": "^2.22.0", + "node-fetch": "^2.3.0", "qrcode.react": "^0.8.0", "rc-progress": "^2.0.6", "react": "^16.3.0", @@ -90,7 +93,6 @@ "devDependencies": { "@lbry/color": "^1.0.2", "@lbry/components": "^1.5.1", - "axios": "^0.18.0", "babel-eslint": "^8.2.2", "babel-plugin-module-resolver": "^3.1.1", "babel-polyfill": "^6.26.0", @@ -123,7 +125,7 @@ "lint-staged": "^7.0.2", "make-runnable": "^1.3.6", "node-loader": "^0.6.0", - "node-sass": "^4.7.2", + "node-sass": "^4.11.0", "prettier": "^1.11.1", "sass-loader": "^6.0.7", "webpack": "^3.10.0", diff --git a/src/main/index.js b/src/main/index.js index 856ce191f..c9da72da6 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -5,13 +5,14 @@ import SemVer from 'semver'; import findProcess from 'find-process'; import url from 'url'; import https from 'https'; -import { shell, app, ipcMain, dialog, session } from 'electron'; +import { app, dialog, ipcMain, session, shell } from 'electron'; import { autoUpdater } from 'electron-updater'; import isDev from 'electron-is-dev'; import Daemon from './Daemon'; import createTray from './createTray'; import createWindow from './createWindow'; import pjson from '../../package.json'; +import startSandbox from './startSandbox'; autoUpdater.autoDownload = true; @@ -87,6 +88,9 @@ app.on('ready', async () => { }); daemon.launch(); } + + startSandbox(); + if (isDev) { await installExtensions(); } diff --git a/src/main/startSandbox.js b/src/main/startSandbox.js new file mode 100644 index 000000000..46f3ae3a5 --- /dev/null +++ b/src/main/startSandbox.js @@ -0,0 +1,28 @@ +import express from 'express'; +import unpackByOutpoint from './unpackByOutpoint'; + +// Polyfills and `lbry-redux` +global.fetch = require('node-fetch'); + +global.window = global; +// eslint-disable-next-line import/no-commonjs,global-require +const { Lbry } = require('lbry-redux'); + +delete global.window; + +export default async function startSandbox() { + const sandbox = express(); + const port = 5278; + + sandbox.get('/set/:outpoint', async (req, res) => { + const { outpoint } = req.params; + const resolvedPath = await unpackByOutpoint(Lbry, outpoint); + + sandbox.use(`/sandbox/${outpoint}/`, express.static(resolvedPath)); + + res.send(`/sandbox/${outpoint}/`); + }); + + // eslint-disable-next-line no-console + sandbox.listen(port, () => console.log(`Sandbox listening on port ${port}.`)); +} diff --git a/src/main/unpackByOutpoint.js b/src/main/unpackByOutpoint.js new file mode 100644 index 000000000..d63fc086b --- /dev/null +++ b/src/main/unpackByOutpoint.js @@ -0,0 +1,25 @@ +import fs from 'fs'; +import path from 'path'; +import { unpackDirectory } from 'lbry-format'; + +async function unpackByOutpoint(lbry, outpoint) { + const claimFiles = await lbry.file_list({ outpoint, full_status: true }); + + if (claimFiles && claimFiles.length) { + const claimFileInfo = claimFiles[0]; + const packFilePath = path.resolve(claimFileInfo.download_path); + const unpackPath = path.normalize( + path.join(claimFileInfo.download_directory, claimFileInfo.claim_name) + ); + + if (!fs.existsSync(unpackPath)) { + await unpackDirectory(unpackPath, { + fileName: packFilePath, + }); + } + + return unpackPath; + } +} + +export default unpackByOutpoint; diff --git a/src/renderer/component/fileRender/view.jsx b/src/renderer/component/fileRender/view.jsx index 80a3236a5..6d40e9e90 100644 --- a/src/renderer/component/fileRender/view.jsx +++ b/src/renderer/component/fileRender/view.jsx @@ -1,4 +1,5 @@ // @flow +import { remote } from 'electron'; import React from 'react'; import LoadingScreen from 'component/common/loading-screen'; import PdfViewer from 'component/viewers/pdfViewer'; @@ -20,6 +21,70 @@ type Props = { }; class FileRender extends React.PureComponent { + constructor(props) { + super(props); + + this.escapeListener = this.escapeListener.bind(this); + } + + componentDidMount() { + window.addEventListener('keydown', this.escapeListener, true); + } + + componentWillUnmount() { + window.removeEventListener('keydown', this.escapeListener, true); + } + + processSandboxRef(element) { + if (!element) { + return; + } + + window.sandbox = element; + + element.addEventListener('permissionrequest', e => { + // eslint-disable-next-line no-console + console.log('permissionrequest', e); + }); + + element.addEventListener('console-message', e => { + if (/^\$LBRY_IPC:/.test(e.message)) { + // Process command + let message = {}; + try { + message = JSON.parse(/^\$LBRY_IPC:(.*)/.exec(e.message)[1]); + } catch (err) {} + // eslint-disable-next-line no-console + console.log('IPC', message); + } else { + // eslint-disable-next-line no-console + console.log('Sandbox:', e.message); + } + }); + + element.addEventListener('enter-html-full-screen', () => { + // stub + }); + + element.addEventListener('leave-html-full-screen', () => { + // stub + }); + } + + escapeListener(e) { + if (e.keyCode === 27) { + e.preventDefault(); + + this.exitFullscreen(); + + return false; + } + } + + exitFullscreen() { + remote.getCurrentWindow().setFullScreen(false); + } + renderViewer() { const { source, mediaType, currentTheme } = this.props; @@ -32,6 +97,19 @@ class FileRender extends React.PureComponent { // Supported mediaTypes const mediaTypes = { '3D-file': , + application: ( + this.processSandboxRef(element)} + title="" + sandbox="allow-scripts allow-forms allow-pointer-lock" + src={source.url} + autosize="on" + style={{ border: 0, width: '100%', height: '100%' }} + useragent="Mozilla/5.0 AppleWebKit/537 Chrome/60 Safari/537" + enableremotemodule="false" + webpreferences="sandbox=true,contextIsolation=true,webviewTag=false,enableRemoteModule=false,devTools=false" + /> + ), // Add routes to viewer... }; diff --git a/src/renderer/component/fileViewer/internal/player.jsx b/src/renderer/component/fileViewer/internal/player.jsx index 10b47fd0e..9f526264f 100644 --- a/src/renderer/component/fileViewer/internal/player.jsx +++ b/src/renderer/component/fileViewer/internal/player.jsx @@ -11,7 +11,10 @@ import LoadingScreen from 'component/common/loading-screen'; class MediaPlayer extends React.PureComponent { static MP3_CONTENT_TYPES = ['audio/mpeg3', 'audio/mpeg']; + static SANDBOX_TYPES = ['application/x-lbry', 'application/x-ext-lbry']; static FILE_MEDIA_TYPES = ['text', 'script', 'e-book', 'comic-book', 'document', '3D-file']; + static SANDBOX_SET_BASE_URL = 'http://localhost:5278/set/'; + static SANDBOX_CONTENT_BASE_URL = 'http://localhost:5278'; constructor(props) { super(props); @@ -193,19 +196,36 @@ class MediaPlayer extends React.PureComponent { // Files supported by render-media const { contentType, mediaType } = this.props; - return Object.values(player.mime).indexOf(contentType) !== -1; + return ( + Object.values(player.mime).indexOf(contentType) !== -1 || + MediaPlayer.SANDBOX_TYPES.indexOf(contentType) > -1 + ); } fileType() { // This files are supported using a custom viewer - const { mediaType } = this.props; + const { mediaType, contentType } = this.props; - return MediaPlayer.FILE_MEDIA_TYPES.indexOf(mediaType) > -1; + return ( + MediaPlayer.FILE_MEDIA_TYPES.indexOf(mediaType) > -1 || + MediaPlayer.SANDBOX_TYPES.indexOf(contentType) > -1 + ); } renderFile() { // This is what render-media does with unplayable files - const { fileName, downloadPath, contentType, mediaType } = this.props; + const { claim, fileName, downloadPath, contentType, mediaType } = this.props; + + if (MediaPlayer.SANDBOX_TYPES.indexOf(contentType) > -1) { + const outpoint = `${claim.txid}:${claim.nout}`; + + return fetch(`${MediaPlayer.SANDBOX_SET_BASE_URL}${outpoint}`) + .then(res => res.text()) + .then(url => { + const fileSource = { url: `${MediaPlayer.SANDBOX_CONTENT_BASE_URL}${url}` }; + return this.setState({ fileSource }); + }); + } // File to render const fileSource = { @@ -241,7 +261,7 @@ class MediaPlayer extends React.PureComponent { } showLoadingScreen(isFileType, isPlayableType) { - const { mediaType } = this.props; + const { mediaType, contentType } = this.props; const { hasMetadata, unplayable, unsupported, fileSource } = this.state; const loader = { @@ -259,8 +279,9 @@ class MediaPlayer extends React.PureComponent { // Files const isLoadingFile = !fileSource && isFileType; + const isLbryPackage = /application\/x(-ext)?-lbry$/.test(contentType); const isUnsupported = - (mediaType === 'application' || !this.supportedType()) && !isFileType && !isPlayableType; + !isLbryPackage && (!this.supportedType() && !isFileType && !isPlayableType); // Media (audio, video) const isUnplayable = isPlayableType && unplayable; @@ -274,6 +295,8 @@ class MediaPlayer extends React.PureComponent { // Show unsupported error message } else if (isUnsupported || isUnplayable) { loader.loadingStatus = isUnsupported ? unsupportedMessage : unplayableMessage; + } else if (isLbryPackage && !isLoadingFile) { + loader.loadingStatus = false; } return loader; diff --git a/src/renderer/component/fileViewer/view.jsx b/src/renderer/component/fileViewer/view.jsx index e16a438b7..66cf1226c 100644 --- a/src/renderer/component/fileViewer/view.jsx +++ b/src/renderer/component/fileViewer/view.jsx @@ -224,6 +224,7 @@ class FileViewer extends React.PureComponent { const poster = metadata && metadata.thumbnail; const layoverClass = classnames('content__cover', { 'card__media--nsfw': shouldObscureNsfw }); + const layoverStyle = !shouldObscureNsfw && poster ? { backgroundImage: `url("${poster}")` } : {}; diff --git a/yarn.lock b/yarn.lock index aee6cf0dd..6d82b3d72 100644 --- a/yarn.lock +++ b/yarn.lock @@ -199,13 +199,6 @@ ajv-keywords@^3.0.0, ajv-keywords@^3.1.0, ajv-keywords@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" -ajv@^4.9.1: - version "4.11.8" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" - dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" - ajv@^5.0.0, ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" @@ -224,6 +217,15 @@ ajv@^6.0.1, ajv@^6.1.0, ajv@^6.5.2: json-schema-traverse "^0.4.1" uri-js "^4.2.1" +ajv@^6.5.5: + version "6.6.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.6.2.tgz#caceccf474bf3fc3ce3b147443711a24063cc30d" + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -421,10 +423,6 @@ 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" -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - assert@^1.1.1: version "1.4.1" resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" @@ -506,24 +504,17 @@ aws-sdk@^2.264.1: uuid "3.1.0" xml2js "0.4.17" -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" -aws4@^1.2.1, aws4@^1.6.0: +aws4@^1.6.0: version "1.7.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289" -axios@^0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.0.tgz#32d53e4851efdc0a11993b6cd000789d70c05102" - dependencies: - follow-redirects "^1.3.0" - is-buffer "^1.1.5" +aws4@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" axobject-query@^2.0.1: version "2.0.1" @@ -1317,6 +1308,21 @@ body-parser@1.18.2: raw-body "2.3.2" type-is "~1.6.15" +body-parser@1.18.3: + version "1.18.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" + dependencies: + 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" + bonjour@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" @@ -1332,12 +1338,6 @@ boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - dependencies: - hoek "2.x.x" - boxen@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" @@ -1508,7 +1508,7 @@ buffer-alloc-unsafe@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" -buffer-alloc@^1.1.0: +buffer-alloc@^1.1.0, buffer-alloc@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" dependencies: @@ -2082,12 +2082,18 @@ colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" -combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: +combined-stream@1.0.6, combined-stream@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" dependencies: delayed-stream "~1.0.0" +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" + dependencies: + delayed-stream "~1.0.0" + comma-separated-tokens@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.5.tgz#b13793131d9ea2d2431cf5b507ddec258f0ce0db" @@ -2339,12 +2345,6 @@ crypt@~0.0.1: version "0.0.2" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - dependencies: - boom "2.x.x" - crypto-browserify@3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.3.0.tgz#b9fc75bb4a0ed61dcf1cd5dae96eb30c9c3e506c" @@ -3721,9 +3721,9 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -expand-template@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-1.1.1.tgz#981f188c0c3a87d2e28f559bc541426ff94f21dd" +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" export-files@^2.1.1: version "2.1.1" @@ -3766,6 +3766,41 @@ express@^4.13.3, express@^4.16.2: utils-merge "1.0.1" vary "~1.1.2" +express@^4.16.4: + version "4.16.4" + resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e" + dependencies: + accepts "~1.3.5" + array-flatten "1.1.1" + body-parser "1.18.3" + 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.4" + qs "6.5.2" + range-parser "~1.2.0" + safe-buffer "5.1.2" + 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" + ext-list@^2.0.0: version "2.2.2" resolved "https://registry.yarnpkg.com/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37" @@ -3792,10 +3827,14 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: +extend@^3.0.0, extend@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + external-editor@^2.0.4: version "2.2.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" @@ -4109,7 +4148,7 @@ flush-write-stream@^1.0.0: inherits "^2.0.1" readable-stream "^2.0.4" -follow-redirects@^1.0.0, follow-redirects@^1.3.0: +follow-redirects@^1.0.0: version "1.5.1" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.1.tgz#67a8f14f5a1f67f962c2c46469c79eaec0a90291" dependencies: @@ -4149,14 +4188,6 @@ forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" -form-data@~2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" - form-data@~2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" @@ -4165,6 +4196,14 @@ form-data@~2.3.1: combined-stream "1.0.6" 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" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + formik@^0.10.4: version "0.10.5" resolved "https://registry.yarnpkg.com/formik/-/formik-0.10.5.tgz#6984d2f22e918c6d2264a3cb86b8582f7277faca" @@ -4509,21 +4548,10 @@ handle-thing@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" -har-schema@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" - har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" -har-validator@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" - dependencies: - ajv "^4.9.1" - har-schema "^1.0.5" - har-validator@~5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" @@ -4531,6 +4559,13 @@ har-validator@~5.0.3: ajv "^5.1.0" har-schema "^2.0.0" +har-validator@~5.1.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -4628,15 +4663,6 @@ hast-util-sanitize@^1.0.0, hast-util-sanitize@^1.1.2: dependencies: xtend "^4.0.1" -hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" - he@1.1.x: version "1.1.1" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" @@ -4653,10 +4679,6 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - hoist-non-react-statics@^2.5.0: version "2.5.5" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" @@ -4777,7 +4799,7 @@ http-errors@1.6.2: setprototypeof "1.0.3" statuses ">= 1.3.1 < 2" -http-errors@~1.6.2: +http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: version "1.6.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" dependencies: @@ -4818,14 +4840,6 @@ http-response-object@^1.0.0, http-response-object@^1.0.1, http-response-object@^ version "1.1.0" resolved "https://registry.yarnpkg.com/http-response-object/-/http-response-object-1.1.0.tgz#a7c4e75aae82f3bb4904e4f43f615673b4d518c3" -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -4874,7 +4888,7 @@ iconv-lite@0.4.19: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" -iconv-lite@^0.4.17, iconv-lite@^0.4.23, iconv-lite@^0.4.4, iconv-lite@^0.4.5: +iconv-lite@0.4.23, iconv-lite@^0.4.17, iconv-lite@^0.4.23, iconv-lite@^0.4.4, iconv-lite@^0.4.5: version "0.4.23" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" dependencies: @@ -5029,6 +5043,10 @@ ipaddr.js@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b" +ipaddr.js@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" + is-absolute-url@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" @@ -5524,12 +5542,6 @@ 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" -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - dependencies: - jsonify "~0.0.0" - json-stringify-safe@^5.0.1, 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" @@ -5564,10 +5576,6 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -5611,11 +5619,11 @@ kebab-case@^1.0.0: resolved "https://registry.yarnpkg.com/kebab-case/-/kebab-case-1.0.0.tgz#3f9e4990adcad0c686c0e701f7645868f75f91eb" keytar@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/keytar/-/keytar-4.2.1.tgz#8a06a6577fdf6373e0aa6b112277e63dec77fd12" + version "4.3.0" + resolved "https://registry.yarnpkg.com/keytar/-/keytar-4.3.0.tgz#4a3afd64fdeec300716ccf3985fdcf1cfd6e77e9" dependencies: nan "2.8.0" - prebuild-install "^2.4.1" + prebuild-install "^5.0.0" killable@^1.0.0: version "1.0.0" @@ -5667,6 +5675,13 @@ lazy-val@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.3.tgz#bb97b200ef00801d94c317e29dc6ed39e31c5edc" +"lbry-format@https://github.com/lbryio/lbry-format.git": + version "0.1.0" + resolved "https://github.com/lbryio/lbry-format.git#ca33e18e5a264095b130ef70e4f844a446d6e545" + dependencies: + tar-stream "^1.6.2" + zstd-codec "^0.1.1" + lbry-redux@lbryio/lbry-redux#84b7d396934d57a37802aadbef71db91230a9404: version "0.0.1" resolved "https://codeload.github.com/lbryio/lbry-redux/tar.gz/84b7d396934d57a37802aadbef71db91230a9404" @@ -6283,12 +6298,22 @@ mime-db@~1.33.0: version "1.33.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7: +mime-db@~1.37.0: + version "1.37.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18: version "2.1.18" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" dependencies: mime-db "~1.33.0" +mime-types@~2.1.19: + version "2.1.21" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96" + dependencies: + mime-db "~1.37.0" + mime@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" @@ -6515,6 +6540,10 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +napi-build-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.1.tgz#1381a0f92c39d66bf19852e7873432fc2123e508" + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -6584,13 +6613,17 @@ node-fetch@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5" +node-fetch@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.3.0.tgz#1a1d940bbfb916a1d3e0219f037e89e71f8c5fa5" + node-forge@0.7.5: version "0.7.5" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df" -node-gyp@^3.3.1: - version "3.7.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.7.0.tgz#789478e8f6c45e277aa014f3e28f958f286f9203" +node-gyp@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" dependencies: fstream "^1.0.0" glob "^7.0.3" @@ -6599,7 +6632,7 @@ node-gyp@^3.3.1: nopt "2 || 3" npmlog "0 || 1 || 2 || 3 || 4" osenv "0" - request ">=2.9.0 <2.82.0" + request "^2.87.0" rimraf "2" semver "~5.3.0" tar "^2.0.0" @@ -6689,9 +6722,9 @@ node-pre-gyp@^0.10.0: semver "^5.3.0" tar "^4" -node-sass@^4.7.2: - version "4.9.2" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.9.2.tgz#5e63fe6bd0f2ae3ac9d6c14ede8620e2b8bdb437" +node-sass@^4.11.0: + version "4.11.0" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.11.0.tgz#183faec398e9cbe93ba43362e2768ca988a6369a" dependencies: async-foreach "^0.1.3" chalk "^1.1.1" @@ -6706,9 +6739,9 @@ node-sass@^4.7.2: meow "^3.7.0" mkdirp "^0.5.1" nan "^2.10.0" - node-gyp "^3.3.1" + node-gyp "^3.8.0" npmlog "^4.0.0" - request "2.87.0" + request "^2.88.0" sass-graph "^2.2.4" stdout-stream "^1.4.0" "true-case-path" "^1.0.2" @@ -6828,10 +6861,14 @@ 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" -oauth-sign@~0.8.1, oauth-sign@~0.8.2: +oauth-sign@~0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + object-assign@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa" @@ -7219,10 +7256,6 @@ pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" -performance-now@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" - performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -7546,21 +7579,22 @@ postcss@^6.0.1: source-map "^0.6.1" supports-color "^5.4.0" -prebuild-install@^2.4.1: - version "2.5.3" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.5.3.tgz#9f65f242782d370296353710e9bc843490c19f69" +prebuild-install@^5.0.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.2.2.tgz#237888f21bfda441d0ee5f5612484390bccd4046" dependencies: detect-libc "^1.0.3" - expand-template "^1.0.2" + expand-template "^2.0.3" github-from-package "0.0.0" minimist "^1.2.0" mkdirp "^0.5.1" + napi-build-utils "^1.0.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" + rc "^1.2.7" simple-get "^2.7.0" tar-fs "^1.13.0" tunnel-agent "^0.6.0" @@ -7662,6 +7696,13 @@ proxy-addr@~2.0.3: forwarded "~0.1.2" ipaddr.js "1.6.0" +proxy-addr@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.8.0" + proxy-polyfill@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/proxy-polyfill/-/proxy-polyfill-0.1.6.tgz#ef41ec6c66f534db15db36c54493a62d184b364e" @@ -7674,6 +7715,10 @@ pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" +psl@^1.1.24: + version "1.1.31" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" + public-encrypt@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.2.tgz#46eb9107206bf73489f8b85b69d91334c6610994" @@ -7741,14 +7786,10 @@ qs@6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" -qs@^6.1.0, qs@~6.5.1: +qs@6.5.2, qs@^6.1.0, qs@~6.5.1, qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" -qs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" - query-string@^4.1.0: version "4.3.4" resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" @@ -7809,6 +7850,15 @@ raw-body@2.3.2: iconv-lite "0.4.19" unpipe "1.0.0" +raw-body@2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" + dependencies: + bytes "3.0.0" + http-errors "1.6.3" + iconv-lite "0.4.23" + unpipe "1.0.0" + rc-progress@^2.0.6: version "2.2.5" resolved "https://registry.yarnpkg.com/rc-progress/-/rc-progress-2.2.5.tgz#e61d0544bf9d4208e5ba32fc50962159e7f952a3" @@ -8283,7 +8333,7 @@ replace-ext@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" -request@2.87.0, request@^2.45.0, request@^2.55.0: +request@^2.45.0, request@^2.55.0: version "2.87.0" resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e" dependencies: @@ -8308,32 +8358,30 @@ request@2.87.0, request@^2.45.0, request@^2.55.0: tunnel-agent "^0.6.0" uuid "^3.1.0" -"request@>=2.9.0 <2.82.0": - version "2.81.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" +request@^2.87.0, request@^2.88.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" + aws-sign2 "~0.7.0" + aws4 "^1.8.0" caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.0" + combined-stream "~1.0.6" + extend "~3.0.2" forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~4.2.1" - hawk "~3.1.3" - http-signature "~1.1.0" + form-data "~2.3.2" + har-validator "~5.1.0" + http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - performance-now "^0.2.0" - qs "~6.4.0" - safe-buffer "^5.0.1" - stringstream "~0.0.4" - tough-cookie "~2.3.0" + 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.4.3" tunnel-agent "^0.6.0" - uuid "^3.0.0" + uuid "^3.3.2" require-directory@^2.1.1: version "2.1.1" @@ -8459,7 +8507,7 @@ safe-buffer@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -8829,12 +8877,6 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - dependencies: - hoek "2.x.x" - sockjs-client@1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12" @@ -9151,10 +9193,6 @@ stringify-object@^3.2.2: is-obj "^1.0.1" is-regexp "^1.0.0" -stringstream@~0.0.4: - version "0.0.6" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" - 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" @@ -9337,6 +9375,18 @@ tar-stream@^1.1.2, tar-stream@^1.5.2: to-buffer "^1.1.0" xtend "^4.0.0" +tar-stream@^1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" + dependencies: + bl "^1.0.0" + buffer-alloc "^1.2.0" + end-of-stream "^1.0.0" + fs-constants "^1.0.0" + readable-stream "^2.3.0" + to-buffer "^1.1.1" + xtend "^4.0.0" + tar@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" @@ -9441,7 +9491,7 @@ to-arraybuffer@^1.0.0, to-arraybuffer@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" -to-buffer@^1.1.0: +to-buffer@^1.1.0, to-buffer@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" @@ -9479,12 +9529,19 @@ toposort@^1.0.0: version "1.0.7" resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" -tough-cookie@~2.3.0, tough-cookie@~2.3.3: +tough-cookie@~2.3.3: version "2.3.4" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" dependencies: punycode "^1.4.1" +tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + "traverse@>=0.3.0 <0.4": version "0.3.9" resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" @@ -9832,7 +9889,7 @@ upper-case@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" -uri-js@^4.2.1: +uri-js@^4.2.1, uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" dependencies: @@ -9925,7 +9982,7 @@ uuid@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" -uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0, uuid@^3.3.2: +uuid@^3.0.1, uuid@^3.1.0, uuid@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" @@ -10519,3 +10576,7 @@ yauzl@^2.4.2: dependencies: buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" + +zstd-codec@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/zstd-codec/-/zstd-codec-0.1.1.tgz#ee0ec98a732e1c457d3eb33fcec3a5c2bee69196"