Merge pull request #264 from shocknet/feature/tunnel
create tunnel on startup
This commit is contained in:
commit
a1b89ffaf7
7 changed files with 75 additions and 157 deletions
|
|
@ -5,5 +5,6 @@ DISABLE_SHOCK_ENCRYPTION=false
|
||||||
CACHE_HEADERS_MANDATORY=true
|
CACHE_HEADERS_MANDATORY=true
|
||||||
SHOCK_CACHE=true
|
SHOCK_CACHE=true
|
||||||
TRUSTED_KEYS=true
|
TRUSTED_KEYS=true
|
||||||
|
LOCAL_TUNNEL_SERVER=https://tunnel.rip
|
||||||
TORRENT_SEED_URL=https://webtorrent.shock.network
|
TORRENT_SEED_URL=https://webtorrent.shock.network
|
||||||
TORRENT_SEED_TOKEN=jibberish
|
TORRENT_SEED_TOKEN=jibberish
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,7 @@ module.exports = (mainnet = false) => {
|
||||||
lndDirPath: lndDirectory,
|
lndDirPath: lndDirectory,
|
||||||
peers: ['https://gun.shock.network:8765/gun'],
|
peers: ['https://gun.shock.network:8765/gun'],
|
||||||
useTLS: false,
|
useTLS: false,
|
||||||
tokenExpirationMS: 259200000
|
tokenExpirationMS: 259200000,
|
||||||
|
localtunnelHost:'https://tunnel.rip'
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
12
main.js
12
main.js
|
|
@ -6,26 +6,18 @@ const {version} = (JSON.parse(require('fs').readFileSync("./package.json", "utf-
|
||||||
program
|
program
|
||||||
.version(version)
|
.version(version)
|
||||||
.option("-s, --serverport [port]", "web server http listening port (defaults to 8280)")
|
.option("-s, --serverport [port]", "web server http listening port (defaults to 8280)")
|
||||||
.option("-x, --httpsport [port]", "web server https listening port (defaults to 8283)")
|
|
||||||
.option("-h, --serverhost [host]", "web server listening host (defaults to localhost)")
|
.option("-h, --serverhost [host]", "web server listening host (defaults to localhost)")
|
||||||
.option("-l, --lndhost [host:port]", "RPC lnd host (defaults to localhost:10009)")
|
.option("-l, --lndhost [host:port]", "RPC lnd host (defaults to localhost:10009)")
|
||||||
.option("-t, --usetls [path]", "path to a directory containing key.pem and cert.pem files")
|
|
||||||
.option("-u, --user [login]", "basic authentication login")
|
.option("-u, --user [login]", "basic authentication login")
|
||||||
.option("-p, --pwd [password]", "basic authentication password")
|
.option("-p, --pwd [password]", "basic authentication password")
|
||||||
.option("-r, --limituser [login]", "basic authentication login for readonly account")
|
|
||||||
.option("-w, --limitpwd [password]", "basic authentication password for readonly account")
|
|
||||||
.option("-m, --macaroon-path [file path]", "path to admin.macaroon file")
|
.option("-m, --macaroon-path [file path]", "path to admin.macaroon file")
|
||||||
.option("-d, --lnd-cert-path [file path]", "path to LND cert file")
|
.option("-d, --lnd-cert-path [file path]", "path to LND cert file")
|
||||||
.option("-f, --logfile [file path]", "path to file where to store the application logs")
|
.option("-f, --logfile [file path]", "path to file where to store the application logs")
|
||||||
.option("-e, --loglevel [level]", "level of logs to display (debug, info, warn, error)")
|
.option("-e, --loglevel [level]", "level of logs to display (debug, info, warn, error)")
|
||||||
.option("-n, --lndlogfile <file path>", "path to lnd log file to send to browser")
|
|
||||||
.option("-k, --le-email [email]", "lets encrypt required contact email")
|
.option("-k, --le-email [email]", "lets encrypt required contact email")
|
||||||
.option("-c, --mainnet", "run server on mainnet mode")
|
.option("-c, --mainnet", "run server on mainnet mode")
|
||||||
|
.option("-t, --tunnel","create a localtunnel to listen behind a firewall")
|
||||||
.parse(process.argv);
|
.parse(process.argv);
|
||||||
|
|
||||||
// load server
|
// load server
|
||||||
if (program.serverhost && program.leEmail) {
|
require("./src/server")(program); // Standard server version
|
||||||
require("./app/server-le")(program); // Let"s Encrypt server version
|
|
||||||
} else {
|
|
||||||
require("./src/server")(program); // Standard server version
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -42,12 +42,13 @@
|
||||||
"husky": "^4.2.5",
|
"husky": "^4.2.5",
|
||||||
"jsonfile": "^4.0.0",
|
"jsonfile": "^4.0.0",
|
||||||
"jsonwebtoken": "^8.3.0",
|
"jsonwebtoken": "^8.3.0",
|
||||||
"localtunnel": "^1.9.0",
|
"localtunnel": "git://github.com/shocknet/localtunnel#40cc2c2a46b05da2217bf2e20da11a5343a5cce7",
|
||||||
"lodash": "^4.17.20",
|
"lodash": "^4.17.20",
|
||||||
"method-override": "^2.3.7",
|
"method-override": "^2.3.7",
|
||||||
"node-fetch": "^2.6.1",
|
"node-fetch": "^2.6.1",
|
||||||
"node-persist": "^3.1.0",
|
"node-persist": "^3.1.0",
|
||||||
"promise": "^8.1.0",
|
"promise": "^8.1.0",
|
||||||
|
"qrcode-terminal": "^0.12.0",
|
||||||
"ramda": "^0.27.1",
|
"ramda": "^0.27.1",
|
||||||
"request": "^2.88.2",
|
"request": "^2.88.2",
|
||||||
"request-promise": "^4.2.6",
|
"request-promise": "^4.2.6",
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ const { getUser, getMySecret, mySEA } = require('./gunDB/Mediator')
|
||||||
* @param {Common.Coordinate} data
|
* @param {Common.Coordinate} data
|
||||||
* @returns {Promise<void>}
|
* @returns {Promise<void>}
|
||||||
*/
|
*/
|
||||||
export const writeCoordinate = async (coordID, data) => {
|
module.exports.writeCoordinate = async (coordID, data) => {
|
||||||
if (coordID !== data.id) {
|
if (coordID !== data.id) {
|
||||||
throw new Error('CoordID must be equal to data.id')
|
throw new Error('CoordID must be equal to data.id')
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
const server = program => {
|
const server = program => {
|
||||||
|
const localtunnel = require('localtunnel')
|
||||||
const Http = require('http')
|
const Http = require('http')
|
||||||
const Express = require('express')
|
const Express = require('express')
|
||||||
const Crypto = require('crypto')
|
const Crypto = require('crypto')
|
||||||
|
|
@ -21,6 +22,7 @@ const server = program => {
|
||||||
const bodyParser = require('body-parser')
|
const bodyParser = require('body-parser')
|
||||||
const session = require('express-session')
|
const session = require('express-session')
|
||||||
const methodOverride = require('method-override')
|
const methodOverride = require('method-override')
|
||||||
|
const qrcode = require('qrcode-terminal')
|
||||||
const {
|
const {
|
||||||
unprotectedRoutes,
|
unprotectedRoutes,
|
||||||
sensitiveRoutes,
|
sensitiveRoutes,
|
||||||
|
|
@ -36,6 +38,7 @@ const server = program => {
|
||||||
|
|
||||||
const serverPort = program.serverport || defaults.serverPort
|
const serverPort = program.serverport || defaults.serverPort
|
||||||
const serverHost = program.serverhost || defaults.serverHost
|
const serverHost = program.serverhost || defaults.serverHost
|
||||||
|
const tunnelHost = process.env.LOCAL_TUNNEL_SERVER || defaults.localtunnelHost
|
||||||
|
|
||||||
// setup winston logging ==========
|
// setup winston logging ==========
|
||||||
const logger = require('../config/log')(
|
const logger = require('../config/log')(
|
||||||
|
|
@ -158,6 +161,10 @@ const server = program => {
|
||||||
|
|
||||||
// eslint-disable-next-line consistent-return
|
// eslint-disable-next-line consistent-return
|
||||||
const startServer = async () => {
|
const startServer = async () => {
|
||||||
|
/**
|
||||||
|
* @type {localtunnel.Tunnel}
|
||||||
|
*/
|
||||||
|
let tunnelRef = null
|
||||||
try {
|
try {
|
||||||
LightningServices.setDefaults(program)
|
LightningServices.setDefaults(program)
|
||||||
if (!LightningServices.isInitialized()) {
|
if (!LightningServices.isInitialized()) {
|
||||||
|
|
@ -220,6 +227,49 @@ const server = program => {
|
||||||
await Storage.init({
|
await Storage.init({
|
||||||
dir: storageDirectory
|
dir: storageDirectory
|
||||||
})
|
})
|
||||||
|
if (program.tunnel) {
|
||||||
|
// setup localtunnel ==========
|
||||||
|
const [tunnelToken, tunnelSubdomain, tunnelUrl] = await Promise.all([
|
||||||
|
Storage.getItem('tunnel/token'),
|
||||||
|
Storage.getItem('tunnel/subdomain'),
|
||||||
|
Storage.getItem('tunnel/url')
|
||||||
|
])
|
||||||
|
const tunnelOpts = { port: serverPort, host: tunnelHost }
|
||||||
|
if (tunnelToken && tunnelSubdomain) {
|
||||||
|
tunnelOpts.tunnelToken = tunnelToken
|
||||||
|
tunnelOpts.subdomain = tunnelSubdomain
|
||||||
|
logger.info('Recreating tunnel... with subdomain: ' + tunnelSubdomain)
|
||||||
|
} else {
|
||||||
|
logger.info('Creating new tunnel... ')
|
||||||
|
}
|
||||||
|
const tunnel = await localtunnel(tunnelOpts)
|
||||||
|
tunnelRef = tunnel
|
||||||
|
logger.info('Tunnel created! connect to: ' + tunnel.url)
|
||||||
|
const dataToQr = JSON.stringify({
|
||||||
|
internalIP: tunnel.url,
|
||||||
|
walletPort: 443,
|
||||||
|
externalIP: tunnel.url
|
||||||
|
})
|
||||||
|
qrcode.generate(dataToQr, { small: true })
|
||||||
|
if (!tunnelToken) {
|
||||||
|
await Promise.all([
|
||||||
|
Storage.setItem('tunnel/token', tunnel.token),
|
||||||
|
Storage.setItem('tunnel/subdomain', tunnel.clientId),
|
||||||
|
Storage.setItem('tunnel/url', tunnel.url)
|
||||||
|
])
|
||||||
|
}
|
||||||
|
if (tunnelUrl && tunnel.url !== tunnelUrl) {
|
||||||
|
logger.error('New tunnel URL different from OLD tunnel url')
|
||||||
|
logger.error('OLD: ' + tunnelUrl + ':80')
|
||||||
|
logger.error('NEW: ' + tunnel.url + ':80')
|
||||||
|
logger.error('New pair required')
|
||||||
|
await Promise.all([
|
||||||
|
Storage.setItem('tunnel/token', tunnel.token),
|
||||||
|
Storage.setItem('tunnel/subdomain', tunnel.clientId),
|
||||||
|
Storage.setItem('tunnel/url', tunnel.url)
|
||||||
|
])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const getSessionSecret = async () => {
|
const getSessionSecret = async () => {
|
||||||
const sessionSecret = await Storage.getItem('config/sessionSecret')
|
const sessionSecret = await Storage.getItem('config/sessionSecret')
|
||||||
|
|
@ -317,6 +367,9 @@ const server = program => {
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error({ exception: err, message: err.message, code: err.code })
|
logger.error({ exception: err, message: err.message, code: err.code })
|
||||||
logger.info('Restarting server in 30 seconds...')
|
logger.info('Restarting server in 30 seconds...')
|
||||||
|
if (tunnelRef) {
|
||||||
|
tunnelRef.close()
|
||||||
|
}
|
||||||
await wait(30)
|
await wait(30)
|
||||||
startServer()
|
startServer()
|
||||||
return false
|
return false
|
||||||
|
|
|
||||||
158
yarn.lock
158
yarn.lock
|
|
@ -1600,11 +1600,6 @@ camelcase@^2.0.1:
|
||||||
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
|
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
|
||||||
integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
|
integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
|
||||||
|
|
||||||
camelcase@^3.0.0:
|
|
||||||
version "3.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
|
|
||||||
integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo=
|
|
||||||
|
|
||||||
camelcase@^4.0.0:
|
camelcase@^4.0.0:
|
||||||
version "4.1.0"
|
version "4.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
|
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
|
||||||
|
|
@ -1747,7 +1742,7 @@ cli-width@^2.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
|
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
|
||||||
integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
|
integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
|
||||||
|
|
||||||
cliui@^3.0.3, cliui@^3.2.0:
|
cliui@^3.0.3:
|
||||||
version "3.2.0"
|
version "3.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
|
resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
|
||||||
integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=
|
integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=
|
||||||
|
|
@ -2388,7 +2383,7 @@ enquirer@^2.3.4:
|
||||||
dependencies:
|
dependencies:
|
||||||
ansi-colors "^3.2.1"
|
ansi-colors "^3.2.1"
|
||||||
|
|
||||||
error-ex@^1.2.0, error-ex@^1.3.1:
|
error-ex@^1.3.1:
|
||||||
version "1.3.2"
|
version "1.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
|
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
|
||||||
integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
|
integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
|
||||||
|
|
@ -2883,14 +2878,6 @@ finalhandler@~1.1.2:
|
||||||
statuses "~1.5.0"
|
statuses "~1.5.0"
|
||||||
unpipe "~1.0.0"
|
unpipe "~1.0.0"
|
||||||
|
|
||||||
find-up@^1.0.0:
|
|
||||||
version "1.1.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
|
|
||||||
integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
|
|
||||||
dependencies:
|
|
||||||
path-exists "^2.0.0"
|
|
||||||
pinkie-promise "^2.0.0"
|
|
||||||
|
|
||||||
find-up@^3.0.0:
|
find-up@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
|
resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
|
||||||
|
|
@ -3052,11 +3039,6 @@ gcp-metadata@^4.2.0:
|
||||||
gaxios "^4.0.0"
|
gaxios "^4.0.0"
|
||||||
json-bigint "^1.0.0"
|
json-bigint "^1.0.0"
|
||||||
|
|
||||||
get-caller-file@^1.0.1:
|
|
||||||
version "1.0.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
|
|
||||||
integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
|
|
||||||
|
|
||||||
get-caller-file@^2.0.1:
|
get-caller-file@^2.0.1:
|
||||||
version "2.0.5"
|
version "2.0.5"
|
||||||
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
|
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
|
||||||
|
|
@ -3825,11 +3807,6 @@ is-typedarray@~1.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
|
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
|
||||||
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
|
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
|
||||||
|
|
||||||
is-utf8@^0.2.0:
|
|
||||||
version "0.2.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
|
|
||||||
integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
|
|
||||||
|
|
||||||
is-windows@^1.0.2:
|
is-windows@^1.0.2:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
|
resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
|
||||||
|
|
@ -4547,17 +4524,6 @@ listr2@1.3.8:
|
||||||
through "^2.3.8"
|
through "^2.3.8"
|
||||||
uuid "^7.0.2"
|
uuid "^7.0.2"
|
||||||
|
|
||||||
load-json-file@^1.0.0:
|
|
||||||
version "1.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
|
|
||||||
integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
|
|
||||||
dependencies:
|
|
||||||
graceful-fs "^4.1.2"
|
|
||||||
parse-json "^2.2.0"
|
|
||||||
pify "^2.0.0"
|
|
||||||
pinkie-promise "^2.0.0"
|
|
||||||
strip-bom "^2.0.0"
|
|
||||||
|
|
||||||
load-json-file@^4.0.0:
|
load-json-file@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
|
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
|
||||||
|
|
@ -4568,15 +4534,14 @@ load-json-file@^4.0.0:
|
||||||
pify "^3.0.0"
|
pify "^3.0.0"
|
||||||
strip-bom "^3.0.0"
|
strip-bom "^3.0.0"
|
||||||
|
|
||||||
localtunnel@^1.9.0:
|
"localtunnel@git://github.com/shocknet/localtunnel#40cc2c2a46b05da2217bf2e20da11a5343a5cce7":
|
||||||
version "1.9.2"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/localtunnel/-/localtunnel-1.9.2.tgz#0012fcabc29cf964c130a01858768aa2bb65b5af"
|
resolved "git://github.com/shocknet/localtunnel#40cc2c2a46b05da2217bf2e20da11a5343a5cce7"
|
||||||
integrity sha512-NEKF7bDJE9U3xzJu3kbayF0WTvng6Pww7tzqNb/XtEARYwqw7CKEX7BvOMg98FtE9es2CRizl61gkV3hS8dqYg==
|
|
||||||
dependencies:
|
dependencies:
|
||||||
axios "0.19.0"
|
axios "0.19.0"
|
||||||
debug "4.1.1"
|
debug "4.1.1"
|
||||||
openurl "1.1.1"
|
openurl "1.1.1"
|
||||||
yargs "6.6.0"
|
yargs "13.3.0"
|
||||||
|
|
||||||
locate-path@^3.0.0:
|
locate-path@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
|
|
@ -5401,13 +5366,6 @@ parent-module@^1.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
callsites "^3.0.0"
|
callsites "^3.0.0"
|
||||||
|
|
||||||
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:
|
parse-json@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
|
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
|
||||||
|
|
@ -5460,13 +5418,6 @@ path-dirname@^1.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
|
resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
|
||||||
integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
|
integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
|
||||||
|
|
||||||
path-exists@^2.0.0:
|
|
||||||
version "2.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
|
|
||||||
integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
|
|
||||||
dependencies:
|
|
||||||
pinkie-promise "^2.0.0"
|
|
||||||
|
|
||||||
path-exists@^3.0.0:
|
path-exists@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
|
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
|
||||||
|
|
@ -5507,15 +5458,6 @@ path-to-regexp@0.1.7:
|
||||||
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
|
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
|
||||||
integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
|
integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
|
||||||
|
|
||||||
path-type@^1.0.0:
|
|
||||||
version "1.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
|
|
||||||
integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
|
|
||||||
dependencies:
|
|
||||||
graceful-fs "^4.1.2"
|
|
||||||
pify "^2.0.0"
|
|
||||||
pinkie-promise "^2.0.0"
|
|
||||||
|
|
||||||
path-type@^3.0.0:
|
path-type@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
|
resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
|
||||||
|
|
@ -5538,11 +5480,6 @@ picomatch@^2.0.5:
|
||||||
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
|
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
|
||||||
integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
|
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@^3.0.0:
|
pify@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
|
resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
|
||||||
|
|
@ -5553,18 +5490,6 @@ pify@^4.0.1:
|
||||||
resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
|
resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
|
||||||
integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
|
integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
|
||||||
|
|
||||||
pinkie-promise@^2.0.0:
|
|
||||||
version "2.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
|
|
||||||
integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
|
|
||||||
dependencies:
|
|
||||||
pinkie "^2.0.0"
|
|
||||||
|
|
||||||
pinkie@^2.0.0:
|
|
||||||
version "2.0.4"
|
|
||||||
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
|
|
||||||
integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
|
|
||||||
|
|
||||||
pirates@^4.0.1:
|
pirates@^4.0.1:
|
||||||
version "4.0.1"
|
version "4.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87"
|
resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87"
|
||||||
|
|
@ -5737,6 +5662,11 @@ pvutils@latest:
|
||||||
resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.0.17.tgz#ade3c74dfe7178944fe44806626bd2e249d996bf"
|
resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.0.17.tgz#ade3c74dfe7178944fe44806626bd2e249d996bf"
|
||||||
integrity sha512-wLHYUQxWaXVQvKnwIDWFVKDJku9XDCvyhhxoq8dc5MFdIlRenyPI9eSfEtcvgHgD7FlvCyGAlWgOzRnZD99GZQ==
|
integrity sha512-wLHYUQxWaXVQvKnwIDWFVKDJku9XDCvyhhxoq8dc5MFdIlRenyPI9eSfEtcvgHgD7FlvCyGAlWgOzRnZD99GZQ==
|
||||||
|
|
||||||
|
qrcode-terminal@^0.12.0:
|
||||||
|
version "0.12.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819"
|
||||||
|
integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==
|
||||||
|
|
||||||
qs@6.7.0:
|
qs@6.7.0:
|
||||||
version "6.7.0"
|
version "6.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
|
resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
|
||||||
|
|
@ -5792,14 +5722,6 @@ react-is@^16.8.4:
|
||||||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.10.1.tgz#0612786bf19df406502d935494f0450b40b8294f"
|
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.10.1.tgz#0612786bf19df406502d935494f0450b40b8294f"
|
||||||
integrity sha512-BXUMf9sIOPXXZWqr7+c5SeOKJykyVr2u0UDzEf4LNGc6taGkQe1A9DFD07umCIXz45RLr9oAAwZbAJ0Pkknfaw==
|
integrity sha512-BXUMf9sIOPXXZWqr7+c5SeOKJykyVr2u0UDzEf4LNGc6taGkQe1A9DFD07umCIXz45RLr9oAAwZbAJ0Pkknfaw==
|
||||||
|
|
||||||
read-pkg-up@^1.0.1:
|
|
||||||
version "1.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
|
|
||||||
integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
|
|
||||||
dependencies:
|
|
||||||
find-up "^1.0.0"
|
|
||||||
read-pkg "^1.0.0"
|
|
||||||
|
|
||||||
read-pkg-up@^4.0.0:
|
read-pkg-up@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978"
|
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978"
|
||||||
|
|
@ -5808,15 +5730,6 @@ read-pkg-up@^4.0.0:
|
||||||
find-up "^3.0.0"
|
find-up "^3.0.0"
|
||||||
read-pkg "^3.0.0"
|
read-pkg "^3.0.0"
|
||||||
|
|
||||||
read-pkg@^1.0.0:
|
|
||||||
version "1.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
|
|
||||||
integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
|
|
||||||
dependencies:
|
|
||||||
load-json-file "^1.0.0"
|
|
||||||
normalize-package-data "^2.3.2"
|
|
||||||
path-type "^1.0.0"
|
|
||||||
|
|
||||||
read-pkg@^3.0.0:
|
read-pkg@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
|
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
|
||||||
|
|
@ -6021,11 +5934,6 @@ require-directory@^2.1.1:
|
||||||
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
|
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
|
||||||
integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
|
integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
|
||||||
|
|
||||||
require-main-filename@^1.0.1:
|
|
||||||
version "1.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
|
|
||||||
integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
|
|
||||||
|
|
||||||
require-main-filename@^2.0.0:
|
require-main-filename@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
|
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
|
||||||
|
|
@ -6583,7 +6491,7 @@ string-length@^2.0.0:
|
||||||
astral-regex "^1.0.0"
|
astral-regex "^1.0.0"
|
||||||
strip-ansi "^4.0.0"
|
strip-ansi "^4.0.0"
|
||||||
|
|
||||||
string-width@^1.0.1, string-width@^1.0.2:
|
string-width@^1.0.1:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
|
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
|
||||||
integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
|
integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
|
||||||
|
|
@ -6694,13 +6602,6 @@ strip-ansi@^6.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
ansi-regex "^5.0.0"
|
ansi-regex "^5.0.0"
|
||||||
|
|
||||||
strip-bom@^2.0.0:
|
|
||||||
version "2.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
|
|
||||||
integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
|
|
||||||
dependencies:
|
|
||||||
is-utf8 "^0.2.0"
|
|
||||||
|
|
||||||
strip-bom@^3.0.0:
|
strip-bom@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
|
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
|
||||||
|
|
@ -7289,11 +7190,6 @@ whatwg-url@^7.0.0:
|
||||||
tr46 "^1.0.1"
|
tr46 "^1.0.1"
|
||||||
webidl-conversions "^4.0.2"
|
webidl-conversions "^4.0.2"
|
||||||
|
|
||||||
which-module@^1.0.0:
|
|
||||||
version "1.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
|
|
||||||
integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=
|
|
||||||
|
|
||||||
which-module@^2.0.0:
|
which-module@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
|
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
|
||||||
|
|
@ -7467,7 +7363,7 @@ xmlhttprequest-ssl@~1.5.4:
|
||||||
resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e"
|
resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e"
|
||||||
integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=
|
integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=
|
||||||
|
|
||||||
y18n@^3.2.0, y18n@^3.2.1:
|
y18n@^3.2.0:
|
||||||
version "3.2.1"
|
version "3.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
|
resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
|
||||||
integrity sha1-bRX7qITAhnnA136I53WegR4H+kE=
|
integrity sha1-bRX7qITAhnnA136I53WegR4H+kE=
|
||||||
|
|
@ -7505,33 +7401,7 @@ yargs-parser@^13.1.1:
|
||||||
camelcase "^5.0.0"
|
camelcase "^5.0.0"
|
||||||
decamelize "^1.2.0"
|
decamelize "^1.2.0"
|
||||||
|
|
||||||
yargs-parser@^4.2.0:
|
yargs@13.3.0, yargs@^13.3.0:
|
||||||
version "4.2.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c"
|
|
||||||
integrity sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=
|
|
||||||
dependencies:
|
|
||||||
camelcase "^3.0.0"
|
|
||||||
|
|
||||||
yargs@6.6.0:
|
|
||||||
version "6.6.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208"
|
|
||||||
integrity sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=
|
|
||||||
dependencies:
|
|
||||||
camelcase "^3.0.0"
|
|
||||||
cliui "^3.2.0"
|
|
||||||
decamelize "^1.1.1"
|
|
||||||
get-caller-file "^1.0.1"
|
|
||||||
os-locale "^1.4.0"
|
|
||||||
read-pkg-up "^1.0.1"
|
|
||||||
require-directory "^2.1.1"
|
|
||||||
require-main-filename "^1.0.1"
|
|
||||||
set-blocking "^2.0.0"
|
|
||||||
string-width "^1.0.2"
|
|
||||||
which-module "^1.0.0"
|
|
||||||
y18n "^3.2.1"
|
|
||||||
yargs-parser "^4.2.0"
|
|
||||||
|
|
||||||
yargs@^13.3.0:
|
|
||||||
version "13.3.0"
|
version "13.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83"
|
resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83"
|
||||||
integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==
|
integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue