Update/Upgrade packages + Restore ESLint usage #720

Merged
nikooo777 merged 8 commits from modules-update into master 2018-11-12 20:39:52 +01:00
50 changed files with 5192 additions and 12626 deletions

View file

@ -3,3 +3,4 @@ node_modules/
public/bundle
server/render/build
test/
server/chainquery

View file

@ -1,4 +1,5 @@
{
"parser": "babel-eslint",
"extends": ["standard", "standard-jsx"],
"env": {
"es6": true,
@ -13,15 +14,13 @@
"no-multi-spaces": 0,
"new-cap": 0,
"prefer-promise-reject-errors": 0,
"comma-dangle": [
"error",
"always-multiline"
],
"semi": [
"error",
"always",
{ "omitLastInOneLineBlock": true }
],
"no-unused-vars": 0,
"standard/object-curly-even-spacing": 0,
"handle-callback-err": 0,
"one-var": 0,
"object-curly-spacing": 0,
"comma-dangle": ["error", "always-multiline"],
"semi": ["error", "always", { "omitLastInOneLineBlock": true }],
"key-spacing": [
"error",
{

View file

@ -13,7 +13,7 @@ export function onHandleShowPageUri (params, url) {
data: {
...params,
url,
}
},
};
}
@ -23,7 +23,7 @@ export function onHandleShowHomepage (params, url) {
data: {
...params,
url,
}
},
};
}

View file

@ -1,6 +1,6 @@
import React from 'react';
import Row from '@components/Row';
import {Link} from "react-router-dom";
import {Link} from 'react-router-dom';
const AboutSpeechDetails = () => {
return (

View file

@ -20,6 +20,6 @@ const ChooseChannelPublishRadio = ({ publishInChannel, toggleAnonymousPublish })
</label>
</div>
);
}
};
export default ChooseChannelPublishRadio;

View file

@ -6,6 +6,6 @@ const DropzoneDropItDisplay = () => {
Drop it.
</div>
);
}
};
export default DropzoneDropItDisplay;

View file

@ -8,5 +8,5 @@ const Label = ({ value }) => {
{value}
</label>
);
}
};
export default Label;

View file

@ -1,7 +1,7 @@
import {connect} from 'react-redux';
import View from './view';
import {selectAsset} from "../../selectors/show";
import {buildURI} from "../../utils/buildURI";
import {selectAsset} from '../../selectors/show';
import {buildURI} from '../../utils/buildURI';
const mapStateToProps = props => {
const { show, publish } = props;

View file

@ -14,20 +14,20 @@ class FaqPage extends React.Component {
</Row>
<Row>
<h3>What is spee.ch?</h3>
<p>Spee.ch is a media-hosting site that reads from and publishes content to the <a href="http://lbry.io/">LBRY blockchain</a>.</p>
<p>Spee.ch is a media-hosting site that reads from and publishes content to the <a href='http://lbry.io/'>LBRY blockchain</a>.</p>
</Row>
<Row>
<h3>OK But Why Should I Care?</h3>
<p>Spee.ch is a fast and easy way to host your images, videos, and other content. What makes this different from other similar sites is that Speech is hosted on the LBRY blockchain. That means it is impossible for your content to be censored via digital means. Even if we took down Speech today, all content would remain immutably stored on the LBRY blockchain.</p>
<p>Blockchain technology doesnt solve <a href="https://xkcd.com/538/">the 5 dollar wrench attack</a>, but it solves just about every other problem in media hosting and distribution.</p>
<p>Even better - you can host your own clone of Speech to get even more control over your content. <a href="https://github.com/lbryio/spee.ch/blob/master/README.md">CLICK HERE FOR INFO</a>.</p>
<p>Blockchain technology doesnt solve <a href='https://xkcd.com/538/'>the 5 dollar wrench attack</a>, but it solves just about every other problem in media hosting and distribution.</p>
<p>Even better - you can host your own clone of Speech to get even more control over your content. <a href='https://github.com/lbryio/spee.ch/blob/master/README.md'>CLICK HERE FOR INFO</a>.</p>
<p>Speech is just the beginning of what will soon be a vibrant ecosystem of LBRY-powered apps. Use LBRY and youre one step closer to true freedom.</p>
</Row>
<Row>
<h3>How to Use spee.ch</h3>
<p>Its easy. Drag the image or video file of your choice into the center of the spee.ch homepage.</p>
<p>Spee.ch is currently best suited for web optimized MP4 video and standard image filetypes (JPEG, GIF).</p>
<p>If you want to refer to a piece of content repeatedly, or to build a collection of related content, you could create a channel. Channels work both for private collections and for public repositories. Theres more info about how to do this <a href="https://spee.ch/login">on the channel page</a>.</p>
<p>If you want to refer to a piece of content repeatedly, or to build a collection of related content, you could create a channel. Channels work both for private collections and for public repositories. Theres more info about how to do this <a href='https://spee.ch/login'>on the channel page</a>.</p>
<p>Published files will be wiewable and embeddable with any web browser and accesible in the LBRY app. You can also use spee.ch to view free and non-NSFW content published on LBRY network from LBRY app. You just need to replace "lbry://" with "http://spee.ch/" in the URL.</p>
</Row>
<Row>
@ -36,8 +36,8 @@ class FaqPage extends React.Component {
</Row>
<Row>
<h3>Contribute</h3>
<p>If you have an idea for your own spee.ch-like site on top of LBRY, fork our <a href="https://github.com/lbryio/spee.ch">github repo</a> and go to town!</p>
<p>If you want to improve spee.ch, join <a href="https://chat.lbry.io/">our discord channel</a> or solve one of our <a href="https://github.com/lbryio/spee.ch/issues">github issues</a>.</p>
<p>If you have an idea for your own spee.ch-like site on top of LBRY, fork our <a href='https://github.com/lbryio/spee.ch'>github repo</a> and go to town!</p>
<p>If you want to improve spee.ch, join <a href='https://chat.lbry.io/'>our discord channel</a> or solve one of our <a href='https://github.com/lbryio/spee.ch/issues'>github issues</a>.</p>
</Row>
</PageLayout>
);

View file

@ -16,7 +16,7 @@ class PopularPage extends React.Component {
const { homeChannel } = this.props;
return (
<ContentPageWrapper homeChannel={homeChannel} />
)
);
}
};

