Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
85464fb3cb
40 changed files with 1077 additions and 699 deletions
|
@ -1,5 +1,5 @@
|
||||||
[bumpversion]
|
[bumpversion]
|
||||||
current_version = 0.12.2rc3
|
current_version = 0.12.2rc5
|
||||||
commit = True
|
commit = True
|
||||||
tag = True
|
tag = True
|
||||||
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)((?P<release>[a-z]+)(?P<candidate>\d+))?
|
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)((?P<release>[a-z]+)(?P<candidate>\d+))?
|
||||||
|
@ -18,5 +18,9 @@ values =
|
||||||
|
|
||||||
[bumpversion:file:app/package.json]
|
[bumpversion:file:app/package.json]
|
||||||
|
|
||||||
|
[bumpversion:file:app/package-lock.json]
|
||||||
|
|
||||||
[bumpversion:file:ui/package.json]
|
[bumpversion:file:ui/package.json]
|
||||||
|
|
||||||
|
[bumpversion:file:ui/package-lock.json]
|
||||||
|
|
||||||
|
|
13
.gitignore
vendored
13
.gitignore
vendored
|
@ -1,6 +1,13 @@
|
||||||
node_modules
|
/node_modules
|
||||||
LBRY-darwin-x64
|
/LBRY-darwin-x64
|
||||||
dist
|
/dist
|
||||||
|
|
||||||
|
/ui/dist/css/*
|
||||||
|
/ui/dist/js/*
|
||||||
|
!/ui/dist/js/mediaelement
|
||||||
|
/ui/node_modules
|
||||||
|
/ui/.sass-cache
|
||||||
|
|
||||||
|
|
||||||
/app/dist
|
/app/dist
|
||||||
/app/node_modules
|
/app/node_modules
|
||||||
|
|
23
.travis.yml
23
.travis.yml
|
@ -1,20 +1,7 @@
|
||||||
matrix:
|
os: linux
|
||||||
include:
|
dist: xenial
|
||||||
- os: osx
|
|
||||||
# Use generic language for osx
|
|
||||||
# python 2.7 is broken on osx on travis, so follow we have to specify the installation ourselves
|
|
||||||
# https://github.com/travis-ci/travis-ci/issues/2312#issuecomment-195620855
|
|
||||||
language: generic
|
|
||||||
osx_image: xcode7.3
|
|
||||||
|
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- wget https://www.python.org/ftp/python/2.7.13/python-2.7.13-macosx10.6.pkg
|
- rvm install 2.3.1
|
||||||
- sudo installer -pkg python-2.7.13-macosx10.6.pkg -target /
|
- rvm use 2.3.1 && gem install danger --version '~> 4.0' && danger
|
||||||
- pip install -U pip
|
# - FULL_BUILD=true ./build.sh
|
||||||
- pip install pyinstaller
|
|
||||||
- wget https://nodejs.org/dist/v6.9.4/node-v6.9.4.pkg
|
|
||||||
- sudo installer -pkg node-v6.9.4.pkg -target /
|
|
||||||
- sudo npm install electron-packager -g
|
|
||||||
- ./build.sh
|
|
||||||
- electron-packager --electron-version=1.4.14 --overwrite electron LBRY
|
|
||||||
|
|
|
@ -9,15 +9,19 @@ Web UI version numbers should always match the corresponding version of LBRY App
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
### Added
|
### Added
|
||||||
* State is persisted through app close and re-open, resulting in faster opens
|
* State is persisted through app close and re-open, resulting in faster opens
|
||||||
|
* Support webm, ogg, m4v, and a few others
|
||||||
|
* Translations added to build process
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
* Upgraded to lbry daemon 0.13, including updating API signatures
|
* Upgraded to lbry daemon 0.13, including updating API signatures
|
||||||
* Channels resolve much faster
|
* Channels resolve much faster
|
||||||
* Resolve is no longer cancelled on navigate
|
* Resolve is no longer cancelled on navigate
|
||||||
|
* Updated API and authentication used by rewards process
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
* Fix help menu force reloading whole app
|
* Fix help menu force reloading whole app
|
||||||
* Show page updates correctly when navigating from show page to another show page
|
* Show page updates correctly when navigating from show page to another show page
|
||||||
|
* URI handling navigates to correct page if app is closed
|
||||||
|
|
||||||
### Deprecated
|
### Deprecated
|
||||||
*
|
*
|
||||||
|
|
23
app/package-lock.json
generated
23
app/package-lock.json
generated
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "LBRY",
|
"name": "LBRY",
|
||||||
"version": "0.12.0",
|
"version": "0.12.2rc5",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"commander": {
|
"commander": {
|
||||||
|
@ -155,7 +155,8 @@
|
||||||
},
|
},
|
||||||
"dezalgo": {
|
"dezalgo": {
|
||||||
"version": "1.0.3",
|
"version": "1.0.3",
|
||||||
"bundled": true
|
"resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz",
|
||||||
|
"integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY="
|
||||||
},
|
},
|
||||||
"editor": {
|
"editor": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
|
@ -525,7 +526,8 @@
|
||||||
},
|
},
|
||||||
"normalize-git-url": {
|
"normalize-git-url": {
|
||||||
"version": "3.0.2",
|
"version": "3.0.2",
|
||||||
"bundled": true
|
"resolved": "https://registry.npmjs.org/normalize-git-url/-/normalize-git-url-3.0.2.tgz",
|
||||||
|
"integrity": "sha1-jl8Uvgva7bc+ByADEKpBbCc1D8Q="
|
||||||
},
|
},
|
||||||
"normalize-package-data": {
|
"normalize-package-data": {
|
||||||
"version": "2.3.8",
|
"version": "2.3.8",
|
||||||
|
@ -549,7 +551,8 @@
|
||||||
},
|
},
|
||||||
"npm-install-checks": {
|
"npm-install-checks": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"bundled": true
|
"resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-3.0.0.tgz",
|
||||||
|
"integrity": "sha1-1K7N/VGlPjcjt7L5Oy7ijjB7wNc="
|
||||||
},
|
},
|
||||||
"npm-package-arg": {
|
"npm-package-arg": {
|
||||||
"version": "4.2.1",
|
"version": "4.2.1",
|
||||||
|
@ -717,7 +720,8 @@
|
||||||
},
|
},
|
||||||
"core-util-is": {
|
"core-util-is": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"bundled": true
|
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
|
||||||
},
|
},
|
||||||
"isarray": {
|
"isarray": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
|
@ -743,7 +747,8 @@
|
||||||
},
|
},
|
||||||
"realize-package-specifier": {
|
"realize-package-specifier": {
|
||||||
"version": "3.0.3",
|
"version": "3.0.3",
|
||||||
"bundled": true
|
"resolved": "https://registry.npmjs.org/realize-package-specifier/-/realize-package-specifier-3.0.3.tgz",
|
||||||
|
"integrity": "sha1-0N74gpUrjeP2frpekRmWYScfQfQ="
|
||||||
},
|
},
|
||||||
"request": {
|
"request": {
|
||||||
"version": "2.81.0",
|
"version": "2.81.0",
|
||||||
|
@ -1064,7 +1069,8 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"unique-slug": {
|
"unique-slug": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"bundled": true
|
"resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks="
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1420,7 +1426,8 @@
|
||||||
},
|
},
|
||||||
"spdx-license-ids": {
|
"spdx-license-ids": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
"bundled": true
|
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.0.tgz",
|
||||||
|
"integrity": "sha1-tUndD2Pct0Whfi6joHQC4OMy0eI="
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "LBRY",
|
"name": "LBRY",
|
||||||
"version": "0.12.2rc3",
|
"version": "0.12.2rc5",
|
||||||
"main": "main.js",
|
"main": "main.js",
|
||||||
"description": "LBRY is a fully decentralized, open-source protocol facilitating the discovery, access, and (sometimes) purchase of data.",
|
"description": "LBRY is a fully decentralized, open-source protocol facilitating the discovery, access, and (sometimes) purchase of data.",
|
||||||
"author": {
|
"author": {
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
https://github.com/lbryio/lbry/releases/download/v0.13.1rc1/lbrynet-daemon-v0.13.1rc1-OSNAME.zip
|
https://github.com/lbryio/lbry/releases/download/v0.13.1/lbrynet-daemon-v0.13.1-OSNAME.zip
|
||||||
|
|
|
@ -13,6 +13,13 @@ cd ..
|
||||||
# build ui
|
# build ui
|
||||||
cd ui
|
cd ui
|
||||||
npm install
|
npm install
|
||||||
|
|
||||||
|
# necessary to ensure native Node modules (e.g. keytar) are built against the correct version of Node)
|
||||||
|
# yes, it needs to be run twice. it fails the first time, not sure why
|
||||||
|
node_modules\.bin\electron-rebuild
|
||||||
|
node_modules\.bin\electron-rebuild
|
||||||
|
|
||||||
|
node extractLocals.js
|
||||||
node_modules\.bin\node-sass --output dist\css --sourcemap=none scss\
|
node_modules\.bin\node-sass --output dist\css --sourcemap=none scss\
|
||||||
node_modules\.bin\webpack
|
node_modules\.bin\webpack
|
||||||
Copy-Item dist ..\app\ -recurse
|
Copy-Item dist ..\app\ -recurse
|
||||||
|
|
|
@ -45,6 +45,13 @@ if [ "$FULL_BUILD" == "true" ]; then
|
||||||
python "$BUILD_DIR/set_version.py"
|
python "$BUILD_DIR/set_version.py"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
libsecret="libsecret-1-dev"
|
||||||
|
if $LINUX && [ -z "$(dpkg-query --show --showformat='${Status}\n' "$libsecret" 2>/dev/null | grep "install ok installed")" ]; then
|
||||||
|
# this is needed for keytar, which does secure password/token management
|
||||||
|
sudo apt-get install --no-install-recommends -y "$libsecret"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
[ -d "$ROOT/dist" ] && rm -rf "$ROOT/dist"
|
[ -d "$ROOT/dist" ] && rm -rf "$ROOT/dist"
|
||||||
mkdir -p "$ROOT/dist"
|
mkdir -p "$ROOT/dist"
|
||||||
[ -d "$ROOT/app/dist" ] && rm -rf "$ROOT/app/dist"
|
[ -d "$ROOT/app/dist" ] && rm -rf "$ROOT/app/dist"
|
||||||
|
@ -61,6 +68,16 @@ npm install
|
||||||
(
|
(
|
||||||
cd "$ROOT/ui"
|
cd "$ROOT/ui"
|
||||||
npm install
|
npm install
|
||||||
|
|
||||||
|
# necessary to ensure native Node modules (e.g. keytar) are built against the correct version of Node)
|
||||||
|
# yes, it needs to be run twice. it fails the first time, not sure why
|
||||||
|
set +e
|
||||||
|
# DEBUG=electron-rebuild node_modules/.bin/electron-rebuild .
|
||||||
|
node_modules/.bin/electron-rebuild "$ROOT/ui"
|
||||||
|
set -e
|
||||||
|
node_modules/.bin/electron-rebuild "$ROOT/ui"
|
||||||
|
|
||||||
|
node extractLocals.js
|
||||||
node_modules/.bin/node-sass --output dist/css --sourcemap=none scss/
|
node_modules/.bin/node-sass --output dist/css --sourcemap=none scss/
|
||||||
node_modules/.bin/webpack
|
node_modules/.bin/webpack
|
||||||
cp -r dist/* "$ROOT/app/dist/"
|
cp -r dist/* "$ROOT/app/dist/"
|
||||||
|
|
6
package-lock.json
generated
6
package-lock.json
generated
|
@ -1,12 +1,6 @@
|
||||||
{
|
{
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/node": {
|
|
||||||
"version": "7.0.31",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.31.tgz",
|
|
||||||
"integrity": "sha512-+KrE1LDddn97ip+gXZAnzNQ0pupKH/6tcKwTpo96BDVNpzmhIKGHug0Wd3H0dN4WEqYB1tXYI5m2mZuIZNI8tg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"7zip-bin": {
|
"7zip-bin": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-2.1.0.tgz",
|
||||||
|
|
7
ui/.gitignore
vendored
7
ui/.gitignore
vendored
|
@ -1,7 +0,0 @@
|
||||||
dist/css/*
|
|
||||||
dist/js/*
|
|
||||||
!dist/js/mediaelement
|
|
||||||
node_modules
|
|
||||||
.sass-cache
|
|
||||||
.idea
|
|
||||||
.DS_Store
|
|
|
@ -1,35 +0,0 @@
|
||||||
language: node_js
|
|
||||||
node_js: 5
|
|
||||||
|
|
||||||
# note that travis still builds PRs so that covers
|
|
||||||
# other branches
|
|
||||||
branches:
|
|
||||||
only:
|
|
||||||
- master
|
|
||||||
- development
|
|
||||||
|
|
||||||
install:
|
|
||||||
- rvm install 2.3.1
|
|
||||||
- npm install
|
|
||||||
|
|
||||||
script:
|
|
||||||
- rvm use 2.3.1 && gem install danger --version '~> 4.0' && danger
|
|
||||||
- mkdir -p dist/css dist/js
|
|
||||||
- node_modules/.bin/node-sass scss/all.scss dist/css/all.css
|
|
||||||
- node_modules/.bin/webpack
|
|
||||||
- mkdir upload
|
|
||||||
- cd dist; zip -r ../upload/dist.zip *; cd -
|
|
||||||
- .travis/echo_sha.sh > upload/data.json
|
|
||||||
|
|
||||||
deploy:
|
|
||||||
provider: s3
|
|
||||||
access_key_id:
|
|
||||||
secure: "LjqvQ2MQj8fbumcnIKZC5wa03s3SIAnaLdOrmi7uRcltKIMko20QluRlpXipmYLdDRBg9sZrGgHJzN2QMZBk29XDsPhnFTG5Mhnaf9Ycxac2dy6FABtarNXjEOSH6Vv+Z96W8NkNTly7Okgyg0lXylTi1rLm/JxW14z+SrDPBOVPx5i4Wemd/y4Qx/5Oy611jaZIC4tExL+KWLCfX6tCgg1iE1vnJ22DAjNVlUOmZrLpuhuz/d/4mgkjtZvHAENDPmTItoN6WXxWPspMuaBaSMsj5OuhXqfro8BygbalWfUN7bSMvCqvO+irC6PBeZ4ntq675fS6g9Xb0vzZ6KnNck40PdHXdZRb4wvseqphCL4Xy9cLgUfND3GhxDtStJlqpMeaCg5Yjd9JknQjfCteObLqVeHyjIbWUNsQlyyQcgrVdAQRQiImG+do5qWQXC/02YqxffGJxW/6iQUC/TqC6vNoTKbMSVlccHExt9wnoooZ8D7MT7oN4BCk8bw+G/momH03hGoI0xffcVM9mN+y4z3/BbDX+bn/H5J2cmGWVFZHcOcbY+ehsTmdcqmm+KeePIpKmP6bD7waSUp+czXMgAgfjlWKuzmOFVxvlTo/rLzj5NlIH35RtIKOoVjU8kHzYI1aWAKIHNTHHrUJp4aVYeYGw5y2oejaHnO0ltmVoog="
|
|
||||||
secret_access_key:
|
|
||||||
secure: "cAWUhKK+2//JBmV2ohcLs3WTDgDWAMK2RxDrwTqUBEeOdAHMRnEVR++a7fzEL+2dcYi939ZaynNXS5JFJANdjIEKmSWDtvyszyl5MWH0xERZtD0K0xs9bNXS8Un6UrTxhaatmQmqx0KokdUmdH5iqB02BBCKLuwGEjMcUVbadXkp+F8Pd4EXmDPbYHQ2eNo87FzQ7dCQ+GOyQBDNM1Orq+hOKiqJOzB9sDWKShsMTeq5Hyb1oji3cAxTyi6niJ/M/46NokLrPT0xrJLxy+sw5k2106SJXyofJsW1UVOsa5Nxx/suJTv2D0E6d7Ei1XYNnkAbDltu1m9wMq2xqLyoxfdvcC7bxr/NcUZ+DTCKcsM5oa8CiL/y+sOpB8ia0CjO3WBebIUWQAhyswQb312rYsbfQXscb5TnheS+wo4Z1MLse7fSm6jzZRZwqGi27GxC7SFWkSkBwHgaQ8tA7mzsdi6DFmz/KrnwgzqzFRkGg9d0RNXVfUN09p0GJr9drVS1DscVYWGhhD1eDKAIEaEd89u0vKF83zLk73UuNVZA38kkERtLwv7Yr1rRdftL3/gt6fMiW//JQB9sRWV0fDfiWbV2vaki6c/0s6moX00UBuZq21FEpx8puylUOwkXNlQK6TH/bw41ikrRMO156njokYOwLgQaebI/Mb0Cwi32gOU="
|
|
||||||
bucket: lbry-ui
|
|
||||||
skip_cleanup: true
|
|
||||||
upload-dir: ${TRAVIS_BRANCH}
|
|
||||||
local_dir: upload
|
|
||||||
on:
|
|
||||||
all_branches: true
|
|
|
@ -1,7 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# this is a script instead of a line in the travis.yml
|
|
||||||
# getting the quoting on this correctly inside the yaml is
|
|
||||||
# unreadable and difficult
|
|
||||||
|
|
||||||
echo '{"sha": "'${TRAVIS_COMMIT}'"}'
|
|
|
@ -1 +0,0 @@
|
||||||
See https://github.com/lbryio/lbry/blob/master/LICENSE
|
|
48
ui/extractLocals.js
Normal file
48
ui/extractLocals.js
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
var extract = require("i18n-extract");
|
||||||
|
const fs = require("fs");
|
||||||
|
|
||||||
|
var dir = __dirname + "/../app/dist/locales";
|
||||||
|
var path = dir + "/en.json";
|
||||||
|
|
||||||
|
if (!fs.existsSync(dir)) {
|
||||||
|
fs.mkdirSync(dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.writeFile(path, "{}", "utf8", function(err) {
|
||||||
|
if (err) {
|
||||||
|
return console.log(err);
|
||||||
|
}
|
||||||
|
var enLocale = require(path);
|
||||||
|
|
||||||
|
const keys = extract.extractFromFiles(["js/**/*.{js,jsx}"], {
|
||||||
|
marker: "__",
|
||||||
|
});
|
||||||
|
|
||||||
|
let reports = [];
|
||||||
|
reports = reports.concat(extract.findMissing(enLocale, keys));
|
||||||
|
|
||||||
|
if (reports.length > 0) {
|
||||||
|
fs.readFile(path, "utf8", function readFileCallback(err, data) {
|
||||||
|
if (err) {
|
||||||
|
console.log(err);
|
||||||
|
} else {
|
||||||
|
localeObj = JSON.parse(data);
|
||||||
|
|
||||||
|
for (var i = 0; i < reports.length; i++) {
|
||||||
|
// no need to care for other types than MISSING because starting file will always be empty
|
||||||
|
if (reports[i].type === "MISSING") {
|
||||||
|
localeObj[reports[i].key] = reports[i].key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var json = JSON.stringify(localeObj, null, "\t"); //convert it back to json-string
|
||||||
|
fs.writeFile(path, json, "utf8", function callback(err) {
|
||||||
|
if (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
console.log("Extracted all strings!");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
|
@ -225,7 +225,6 @@ export function doDaemonReady() {
|
||||||
dispatch({
|
dispatch({
|
||||||
type: types.DAEMON_READY,
|
type: types.DAEMON_READY,
|
||||||
});
|
});
|
||||||
dispatch(doChangePath("/discover"));
|
|
||||||
dispatch(doFetchDaemonSettings());
|
dispatch(doFetchDaemonSettings());
|
||||||
dispatch(doFileList());
|
dispatch(doFileList());
|
||||||
};
|
};
|
||||||
|
|
|
@ -33,20 +33,20 @@ export function doUserFetch() {
|
||||||
dispatch({
|
dispatch({
|
||||||
type: types.USER_FETCH_STARTED,
|
type: types.USER_FETCH_STARTED,
|
||||||
});
|
});
|
||||||
lbryio.setCurrentUser(
|
lbryio
|
||||||
user => {
|
.getCurrentUser()
|
||||||
|
.then(user => {
|
||||||
dispatch({
|
dispatch({
|
||||||
type: types.USER_FETCH_SUCCESS,
|
type: types.USER_FETCH_SUCCESS,
|
||||||
data: { user },
|
data: { user },
|
||||||
});
|
});
|
||||||
},
|
})
|
||||||
error => {
|
.catch(error => {
|
||||||
dispatch({
|
dispatch({
|
||||||
type: types.USER_FETCH_FAILURE,
|
type: types.USER_FETCH_FAILURE,
|
||||||
data: { error },
|
data: { error },
|
||||||
});
|
});
|
||||||
}
|
});
|
||||||
);
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,32 +56,37 @@ export function doUserEmailNew(email) {
|
||||||
type: types.USER_EMAIL_NEW_STARTED,
|
type: types.USER_EMAIL_NEW_STARTED,
|
||||||
email: email,
|
email: email,
|
||||||
});
|
});
|
||||||
lbryio.call("user_email", "new", { email }, "post").then(
|
lbryio
|
||||||
() => {
|
.call(
|
||||||
|
"user_email",
|
||||||
|
"new",
|
||||||
|
{ email: email, send_verification_email: true },
|
||||||
|
"post"
|
||||||
|
)
|
||||||
|
.catch(error => {
|
||||||
|
if (error.xhr && error.xhr.status == 409) {
|
||||||
|
return lbryio.call(
|
||||||
|
"user_email",
|
||||||
|
"resend_token",
|
||||||
|
{ email: email, only_if_expired: true },
|
||||||
|
"post"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
throw error;
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
dispatch({
|
dispatch({
|
||||||
type: types.USER_EMAIL_NEW_SUCCESS,
|
type: types.USER_EMAIL_NEW_SUCCESS,
|
||||||
data: { email },
|
data: { email },
|
||||||
});
|
});
|
||||||
dispatch(doUserFetch());
|
dispatch(doUserFetch());
|
||||||
},
|
})
|
||||||
error => {
|
.catch(error => {
|
||||||
if (
|
|
||||||
error.xhr &&
|
|
||||||
(error.xhr.status == 409 ||
|
|
||||||
error.message == "This email is already in use")
|
|
||||||
) {
|
|
||||||
dispatch({
|
|
||||||
type: types.USER_EMAIL_NEW_EXISTS,
|
|
||||||
data: { email },
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
dispatch({
|
dispatch({
|
||||||
type: types.USER_EMAIL_NEW_FAILURE,
|
type: types.USER_EMAIL_NEW_FAILURE,
|
||||||
data: { error: error.message },
|
data: { error: error.message },
|
||||||
});
|
});
|
||||||
}
|
});
|
||||||
}
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
18
ui/js/app.js
18
ui/js/app.js
|
@ -1,15 +1,15 @@
|
||||||
import store from 'store.js';
|
import store from "store.js";
|
||||||
import lbry from './lbry.js';
|
import lbry from "./lbry.js";
|
||||||
|
|
||||||
const env = ENV;
|
const env = ENV;
|
||||||
const config = require(`./config/${env}`);
|
const config = require(`./config/${env}`);
|
||||||
const language = lbry.getClientSetting('language')
|
const language = lbry.getClientSetting("language")
|
||||||
? lbry.getClientSetting('language')
|
? lbry.getClientSetting("language")
|
||||||
: 'en';
|
: "en";
|
||||||
const i18n = require('y18n')({
|
const i18n = require("y18n")({
|
||||||
directory: 'app/locales',
|
directory: "app/locales",
|
||||||
updateFiles: false,
|
updateFiles: false,
|
||||||
locale: language
|
locale: language,
|
||||||
});
|
});
|
||||||
const logs = [];
|
const logs = [];
|
||||||
const app = {
|
const app = {
|
||||||
|
@ -21,7 +21,7 @@ const app = {
|
||||||
log: function(message) {
|
log: function(message) {
|
||||||
console.log(message);
|
console.log(message);
|
||||||
logs.push(message);
|
logs.push(message);
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
window.__ = i18n.__;
|
window.__ = i18n.__;
|
||||||
|
|
|
@ -4,11 +4,9 @@ import { doFetchCostInfoForUri } from "actions/cost_info";
|
||||||
import {
|
import {
|
||||||
makeSelectCostInfoForUri,
|
makeSelectCostInfoForUri,
|
||||||
makeSelectFetchingCostInfoForUri,
|
makeSelectFetchingCostInfoForUri,
|
||||||
} from 'selectors/cost_info'
|
} from "selectors/cost_info";
|
||||||
import {
|
import { makeSelectClaimForUri } from "selectors/claims";
|
||||||
makeSelectClaimForUri,
|
import FilePrice from "./view";
|
||||||
} from 'selectors/claims'
|
|
||||||
import FilePrice from './view'
|
|
||||||
|
|
||||||
const makeSelect = () => {
|
const makeSelect = () => {
|
||||||
const selectCostInfoForUri = makeSelectCostInfoForUri();
|
const selectCostInfoForUri = makeSelectCostInfoForUri();
|
||||||
|
|
|
@ -21,7 +21,7 @@ const RewardLink = props => {
|
||||||
: <Link
|
: <Link
|
||||||
button={button ? button : "alt"}
|
button={button ? button : "alt"}
|
||||||
disabled={isPending}
|
disabled={isPending}
|
||||||
label={isPending ? "Claiming..." : "Claim Reward"}
|
label={isPending ? __("Claiming...") : __("Claim Reward")}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
claimReward(reward);
|
claimReward(reward);
|
||||||
}}
|
}}
|
||||||
|
|
|
@ -34,7 +34,7 @@ class UserEmailVerify extends React.PureComponent {
|
||||||
>
|
>
|
||||||
<FormRow
|
<FormRow
|
||||||
type="text"
|
type="text"
|
||||||
label="Verification Code"
|
label={__("Verification Code")}
|
||||||
placeholder="a94bXXXXXXXXXXXXXX"
|
placeholder="a94bXXXXXXXXXXXXXX"
|
||||||
name="code"
|
name="code"
|
||||||
value={this.state.code}
|
value={this.state.code}
|
||||||
|
@ -46,14 +46,15 @@ class UserEmailVerify extends React.PureComponent {
|
||||||
{/* render help separately so it always shows */}
|
{/* render help separately so it always shows */}
|
||||||
<div className="form-field__helper">
|
<div className="form-field__helper">
|
||||||
<p>
|
<p>
|
||||||
Email <Link href="mailto:help@lbry.io" label="help@lbry.io" /> if
|
{__("Email")}{" "}
|
||||||
you did not receive or are having trouble with your code.
|
<Link href="mailto:help@lbry.io" label="help@lbry.io" />{" "}
|
||||||
|
{__("if you did not receive or are having trouble with your code.")}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="form-row-submit form-row-submit--with-footer">
|
<div className="form-row-submit form-row-submit--with-footer">
|
||||||
<Link
|
<Link
|
||||||
button="primary"
|
button="primary"
|
||||||
label="Verify"
|
label={__("Verify")}
|
||||||
disabled={this.state.submitting}
|
disabled={this.state.submitting}
|
||||||
onClick={event => {
|
onClick={event => {
|
||||||
this.handleSubmit(event);
|
this.handleSubmit(event);
|
||||||
|
|
|
@ -23,7 +23,7 @@ const WalletSend = props => {
|
||||||
<div className="card__content">
|
<div className="card__content">
|
||||||
<FormRow
|
<FormRow
|
||||||
label={__("Amount")}
|
label={__("Amount")}
|
||||||
postfix="LBC"
|
postfix={__("LBC")}
|
||||||
step="0.01"
|
step="0.01"
|
||||||
type="number"
|
type="number"
|
||||||
placeholder="1.23"
|
placeholder="1.23"
|
||||||
|
|
|
@ -11,18 +11,21 @@ class WelcomeModal extends React.PureComponent {
|
||||||
return !hasClaimed
|
return !hasClaimed
|
||||||
? <Modal type="custom" isOpen={true} contentLabel="Welcome to LBRY">
|
? <Modal type="custom" isOpen={true} contentLabel="Welcome to LBRY">
|
||||||
<section>
|
<section>
|
||||||
<h3 className="modal__header">Welcome to LBRY.</h3>
|
<h3 className="modal__header">{__("Welcome to LBRY.")}</h3>
|
||||||
<p>
|
<p>
|
||||||
Using LBRY is like dating a centaur. Totally normal up top, and
|
{__(
|
||||||
{" "}<em>way different</em> underneath.
|
"Using LBRY is like dating a centaur. Totally normal up top, and"
|
||||||
|
)}
|
||||||
|
{" "}<em>{__("way different")}</em> {__("underneath.")}
|
||||||
</p>
|
</p>
|
||||||
<p>Up top, LBRY is similar to popular media sites.</p>
|
<p>{__("Up top, LBRY is similar to popular media sites.")}</p>
|
||||||
<p>
|
<p>
|
||||||
Below, LBRY is controlled by users -- you -- via blockchain and
|
{__(
|
||||||
decentralization.
|
"Below, LBRY is controlled by users -- you -- via blockchain and decentralization."
|
||||||
|
)}
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Thank you for making content freedom possible!
|
{__("Thank you for making content freedom possible!")}
|
||||||
{" "}{isRewardApproved ? __("Here's a nickel, kid.") : ""}
|
{" "}{isRewardApproved ? __("Here's a nickel, kid.") : ""}
|
||||||
</p>
|
</p>
|
||||||
<div className="text-center">
|
<div className="text-center">
|
||||||
|
@ -31,7 +34,7 @@ class WelcomeModal extends React.PureComponent {
|
||||||
: <Link
|
: <Link
|
||||||
button="primary"
|
button="primary"
|
||||||
onClick={closeModal}
|
onClick={closeModal}
|
||||||
label="Continue"
|
label={__("Continue")}
|
||||||
/>}
|
/>}
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
@ -40,32 +43,35 @@ class WelcomeModal extends React.PureComponent {
|
||||||
type="alert"
|
type="alert"
|
||||||
overlayClassName="modal-overlay modal-overlay--clear"
|
overlayClassName="modal-overlay modal-overlay--clear"
|
||||||
isOpen={true}
|
isOpen={true}
|
||||||
contentLabel="Welcome to LBRY"
|
contentLabel={__("Welcome to LBRY")}
|
||||||
onConfirmed={closeModal}
|
onConfirmed={closeModal}
|
||||||
>
|
>
|
||||||
<section>
|
<section>
|
||||||
<h3 className="modal__header">About Your Reward</h3>
|
<h3 className="modal__header">{__("About Your Reward")}</h3>
|
||||||
<p>
|
<p>
|
||||||
You earned a reward of
|
{__("You earned a reward of")}
|
||||||
{" "}<CreditAmount amount={reward.reward_amount} label={false} />
|
{" "}<CreditAmount amount={reward.reward_amount} label={false} />
|
||||||
{" "}LBRY
|
{" "}{__("LBRY credits, or")} <em>{__("LBC")}</em>.
|
||||||
credits, or <em>LBC</em>.
|
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
This reward will show in your Wallet momentarily, probably while
|
{__(
|
||||||
you are reading this message.
|
"This reward will show in your Wallet momentarily, probably while you are reading this message."
|
||||||
|
)}
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
LBC is used to compensate creators, to publish, and to have say in
|
{__(
|
||||||
how the network works.
|
"LBC is used to compensate creators, to publish, and to have say in how the network works."
|
||||||
|
)}
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
No need to understand it all just yet! Try watching or downloading
|
{__(
|
||||||
something next.
|
"No need to understand it all just yet! Try watching or downloading something next."
|
||||||
|
)}
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Finally, know that LBRY is an early beta and that it earns the
|
{__(
|
||||||
name.
|
"Finally, know that LBRY is an early beta and that it earns the name."
|
||||||
|
)}
|
||||||
</p>
|
</p>
|
||||||
</section>
|
</section>
|
||||||
</Modal>;
|
</Modal>;
|
||||||
|
|
|
@ -10,36 +10,36 @@ jsonrpc.call = function(
|
||||||
timeout
|
timeout
|
||||||
) {
|
) {
|
||||||
var xhr = new XMLHttpRequest();
|
var xhr = new XMLHttpRequest();
|
||||||
if (typeof connectFailedCallback !== 'undefined') {
|
if (typeof connectFailedCallback !== "undefined") {
|
||||||
if (timeout) {
|
if (timeout) {
|
||||||
xhr.timeout = timeout;
|
xhr.timeout = timeout;
|
||||||
}
|
}
|
||||||
|
|
||||||
xhr.addEventListener('error', function(e) {
|
xhr.addEventListener("error", function(e) {
|
||||||
connectFailedCallback(e);
|
connectFailedCallback(e);
|
||||||
});
|
});
|
||||||
xhr.addEventListener('timeout', function() {
|
xhr.addEventListener("timeout", function() {
|
||||||
connectFailedCallback(
|
connectFailedCallback(
|
||||||
new Error(__('XMLHttpRequest connection timed out'))
|
new Error(__("XMLHttpRequest connection timed out"))
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
xhr.addEventListener('load', function() {
|
xhr.addEventListener("load", function() {
|
||||||
var response = JSON.parse(xhr.responseText);
|
var response = JSON.parse(xhr.responseText);
|
||||||
|
|
||||||
if (response.error) {
|
if (response.error) {
|
||||||
if (errorCallback) {
|
if (errorCallback) {
|
||||||
errorCallback(response.error);
|
errorCallback(response.error);
|
||||||
} else {
|
} else {
|
||||||
var errorEvent = new CustomEvent('unhandledError', {
|
var errorEvent = new CustomEvent("unhandledError", {
|
||||||
detail: {
|
detail: {
|
||||||
connectionString: connectionString,
|
connectionString: connectionString,
|
||||||
method: method,
|
method: method,
|
||||||
params: params,
|
params: params,
|
||||||
code: response.error.code,
|
code: response.error.code,
|
||||||
message: response.error.message,
|
message: response.error.message,
|
||||||
data: response.error.data
|
data: response.error.data,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
document.dispatchEvent(errorEvent);
|
document.dispatchEvent(errorEvent);
|
||||||
}
|
}
|
||||||
|
@ -49,37 +49,37 @@ jsonrpc.call = function(
|
||||||
});
|
});
|
||||||
|
|
||||||
if (connectFailedCallback) {
|
if (connectFailedCallback) {
|
||||||
xhr.addEventListener('error', function(event) {
|
xhr.addEventListener("error", function(event) {
|
||||||
connectFailedCallback(event);
|
connectFailedCallback(event);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
xhr.addEventListener('error', function(event) {
|
xhr.addEventListener("error", function(event) {
|
||||||
var errorEvent = new CustomEvent('unhandledError', {
|
var errorEvent = new CustomEvent("unhandledError", {
|
||||||
detail: {
|
detail: {
|
||||||
connectionString: connectionString,
|
connectionString: connectionString,
|
||||||
method: method,
|
method: method,
|
||||||
params: params,
|
params: params,
|
||||||
code: xhr.status,
|
code: xhr.status,
|
||||||
message: __('Connection to API server failed')
|
message: __("Connection to API server failed"),
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
document.dispatchEvent(errorEvent);
|
document.dispatchEvent(errorEvent);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const counter = parseInt(sessionStorage.getItem('JSONRPCCounter') || 0);
|
const counter = parseInt(sessionStorage.getItem("JSONRPCCounter") || 0);
|
||||||
|
|
||||||
xhr.open('POST', connectionString, true);
|
xhr.open("POST", connectionString, true);
|
||||||
xhr.send(
|
xhr.send(
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
jsonrpc: '2.0',
|
jsonrpc: "2.0",
|
||||||
method: method,
|
method: method,
|
||||||
params: params,
|
params: params,
|
||||||
id: counter
|
id: counter,
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
sessionStorage.setItem('JSONRPCCounter', counter + 1);
|
sessionStorage.setItem("JSONRPCCounter", counter + 1);
|
||||||
|
|
||||||
return xhr;
|
return xhr;
|
||||||
};
|
};
|
||||||
|
|
|
@ -319,11 +319,11 @@ lbry.getMediaType = function(contentType, fileName) {
|
||||||
}
|
}
|
||||||
|
|
||||||
var ext = fileName.substr(dotIndex + 1);
|
var ext = fileName.substr(dotIndex + 1);
|
||||||
if (/^mp4|mov|m4v|flv|f4v$/i.test(ext)) {
|
if (/^mp4|m4v|mov|webm|flv|f4v|ogv$/i.test(ext)) {
|
||||||
return "video";
|
return "video";
|
||||||
} else if (/^mp3|m4a|aac|wav|flac|ogg$/i.test(ext)) {
|
} else if (/^mp3|m4a|aac|wav|flac|ogg|opus$/i.test(ext)) {
|
||||||
return "audio";
|
return "audio";
|
||||||
} else if (/^html|htm|pdf|odf|doc|docx|md|markdown|txt$/i.test(ext)) {
|
} else if (/^html|htm|xml|pdf|odf|doc|docx|md|markdown|txt|org$/i.test(ext)) {
|
||||||
return "document";
|
return "document";
|
||||||
} else {
|
} else {
|
||||||
return "unknown";
|
return "unknown";
|
||||||
|
@ -458,7 +458,6 @@ lbry.claim_list_mine = function(params = {}) {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
lbry._resolveXhrs = {};
|
lbry._resolveXhrs = {};
|
||||||
lbry.resolve = function(params = {}) {
|
lbry.resolve = function(params = {}) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
|
|
145
ui/js/lbryio.js
145
ui/js/lbryio.js
|
@ -1,21 +1,21 @@
|
||||||
import { getSession, setSession, setLocal } from "./utils.js";
|
|
||||||
import lbry from "./lbry.js";
|
import lbry from "./lbry.js";
|
||||||
|
|
||||||
const querystring = require("querystring");
|
const querystring = require("querystring");
|
||||||
|
const keytar = require("keytar");
|
||||||
|
|
||||||
const lbryio = {
|
const lbryio = {
|
||||||
_accessToken: getSession("accessToken"),
|
|
||||||
_authenticationPromise: null,
|
|
||||||
enabled: true,
|
enabled: true,
|
||||||
|
_authenticationPromise: null,
|
||||||
|
_exchangePromise: null,
|
||||||
|
_exchangeLastFetched: null,
|
||||||
};
|
};
|
||||||
|
|
||||||
const CONNECTION_STRING = process.env.LBRY_APP_API_URL
|
const CONNECTION_STRING = process.env.LBRY_APP_API_URL
|
||||||
? process.env.LBRY_APP_API_URL.replace(/\/*$/, "/") // exactly one slash at the end
|
? process.env.LBRY_APP_API_URL.replace(/\/*$/, "/") // exactly one slash at the end
|
||||||
: "https://api.lbry.io/";
|
: "https://api.lbry.io/";
|
||||||
|
|
||||||
const EXCHANGE_RATE_TIMEOUT = 20 * 60 * 1000;
|
const EXCHANGE_RATE_TIMEOUT = 20 * 60 * 1000;
|
||||||
|
|
||||||
lbryio._exchangePromise = null;
|
|
||||||
lbryio._exchangeLastFetched = null;
|
|
||||||
lbryio.getExchangeRates = function() {
|
lbryio.getExchangeRates = function() {
|
||||||
if (
|
if (
|
||||||
!lbryio._exchangeLastFetched ||
|
!lbryio._exchangeLastFetched ||
|
||||||
|
@ -60,7 +60,7 @@ lbryio.call = function(resource, action, params = {}, method = "get") {
|
||||||
|
|
||||||
if (!response.success) {
|
if (!response.success) {
|
||||||
if (reject) {
|
if (reject) {
|
||||||
let error = new Error(response.error);
|
const error = new Error(response.error);
|
||||||
error.xhr = xhr;
|
error.xhr = xhr;
|
||||||
reject(error);
|
reject(error);
|
||||||
} else {
|
} else {
|
||||||
|
@ -81,12 +81,10 @@ lbryio.call = function(resource, action, params = {}, method = "get") {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// For social media auth:
|
lbryio
|
||||||
//const accessToken = localStorage.getItem('accessToken');
|
.getAuthToken()
|
||||||
//const fullParams = {...params, ... accessToken ? {access_token: accessToken} : {}};
|
.then(token => {
|
||||||
|
const fullParams = { auth_token: token, ...params };
|
||||||
// Temp app ID based auth:
|
|
||||||
const fullParams = { app_id: lbryio.getAccessToken(), ...params };
|
|
||||||
|
|
||||||
if (method == "get") {
|
if (method == "get") {
|
||||||
xhr.open(
|
xhr.open(
|
||||||
|
@ -102,35 +100,37 @@ lbryio.call = function(resource, action, params = {}, method = "get") {
|
||||||
xhr.send();
|
xhr.send();
|
||||||
} else if (method == "post") {
|
} else if (method == "post") {
|
||||||
xhr.open("post", CONNECTION_STRING + resource + "/" + action, true);
|
xhr.open("post", CONNECTION_STRING + resource + "/" + action, true);
|
||||||
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
|
xhr.setRequestHeader(
|
||||||
|
"Content-type",
|
||||||
|
"application/x-www-form-urlencoded"
|
||||||
|
);
|
||||||
xhr.send(querystring.stringify(fullParams));
|
xhr.send(querystring.stringify(fullParams));
|
||||||
} else {
|
} else {
|
||||||
reject(new Error(__("Invalid method")));
|
reject(new Error(__("Invalid method")));
|
||||||
}
|
}
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
lbryio.getAccessToken = () => {
|
|
||||||
const token = getSession("accessToken");
|
|
||||||
return token ? token.toString().trim() : token;
|
|
||||||
};
|
|
||||||
|
|
||||||
lbryio.setAccessToken = token => {
|
|
||||||
setSession("accessToken", token ? token.toString().trim() : token);
|
|
||||||
};
|
|
||||||
|
|
||||||
lbryio.setCurrentUser = (resolve, reject) => {
|
|
||||||
lbryio
|
|
||||||
.call("user", "me")
|
|
||||||
.then(data => {
|
|
||||||
resolve(data);
|
|
||||||
})
|
})
|
||||||
.catch(function(err) {
|
.catch(reject);
|
||||||
lbryio.setAccessToken(null);
|
|
||||||
reject(err);
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
lbryio.getAuthToken = () => {
|
||||||
|
return keytar.getPassword("LBRY", "auth_token").then(token => {
|
||||||
|
return token ? token.toString().trim() : null;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
lbryio.setAuthToken = token => {
|
||||||
|
return keytar.setPassword(
|
||||||
|
"LBRY",
|
||||||
|
"auth_token",
|
||||||
|
token ? token.toString().trim() : null
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
lbryio.getCurrentUser = () => {
|
||||||
|
return lbryio.call("user", "me");
|
||||||
|
};
|
||||||
|
|
||||||
lbryio.authenticate = function() {
|
lbryio.authenticate = function() {
|
||||||
if (!lbryio.enabled) {
|
if (!lbryio.enabled) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
|
@ -144,48 +144,69 @@ lbryio.authenticate = function() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lbryio._authenticationPromise === null) {
|
if (lbryio._authenticationPromise === null) {
|
||||||
lbryio._authenticationPromise = new Promise((resolve, reject) => {
|
lbryio._authenticationPromise = new Promise((resolve, reject) => {
|
||||||
lbry
|
|
||||||
.status()
|
|
||||||
.then(response => {
|
|
||||||
let installation_id = response.installation_id;
|
|
||||||
|
|
||||||
if (!lbryio.getAccessToken()) {
|
|
||||||
lbryio
|
lbryio
|
||||||
.call(
|
.getAuthToken()
|
||||||
|
.then(token => {
|
||||||
|
if (!token || token.length > 60) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check that token works
|
||||||
|
return lbryio
|
||||||
|
.getCurrentUser()
|
||||||
|
.then(() => {
|
||||||
|
return true;
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.then(isTokenValid => {
|
||||||
|
if (isTokenValid) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let app_id;
|
||||||
|
|
||||||
|
return lbry
|
||||||
|
.status()
|
||||||
|
.then(status => {
|
||||||
|
// first try swapping
|
||||||
|
app_id = status.installation_id;
|
||||||
|
return lbryio.call(
|
||||||
|
"user",
|
||||||
|
"token_swap",
|
||||||
|
{ auth_token: "", app_id: app_id },
|
||||||
|
"post"
|
||||||
|
);
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
if (err.xhr.status == 403) {
|
||||||
|
// cannot swap. either app_id doesn't exist, or app_id already swapped. pretend its the former and create a new user. if we get another error, then its the latter
|
||||||
|
return lbryio.call(
|
||||||
"user",
|
"user",
|
||||||
"new",
|
"new",
|
||||||
{
|
{ auth_token: "", language: "en", app_id: app_id },
|
||||||
language: "en",
|
|
||||||
app_id: installation_id,
|
|
||||||
},
|
|
||||||
"post"
|
"post"
|
||||||
)
|
|
||||||
.then(function(responseData) {
|
|
||||||
if (!responseData.id) {
|
|
||||||
reject(
|
|
||||||
new Error("Received invalid authentication response.")
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
lbryio.setAccessToken(installation_id);
|
throw err;
|
||||||
lbryio.setCurrentUser(resolve, reject);
|
|
||||||
})
|
})
|
||||||
.catch(function(error) {
|
.then(response => {
|
||||||
/*
|
if (!response.auth_token) {
|
||||||
until we have better error code format, assume all errors are duplicate application id
|
throw new Error(__("auth_token is missing from response"));
|
||||||
if we're wrong, this will be caught by later attempts to make a valid call
|
|
||||||
*/
|
|
||||||
lbryio.setAccessToken(installation_id);
|
|
||||||
lbryio.setCurrentUser(resolve, reject);
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
lbryio.setCurrentUser(resolve, reject);
|
|
||||||
}
|
}
|
||||||
|
return lbryio.setAuthToken(response.auth_token);
|
||||||
|
});
|
||||||
})
|
})
|
||||||
.catch(reject);
|
.then(lbryio.getCurrentUser())
|
||||||
|
.then(resolve, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return lbryio._authenticationPromise;
|
return lbryio._authenticationPromise;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -28,10 +28,10 @@ const lbryuri = {};
|
||||||
lbryuri.parse = function(uri, requireProto = false) {
|
lbryuri.parse = function(uri, requireProto = false) {
|
||||||
// Break into components. Empty sub-matches are converted to null
|
// Break into components. Empty sub-matches are converted to null
|
||||||
const componentsRegex = new RegExp(
|
const componentsRegex = new RegExp(
|
||||||
'^((?:lbry://)?)' + // protocol
|
"^((?:lbry://)?)" + // protocol
|
||||||
'([^:$#/]*)' + // name (stops at the first separator or end)
|
"([^:$#/]*)" + // name (stops at the first separator or end)
|
||||||
'([:$#]?)([^/]*)' + // modifier separator, modifier (stops at the first path separator or end)
|
"([:$#]?)([^/]*)" + // modifier separator, modifier (stops at the first path separator or end)
|
||||||
'(/?)(.*)' // path separator, path
|
"(/?)(.*)" // path separator, path
|
||||||
);
|
);
|
||||||
const [proto, name, modSep, modVal, pathSep, path] = componentsRegex
|
const [proto, name, modSep, modVal, pathSep, path] = componentsRegex
|
||||||
.exec(uri)
|
.exec(uri)
|
||||||
|
@ -42,20 +42,20 @@ lbryuri.parse = function(uri, requireProto = false) {
|
||||||
|
|
||||||
// Validate protocol
|
// Validate protocol
|
||||||
if (requireProto && !proto) {
|
if (requireProto && !proto) {
|
||||||
throw new Error(__('LBRY URIs must include a protocol prefix (lbry://).'));
|
throw new Error(__("LBRY URIs must include a protocol prefix (lbry://)."));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validate and process name
|
// Validate and process name
|
||||||
if (!name) {
|
if (!name) {
|
||||||
throw new Error(__('URI does not include name.'));
|
throw new Error(__("URI does not include name."));
|
||||||
}
|
}
|
||||||
|
|
||||||
const isChannel = name.startsWith('@');
|
const isChannel = name.startsWith("@");
|
||||||
const channelName = isChannel ? name.slice(1) : name;
|
const channelName = isChannel ? name.slice(1) : name;
|
||||||
|
|
||||||
if (isChannel) {
|
if (isChannel) {
|
||||||
if (!channelName) {
|
if (!channelName) {
|
||||||
throw new Error(__('No channel name after @.'));
|
throw new Error(__("No channel name after @."));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (channelName.length < CHANNEL_NAME_MIN_LEN) {
|
if (channelName.length < CHANNEL_NAME_MIN_LEN) {
|
||||||
|
@ -75,8 +75,8 @@ lbryuri.parse = function(uri, requireProto = false) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
__(
|
__(
|
||||||
`Invalid character %s in name: %s.`,
|
`Invalid character %s in name: %s.`,
|
||||||
nameBadChars.length == 1 ? '' : 's',
|
nameBadChars.length == 1 ? "" : "s",
|
||||||
nameBadChars.join(', ')
|
nameBadChars.join(", ")
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -88,11 +88,11 @@ lbryuri.parse = function(uri, requireProto = false) {
|
||||||
throw new Error(__(`No modifier provided after separator %s.`, modSep));
|
throw new Error(__(`No modifier provided after separator %s.`, modSep));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (modSep == '#') {
|
if (modSep == "#") {
|
||||||
claimId = modVal;
|
claimId = modVal;
|
||||||
} else if (modSep == ':') {
|
} else if (modSep == ":") {
|
||||||
claimSequence = modVal;
|
claimSequence = modVal;
|
||||||
} else if (modSep == '$') {
|
} else if (modSep == "$") {
|
||||||
bidPosition = modVal;
|
bidPosition = modVal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -105,17 +105,17 @@ lbryuri.parse = function(uri, requireProto = false) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (claimSequence && !claimSequence.match(/^-?[1-9][0-9]*$/)) {
|
if (claimSequence && !claimSequence.match(/^-?[1-9][0-9]*$/)) {
|
||||||
throw new Error(__('Claim sequence must be a number.'));
|
throw new Error(__("Claim sequence must be a number."));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bidPosition && !bidPosition.match(/^-?[1-9][0-9]*$/)) {
|
if (bidPosition && !bidPosition.match(/^-?[1-9][0-9]*$/)) {
|
||||||
throw new Error(__('Bid position must be a number.'));
|
throw new Error(__("Bid position must be a number."));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validate and process path
|
// Validate and process path
|
||||||
if (path) {
|
if (path) {
|
||||||
if (!isChannel) {
|
if (!isChannel) {
|
||||||
throw new Error(__('Only channel URIs may have a path.'));
|
throw new Error(__("Only channel URIs may have a path."));
|
||||||
}
|
}
|
||||||
|
|
||||||
const pathBadChars = path.match(/[^A-Za-z0-9-]/g);
|
const pathBadChars = path.match(/[^A-Za-z0-9-]/g);
|
||||||
|
@ -123,15 +123,15 @@ lbryuri.parse = function(uri, requireProto = false) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
__(
|
__(
|
||||||
`Invalid character %s in path: %s`,
|
`Invalid character %s in path: %s`,
|
||||||
count == 1 ? '' : 's',
|
count == 1 ? "" : "s",
|
||||||
nameBadChars.join(', ')
|
nameBadChars.join(", ")
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
contentName = path;
|
contentName = path;
|
||||||
} else if (pathSep) {
|
} else if (pathSep) {
|
||||||
throw new Error(__('No path provided after /'));
|
throw new Error(__("No path provided after /"));
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
@ -143,7 +143,7 @@ lbryuri.parse = function(uri, requireProto = false) {
|
||||||
...(claimSequence ? { claimSequence: parseInt(claimSequence) } : {}),
|
...(claimSequence ? { claimSequence: parseInt(claimSequence) } : {}),
|
||||||
...(bidPosition ? { bidPosition: parseInt(bidPosition) } : {}),
|
...(bidPosition ? { bidPosition: parseInt(bidPosition) } : {}),
|
||||||
...(claimId ? { claimId } : {}),
|
...(claimId ? { claimId } : {}),
|
||||||
...(path ? { path } : {})
|
...(path ? { path } : {}),
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -160,13 +160,13 @@ lbryuri.build = function(uriObj, includeProto = true, allowExtraProps = false) {
|
||||||
bidPosition,
|
bidPosition,
|
||||||
path,
|
path,
|
||||||
contentName,
|
contentName,
|
||||||
channelName
|
channelName,
|
||||||
} = uriObj;
|
} = uriObj;
|
||||||
|
|
||||||
if (channelName) {
|
if (channelName) {
|
||||||
const channelNameFormatted = channelName.startsWith('@')
|
const channelNameFormatted = channelName.startsWith("@")
|
||||||
? channelName
|
? channelName
|
||||||
: '@' + channelName;
|
: "@" + channelName;
|
||||||
if (!name) {
|
if (!name) {
|
||||||
name = channelNameFormatted;
|
name = channelNameFormatted;
|
||||||
} else if (name !== channelNameFormatted) {
|
} else if (name !== channelNameFormatted) {
|
||||||
|
@ -187,19 +187,19 @@ lbryuri.build = function(uriObj, includeProto = true, allowExtraProps = false) {
|
||||||
if (path && path !== contentName) {
|
if (path && path !== contentName) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
__(
|
__(
|
||||||
'Path and contentName do not match. Only one is required; most likely you wanted contentName.'
|
"Path and contentName do not match. Only one is required; most likely you wanted contentName."
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
(includeProto ? 'lbry://' : '') +
|
(includeProto ? "lbry://" : "") +
|
||||||
name +
|
name +
|
||||||
(claimId ? `#${claimId}` : '') +
|
(claimId ? `#${claimId}` : "") +
|
||||||
(claimSequence ? `:${claimSequence}` : '') +
|
(claimSequence ? `:${claimSequence}` : "") +
|
||||||
(bidPosition ? `\$${bidPosition}` : '') +
|
(bidPosition ? `\$${bidPosition}` : "") +
|
||||||
(path ? `/${path}` : '')
|
(path ? `/${path}` : "")
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -223,7 +223,7 @@ lbryuri.isValid = function(uri) {
|
||||||
};
|
};
|
||||||
|
|
||||||
lbryuri.isValidName = function(name, checkCase = true) {
|
lbryuri.isValidName = function(name, checkCase = true) {
|
||||||
const regexp = new RegExp('^[a-z0-9-]+$', checkCase ? '' : 'i');
|
const regexp = new RegExp("^[a-z0-9-]+$", checkCase ? "" : "i");
|
||||||
return regexp.test(name);
|
return regexp.test(name);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,21 +1,21 @@
|
||||||
import lbry from './lbry.js';
|
import lbry from "./lbry.js";
|
||||||
import jsonrpc from './jsonrpc.js';
|
import jsonrpc from "./jsonrpc.js";
|
||||||
|
|
||||||
const queryTimeout = 3000;
|
const queryTimeout = 3000;
|
||||||
const maxQueryTries = 2;
|
const maxQueryTries = 2;
|
||||||
const defaultServers = [
|
const defaultServers = [
|
||||||
'http://lighthouse7.lbry.io:50005',
|
"http://lighthouse7.lbry.io:50005",
|
||||||
'http://lighthouse8.lbry.io:50005',
|
"http://lighthouse8.lbry.io:50005",
|
||||||
'http://lighthouse9.lbry.io:50005'
|
"http://lighthouse9.lbry.io:50005",
|
||||||
];
|
];
|
||||||
const path = '/';
|
const path = "/";
|
||||||
|
|
||||||
let server = null;
|
let server = null;
|
||||||
let connectTryNum = 0;
|
let connectTryNum = 0;
|
||||||
|
|
||||||
function getServers() {
|
function getServers() {
|
||||||
return lbry.getClientSetting('useCustomLighthouseServers')
|
return lbry.getClientSetting("useCustomLighthouseServers")
|
||||||
? lbry.getClientSetting('customLighthouseServers')
|
? lbry.getClientSetting("customLighthouseServers")
|
||||||
: defaultServers;
|
: defaultServers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ const lighthouse = new Proxy(
|
||||||
call(name, params, resolve, reject);
|
call(name, params, resolve, reject);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -5,11 +5,6 @@ import FileCard from "component/fileCard";
|
||||||
import { BusyMessage } from "component/common.js";
|
import { BusyMessage } from "component/common.js";
|
||||||
import ToolTip from "component/tooltip.js";
|
import ToolTip from "component/tooltip.js";
|
||||||
|
|
||||||
const communityCategoryToolTipText =
|
|
||||||
"Community Content is a public space where anyone can share content with the " +
|
|
||||||
'rest of the LBRY community. Bid on the names "one," "two," "three," "four" and ' +
|
|
||||||
'"five" to put your content here!';
|
|
||||||
|
|
||||||
const FeaturedCategory = props => {
|
const FeaturedCategory = props => {
|
||||||
const { category, names } = props;
|
const { category, names } = props;
|
||||||
|
|
||||||
|
@ -21,7 +16,9 @@ const FeaturedCategory = props => {
|
||||||
category.match(/^community/i) &&
|
category.match(/^community/i) &&
|
||||||
<ToolTip
|
<ToolTip
|
||||||
label={__("What's this?")}
|
label={__("What's this?")}
|
||||||
body={__(communityCategoryToolTipText)}
|
body={__(
|
||||||
|
'Community Content is a public space where anyone can share content with the rest of the LBRY community. Bid on the names "one," "two," "three," "four" and "five" to put your content here!'
|
||||||
|
)}
|
||||||
className="tooltip--header"
|
className="tooltip--header"
|
||||||
/>}
|
/>}
|
||||||
</h3>
|
</h3>
|
||||||
|
|
|
@ -15,7 +15,8 @@ const perform = dispatch => ({
|
||||||
back: () => dispatch(doHistoryBack()),
|
back: () => dispatch(doHistoryBack()),
|
||||||
navigate: path => dispatch(doNavigate(path)),
|
navigate: path => dispatch(doNavigate(path)),
|
||||||
fetchClaimListMine: () => dispatch(doFetchClaimListMine()),
|
fetchClaimListMine: () => dispatch(doFetchClaimListMine()),
|
||||||
claimFirstChannelReward: () => dispatch(doClaimRewardType(rewards.TYPE_FIRST_CHANNEL)),
|
claimFirstChannelReward: () =>
|
||||||
|
dispatch(doClaimRewardType(rewards.TYPE_FIRST_CHANNEL)),
|
||||||
});
|
});
|
||||||
|
|
||||||
export default connect(select, perform)(PublishPage);
|
export default connect(select, perform)(PublishPage);
|
||||||
|
|
|
@ -433,17 +433,26 @@ class PublishPage extends React.PureComponent {
|
||||||
"You have already used this URL. Publishing to it again will update your previous publish."
|
"You have already used this URL. Publishing to it again will update your previous publish."
|
||||||
);
|
);
|
||||||
} else if (this.state.topClaimValue) {
|
} else if (this.state.topClaimValue) {
|
||||||
|
if (this.state.topClaimValue === 1) {
|
||||||
return (
|
return (
|
||||||
<span>
|
<span>
|
||||||
{__n(
|
{__(
|
||||||
'A deposit of at least "%s" credit is required to win "%s". However, you can still get a permanent URL for any amount.',
|
'A deposit of at least one credit is required to win "%s". However, you can still get a permanent URL for any amount.',
|
||||||
'A deposit of at least "%s" credits is required to win "%s". However, you can still get a permanent URL for any amount.',
|
this.state.name
|
||||||
this.state.topClaimValue /*pluralization param*/,
|
|
||||||
this.state.topClaimValue,
|
|
||||||
this.state.name /*regular params*/
|
|
||||||
)}
|
)}
|
||||||
</span>
|
</span>
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
|
return (
|
||||||
|
<span>
|
||||||
|
{__(
|
||||||
|
'A deposit of at least "%s" credits is required to win "%s". However, you can still get a permanent URL for any amount.',
|
||||||
|
this.state.topClaimValue,
|
||||||
|
this.state.name
|
||||||
|
)}
|
||||||
|
</span>
|
||||||
|
);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
@ -752,7 +761,7 @@ class PublishPage extends React.PureComponent {
|
||||||
/>
|
/>
|
||||||
<FormRow
|
<FormRow
|
||||||
label={__("Deposit")}
|
label={__("Deposit")}
|
||||||
postfix="LBC"
|
postfix={__("LBC")}
|
||||||
step="0.01"
|
step="0.01"
|
||||||
min="0"
|
min="0"
|
||||||
type="number"
|
type="number"
|
||||||
|
|
|
@ -20,7 +20,7 @@ const RewardTile = props => {
|
||||||
</div>
|
</div>
|
||||||
<div className="card__actions">
|
<div className="card__actions">
|
||||||
{claimed
|
{claimed
|
||||||
? <span><Icon icon="icon-check" /> Reward claimed.</span>
|
? <span><Icon icon="icon-check" /> {__("Reward claimed.")}</span>
|
||||||
: <RewardLink reward_type={reward.reward_type} />}
|
: <RewardLink reward_type={reward.reward_type} />}
|
||||||
</div>
|
</div>
|
||||||
<div className="card__content">{reward.reward_description}</div>
|
<div className="card__content">{reward.reward_description}</div>
|
||||||
|
@ -59,14 +59,14 @@ const RewardsPage = props => {
|
||||||
<div className="empty">
|
<div className="empty">
|
||||||
<p>{__("You are not eligible to claim rewards.")}</p>
|
<p>{__("You are not eligible to claim rewards.")}</p>
|
||||||
<p>
|
<p>
|
||||||
To become eligible, email
|
{__("To become eligible, email")}
|
||||||
{" "}<Link href="mailto:help@lbry.io" label="help@lbry.io" /> with a
|
{" "}<Link href="mailto:help@lbry.io" label="help@lbry.io" />{" "}
|
||||||
link to a public social media profile.
|
{__("with a link to a public social media profile.")}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
} else if (fetching) {
|
} else if (fetching) {
|
||||||
content = <BusyMessage message="Fetching rewards" />;
|
content = <BusyMessage message={__("Fetching rewards")} />;
|
||||||
} else if (rewards.length > 0) {
|
} else if (rewards.length > 0) {
|
||||||
content = rewards.map(reward =>
|
content = rewards.map(reward =>
|
||||||
<RewardTile key={reward.reward_type} reward={reward} />
|
<RewardTile key={reward.reward_type} reward={reward} />
|
||||||
|
|
|
@ -68,8 +68,7 @@ export const selectUserIsVerificationCandidate = createSelector(
|
||||||
selectUserIsRewardApproved,
|
selectUserIsRewardApproved,
|
||||||
selectEmailToVerify,
|
selectEmailToVerify,
|
||||||
selectUser,
|
selectUser,
|
||||||
(isEligible, isApproved, emailToVerify, user) =>
|
(isEligible, isApproved, emailToVerify, user) => emailToVerify && user
|
||||||
(isEligible && !isApproved) || (emailToVerify && user && !user.has_email)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
export const selectUserIsAuthRequested = createSelector(
|
export const selectUserIsAuthRequested = createSelector(
|
||||||
|
|
476
ui/package-lock.json
generated
476
ui/package-lock.json
generated
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "lbry-web-ui",
|
"name": "lbry-web-ui",
|
||||||
"version": "0.12.0",
|
"version": "0.12.2rc5",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"abbrev": {
|
"abbrev": {
|
||||||
|
@ -97,6 +97,12 @@
|
||||||
"integrity": "sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8=",
|
"integrity": "sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"any-promise": {
|
||||||
|
"version": "1.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
|
||||||
|
"integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"anymatch": {
|
"anymatch": {
|
||||||
"version": "1.3.0",
|
"version": "1.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz",
|
||||||
|
@ -140,9 +146,9 @@
|
||||||
"integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E="
|
"integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E="
|
||||||
},
|
},
|
||||||
"array-flatten": {
|
"array-flatten": {
|
||||||
"version": "1.1.1",
|
"version": "2.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz",
|
||||||
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
|
"integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"array-union": {
|
"array-union": {
|
||||||
|
@ -661,9 +667,9 @@
|
||||||
"integrity": "sha1-cK+ySNVmDl0Y+BHZHIMDtUE0oY4="
|
"integrity": "sha1-cK+ySNVmDl0Y+BHZHIMDtUE0oY4="
|
||||||
},
|
},
|
||||||
"babylon": {
|
"babylon": {
|
||||||
"version": "6.17.3",
|
"version": "6.17.4",
|
||||||
"resolved": "https://registry.npmjs.org/babylon/-/babylon-6.17.3.tgz",
|
"resolved": "https://registry.npmjs.org/babylon/-/babylon-6.17.4.tgz",
|
||||||
"integrity": "sha512-mq0x3HCAGGmQyZXviOVe5TRsw37Ijy3D43jCqt/9WVf+onx2dUgW3PosnqCbScAFhRO9DGs8nxoMzU0iiosMqQ=="
|
"integrity": "sha512-kChlV+0SXkjE0vUn9OZ7pBMWRFd8uq3mZe8x1K6jhuNcAFAtEnjchFAqB+dYEXKyd+JpT6eppRR78QAr5gTsUw=="
|
||||||
},
|
},
|
||||||
"balanced-match": {
|
"balanced-match": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
|
@ -715,9 +721,15 @@
|
||||||
"integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo="
|
"integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo="
|
||||||
},
|
},
|
||||||
"bn.js": {
|
"bn.js": {
|
||||||
"version": "4.11.6",
|
"version": "4.11.7",
|
||||||
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz",
|
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.7.tgz",
|
||||||
"integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=",
|
"integrity": "sha512-LxFiV5mefv0ley0SzqkOPR1bC4EbpPx8LkOz5vMe/Yi15t5hzwgO/G+tc7wOtL4PZTYjwHu8JnEiSLumuSjSfA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"bonjour": {
|
||||||
|
"version": "3.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
|
||||||
|
"integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"boom": {
|
"boom": {
|
||||||
|
@ -783,6 +795,12 @@
|
||||||
"integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
|
"integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"buffer-indexof": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.0.tgz",
|
||||||
|
"integrity": "sha1-9U9kfE9OJSKLqmVqLlfkPV8nCYI=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"buffer-xor": {
|
"buffer-xor": {
|
||||||
"version": "1.0.3",
|
"version": "1.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
|
||||||
|
@ -874,22 +892,30 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"cli-cursor": {
|
"cli-cursor": {
|
||||||
"version": "1.0.2",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
|
||||||
"integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
|
"integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"cli-spinners": {
|
"cli-spinners": {
|
||||||
"version": "0.1.2",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.0.0.tgz",
|
||||||
"integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=",
|
"integrity": "sha1-75h+09SDkaw9q5GAtAanQhgNbmo=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"cli-table": {
|
"cli-table": {
|
||||||
"version": "0.3.1",
|
"version": "0.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz",
|
||||||
"integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=",
|
"integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"colors": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
|
||||||
|
"integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
|
||||||
"dev": true
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"cli-truncate": {
|
"cli-truncate": {
|
||||||
"version": "0.2.1",
|
"version": "0.2.1",
|
||||||
|
@ -931,9 +957,9 @@
|
||||||
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
|
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
|
||||||
},
|
},
|
||||||
"colors": {
|
"colors": {
|
||||||
"version": "1.0.3",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
|
||||||
"integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
|
"integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"combined-stream": {
|
"combined-stream": {
|
||||||
|
@ -1090,9 +1116,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"create-react-class": {
|
"create-react-class": {
|
||||||
"version": "15.5.4",
|
"version": "15.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.5.4.tgz",
|
"resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.0.tgz",
|
||||||
"integrity": "sha1-GIh1yxXi++TKWVtvQ+sOSh8A/lA="
|
"integrity": "sha1-q0SEl8JlZuHilBPogyB9V8/nvtQ="
|
||||||
},
|
},
|
||||||
"cross-spawn": {
|
"cross-spawn": {
|
||||||
"version": "3.0.1",
|
"version": "3.0.1",
|
||||||
|
@ -1166,6 +1192,12 @@
|
||||||
"resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.8.tgz",
|
"resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.8.tgz",
|
||||||
"integrity": "sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ="
|
"integrity": "sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ="
|
||||||
},
|
},
|
||||||
|
"deep-equal": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"deep-is": {
|
"deep-is": {
|
||||||
"version": "0.1.3",
|
"version": "0.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
|
||||||
|
@ -1229,6 +1261,24 @@
|
||||||
"integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=",
|
"integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"dns-equal": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"dns-packet": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.1.1.tgz",
|
||||||
|
"integrity": "sha1-I2nUUDivBF84mOb6VoYq7T9AKWw=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"dns-txt": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
|
||||||
|
"integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"doctrine": {
|
"doctrine": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz",
|
||||||
|
@ -1253,6 +1303,12 @@
|
||||||
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
|
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"electron-rebuild": {
|
||||||
|
"version": "1.5.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/electron-rebuild/-/electron-rebuild-1.5.11.tgz",
|
||||||
|
"integrity": "sha1-bqZg3rVGpRbn76qBzVmF1WZPJFw=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"elegant-spinner": {
|
"elegant-spinner": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz",
|
||||||
|
@ -1418,9 +1474,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"eslint-loader": {
|
"eslint-loader": {
|
||||||
"version": "1.7.1",
|
"version": "1.8.0",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-1.7.1.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-1.8.0.tgz",
|
||||||
"integrity": "sha1-ULFY3WJy3O+5fphCVIN/gaWALOA=",
|
"integrity": "sha512-+d9me9y9t+/k1pY5hsorY685H3yYoQT0t5pZT1TGB7L46VOoLv8+3uKHvkjpUx1aCTjeacbj4yz4s5/LcGolpg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"loader-utils": {
|
"loader-utils": {
|
||||||
|
@ -1552,18 +1608,10 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"esrecurse": {
|
"esrecurse": {
|
||||||
"version": "4.1.0",
|
"version": "4.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz",
|
||||||
"integrity": "sha1-RxO2U2rffyrE8yfVWed1a/9kgiA=",
|
"integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=",
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"estraverse": {
|
|
||||||
"version": "4.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.1.1.tgz",
|
|
||||||
"integrity": "sha1-9srKcokzqFDvkGYdDheYK6RxEaI=",
|
|
||||||
"dev": true
|
"dev": true
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"estraverse": {
|
"estraverse": {
|
||||||
"version": "4.2.0",
|
"version": "4.2.0",
|
||||||
|
@ -1653,6 +1701,12 @@
|
||||||
"integrity": "sha1-urZdDwOqgMNYQIly/HAPkWlEtmI=",
|
"integrity": "sha1-urZdDwOqgMNYQIly/HAPkWlEtmI=",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"array-flatten": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
||||||
|
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"debug": {
|
"debug": {
|
||||||
"version": "2.6.7",
|
"version": "2.6.7",
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz",
|
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz",
|
||||||
|
@ -1813,6 +1867,18 @@
|
||||||
"resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
|
||||||
"integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8="
|
"integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8="
|
||||||
},
|
},
|
||||||
|
"fs-extra": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz",
|
||||||
|
"integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"fs-promise": {
|
||||||
|
"version": "2.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/fs-promise/-/fs-promise-2.0.3.tgz",
|
||||||
|
"integrity": "sha1-9k5PhUvPaJqovdy6JokW2z20aFQ=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"fs-readdir-recursive": {
|
"fs-readdir-recursive": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz",
|
||||||
|
@ -2427,6 +2493,12 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"gettext-parser": {
|
||||||
|
"version": "1.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.2.2.tgz",
|
||||||
|
"integrity": "sha1-HvDadcHnWa4wicc++k0Z5AKYdI4=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"glob": {
|
"glob": {
|
||||||
"version": "7.1.2",
|
"version": "7.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
|
||||||
|
@ -2519,9 +2591,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"hash.js": {
|
"hash.js": {
|
||||||
"version": "1.0.3",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.1.tgz",
|
||||||
"integrity": "sha1-EzL/ABVsCg/92CNgE9B7d6BFFXM=",
|
"integrity": "sha512-I2TYCUjYQMmqmRMCp6jKMC5bvdXxGIZ/heITRR/0F1u0OP920ImEj/cXt3WgcTKBnNYGn7enxUzdai3db829JA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"hawk": {
|
"hawk": {
|
||||||
|
@ -2630,6 +2702,12 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"i18n-extract": {
|
||||||
|
"version": "0.4.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/i18n-extract/-/i18n-extract-0.4.4.tgz",
|
||||||
|
"integrity": "sha1-/VyDA4mv91WNrLh1bpPv1lNIHV8=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"iconv-lite": {
|
"iconv-lite": {
|
||||||
"version": "0.4.18",
|
"version": "0.4.18",
|
||||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz",
|
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz",
|
||||||
|
@ -2693,6 +2771,32 @@
|
||||||
"version": "0.12.0",
|
"version": "0.12.0",
|
||||||
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz",
|
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz",
|
||||||
"integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=",
|
"integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"cli-cursor": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"onetime": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
|
||||||
|
"integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"restore-cursor": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"internal-ip": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz",
|
||||||
|
"integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"interpret": {
|
"interpret": {
|
||||||
|
@ -2711,6 +2815,12 @@
|
||||||
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
|
||||||
"integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
|
"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
|
||||||
|
},
|
||||||
"ipaddr.js": {
|
"ipaddr.js": {
|
||||||
"version": "1.3.0",
|
"version": "1.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.3.0.tgz",
|
||||||
|
@ -2976,6 +3086,12 @@
|
||||||
"resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
|
||||||
"integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
|
"integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
|
||||||
},
|
},
|
||||||
|
"jsonfile": {
|
||||||
|
"version": "2.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
|
||||||
|
"integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"jsonify": {
|
"jsonify": {
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
|
||||||
|
@ -3017,6 +3133,18 @@
|
||||||
"integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=",
|
"integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"keytar": {
|
||||||
|
"version": "4.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/keytar/-/keytar-4.0.3.tgz",
|
||||||
|
"integrity": "sha1-RaNnQsHPzQchDSbRuUKOKXh5vPw=",
|
||||||
|
"dependencies": {
|
||||||
|
"nan": {
|
||||||
|
"version": "2.5.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/nan/-/nan-2.5.1.tgz",
|
||||||
|
"integrity": "sha1-1bAWkSUzJql6K77p5hxV2NYDUeI="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"kind-of": {
|
"kind-of": {
|
||||||
"version": "3.2.2",
|
"version": "3.2.2",
|
||||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
||||||
|
@ -3054,8 +3182,40 @@
|
||||||
"version": "0.12.0",
|
"version": "0.12.0",
|
||||||
"resolved": "https://registry.npmjs.org/listr/-/listr-0.12.0.tgz",
|
"resolved": "https://registry.npmjs.org/listr/-/listr-0.12.0.tgz",
|
||||||
"integrity": "sha1-a84sD1YD+klYDqF81qAMwOX6RRo=",
|
"integrity": "sha1-a84sD1YD+klYDqF81qAMwOX6RRo=",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"cli-cursor": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"cli-spinners": {
|
||||||
|
"version": "0.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz",
|
||||||
|
"integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"onetime": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
|
||||||
|
"integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"ora": {
|
||||||
|
"version": "0.2.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz",
|
||||||
|
"integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"restore-cursor": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"listr-silent-renderer": {
|
"listr-silent-renderer": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz",
|
||||||
|
@ -3080,8 +3240,28 @@
|
||||||
"version": "0.4.0",
|
"version": "0.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.0.tgz",
|
||||||
"integrity": "sha1-RNwBuww0oDxXIVTU0Izemx3FYg8=",
|
"integrity": "sha1-RNwBuww0oDxXIVTU0Izemx3FYg8=",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"cli-cursor": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"onetime": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
|
||||||
|
"integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"restore-cursor": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"load-json-file": {
|
"load-json-file": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
|
||||||
|
@ -3262,8 +3442,28 @@
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz",
|
||||||
"integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=",
|
"integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"cli-cursor": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"onetime": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
|
||||||
|
"integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"restore-cursor": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"longest": {
|
"longest": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
|
||||||
|
@ -3375,6 +3575,12 @@
|
||||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz",
|
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz",
|
||||||
"integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0="
|
"integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0="
|
||||||
},
|
},
|
||||||
|
"mimic-fn": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz",
|
||||||
|
"integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"minimalistic-assert": {
|
"minimalistic-assert": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz",
|
||||||
|
@ -3417,6 +3623,18 @@
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
||||||
},
|
},
|
||||||
|
"multicast-dns": {
|
||||||
|
"version": "6.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.1.1.tgz",
|
||||||
|
"integrity": "sha1-bn3oalcIcqsXBYrepxYLvsqBTd4=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"multicast-dns-service-types": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
|
||||||
|
"integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"multistream": {
|
"multistream": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/multistream/-/multistream-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/multistream/-/multistream-2.1.0.tgz",
|
||||||
|
@ -3428,6 +3646,12 @@
|
||||||
"integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=",
|
"integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"mz": {
|
||||||
|
"version": "2.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mz/-/mz-2.6.0.tgz",
|
||||||
|
"integrity": "sha1-yLhSHZWN8KTydoAl22nHGe5O8c4=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"nan": {
|
"nan": {
|
||||||
"version": "2.6.2",
|
"version": "2.6.2",
|
||||||
"resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz",
|
"resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz",
|
||||||
|
@ -3450,6 +3674,12 @@
|
||||||
"resolved": "https://registry.npmjs.org/next-event/-/next-event-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/next-event/-/next-event-1.0.0.tgz",
|
||||||
"integrity": "sha1-53eKzeLlWALgrRh5w5z2917aYdg="
|
"integrity": "sha1-53eKzeLlWALgrRh5w5z2917aYdg="
|
||||||
},
|
},
|
||||||
|
"node-abi": {
|
||||||
|
"version": "2.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.0.3.tgz",
|
||||||
|
"integrity": "sha1-DKZ+XmZ7jhNDVJyhcVOoFdC7/ao=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node-emoji": {
|
"node-emoji": {
|
||||||
"version": "1.5.1",
|
"version": "1.5.1",
|
||||||
"resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.5.1.tgz",
|
||||||
|
@ -3461,6 +3691,12 @@
|
||||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.1.tgz",
|
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.1.tgz",
|
||||||
"integrity": "sha512-j8XsFGCLw79vWXkZtMSmmLaOk9z5SQ9bV/tkbZVCqvgwzrjAGq66igobLofHtF63NvMTp2WjytpsNTGKa+XRIQ=="
|
"integrity": "sha512-j8XsFGCLw79vWXkZtMSmmLaOk9z5SQ9bV/tkbZVCqvgwzrjAGq66igobLofHtF63NvMTp2WjytpsNTGKa+XRIQ=="
|
||||||
},
|
},
|
||||||
|
"node-forge": {
|
||||||
|
"version": "0.6.33",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.6.33.tgz",
|
||||||
|
"integrity": "sha1-RjgRh59XPUUVWtap9D3ClujoXrw=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node-gyp": {
|
"node-gyp": {
|
||||||
"version": "3.6.2",
|
"version": "3.6.2",
|
||||||
"resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz",
|
"resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz",
|
||||||
|
@ -3480,6 +3716,12 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node-loader": {
|
||||||
|
"version": "0.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-loader/-/node-loader-0.6.0.tgz",
|
||||||
|
"integrity": "sha1-x5fvUQle1YWZArFX9jhPY2HgWug=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node-notifier": {
|
"node-notifier": {
|
||||||
"version": "4.6.1",
|
"version": "4.6.1",
|
||||||
"resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-4.6.1.tgz",
|
"resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-4.6.1.tgz",
|
||||||
|
@ -3604,9 +3846,9 @@
|
||||||
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E="
|
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E="
|
||||||
},
|
},
|
||||||
"onetime": {
|
"onetime": {
|
||||||
"version": "1.1.0",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
|
||||||
"integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
|
"integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"opn": {
|
"opn": {
|
||||||
|
@ -3636,9 +3878,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"ora": {
|
"ora": {
|
||||||
"version": "0.2.3",
|
"version": "1.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/ora/-/ora-1.3.0.tgz",
|
||||||
"integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=",
|
"integrity": "sha1-gAeN0rkqk0r2ajrXKluRBpTt5Ro=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -3881,9 +4123,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"promise": {
|
"promise": {
|
||||||
"version": "7.1.1",
|
"version": "7.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/promise/-/promise-7.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
|
||||||
"integrity": "sha1-SJZUxpJha4qlWwck+oCbt9tJxb8="
|
"integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg=="
|
||||||
},
|
},
|
||||||
"prop-types": {
|
"prop-types": {
|
||||||
"version": "15.5.10",
|
"version": "15.5.10",
|
||||||
|
@ -3974,15 +4216,7 @@
|
||||||
"version": "2.0.5",
|
"version": "2.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz",
|
||||||
"integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==",
|
"integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==",
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"safe-buffer": {
|
|
||||||
"version": "5.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.0.tgz",
|
|
||||||
"integrity": "sha512-aSLEDudu6OoRr/2rU609gRmnYboRLxgDG1z9o2Q0os7236FwvcqIOO8r8U5JUEwivZOhDaKlFO4SbPTJYyBEyQ==",
|
|
||||||
"dev": true
|
"dev": true
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"range-parser": {
|
"range-parser": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
|
@ -4001,19 +4235,24 @@
|
||||||
"integrity": "sha1-0xzLFJmuIjwNIdFIVlCqSg03TOA="
|
"integrity": "sha1-0xzLFJmuIjwNIdFIVlCqSg03TOA="
|
||||||
},
|
},
|
||||||
"react": {
|
"react": {
|
||||||
"version": "15.6.0",
|
"version": "15.6.1",
|
||||||
"resolved": "https://registry.npmjs.org/react/-/react-15.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/react/-/react-15.6.1.tgz",
|
||||||
"integrity": "sha1-wjKZtI4w7TAlCM6J4aAskZ+Ca84="
|
"integrity": "sha1-uqhDTsZ4C96ZfNw4C3nNM7ljk98="
|
||||||
},
|
},
|
||||||
"react-dom": {
|
"react-dom": {
|
||||||
"version": "15.6.0",
|
"version": "15.6.1",
|
||||||
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.6.1.tgz",
|
||||||
"integrity": "sha1-i8I8sMgOcGNVt2yp+M5Hz3vfttE="
|
"integrity": "sha1-LLDtQZEDjlPCCes6eaI+Kkz5lHA="
|
||||||
|
},
|
||||||
|
"react-dom-factories": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/react-dom-factories/-/react-dom-factories-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-9DwF5QUbME8zJRYY1byFmynka20="
|
||||||
},
|
},
|
||||||
"react-modal": {
|
"react-modal": {
|
||||||
"version": "1.9.4",
|
"version": "1.9.7",
|
||||||
"resolved": "https://registry.npmjs.org/react-modal/-/react-modal-1.9.4.tgz",
|
"resolved": "https://registry.npmjs.org/react-modal/-/react-modal-1.9.7.tgz",
|
||||||
"integrity": "sha512-ourtHswaEA/KyeI20AsCOSWTC23WF3z0b1C3qzQtA5UhBOdwQ2sEK2OPJGN8u7iFGJ83etmk605aeF/i4tGVEQ=="
|
"integrity": "sha512-oZNqI0ZnPD7NnfObrCMz2hxHTAw5oEuhZJ+gnyFNIQB2rR8h1YbLQTfhms1mtSJigb0J23OOWElHjXYYaKO+wg=="
|
||||||
},
|
},
|
||||||
"react-redux": {
|
"react-redux": {
|
||||||
"version": "5.0.5",
|
"version": "5.0.5",
|
||||||
|
@ -4031,9 +4270,9 @@
|
||||||
"integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI="
|
"integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI="
|
||||||
},
|
},
|
||||||
"readable-stream": {
|
"readable-stream": {
|
||||||
"version": "2.2.11",
|
"version": "2.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz",
|
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.0.tgz",
|
||||||
"integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q=="
|
"integrity": "sha512-c7KMXGd4b48nN3OJ1U9qOsn6pXNzf6kLd3kdZCkg2sxAcoiufInqF0XckwEnlrcwuaYwonlNK8GQUIOC/WC7sg=="
|
||||||
},
|
},
|
||||||
"readdirp": {
|
"readdirp": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
|
@ -4084,9 +4323,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"redux": {
|
"redux": {
|
||||||
"version": "3.6.0",
|
"version": "3.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/redux/-/redux-3.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/redux/-/redux-3.7.0.tgz",
|
||||||
"integrity": "sha1-iHwrPQub2G7KK+cFccJ2VMGeGI0="
|
"integrity": "sha512-GHjaOkEQtQnnuLoYPFkRKHIqs1i1tdTlisu/xUHfk2juzCobSy4STxs4Lz5bPkc07Owb6BeGKx/r76c9IVTkOw=="
|
||||||
},
|
},
|
||||||
"redux-action-buffer": {
|
"redux-action-buffer": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
|
@ -4236,9 +4475,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"restore-cursor": {
|
"restore-cursor": {
|
||||||
"version": "1.0.1",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
|
||||||
"integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
|
"integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"right-align": {
|
"right-align": {
|
||||||
|
@ -4271,15 +4510,15 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"rxjs": {
|
"rxjs": {
|
||||||
"version": "5.4.0",
|
"version": "5.4.1",
|
||||||
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.4.1.tgz",
|
||||||
"integrity": "sha1-p9sUqxV/nXqsalbmVeejhg05vyY=",
|
"integrity": "sha1-ti91fyeURdJloYpY+wpw3JDpFiY=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"safe-buffer": {
|
"safe-buffer": {
|
||||||
"version": "5.0.1",
|
"version": "5.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.0.tgz",
|
||||||
"integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c="
|
"integrity": "sha512-aSLEDudu6OoRr/2rU609gRmnYboRLxgDG1z9o2Q0os7236FwvcqIOO8r8U5JUEwivZOhDaKlFO4SbPTJYyBEyQ=="
|
||||||
},
|
},
|
||||||
"sass-graph": {
|
"sass-graph": {
|
||||||
"version": "2.2.4",
|
"version": "2.2.4",
|
||||||
|
@ -4304,6 +4543,12 @@
|
||||||
"integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
|
"integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"selfsigned": {
|
||||||
|
"version": "1.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.9.1.tgz",
|
||||||
|
"integrity": "sha1-zdpEktcNSGVw+HxlVGAjVY4d+lo=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"semver": {
|
"semver": {
|
||||||
"version": "5.3.0",
|
"version": "5.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
|
||||||
|
@ -4451,6 +4696,12 @@
|
||||||
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz",
|
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz",
|
||||||
"integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E="
|
"integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E="
|
||||||
},
|
},
|
||||||
|
"spawn-rx": {
|
||||||
|
"version": "2.0.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/spawn-rx/-/spawn-rx-2.0.11.tgz",
|
||||||
|
"integrity": "sha1-ZUUa1lZigB2up1VJgyp4LeAEjb8=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"spdx-correct": {
|
"spdx-correct": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
|
||||||
|
@ -4539,7 +4790,14 @@
|
||||||
"string_decoder": {
|
"string_decoder": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz",
|
||||||
"integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk="
|
"integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=",
|
||||||
|
"dependencies": {
|
||||||
|
"safe-buffer": {
|
||||||
|
"version": "5.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz",
|
||||||
|
"integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c="
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"string-width": {
|
"string-width": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
|
@ -4631,6 +4889,18 @@
|
||||||
"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
|
"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"thenify": {
|
||||||
|
"version": "3.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz",
|
||||||
|
"integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"thenify-all": {
|
||||||
|
"version": "1.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
|
||||||
|
"integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"through": {
|
"through": {
|
||||||
"version": "2.3.8",
|
"version": "2.3.8",
|
||||||
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
|
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
|
||||||
|
@ -4658,6 +4928,12 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"thunky": {
|
||||||
|
"version": "0.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/thunky/-/thunky-0.1.0.tgz",
|
||||||
|
"integrity": "sha1-vzAUaCTituZ7Dy16Ssi+smkIaE4=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"timers-browserify": {
|
"timers-browserify": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.2.tgz",
|
||||||
|
@ -4848,9 +5124,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"uuid": {
|
"uuid": {
|
||||||
"version": "3.0.1",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz",
|
||||||
"integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE="
|
"integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g=="
|
||||||
},
|
},
|
||||||
"v8flags": {
|
"v8flags": {
|
||||||
"version": "2.1.1",
|
"version": "2.1.1",
|
||||||
|
@ -4961,9 +5237,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"webpack-dev-server": {
|
"webpack-dev-server": {
|
||||||
"version": "2.4.5",
|
"version": "2.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.4.5.tgz",
|
"resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.5.0.tgz",
|
||||||
"integrity": "sha1-MThM6BE2vhCAtLTN4OubkOVO5s8=",
|
"integrity": "sha1-TTanKLA7iyr6SO0wJCiEfOooQK0=",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"camelcase": {
|
"camelcase": {
|
||||||
|
@ -4972,6 +5248,32 @@
|
||||||
"integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
|
"integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"del": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz",
|
||||||
|
"integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"globby": {
|
||||||
|
"version": "6.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
|
||||||
|
"integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"pify": {
|
||||||
|
"version": "2.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
|
||||||
|
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
|
||||||
|
"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
|
||||||
|
},
|
||||||
"supports-color": {
|
"supports-color": {
|
||||||
"version": "3.2.3",
|
"version": "3.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
{
|
{
|
||||||
"name": "lbry-web-ui",
|
"name": "lbry-web-ui",
|
||||||
"version": "0.12.2rc3",
|
"version": "0.12.2rc5",
|
||||||
"description": "LBRY UI",
|
"description": "LBRY UI",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "echo \"Error: no test specified\" && exit 1",
|
"test": "echo \"Error: no test specified\" && exit 1",
|
||||||
"dev": "webpack-dev-server --devtool eval --progress --colors --inline",
|
"dev": "webpack-dev-server --devtool eval --progress --colors --inline",
|
||||||
"precommit": "lint-staged",
|
"precommit": "lint-staged",
|
||||||
"prettier": "prettier --trailing-comma es5 --write js/**/*.{js,jsx}"
|
"prettier": "prettier --trailing-comma es5 --write js/**/*.{js,jsx}",
|
||||||
|
"extract-langs": "node extractLocals.js"
|
||||||
},
|
},
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"lbry"
|
"lbry"
|
||||||
|
@ -15,11 +16,11 @@
|
||||||
"name": "LBRY Inc.",
|
"name": "LBRY Inc.",
|
||||||
"email": "hello@lbry.io"
|
"email": "hello@lbry.io"
|
||||||
},
|
},
|
||||||
"license": "SEE LICENSE IN LICENSE.md",
|
"license": "MIT",
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/lbryio/lbry-app/issues"
|
"url": "https://github.com/lbryio/lbry-app/issues"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/lbryio/lbry-app#readme",
|
"homepage": "https://github.com/lbryio/lbry-app",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"babel-cli": "^6.11.4",
|
"babel-cli": "^6.11.4",
|
||||||
"babel-preset-es2015": "^6.13.2",
|
"babel-preset-es2015": "^6.13.2",
|
||||||
|
@ -27,6 +28,7 @@
|
||||||
"from2": "^2.3.0",
|
"from2": "^2.3.0",
|
||||||
"jshashes": "^1.0.6",
|
"jshashes": "^1.0.6",
|
||||||
"localforage": "^1.5.0",
|
"localforage": "^1.5.0",
|
||||||
|
"keytar": "^4.0.3",
|
||||||
"node-sass": "^3.8.0",
|
"node-sass": "^3.8.0",
|
||||||
"rc-progress": "^2.0.6",
|
"rc-progress": "^2.0.6",
|
||||||
"react": "^15.4.0",
|
"react": "^15.4.0",
|
||||||
|
@ -53,6 +55,7 @@
|
||||||
"babel-preset-es2015": "^6.18.0",
|
"babel-preset-es2015": "^6.18.0",
|
||||||
"babel-preset-react": "^6.16.0",
|
"babel-preset-react": "^6.16.0",
|
||||||
"babel-preset-stage-2": "^6.18.0",
|
"babel-preset-stage-2": "^6.18.0",
|
||||||
|
"electron-rebuild": "^1.5.11",
|
||||||
"eslint": "^3.10.2",
|
"eslint": "^3.10.2",
|
||||||
"eslint-config-airbnb": "^13.0.0",
|
"eslint-config-airbnb": "^13.0.0",
|
||||||
"eslint-loader": "^1.6.1",
|
"eslint-loader": "^1.6.1",
|
||||||
|
@ -60,8 +63,10 @@
|
||||||
"eslint-plugin-jsx-a11y": "^2.2.3",
|
"eslint-plugin-jsx-a11y": "^2.2.3",
|
||||||
"eslint-plugin-react": "^6.7.1",
|
"eslint-plugin-react": "^6.7.1",
|
||||||
"husky": "^0.13.4",
|
"husky": "^0.13.4",
|
||||||
|
"i18n-extract": "^0.4.4",
|
||||||
"json-loader": "^0.5.4",
|
"json-loader": "^0.5.4",
|
||||||
"lint-staged": "^3.6.0",
|
"lint-staged": "^3.6.0",
|
||||||
|
"node-loader": "^0.6.0",
|
||||||
"node-sass": "^3.13.0",
|
"node-sass": "^3.13.0",
|
||||||
"prettier": "^1.4.2",
|
"prettier": "^1.4.2",
|
||||||
"webpack": "^2.6.1",
|
"webpack": "^2.6.1",
|
||||||
|
|
19
ui/watch.sh
19
ui/watch.sh
|
@ -7,16 +7,19 @@ set -euo pipefail
|
||||||
|
|
||||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
mkdir -p $DIR/dist/css
|
(
|
||||||
mkdir -p $DIR/dist/js
|
cd "$DIR"
|
||||||
|
mkdir -p $DIR/dist/css
|
||||||
|
mkdir -p $DIR/dist/js
|
||||||
|
|
||||||
if [ ! -d "$DIR/node_modules" ]; then
|
if [ ! -d "$DIR/node_modules" ]; then
|
||||||
echo "Installing NPM modules"
|
echo "Installing NPM modules"
|
||||||
npm install
|
npm install
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# run sass once without --watch to force update. then run with --watch to keep watching
|
# run sass once without --watch to force update. then run with --watch to keep watching
|
||||||
$DIR/node_modules/.bin/node-sass --output $DIR/../app/dist/css --sourcemap=none $DIR/scss/
|
node_modules/.bin/node-sass --output $DIR/../app/dist/css --sourcemap=none $DIR/scss/
|
||||||
$DIR/node_modules/.bin/node-sass --output $DIR/../app/dist/css --sourcemap=none --watch $DIR/scss/ &
|
node_modules/.bin/node-sass --output $DIR/../app/dist/css --sourcemap=none --watch $DIR/scss/ &
|
||||||
|
|
||||||
node_modules/.bin/webpack --config webpack.dev.config.js --progress --colors --watch
|
node_modules/.bin/webpack --config webpack.dev.config.js --progress --colors --watch
|
||||||
|
)
|
|
@ -33,6 +33,10 @@ module.exports = {
|
||||||
// define an include so we check just the files we need
|
// define an include so we check just the files we need
|
||||||
include: PATHS.app
|
include: PATHS.app
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
test: /\.node$/,
|
||||||
|
use: ["node-loader"]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
test: /\.css$/,
|
test: /\.css$/,
|
||||||
use: ["style-loader", "css-loader"]
|
use: ["style-loader", "css-loader"]
|
||||||
|
|
|
@ -41,6 +41,10 @@ module.exports = {
|
||||||
// define an include so we check just the files we need
|
// define an include so we check just the files we need
|
||||||
include: PATHS.app
|
include: PATHS.app
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
test: /\.node$/,
|
||||||
|
use: ["node-loader"]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
test: /\.css$/,
|
test: /\.css$/,
|
||||||
use: ["style-loader", "css-loader"]
|
use: ["style-loader", "css-loader"]
|
||||||
|
|
Loading…
Reference in a new issue