Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Mayesters 2017-06-21 20:31:12 +02:00
commit 85464fb3cb
40 changed files with 1077 additions and 699 deletions

View file

@ -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
View file

@ -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

View file

@ -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

View file

@ -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
View file

@ -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="
} }
} }
} }

View file

@ -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": {

View file

@ -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

View file

@ -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

View file

@ -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
View file

@ -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
View file

@ -1,7 +0,0 @@
dist/css/*
dist/js/*
!dist/js/mediaelement
node_modules
.sass-cache
.idea
.DS_Store

View file

@ -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

View file

@ -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}'"}'

View file

@ -1 +0,0 @@
See https://github.com/lbryio/lbry/blob/master/LICENSE

48
ui/extractLocals.js Normal file
View 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!");
});
}
});
}
});

View file

@ -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());
}; };

View file

@ -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 },
}); });
} });
}
);
}; };
} }

View file

@ -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.__;

View file

@ -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();

View file

@ -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);
}} }}

View file

@ -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);

View file

@ -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"

View file

@ -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>;

View file

@ -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;
}; };

View file

@ -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) => {

View file

@ -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;
}; };

View file

@ -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);
}; };

View file

@ -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);
}); });
}; };
} },
} }
); );

View file

@ -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>

View file

@ -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);

View file

@ -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"

View file

@ -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} />

View file

@ -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
View file

@ -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",

View file

@ -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",

View file

@ -7,6 +7,8 @@ set -euo pipefail
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
(
cd "$DIR"
mkdir -p $DIR/dist/css mkdir -p $DIR/dist/css
mkdir -p $DIR/dist/js mkdir -p $DIR/dist/js
@ -16,7 +18,8 @@ if [ ! -d "$DIR/node_modules" ]; then
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
)

View file

@ -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"]

View file

@ -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"]