View file

@ -61,7 +61,7 @@ export function * newAssetRequest (action) {
if (loggedInChannel && loggedInChannel.longId) {
const {
data: claimViewData
data: claimViewData,
} = yield call(getClaimViews, longId);
claimViews = claimViewData[longId] || 0;
@ -93,7 +93,7 @@ export function * updateAssetViews (action) {
if (longId) {
const {
data: claimViewData
data: claimViewData,
} = yield call(getClaimViews, longId);
claimViews = claimViewData[longId] || 0;
@ -103,12 +103,12 @@ export function * updateAssetViews (action) {
}
}
} catch (error) {
console.log(error)
console.log(error);
}
};
export function * watchUpdateAssetViews (action) {
yield takeLatest(channelActions.CHANNEL_UPDATE, updateAssetViews)
yield takeLatest(channelActions.CHANNEL_UPDATE, updateAssetViews);
};
export function * watchNewAssetRequest () {

View file

@ -30,8 +30,8 @@ function * parseAndUpdateIdentifierAndClaim (modifier, claim) {
}
function * parseAndUpdateClaimOnly (claim) {
if(/^special\:/.test(claim) === true) {
const assetName = /special\:(.*)/.exec(claim)[1];
if (/^special:/.test(claim) === true) {
const assetName = /special:(.*)/.exec(claim)[1];
return yield call(newSpecialAssetRequest, onNewSpecialAssetRequest(assetName));
} else {
// this could be a request for an asset or a channel page

8981
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -11,7 +11,6 @@
"configure": "node cli/configure.js",
"fix": "eslint . --fix",
"lint": "eslint .",
"precommit": "eslint .",
"prestart": "builder run bundle",
"start": "node server.js",
"start:build": "builder run start",
@ -50,33 +49,33 @@
"axios": "^0.18.0",
"bcrypt": "^2.0.1",
"body-parser": "^1.18.3",
"connect-multiparty": "^2.1.1",
"connect-multiparty": "^2.2.0",
"cookie-session": "^2.0.0-beta.3",
"express": "^4.15.2",
"express": "^4.16.4",
"express-handlebars": "^3.0.0",
"express-http-context": "^1.1.0",
"express-http-context": "^1.2.0",
"get-video-dimensions": "^1.0.0",
"helmet": "^3.13.0",
"helmet": "^3.15.0",
"image-size": "^0.6.3",
"inquirer": "^5.2.0",
"ip": "^1.1.5",
"make-dir": "^1.3.0",
"module-alias": "^2.1.0",
"mysql2": "^1.6.1",
"mysql2": "^1.6.4",
"npm": "^6.3.0",
"passport": "^0.4.0",
"passport-local": "^1.0.0",
"prop-types": "^15.6.2",
"react": "^16.4.2",
"react-dom": "^16.4.2",
"react-feather": "^1.1.3",
"react-feather": "^1.1.4",
"react-dom": "^16.6.1",
"react-ga": "^2.5.3",
"react-helmet": "^5.2.0",
"react-redux": "^5.0.6",
"react-redux": "^5.1.1",
"react-router-dom": "^4.3.1",
"redux": "^4.0.0",
"redux-saga": "^0.16.0",
"sequelize": "^4.38.0",
"redux": "^4.0.1",
"redux-saga": "^0.16.2",
"sequelize": "^4.41.1",
"sequelize-cli": "^4.0.0",
"universal-analytics": "^0.4.20",
"webpack": "^3.10.0",
@ -87,43 +86,49 @@
"winston-slack-webhook": "github:billbitt/winston-slack-webhook"
},
"devDependencies": {
"@babel/cli": "^7.0.0",
"@babel/core": "^7.0.0",
"@babel/cli": "^7.1.5",
"@babel/core": "^7.1.5",
"@babel/plugin-proposal-object-rest-spread": "^7.0.0",
"@babel/polyfill": "^7.0.0",
"@babel/preset-env": "^7.0.0",
"@babel/preset-env": "^7.1.5",
"@babel/preset-react": "^7.0.0",
"@babel/preset-stage-2": "^7.0.0",
"@babel/register": "^7.0.0",
"babel-loader": "^7.1.2",
"babel-plugin-module-resolver": "^3.1.1",
"babel-eslint": "9.0.0-beta.3",
"builder": "^4.0.0",
"chai": "^4.1.2",
"chai-http": "^4.0.0",
"cross-fetch": "^2.2.2",
"chai": "^4.2.0",
"chai-http": "^4.2.0",
"cross-fetch": "^2.2.3",
"css-loader": "^0.28.11",
"eslint": "4.19.1",
"eslint-config-standard": "^11.0.0",
"eslint-config-standard-jsx": "^5.0.0",
"eslint-plugin-import": "^2.12.0",
"eslint-plugin-node": "^6.0.1",
"eslint-plugin-promise": "^3.8.0",
"eslint-plugin-react": "^7.9.1",
"eslint-plugin-standard": "^3.0.1",
"eslint": "5.9.0",
"eslint-config-standard": "^12.0.0",
"eslint-config-standard-jsx": "^6.0.2",
"eslint-plugin-import": "^2.14.0",
"eslint-plugin-node": "^8.0.0",
"eslint-plugin-promise": "^4.0.1",
"eslint-plugin-react": "^7.11.1",
"eslint-plugin-standard": "^4.0.0",
"extract-text-webpack-plugin": "^3.0.2",
"file-loader": "^1.1.11",
"husky": "^0.14.3",
"husky": "^1.1.3",
"mocha": "^5.2.0",
"ndb": "^1.0.24",
"node-sass": "^4.9.3",
"nodemon": "^1.17.5",
"ndb": "^1.0.26",
"node-sass": "^4.10.0",
"nodemon": "^1.18.6",
"redux-devtools": "^3.4.1",
"regenerator-transform": "^0.13.0",
"rollup": "^0.66.2",
"regenerator-transform": "^0.13.3",
"rollup": "^0.67.0",
"sass-loader": "^7.1.0",
"sequelize-cli": "^4.0.0",
"style-loader": "^0.21.0",
"url-loader": "^1.0.1",
"wait-on": "^3.1.0"
"style-loader": "^0.23.1",
"url-loader": "^1.1.2",
"wait-on": "^3.2.0"
},
"husky": {
"hooks": {
"pre-commit": "eslint ."
}
}
}

View file

@ -7,7 +7,7 @@ const claimAvailability = async (name) => {
const claimAddresses = additionalClaimAddresses || [];
claimAddresses.push(primaryClaimAddress);
// find any records where the name is used
return await chainquery.claim
return chainquery.claim
.findAll({
attributes: ['claim_address'],
where : {

View file

@ -10,7 +10,6 @@ const db = require('server/models');
*/
const claimData = async ({ ip, originalUrl, body, params }, res) => {
try {
const resolvedClaim = await fetchClaimData(params);

View file

@ -125,7 +125,7 @@ const claimPublish = ({ body, files, headers, ip, originalUrl, user, tor }, res)
if (channelName) {
canonicalUrl = createCanonicalLink({ asset: { ...claimData, channelShortId: shortId } });
} else {
canonicalUrl = createCanonicalLink({ asset: { ...claimData, shortId } })
canonicalUrl = createCanonicalLink({ asset: { ...claimData, shortId } });
}
res.status(200).json({

View file

@ -107,7 +107,6 @@ const claimUpdate = ({ body, files, headers, ip, originalUrl, user, tor }, res)
return [null, null];
})
.then(([fileResult, resolution]) => {
metadata = Object.assign({}, {
title : claimRecord.title,
description: claimRecord.description,
@ -164,7 +163,7 @@ const claimUpdate = ({ body, files, headers, ip, originalUrl, user, tor }, res)
if (channelName) {
canonicalUrl = createCanonicalLink({ asset: { ...publishResult, channelShortId: shortId } });
} else {
canonicalUrl = createCanonicalLink({ asset: { ...publishResult, shortId } })
canonicalUrl = createCanonicalLink({ asset: { ...publishResult, shortId } });
}
if (publishResult.error) {

View file

@ -28,7 +28,7 @@ const channelClaims = async ({ ip, originalUrl, body, params }, res) => {
previousPage : null,
totalPages : 1,
totalResults : claims.length,
}
},
});
}

View file

@ -56,8 +56,6 @@ const getClaimIdAndServeAsset = (channelName, channelClaimId, claimName, claimId
ip,
});
}
return;
});
})
.then(() => {

View file

@ -12,24 +12,19 @@ const padSizes = {
const argumentProcessors = {
'bottom': async (config) => {
config.classNames.push('bottom');
return;
},
'right': async (config) => {
config.classNames.push('right');
return;
},
'pad': async (config, val) => {
config.classNames.push(padSizes[val]);
return;
},
'logoClaim': async (config, val) => {
config.logoUrl = `${host}/${val}`;
return;
},
'link': async (config, val) => {
config.logoLink = val;
return;
}
},
};
const parseLogoConfigParam = async (rawConfig) => {
@ -66,7 +61,7 @@ const parseLogoConfigParam = async (rawConfig) => {
}
return false;
}
};
const sendVideoEmbedPage = async ({ params }, res) => {
let {

View file

@ -24,7 +24,7 @@ const getClaimIdByChannel = async (channelName, channelClaimId, claimName) => {
const getClaimId = async (channelName, channelClaimId, name, claimId) => {
logger.debug(`getClaimId: ${channelName}, ${channelClaimId}, ${name}, ${claimId})`);
if (channelName) {
return await getClaimIdByChannel(channelName, channelClaimId, name);
return getClaimIdByChannel(channelName, channelClaimId, name);
} else {
let claimIdResult = await chainquery.claim.queries.getLongClaimId(name, claimId);

View file

@ -182,7 +182,7 @@ function Server () {
.then(() => {
logger.info('Spee.ch startup is complete');
setInterval(processTrending, 30 * 60000) // 30 minutes
setInterval(processTrending, 30 * 60000); // 30 minutes
})
.catch(error => {
if (error.code === 'ECONNREFUSED') {

View file

@ -39,7 +39,7 @@ const autoblockPublishMiddleware = (req, res, next) => {
delete ipCounts[ip];
}
}
}, 600000 /* 10 minute retainer */)
}, 600000 /* 10 minute retainer */);
if (count === 10) {
logger.error(`Banning IP: ${ip}`);
@ -51,7 +51,7 @@ const autoblockPublishMiddleware = (req, res, next) => {
} else {
next();
}
}
};
const autoblockPublishBodyMiddleware = (req, res, next) => {
if (req.body && publishingChannelWhitelist) {
@ -63,7 +63,7 @@ const autoblockPublishBodyMiddleware = (req, res, next) => {
}
}
next();
}
};
module.exports = {
autoblockPublishMiddleware,

View file

@ -15,7 +15,7 @@ function logMetricsMiddleware(req, res, next) {
referrer = /(.*?)#.*/.exec(referrer)[1];
} catch (e) {
// Cheap forced string conversion & clamp
referrer = new String(referrer);
referrer = String(referrer);
referrer = referrer.substr(0, 255);
}
@ -27,7 +27,7 @@ function logMetricsMiddleware(req, res, next) {
db.Metrics.create({
time : Date.now(),
isInternal: /node\-fetch/.test(userAgent),
isInternal: /node-fetch/.test(userAgent),
isChannel : res.isChannel,
claimId : res.claimId,
routePath : httpContext.get('routePath'),

View file

@ -40,7 +40,7 @@ module.exports = (sequelize, { BOOLEAN, DATE, STRING }) => {
params: {
type : STRING,
defaultValue: null,
}
},
},
{
freezeTableName: true,

View file

@ -55,7 +55,7 @@ module.exports = (sequelize, { BOOLEAN, DATE, FLOAT, INTEGER, STRING }) => {
Trending.getTrendingWeightData = async ({
hours = 2,
minutes = 0,
limit = 20
limit = 20,
} = {}) => {
let time = new Date();
time.setHours(time.getHours() - hours);
@ -65,9 +65,9 @@ module.exports = (sequelize, { BOOLEAN, DATE, FLOAT, INTEGER, STRING }) => {
const selectString = 'DISTINCT(claimId), weight';
const whereString = `isChannel = false and time > '${sqlTime}'`;
const query = `SELECT ${selectString} FROM Trending WHERE ${whereString} ORDER BY weight DESC LIMIT ${limit}`
const query = `SELECT ${selectString} FROM Trending WHERE ${whereString} ORDER BY weight DESC LIMIT ${limit}`;
return await sequelize.query(query, { type: sequelize.QueryTypes.SELECT });
return sequelize.query(query, { type: sequelize.QueryTypes.SELECT });
};
Trending.getTrendingClaims = async () => {
@ -77,7 +77,7 @@ module.exports = (sequelize, { BOOLEAN, DATE, FLOAT, INTEGER, STRING }) => {
const trendingClaims = trendingWeightData.reduce((claims, trendingData) => {
trendingClaimIds.push(trendingData.claimId);
claims[trendingData.claimId] = {
...trendingData
...trendingData,
};
return claims;

View file

@ -28,7 +28,7 @@ const getInformationFromValues = (numArr) => {
return {
mean,
standardDeviation: getStandardDeviation(numArr, mean),
}
};
};
const getZScore = (value, mean, sDeviation) => (sDeviation !== 0 ? (value - mean) / sDeviation : 0);
@ -57,7 +57,6 @@ const getFastPValue = (zScore) => {
return sum;
};
const getWeight = (zScore, pValue) => (zScore * pValue);
module.exports = {

View file

@ -59,8 +59,8 @@ module.exports = (sequelize, { BOOLEAN, DATE, STRING }) => {
claimId,
},
distinct: true,
col: 'ip'
})
col : 'ip',
});
};
return Views;

View file

@ -26,8 +26,6 @@ const getTorList = require('../../controllers/api/tor');
const getBlockedList = require('../../controllers/api/blocked');
const getOEmbedData = require('../../controllers/api/oEmbed');
module.exports = {
// homepage routes
'/api/homepage/data/channels' : { controller: [ torCheckMiddleware, channelData ] },

View file

@ -28,5 +28,5 @@ module.exports = async (data) => {
thumbnail : data.generated_thumbnail || data.thumbnail_url || data.thumbnail,
outpoint : data.transaction_hash_id || data.outpoint,
host,
})
}
});
};

View file

@ -3,4 +3,4 @@ module.exports = function(req) {
let host = req.get('host');
return reqIp === '127.0.0.1' || reqIp === '::ffff:127.0.0.1' || reqIp === '::1' || host.indexOf('localhost') !== -1;
}
};

View file

@ -55,4 +55,4 @@ module.exports = async () => {
} catch (e) {
logger.error('Error processing trending content:', e);
}
}
};

8288
yarn.lock

File diff suppressed because it is too large Load diff