Add chainquery dependencies for Spee.ch, does not include migrations #593
|
@ -12,6 +12,16 @@ export function onHandleShowPageUri (params, url) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function onHandleShowHomepage (params, url) {
|
||||||
|
return {
|
||||||
|
type: actions.HANDLE_SHOW_HOMEPAGE,
|
||||||
|
data: {
|
||||||
|
...params,
|
||||||
|
url,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
export function onRequestError (error) {
|
export function onRequestError (error) {
|
||||||
return {
|
return {
|
||||||
type: actions.REQUEST_ERROR,
|
type: actions.REQUEST_ERROR,
|
||||||
|
|
6
client/src/api/homepageApi.js
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
import Request from '../utils/request';
|
||||||
|
|
||||||
|
export function getHomepageChannelsData (host, name, id) {
|
||||||
|
const url = `${host}/api/homepage/data/channels`;
|
||||||
|
return Request(url);
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
// request actions
|
// request actions
|
||||||
export const HANDLE_SHOW_URI = 'HANDLE_SHOW_URI';
|
export const HANDLE_SHOW_URI = 'HANDLE_SHOW_URI';
|
||||||
|
export const HANDLE_SHOW_HOMEPAGE = 'HANDLE_SHOW_HOMEPAGE';
|
||||||
export const REQUEST_ERROR = 'REQUEST_ERROR';
|
export const REQUEST_ERROR = 'REQUEST_ERROR';
|
||||||
export const REQUEST_UPDATE = 'REQUEST_UPDATE';
|
export const REQUEST_UPDATE = 'REQUEST_UPDATE';
|
||||||
export const ASSET_REQUEST_NEW = 'ASSET_REQUEST_NEW';
|
export const ASSET_REQUEST_NEW = 'ASSET_REQUEST_NEW';
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import { onHandleShowPageUri } from '../../actions/show';
|
import { onHandleShowHomepage } from '../../actions/show';
|
||||||
import View from './view';
|
import View from './view';
|
||||||
|
|
||||||
const mapStateToProps = ({ show }) => {
|
const mapStateToProps = ({ show }) => {
|
||||||
|
@ -10,7 +10,7 @@ const mapStateToProps = ({ show }) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
const mapDispatchToProps = {
|
const mapDispatchToProps = {
|
||||||
onHandleShowPageUri,
|
onHandleShowHomepage,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default connect(mapStateToProps, mapDispatchToProps)(View);
|
export default connect(mapStateToProps, mapDispatchToProps)(View);
|
||||||
|
|
|
@ -4,6 +4,16 @@ import PageLayout from '@components/PageLayout';
|
||||||
import PublishTool from '@containers/PublishTool';
|
import PublishTool from '@containers/PublishTool';
|
||||||
|
|
||||||
class HomePage extends React.Component {
|
class HomePage extends React.Component {
|
||||||
|
componentDidMount () {
|
||||||
|
this.props.onHandleShowHomepage(this.props.match.params);
|
||||||
|
}
|
||||||
|
|
||||||
|
componentWillReceiveProps (nextProps) {
|
||||||
|
if (nextProps.match.params !== this.props.match.params) {
|
||||||
|
this.props.onHandleShowHomepage(nextProps.match.params);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
return (
|
return (
|
||||||
<PageLayout
|
<PageLayout
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { all } from 'redux-saga/effects';
|
import { all } from 'redux-saga/effects';
|
||||||
import { watchHandleShowPageUri } from './show_uri';
|
import { watchHandleShowPageUri, watchHandleShowHomepage } from './show_uri';
|
||||||
import { watchNewAssetRequest } from './show_asset';
|
import { watchNewAssetRequest } from './show_asset';
|
||||||
import { watchNewChannelRequest, watchUpdateChannelClaims } from './show_channel';
|
import { watchNewChannelRequest, watchUpdateChannelClaims } from './show_channel';
|
||||||
import { watchFileIsRequested } from './file';
|
import { watchFileIsRequested } from './file';
|
||||||
|
@ -13,6 +13,7 @@ import { watchChannelLogout } from './logoutChannel';
|
||||||
export function * rootSaga () {
|
export function * rootSaga () {
|
||||||
yield all([
|
yield all([
|
||||||
watchHandleShowPageUri(),
|
watchHandleShowPageUri(),
|
||||||
|
watchHandleShowHomepage(),
|
||||||
watchNewAssetRequest(),
|
watchNewAssetRequest(),
|
||||||
watchNewChannelRequest(),
|
watchNewChannelRequest(),
|
||||||
watchUpdateChannelClaims(),
|
watchUpdateChannelClaims(),
|
||||||
|
|
|
@ -56,6 +56,19 @@ export function * handleShowPageUri (action) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export function * handleShowPageHomepage (action) {
|
||||||
|
const { identifier, claim } = action.data;
|
||||||
|
if (identifier) {
|
||||||
|
return yield call(parseAndUpdateIdentifierAndClaim, identifier, claim);
|
||||||
|
} else if (claim) {
|
||||||
|
yield call(parseAndUpdateClaimOnly, claim);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
export function * watchHandleShowPageUri () {
|
export function * watchHandleShowPageUri () {
|
||||||
yield takeLatest(actions.HANDLE_SHOW_URI, handleShowPageUri);
|
yield takeLatest(actions.HANDLE_SHOW_URI, handleShowPageUri);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export function * watchHandleShowHomepage () {
|
||||||
|
yield takeLatest(actions.HANDLE_SHOW_HOMEPAGE, handleShowPageHomepage);
|
||||||
|
};
|
||||||
|
|
140
package-lock.json
generated
|
@ -6400,6 +6400,23 @@
|
||||||
"buffer-alloc": "1.2.0"
|
"buffer-alloc": "1.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"isemail": {
|
||||||
|
"version": "3.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/isemail/-/isemail-3.1.3.tgz",
|
||||||
|
"integrity": "sha512-5xbsG5wYADIcB+mfLsd+nst1V/D+I7EU7LEZPo2GOIMu4JzfcRs5yQoypP4avA7QtUqgxYLKBYNv4IdzBmbhdw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"punycode": "2.1.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"punycode": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
|
||||||
|
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"isexe": {
|
"isexe": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
||||||
|
@ -6424,6 +6441,25 @@
|
||||||
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
|
||||||
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
|
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
|
||||||
},
|
},
|
||||||
|
"joi": {
|
||||||
|
"version": "13.7.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz",
|
||||||
|
"integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"hoek": "5.0.4",
|
||||||
|
"isemail": "3.1.3",
|
||||||
|
"topo": "3.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"hoek": {
|
||||||
|
"version": "5.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz",
|
||||||
|
"integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"js-base64": {
|
"js-base64": {
|
||||||
"version": "2.4.9",
|
"version": "2.4.9",
|
||||||
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz",
|
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz",
|
||||||
|
@ -12088,6 +12124,12 @@
|
||||||
"is-promise": "2.1.0"
|
"is-promise": "2.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"rx": {
|
||||||
|
"version": "4.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
|
||||||
|
"integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"rx-lite": {
|
"rx-lite": {
|
||||||
"version": "4.0.8",
|
"version": "4.0.8",
|
||||||
"resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
|
"resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
|
||||||
|
@ -13361,6 +13403,23 @@
|
||||||
"repeat-string": "1.6.1"
|
"repeat-string": "1.6.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"topo": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/topo/-/topo-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-Tlu1fGlR90iCdIPURqPiufqAlCZYzLjHYVVbcFWDMcX7+tK8hdZWAfsMrD/pBul9jqHHwFjNdf1WaxA9vTRRhw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"hoek": "5.0.4"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"hoek": {
|
||||||
|
"version": "5.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz",
|
||||||
|
"integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"toposort-class": {
|
"toposort-class": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz",
|
||||||
|
@ -13947,6 +14006,87 @@
|
||||||
"indexof": "0.0.1"
|
"indexof": "0.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"wait-on": {
|
||||||
|
"version": "3.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/wait-on/-/wait-on-3.1.0.tgz",
|
||||||
|
"integrity": "sha512-yjYwMvnOhA3PTghvzPQAmT2TSVvBMbOdBRRjMPfBD6FU5si/PkAsI8P3X5sh9ntkYjZvPQLpQRpDUyax5h4COg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"core-js": "2.5.7",
|
||||||
|
"joi": "13.7.0",
|
||||||
|
"minimist": "1.2.0",
|
||||||
|
"request": "2.88.0",
|
||||||
|
"rx": "4.1.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"core-js": {
|
||||||
|
"version": "2.5.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
|
||||||
|
"integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"har-validator": {
|
||||||
|
"version": "5.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz",
|
||||||
|
"integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ajv": "5.5.2",
|
||||||
|
"har-schema": "2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"minimist": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
|
||||||
|
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"oauth-sign": {
|
||||||
|
"version": "0.9.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
|
||||||
|
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"request": {
|
||||||
|
"version": "2.88.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
|
||||||
|
"integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"aws-sign2": "0.7.0",
|
||||||
|
"aws4": "1.8.0",
|
||||||
|
"caseless": "0.12.0",
|
||||||
|
"combined-stream": "1.0.6",
|
||||||
|
"extend": "3.0.2",
|
||||||
|
"forever-agent": "0.6.1",
|
||||||
|
"form-data": "2.3.2",
|
||||||
|
"har-validator": "5.1.0",
|
||||||
|
"http-signature": "1.2.0",
|
||||||
|
"is-typedarray": "1.0.0",
|
||||||
|
"isstream": "0.1.2",
|
||||||
|
"json-stringify-safe": "5.0.1",
|
||||||
|
"mime-types": "2.1.20",
|
||||||
|
"oauth-sign": "0.9.0",
|
||||||
|
"performance-now": "2.1.0",
|
||||||
|
"qs": "6.5.2",
|
||||||
|
"safe-buffer": "5.1.2",
|
||||||
|
"tough-cookie": "2.4.3",
|
||||||
|
"tunnel-agent": "0.6.0",
|
||||||
|
"uuid": "3.3.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tough-cookie": {
|
||||||
|
"version": "2.4.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
|
||||||
|
"integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"psl": "1.1.29",
|
||||||
|
"punycode": "1.4.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"warning": {
|
"warning": {
|
||||||
"version": "4.0.2",
|
"version": "4.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/warning/-/warning-4.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/warning/-/warning-4.0.2.tgz",
|
||||||
|
|
|
@ -122,6 +122,7 @@
|
||||||
"sass-loader": "^7.1.0",
|
"sass-loader": "^7.1.0",
|
||||||
"sequelize-cli": "^4.0.0",
|
"sequelize-cli": "^4.0.0",
|
||||||
"style-loader": "^0.21.0",
|
"style-loader": "^0.21.0",
|
||||||
"url-loader": "^1.0.1"
|
"url-loader": "^1.0.1",
|
||||||
|
"wait-on": "^3.1.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,12 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var AbnormalClaimModel = (sequelize, {
|
var AbnormalClaimModel = (sequelize, {
|
||||||
STRING, BOOLEAN, INTEGER, TEXT, DECIMAL
|
BOOLEAN,
|
||||||
|
DATE,
|
||||||
|
DECIMAL,
|
||||||
|
INTEGER,
|
||||||
|
STRING,
|
||||||
|
TEXT,
|
||||||
}) => sequelize.define(
|
}) => sequelize.define(
|
||||||
'abnormal_claim',
|
'abnormal_claim',
|
||||||
{
|
{
|
||||||
|
@ -19,7 +24,7 @@ var AbnormalClaimModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
is_update: {
|
is_update: {
|
||||||
type: INTEGER,
|
type: BOOLEAN,
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
block_hash: {
|
block_hash: {
|
||||||
|
@ -47,11 +52,11 @@ var AbnormalClaimModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
created_at: {
|
created_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
modified_at: {
|
modified_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -73,7 +78,12 @@ var abnormalClaimTable = {
|
||||||
};
|
};
|
||||||
|
|
||||||
var AddressModel = (sequelize, {
|
var AddressModel = (sequelize, {
|
||||||
STRING, BOOLEAN, INTEGER, TEXT, DECIMAL
|
BOOLEAN,
|
||||||
|
DATE,
|
||||||
|
DECIMAL,
|
||||||
|
INTEGER,
|
||||||
|
STRING,
|
||||||
|
TEXT,
|
||||||
}) => sequelize.define(
|
}) => sequelize.define(
|
||||||
'address',
|
'address',
|
||||||
{
|
{
|
||||||
|
@ -87,15 +97,15 @@ var AddressModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
first_seen: {
|
first_seen: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
created_at: {
|
created_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
modified_at: {
|
modified_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -117,7 +127,12 @@ var addressTable = {
|
||||||
};
|
};
|
||||||
|
|
||||||
var BlockModel = (sequelize, {
|
var BlockModel = (sequelize, {
|
||||||
STRING, BOOLEAN, INTEGER, TEXT, DECIMAL
|
BOOLEAN,
|
||||||
|
DATE,
|
||||||
|
DECIMAL,
|
||||||
|
INTEGER,
|
||||||
|
STRING,
|
||||||
|
TEXT,
|
||||||
}) => sequelize.define(
|
}) => sequelize.define(
|
||||||
'block',
|
'block',
|
||||||
{
|
{
|
||||||
|
@ -195,11 +210,11 @@ var BlockModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
created_at: {
|
created_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
modified_at: {
|
modified_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -257,7 +272,12 @@ const getterMethods$3 = {
|
||||||
};
|
};
|
||||||
|
|
||||||
var ClaimModel = (sequelize, {
|
var ClaimModel = (sequelize, {
|
||||||
STRING, BOOLEAN, INTEGER, TEXT, DECIMAL
|
BOOLEAN,
|
||||||
|
DATE,
|
||||||
|
DECIMAL,
|
||||||
|
INTEGER,
|
||||||
|
STRING,
|
||||||
|
TEXT,
|
||||||
}) => sequelize.define(
|
}) => sequelize.define(
|
||||||
'claim',
|
'claim',
|
||||||
{
|
{
|
||||||
|
@ -310,14 +330,6 @@ var ClaimModel = (sequelize, {
|
||||||
type: STRING,
|
type: STRING,
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
value_as_hex: {
|
|
||||||
type: STRING,
|
|
||||||
set() { },
|
|
||||||
},
|
|
||||||
value_as_json: {
|
|
||||||
type: STRING,
|
|
||||||
set() { },
|
|
||||||
},
|
|
||||||
valid_at_height: {
|
valid_at_height: {
|
||||||
type: INTEGER,
|
type: INTEGER,
|
||||||
set() { },
|
set() { },
|
||||||
|
@ -343,7 +355,7 @@ var ClaimModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
is_nsfw: {
|
is_nsfw: {
|
||||||
type: INTEGER,
|
type: BOOLEAN,
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
language: {
|
language: {
|
||||||
|
@ -367,7 +379,7 @@ var ClaimModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
is_filtered: {
|
is_filtered: {
|
||||||
type: INTEGER,
|
type: BOOLEAN,
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
bid_state: {
|
bid_state: {
|
||||||
|
@ -375,11 +387,11 @@ var ClaimModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
created_at: {
|
created_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
modified_at: {
|
modified_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
fee_address: {
|
fee_address: {
|
||||||
|
@ -409,7 +421,12 @@ var claimTable = {
|
||||||
};
|
};
|
||||||
|
|
||||||
var InputModel = (sequelize, {
|
var InputModel = (sequelize, {
|
||||||
STRING, BOOLEAN, INTEGER, TEXT, DECIMAL
|
BOOLEAN,
|
||||||
|
DATE,
|
||||||
|
DECIMAL,
|
||||||
|
INTEGER,
|
||||||
|
STRING,
|
||||||
|
TEXT,
|
||||||
}) => sequelize.define(
|
}) => sequelize.define(
|
||||||
'input',
|
'input',
|
||||||
{
|
{
|
||||||
|
@ -431,7 +448,7 @@ var InputModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
is_coinbase: {
|
is_coinbase: {
|
||||||
type: INTEGER,
|
type: BOOLEAN,
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
coinbase: {
|
coinbase: {
|
||||||
|
@ -443,7 +460,7 @@ var InputModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
prevout_n: {
|
prevout_n: {
|
||||||
type: INTEGER,
|
type: INTEGER.UNSIGNED,
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
prevout_spend_updated: {
|
prevout_spend_updated: {
|
||||||
|
@ -467,11 +484,11 @@ var InputModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
created: {
|
created: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
modified: {
|
modified: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -493,7 +510,12 @@ var inputTable = {
|
||||||
};
|
};
|
||||||
|
|
||||||
var OutputModel = (sequelize, {
|
var OutputModel = (sequelize, {
|
||||||
STRING, BOOLEAN, INTEGER, TEXT, DECIMAL
|
BOOLEAN,
|
||||||
|
DATE,
|
||||||
|
DECIMAL,
|
||||||
|
INTEGER,
|
||||||
|
STRING,
|
||||||
|
TEXT,
|
||||||
}) => sequelize.define(
|
}) => sequelize.define(
|
||||||
'output',
|
'output',
|
||||||
{
|
{
|
||||||
|
@ -539,7 +561,7 @@ var OutputModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
is_spent: {
|
is_spent: {
|
||||||
type: INTEGER,
|
type: BOOLEAN,
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
spent_by_input_id: {
|
spent_by_input_id: {
|
||||||
|
@ -547,11 +569,11 @@ var OutputModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
created_at: {
|
created_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
modified_at: {
|
modified_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
claim_id: {
|
claim_id: {
|
||||||
|
@ -577,7 +599,12 @@ var outputTable = {
|
||||||
};
|
};
|
||||||
|
|
||||||
var SupportModel = (sequelize, {
|
var SupportModel = (sequelize, {
|
||||||
STRING, BOOLEAN, INTEGER, TEXT, DECIMAL
|
BOOLEAN,
|
||||||
|
DATE,
|
||||||
|
DECIMAL,
|
||||||
|
INTEGER,
|
||||||
|
STRING,
|
||||||
|
TEXT,
|
||||||
}) => sequelize.define(
|
}) => sequelize.define(
|
||||||
'support',
|
'support',
|
||||||
{
|
{
|
||||||
|
@ -607,11 +634,11 @@ var SupportModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
created_at: {
|
created_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
modified_at: {
|
modified_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -633,7 +660,12 @@ var supportTable = {
|
||||||
};
|
};
|
||||||
|
|
||||||
var TransactionAddressModel = (sequelize, {
|
var TransactionAddressModel = (sequelize, {
|
||||||
STRING, BOOLEAN, INTEGER, TEXT, DECIMAL
|
BOOLEAN,
|
||||||
|
DATE,
|
||||||
|
DECIMAL,
|
||||||
|
INTEGER,
|
||||||
|
STRING,
|
||||||
|
TEXT,
|
||||||
}) => sequelize.define(
|
}) => sequelize.define(
|
||||||
'transaction_address',
|
'transaction_address',
|
||||||
{
|
{
|
||||||
|
@ -674,7 +706,12 @@ var transactionAddressTable = {
|
||||||
};
|
};
|
||||||
|
|
||||||
var TransactionModel = (sequelize, {
|
var TransactionModel = (sequelize, {
|
||||||
STRING, BOOLEAN, INTEGER, TEXT, DECIMAL
|
BOOLEAN,
|
||||||
|
DATE,
|
||||||
|
DECIMAL,
|
||||||
|
INTEGER,
|
||||||
|
STRING,
|
||||||
|
TEXT,
|
||||||
}) => sequelize.define(
|
}) => sequelize.define(
|
||||||
'transaction',
|
'transaction',
|
||||||
{
|
{
|
||||||
|
@ -716,7 +753,7 @@ var TransactionModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
lock_time: {
|
lock_time: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
raw: {
|
raw: {
|
||||||
|
@ -724,15 +761,15 @@ var TransactionModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
created_at: {
|
created_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
modified_at: {
|
modified_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
created_time: {
|
created_time: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() {},
|
set() {},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -820,7 +857,7 @@ var claimQueries = (db, table) => ({
|
||||||
return await table.findAll({
|
return await table.findAll({
|
||||||
where: { publisher_id: channelClaimId },
|
where: { publisher_id: channelClaimId },
|
||||||
order: [['height', 'DESC']],
|
order: [['height', 'DESC']],
|
||||||
raw : true, // returns an array of only data, not an array of instances
|
raw : false, // returns an array of only data, not an array of instances
|
||||||
})
|
})
|
||||||
.then(channelClaimsArray => {
|
.then(channelClaimsArray => {
|
||||||
if(channelClaimsArray.length === 0) {
|
if(channelClaimsArray.length === 0) {
|
||||||
|
|
|
@ -1,7 +1,12 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var AbnormalClaimModel = (sequelize, {
|
var AbnormalClaimModel = (sequelize, {
|
||||||
STRING, BOOLEAN, INTEGER, TEXT, DECIMAL
|
BOOLEAN,
|
||||||
|
DATE,
|
||||||
|
DECIMAL,
|
||||||
|
INTEGER,
|
||||||
|
STRING,
|
||||||
|
TEXT,
|
||||||
}) => sequelize.define(
|
}) => sequelize.define(
|
||||||
'abnormal_claim',
|
'abnormal_claim',
|
||||||
{
|
{
|
||||||
|
@ -19,7 +24,7 @@ var AbnormalClaimModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
is_update: {
|
is_update: {
|
||||||
type: INTEGER,
|
type: BOOLEAN,
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
block_hash: {
|
block_hash: {
|
||||||
|
@ -47,11 +52,11 @@ var AbnormalClaimModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
created_at: {
|
created_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
modified_at: {
|
modified_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -73,7 +78,12 @@ var abnormalClaimTable = {
|
||||||
};
|
};
|
||||||
|
|
||||||
var AddressModel = (sequelize, {
|
var AddressModel = (sequelize, {
|
||||||
STRING, BOOLEAN, INTEGER, TEXT, DECIMAL
|
BOOLEAN,
|
||||||
|
DATE,
|
||||||
|
DECIMAL,
|
||||||
|
INTEGER,
|
||||||
|
STRING,
|
||||||
|
TEXT,
|
||||||
}) => sequelize.define(
|
}) => sequelize.define(
|
||||||
'address',
|
'address',
|
||||||
{
|
{
|
||||||
|
@ -87,15 +97,15 @@ var AddressModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
first_seen: {
|
first_seen: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
created_at: {
|
created_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
modified_at: {
|
modified_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -117,7 +127,12 @@ var addressTable = {
|
||||||
};
|
};
|
||||||
|
|
||||||
var BlockModel = (sequelize, {
|
var BlockModel = (sequelize, {
|
||||||
STRING, BOOLEAN, INTEGER, TEXT, DECIMAL
|
BOOLEAN,
|
||||||
|
DATE,
|
||||||
|
DECIMAL,
|
||||||
|
INTEGER,
|
||||||
|
STRING,
|
||||||
|
TEXT,
|
||||||
}) => sequelize.define(
|
}) => sequelize.define(
|
||||||
'block',
|
'block',
|
||||||
{
|
{
|
||||||
|
@ -195,11 +210,11 @@ var BlockModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
created_at: {
|
created_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
modified_at: {
|
modified_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -257,7 +272,12 @@ const getterMethods$3 = {
|
||||||
};
|
};
|
||||||
|
|
||||||
var ClaimModel = (sequelize, {
|
var ClaimModel = (sequelize, {
|
||||||
STRING, BOOLEAN, INTEGER, TEXT, DECIMAL
|
BOOLEAN,
|
||||||
|
DATE,
|
||||||
|
DECIMAL,
|
||||||
|
INTEGER,
|
||||||
|
STRING,
|
||||||
|
TEXT,
|
||||||
}) => sequelize.define(
|
}) => sequelize.define(
|
||||||
'claim',
|
'claim',
|
||||||
{
|
{
|
||||||
|
@ -310,14 +330,6 @@ var ClaimModel = (sequelize, {
|
||||||
type: STRING,
|
type: STRING,
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
value_as_hex: {
|
|
||||||
type: STRING,
|
|
||||||
set() { },
|
|
||||||
},
|
|
||||||
value_as_json: {
|
|
||||||
type: STRING,
|
|
||||||
set() { },
|
|
||||||
},
|
|
||||||
valid_at_height: {
|
valid_at_height: {
|
||||||
type: INTEGER,
|
type: INTEGER,
|
||||||
set() { },
|
set() { },
|
||||||
|
@ -343,7 +355,7 @@ var ClaimModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
is_nsfw: {
|
is_nsfw: {
|
||||||
type: INTEGER,
|
type: BOOLEAN,
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
language: {
|
language: {
|
||||||
|
@ -367,7 +379,7 @@ var ClaimModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
is_filtered: {
|
is_filtered: {
|
||||||
type: INTEGER,
|
type: BOOLEAN,
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
bid_state: {
|
bid_state: {
|
||||||
|
@ -375,11 +387,11 @@ var ClaimModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
created_at: {
|
created_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
modified_at: {
|
modified_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
fee_address: {
|
fee_address: {
|
||||||
|
@ -409,7 +421,12 @@ var claimTable = {
|
||||||
};
|
};
|
||||||
|
|
||||||
var InputModel = (sequelize, {
|
var InputModel = (sequelize, {
|
||||||
STRING, BOOLEAN, INTEGER, TEXT, DECIMAL
|
BOOLEAN,
|
||||||
|
DATE,
|
||||||
|
DECIMAL,
|
||||||
|
INTEGER,
|
||||||
|
STRING,
|
||||||
|
TEXT,
|
||||||
}) => sequelize.define(
|
}) => sequelize.define(
|
||||||
'input',
|
'input',
|
||||||
{
|
{
|
||||||
|
@ -431,7 +448,7 @@ var InputModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
is_coinbase: {
|
is_coinbase: {
|
||||||
type: INTEGER,
|
type: BOOLEAN,
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
coinbase: {
|
coinbase: {
|
||||||
|
@ -443,7 +460,7 @@ var InputModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
prevout_n: {
|
prevout_n: {
|
||||||
type: INTEGER,
|
type: INTEGER.UNSIGNED,
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
prevout_spend_updated: {
|
prevout_spend_updated: {
|
||||||
|
@ -467,11 +484,11 @@ var InputModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
created: {
|
created: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
modified: {
|
modified: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -493,7 +510,12 @@ var inputTable = {
|
||||||
};
|
};
|
||||||
|
|
||||||
var OutputModel = (sequelize, {
|
var OutputModel = (sequelize, {
|
||||||
STRING, BOOLEAN, INTEGER, TEXT, DECIMAL
|
BOOLEAN,
|
||||||
|
DATE,
|
||||||
|
DECIMAL,
|
||||||
|
INTEGER,
|
||||||
|
STRING,
|
||||||
|
TEXT,
|
||||||
}) => sequelize.define(
|
}) => sequelize.define(
|
||||||
'output',
|
'output',
|
||||||
{
|
{
|
||||||
|
@ -539,7 +561,7 @@ var OutputModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
is_spent: {
|
is_spent: {
|
||||||
type: INTEGER,
|
type: BOOLEAN,
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
spent_by_input_id: {
|
spent_by_input_id: {
|
||||||
|
@ -547,11 +569,11 @@ var OutputModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
created_at: {
|
created_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
modified_at: {
|
modified_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
claim_id: {
|
claim_id: {
|
||||||
|
@ -577,7 +599,12 @@ var outputTable = {
|
||||||
};
|
};
|
||||||
|
|
||||||
var SupportModel = (sequelize, {
|
var SupportModel = (sequelize, {
|
||||||
STRING, BOOLEAN, INTEGER, TEXT, DECIMAL
|
BOOLEAN,
|
||||||
|
DATE,
|
||||||
|
DECIMAL,
|
||||||
|
INTEGER,
|
||||||
|
STRING,
|
||||||
|
TEXT,
|
||||||
}) => sequelize.define(
|
}) => sequelize.define(
|
||||||
'support',
|
'support',
|
||||||
{
|
{
|
||||||
|
@ -607,11 +634,11 @@ var SupportModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
created_at: {
|
created_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
modified_at: {
|
modified_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -633,7 +660,12 @@ var supportTable = {
|
||||||
};
|
};
|
||||||
|
|
||||||
var TransactionAddressModel = (sequelize, {
|
var TransactionAddressModel = (sequelize, {
|
||||||
STRING, BOOLEAN, INTEGER, TEXT, DECIMAL
|
BOOLEAN,
|
||||||
|
DATE,
|
||||||
|
DECIMAL,
|
||||||
|
INTEGER,
|
||||||
|
STRING,
|
||||||
|
TEXT,
|
||||||
}) => sequelize.define(
|
}) => sequelize.define(
|
||||||
'transaction_address',
|
'transaction_address',
|
||||||
{
|
{
|
||||||
|
@ -674,7 +706,12 @@ var transactionAddressTable = {
|
||||||
};
|
};
|
||||||
|
|
||||||
var TransactionModel = (sequelize, {
|
var TransactionModel = (sequelize, {
|
||||||
STRING, BOOLEAN, INTEGER, TEXT, DECIMAL
|
BOOLEAN,
|
||||||
|
DATE,
|
||||||
|
DECIMAL,
|
||||||
|
INTEGER,
|
||||||
|
STRING,
|
||||||
|
TEXT,
|
||||||
}) => sequelize.define(
|
}) => sequelize.define(
|
||||||
'transaction',
|
'transaction',
|
||||||
{
|
{
|
||||||
|
@ -716,7 +753,7 @@ var TransactionModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
lock_time: {
|
lock_time: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
raw: {
|
raw: {
|
||||||
|
@ -724,15 +761,15 @@ var TransactionModel = (sequelize, {
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
created_at: {
|
created_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
modified_at: {
|
modified_at: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
created_time: {
|
created_time: {
|
||||||
type: INTEGER,
|
type: DATE(6),
|
||||||
set() {},
|
set() {},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -799,7 +836,7 @@ const isShortClaimId = (claimId) => {
|
||||||
return (claimId && (claimId.length < 40));
|
return (claimId && (claimId.length < 40));
|
||||||
};
|
};
|
||||||
|
|
||||||
var claimQueries = (db, table) => ({
|
var claimQueries = (db, table, sequelize) => ({
|
||||||
|
|
||||||
getShortClaimIdFromLongClaimId: async (claimId, claimName) => {
|
getShortClaimIdFromLongClaimId: async (claimId, claimName) => {
|
||||||
logger$1.debug(`claim.getShortClaimIdFromLongClaimId for ${claimName}#${claimId}`);
|
logger$1.debug(`claim.getShortClaimIdFromLongClaimId for ${claimName}#${claimId}`);
|
||||||
|
@ -820,7 +857,6 @@ var claimQueries = (db, table) => ({
|
||||||
return await table.findAll({
|
return await table.findAll({
|
||||||
where: { publisher_id: channelClaimId },
|
where: { publisher_id: channelClaimId },
|
||||||
order: [['height', 'DESC']],
|
order: [['height', 'DESC']],
|
||||||
raw : true, // returns an array of only data, not an array of instances
|
|
||||||
})
|
})
|
||||||
.then(channelClaimsArray => {
|
.then(channelClaimsArray => {
|
||||||
if(channelClaimsArray.length === 0) {
|
if(channelClaimsArray.length === 0) {
|
||||||
|
@ -1025,7 +1061,7 @@ if (!database || !username || !password) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// set sequelize options
|
// set sequelize options
|
||||||
const sequelize$1 = new Sequelize(database, username, password, {
|
const sequelize = new Sequelize(database, username, password, {
|
||||||
host : host$1,
|
host : host$1,
|
||||||
import : port,
|
import : port,
|
||||||
dialect : 'mysql',
|
dialect : 'mysql',
|
||||||
|
@ -1049,8 +1085,8 @@ for(let i = 0; i < DATABASE_STRUCTURE_KEYS.length; i++) {
|
||||||
let dbKey = DATABASE_STRUCTURE_KEYS[i];
|
let dbKey = DATABASE_STRUCTURE_KEYS[i];
|
||||||
let currentData = DATABASE_STRUCTURE[dbKey];
|
let currentData = DATABASE_STRUCTURE[dbKey];
|
||||||
|
|
||||||
db[dbKey] = currentData.table.createModel(sequelize$1, Sequelize);
|
db[dbKey] = currentData.table.createModel(sequelize, Sequelize);
|
||||||
db[dbKey].queries = currentData.queries(db, db[dbKey]);
|
db[dbKey].queries = currentData.queries(db, db[dbKey], sequelize);
|
||||||
}
|
}
|
||||||
|
|
||||||
// run model.association for each model in the db object that has an association
|
// run model.association for each model in the db object that has an association
|
||||||
|
@ -1063,7 +1099,7 @@ DATABASE_STRUCTURE_KEYS.forEach(modelName => {
|
||||||
});
|
});
|
||||||
|
|
||||||
// establish mysql connection
|
// establish mysql connection
|
||||||
sequelize$1
|
sequelize
|
||||||
.authenticate()
|
.authenticate()
|
||||||
.then(() => {
|
.then(() => {
|
||||||
logger$2.info('Sequelize has established mysql connection for chainquery successfully.');
|
logger$2.info('Sequelize has established mysql connection for chainquery successfully.');
|
||||||
|
|
|
@ -98,7 +98,7 @@ for(let i = 0; i < DATABASE_STRUCTURE_KEYS.length; i++) {
|
||||||
This table is used for tracking background job statuses internal to chainquery. Most likely not useful for speech. This table is used for tracking background job statuses internal to chainquery. Most likely not useful for speech.
same thing. this is an internal table of no importance to speech. same thing. this is an internal table of no importance to speech.
this is only used for database migrations. Not of use to speech. I would ignore this table. this is only used for database migrations. Not of use to speech. I would ignore this table.
This table is used for tracking background job statuses internal to chainquery. Most likely not useful for speech. This table is used for tracking background job statuses internal to chainquery. Most likely not useful for speech.
same thing. this is an internal table of no importance to speech. same thing. this is an internal table of no importance to speech.
|
|||||||
let currentData = DATABASE_STRUCTURE[dbKey];
|
let currentData = DATABASE_STRUCTURE[dbKey];
|
||||||
|
|
||||||
db[dbKey] = currentData.table.createModel(sequelize, Sequelize);
|
db[dbKey] = currentData.table.createModel(sequelize, Sequelize);
|
||||||
db[dbKey].queries = currentData.queries(db, db[dbKey]);
|
db[dbKey].queries = currentData.queries(db, db[dbKey], sequelize);
|
||||||
this is only used for database migrations. Not of use to speech. I would ignore this table. this is only used for database migrations. Not of use to speech. I would ignore this table.
This table is used for tracking background job statuses internal to chainquery. Most likely not useful for speech. This table is used for tracking background job statuses internal to chainquery. Most likely not useful for speech.
same thing. this is an internal table of no importance to speech. same thing. this is an internal table of no importance to speech.
this is only used for database migrations. Not of use to speech. I would ignore this table. this is only used for database migrations. Not of use to speech. I would ignore this table.
This table is used for tracking background job statuses internal to chainquery. Most likely not useful for speech. This table is used for tracking background job statuses internal to chainquery. Most likely not useful for speech.
same thing. this is an internal table of no importance to speech. same thing. this is an internal table of no importance to speech.
|
|||||||
}
|
}
|
||||||
|
|
||||||
// run model.association for each model in the db object that has an association
|
// run model.association for each model in the db object that has an association
|
||||||
|
|
||||||
this is only used for database migrations. Not of use to speech. I would ignore this table. this is only used for database migrations. Not of use to speech. I would ignore this table.
This table is used for tracking background job statuses internal to chainquery. Most likely not useful for speech. This table is used for tracking background job statuses internal to chainquery. Most likely not useful for speech.
same thing. this is an internal table of no importance to speech. same thing. this is an internal table of no importance to speech.
this is only used for database migrations. Not of use to speech. I would ignore this table. this is only used for database migrations. Not of use to speech. I would ignore this table.
This table is used for tracking background job statuses internal to chainquery. Most likely not useful for speech. This table is used for tracking background job statuses internal to chainquery. Most likely not useful for speech.
same thing. this is an internal table of no importance to speech. same thing. this is an internal table of no importance to speech.
|
|
@ -93,14 +93,6 @@ export default (sequelize, {
|
||||||
This is a boolean that is a This is a boolean that is a `TINYINT(1)` in the database.
This is also an enumeration. I see that you set an enumeration above. Should this be listed as well? This is also an enumeration. I see that you set an enumeration above. Should this be listed as well? `Active,Expired,Controlling,Spent,Accepted` are the enumerations.
This is a boolean that is a This is a boolean that is a `TINYINT(1)` in the database.
This is also an enumeration. I see that you set an enumeration above. Should this be listed as well? This is also an enumeration. I see that you set an enumeration above. Should this be listed as well? `Active,Expired,Controlling,Spent,Accepted` are the enumerations.
|
|||||||
type: STRING,
|
type: STRING,
|
||||||
set() { },
|
set() { },
|
||||||
},
|
},
|
||||||
value_as_hex: {
|
|
||||||
This is a boolean that is a This is a boolean that is a `TINYINT(1)` in the database.
This is also an enumeration. I see that you set an enumeration above. Should this be listed as well? This is also an enumeration. I see that you set an enumeration above. Should this be listed as well? `Active,Expired,Controlling,Spent,Accepted` are the enumerations.
|
|||||||
type: STRING,
|
|
||||||
This is a boolean that is a This is a boolean that is a `TINYINT(1)` in the database.
This is also an enumeration. I see that you set an enumeration above. Should this be listed as well? This is also an enumeration. I see that you set an enumeration above. Should this be listed as well? `Active,Expired,Controlling,Spent,Accepted` are the enumerations.
|
|||||||
set() { },
|
|
||||||
This is a boolean that is a This is a boolean that is a `TINYINT(1)` in the database.
This is also an enumeration. I see that you set an enumeration above. Should this be listed as well? This is also an enumeration. I see that you set an enumeration above. Should this be listed as well? `Active,Expired,Controlling,Spent,Accepted` are the enumerations.
|
|||||||
},
|
|
||||||
This is a boolean that is a This is a boolean that is a `TINYINT(1)` in the database.
This is also an enumeration. I see that you set an enumeration above. Should this be listed as well? This is also an enumeration. I see that you set an enumeration above. Should this be listed as well? `Active,Expired,Controlling,Spent,Accepted` are the enumerations.
|
|||||||
value_as_json: {
|
|
||||||
This is a boolean that is a This is a boolean that is a `TINYINT(1)` in the database.
This is also an enumeration. I see that you set an enumeration above. Should this be listed as well? This is also an enumeration. I see that you set an enumeration above. Should this be listed as well? `Active,Expired,Controlling,Spent,Accepted` are the enumerations.
|
|||||||
type: STRING,
|
|
||||||
This is a boolean that is a This is a boolean that is a `TINYINT(1)` in the database.
This is also an enumeration. I see that you set an enumeration above. Should this be listed as well? This is also an enumeration. I see that you set an enumeration above. Should this be listed as well? `Active,Expired,Controlling,Spent,Accepted` are the enumerations.
|
|||||||
set() { },
|
|
||||||
This is a boolean that is a This is a boolean that is a `TINYINT(1)` in the database.
This is also an enumeration. I see that you set an enumeration above. Should this be listed as well? This is also an enumeration. I see that you set an enumeration above. Should this be listed as well? `Active,Expired,Controlling,Spent,Accepted` are the enumerations.
|
|||||||
},
|
|
||||||
This is a boolean that is a This is a boolean that is a `TINYINT(1)` in the database.
This is also an enumeration. I see that you set an enumeration above. Should this be listed as well? This is also an enumeration. I see that you set an enumeration above. Should this be listed as well? `Active,Expired,Controlling,Spent,Accepted` are the enumerations.
|
|||||||
valid_at_height: {
|
valid_at_height: {
|
||||||
type: INTEGER,
|
type: INTEGER,
|
||||||
set() { },
|
set() { },
|
||||||
|
|
||||||
This is a boolean that is a This is a boolean that is a `TINYINT(1)` in the database.
This is also an enumeration. I see that you set an enumeration above. Should this be listed as well? This is also an enumeration. I see that you set an enumeration above. Should this be listed as well? `Active,Expired,Controlling,Spent,Accepted` are the enumerations.
This is a boolean that is a This is a boolean that is a `TINYINT(1)` in the database.
This is also an enumeration. I see that you set an enumeration above. Should this be listed as well? This is also an enumeration. I see that you set an enumeration above. Should this be listed as well? `Active,Expired,Controlling,Spent,Accepted` are the enumerations.
|
|
@ -32,7 +32,7 @@ const isShortClaimId = (claimId) => {
|
||||||
return (claimId && (claimId.length < 40));
|
return (claimId && (claimId.length < 40));
|
||||||
}
|
}
|
||||||
|
|
||||||
export default (db, table) => ({
|
export default (db, table, sequelize) => ({
|
||||||
|
|
||||||
getShortClaimIdFromLongClaimId: async (claimId, claimName) => {
|
getShortClaimIdFromLongClaimId: async (claimId, claimName) => {
|
||||||
logger.debug(`claim.getShortClaimIdFromLongClaimId for ${claimName}#${claimId}`);
|
logger.debug(`claim.getShortClaimIdFromLongClaimId for ${claimName}#${claimId}`);
|
||||||
|
@ -53,7 +53,6 @@ export default (db, table) => ({
|
||||||
return await table.findAll({
|
return await table.findAll({
|
||||||
where: { publisher_id: channelClaimId },
|
where: { publisher_id: channelClaimId },
|
||||||
order: [['height', 'DESC']],
|
order: [['height', 'DESC']],
|
||||||
raw : true, // returns an array of only data, not an array of instances
|
|
||||||
})
|
})
|
||||||
.then(channelClaimsArray => {
|
.then(channelClaimsArray => {
|
||||||
if(channelClaimsArray.length === 0) {
|
if(channelClaimsArray.length === 0) {
|
||||||
|
|
|
@ -13,7 +13,7 @@ const claimData = ({ ip, originalUrl, body, params }, res) => {
|
||||||
const claimName = params.claimName;
|
const claimName = params.claimName;
|
||||||
let claimId = params.claimId;
|
let claimId = params.claimId;
|
||||||
if (claimId === 'none') claimId = null;
|
if (claimId === 'none') claimId = null;
|
||||||
chainquery.claim.queries.resolveClaim(claimName, claimId)
|
chainquery.claim.queries.resolveClaim(claimName, claimId).catch(() => {})
|
||||||
.then(claimInfo => {
|
.then(claimInfo => {
|
||||||
if (!claimInfo) {
|
if (!claimInfo) {
|
||||||
// Not found remote, try local
|
// Not found remote, try local
|
||||||
|
@ -28,6 +28,7 @@ const claimData = ({ ip, originalUrl, body, params }, res) => {
|
||||||
message: 'No claim could be found',
|
message: 'No claim could be found',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
res.status(200).json({
|
res.status(200).json({
|
||||||
success: true,
|
success: true,
|
||||||
data : getClaimData(claimInfo),
|
data : getClaimData(claimInfo),
|
||||||
|
|
|
@ -4,6 +4,7 @@ const { handleErrorResponse } = require('../../../utils/errorHandlers.js');
|
||||||
const getClaimData = require('server/utils/getClaimData');
|
const getClaimData = require('server/utils/getClaimData');
|
||||||
const chainquery = require('chainquery');
|
const chainquery = require('chainquery');
|
||||||
const db = require('../../../../models');
|
const db = require('../../../../models');
|
||||||
|
const waitOn = require('wait-on');
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
|
@ -11,60 +12,46 @@ const db = require('../../../../models');
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const claimGet = ({ ip, originalUrl, params }, res) => {
|
const claimGet = async ({ ip, originalUrl, params }, res) => {
|
||||||
const name = params.name;
|
const name = params.name;
|
||||||
const claimId = params.claimId;
|
const claimId = params.claimId;
|
||||||
let resolveResult;
|
|
||||||
let getResult;
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
let claimData = await chainquery.claim.queries.resolveClaim(name, claimId).catch(() => {});
|
||||||
|
if(!claimData) {
|
||||||
|
claimData = await db.Claim.resolveClaim(name, claimId);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!claimData) {
|
||||||
|
throw new Error('No matching uri found in Claim table');
|
||||||
|
}
|
||||||
|
|
||||||
chainquery.claim.queries.resolveClaim(name, claimId)
|
let lbrynetResult = await getClaim(`${name}#${claimId}`);
|
||||||
.then(result => {
|
if(!lbrynetResult) {
|
||||||
if (!result) {
|
throw new Error(`Unable to Get ${name}#${claimId}`);
|
||||||
// could not find remote, return false to try local
|
}
|
||||||
return false;
|
|
||||||
}
|
let fileData = await createFileRecordDataAfterGet(getClaimData(claimData), lbrynetResult);
|
||||||
return resolveResult = result;
|
const upsertCriteria = { name, claimId };
|
||||||
})
|
await db.upsert(db.File, fileData, upsertCriteria, 'File');
|
||||||
.then(result => {
|
|
||||||
if (result === false) {
|
try {
|
||||||
// Could not find remote, try local
|
await waitOn({
|
||||||
return db.Claim.resolveClaim(name, claimId);
|
resources: [ lbrynetResult.file_name ],
|
||||||
}
|
delay: 100,
|
||||||
return result;
|
timeout: 10000, // 10 seconds
|
||||||
})
|
|
||||||
.then(result => {
|
|
||||||
if (!result) {
|
|
||||||
throw new Error('No matching uri found in Claim table');
|
|
||||||
}
|
|
||||||
return resolveResult = result;
|
|
||||||
})
|
|
||||||
.then(result => getClaim(`${name}#${claimId}`))
|
|
||||||
.then(result => {
|
|
||||||
if (!result) {
|
|
||||||
throw new Error(`Unable to Get ${name}#${claimId}`);
|
|
||||||
}
|
|
||||||
getResult = result;
|
|
||||||
if (result.completed) {
|
|
||||||
return createFileRecordDataAfterGet(getClaimData(resolveResult), getResult)
|
|
||||||
.then(fileData => {
|
|
||||||
const upsertCriteria = {name, claimId};
|
|
||||||
return db.upsert(db.File, fileData, upsertCriteria, 'File');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.then(() => {
|
|
||||||
const { message, completed } = getResult;
|
|
||||||
res.status(200).json({
|
|
||||||
success: true,
|
|
||||||
message,
|
|
||||||
completed,
|
|
||||||
});
|
});
|
||||||
})
|
} catch (e) {}
|
||||||
.catch(error => {
|
|
||||||
handleErrorResponse(originalUrl, ip, error, res);
|
const { message, completed } = lbrynetResult;
|
||||||
|
res.status(200).json({
|
||||||
|
success: true,
|
||||||
|
message,
|
||||||
|
completed,
|
||||||
});
|
});
|
||||||
|
} catch(error) {
|
||||||
|
handleErrorResponse(originalUrl, ip, error, res);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = claimGet;
|
module.exports = claimGet;
|
||||||
|
|
|
@ -20,14 +20,15 @@ const claimLongId = ({ ip, originalUrl, body, params }, res) => {
|
||||||
const channelClaimId = body.channelClaimId;
|
const channelClaimId = body.channelClaimId;
|
||||||
const claimName = body.claimName;
|
const claimName = body.claimName;
|
||||||
let claimId = body.claimId;
|
let claimId = body.claimId;
|
||||||
|
|
||||||
getClaimId(channelName, channelClaimId, claimName, claimId)
|
getClaimId(channelName, channelClaimId, claimName, claimId)
|
||||||
.then(fullClaimId => {
|
.then(fullClaimId => {
|
||||||
claimId = fullClaimId;
|
claimId = fullClaimId;
|
||||||
return chainquery.claim.queries.getOutpoint(claimName, fullClaimId);
|
return chainquery.claim.queries.getOutpoint(claimName, fullClaimId).catch(() => {});
|
||||||
})
|
})
|
||||||
.then(outpointResult => {
|
.then(outpointResult => {
|
||||||
if (!outpointResult) {
|
if (!outpointResult) {
|
||||||
return db.Claim.getOutpoint(claimName, fullClaimId);
|
return db.Claim.getOutpoint(claimName, claimId);
|
||||||
}
|
}
|
||||||
return outpointResult;
|
return outpointResult;
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
const { handleErrorResponse } = require('../../../utils/errorHandlers.js');
|
const { handleErrorResponse } = require('../../../utils/errorHandlers.js');
|
||||||
const db = require('../../../../models');
|
const db = require('../../../../models');
|
||||||
|
const chainquery = require('chainquery');
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
|
@ -7,14 +8,18 @@ const db = require('../../../../models');
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const claimShortId = ({ ip, originalUrl, body, params }, res) => {
|
const claimShortId = async ({ ip, originalUrl, body, params }, res) => {
|
||||||
db.Claim.getShortClaimIdFromLongClaimId(params.longId, params.name)
|
try {
|
||||||
.then(shortId => {
|
let shortId = await chainquery.claim.queries.getShortClaimIdFromLongClaimId(params.longId, params.name);
|
||||||
res.status(200).json({success: true, data: shortId});
|
|
||||||
})
|
if(shortId === null) {
|
||||||
.catch(error => {
|
shortId = await db.Claim.getShortClaimIdFromLongClaimId(params.longId, params.name);
|
||||||
handleErrorResponse(originalUrl, ip, error, res);
|
}
|
||||||
});
|
|
||||||
|
res.status(200).json({success: true, data: shortId});
|
||||||
|
} catch(error) {
|
||||||
|
handleErrorResponse(originalUrl, ip, error, res);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = claimShortId;
|
module.exports = claimShortId;
|
||||||
|
|
28
server/controllers/api/homepage/data/getChannelData.js
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
const db = require('../../../../models');
|
||||||
|
|
||||||
|
const getChannelData = (channelName, channelClaimId) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
let longChannelClaimId;
|
||||||
|
// 1. get the long channel Id (make sure channel exists)
|
||||||
|
db.Certificate
|
||||||
|
.getLongChannelId(channelName, channelClaimId)
|
||||||
|
.then(fullClaimId => {
|
||||||
|
longChannelClaimId = fullClaimId;
|
||||||
|
return db
|
||||||
|
.Certificate
|
||||||
|
.getShortChannelIdFromLongChannelId(fullClaimId, channelName);
|
||||||
|
})
|
||||||
|
.then(shortChannelClaimId => {
|
||||||
|
resolve({
|
||||||
|
channelName,
|
||||||
|
longChannelClaimId,
|
||||||
|
shortChannelClaimId,
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
reject(error);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = getChannelData;
|
35
server/controllers/api/homepage/data/index.js
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
const { handleErrorResponse } = require('../../../utils/errorHandlers.js');
|
||||||
|
|
||||||
|
const getChannelData = require('./getChannelData.js');
|
||||||
|
|
||||||
|
const NO_CHANNEL = 'NO_CHANNEL';
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
route to get data for a channel
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
const channelData = ({ ip, originalUrl, body, params }, res) => {
|
||||||
|
const channelName = params.channelName;
|
||||||
|
let channelClaimId = params.channelClaimId;
|
||||||
|
if (channelClaimId === 'none') channelClaimId = null;
|
||||||
|
getChannelData(channelName, channelClaimId)
|
||||||
|
.then(data => {
|
||||||
|
res.status(200).json({
|
||||||
|
success: true,
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
if (error === NO_CHANNEL) {
|
||||||
|
return res.status(404).json({
|
||||||
|
success: false,
|
||||||
|
message: 'No matching channel was found',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
handleErrorResponse(originalUrl, ip, error, res);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = channelData;
|
|
@ -1,6 +1,7 @@
|
||||||
const logger = require('winston');
|
const logger = require('winston');
|
||||||
|
|
||||||
const db = require('../../../models');
|
const db = require('../../../models');
|
||||||
|
const chainquery = require('chainquery');
|
||||||
|
|
||||||
const getClaimId = require('../../utils/getClaimId.js');
|
const getClaimId = require('../../utils/getClaimId.js');
|
||||||
const { handleErrorResponse } = require('../../utils/errorHandlers.js');
|
const { handleErrorResponse } = require('../../utils/errorHandlers.js');
|
||||||
|
@ -16,8 +17,13 @@ const getClaimIdAndServeAsset = (channelName, channelClaimId, claimName, claimId
|
||||||
getClaimId(channelName, channelClaimId, claimName, claimId)
|
getClaimId(channelName, channelClaimId, claimName, claimId)
|
||||||
.then(fullClaimId => {
|
.then(fullClaimId => {
|
||||||
claimId = fullClaimId;
|
claimId = fullClaimId;
|
||||||
logger.debug('Full claim id:', fullClaimId);
|
return chainquery.claim.queries.getOutpoint(claimName, fullClaimId).catch(() => {});
|
||||||
return db.Claim.getOutpoint(claimName, fullClaimId);
|
})
|
||||||
|
.then(outpointResult => {
|
||||||
|
if (!outpointResult) {
|
||||||
|
return db.Claim.getOutpoint(claimName, claimId);
|
||||||
|
}
|
||||||
|
return outpointResult;
|
||||||
})
|
})
|
||||||
.then(outpoint => {
|
.then(outpoint => {
|
||||||
logger.debug('Outpoint:', outpoint);
|
logger.debug('Outpoint:', outpoint);
|
||||||
|
|
|
@ -1,22 +1,38 @@
|
||||||
const logger = require('winston');
|
const logger = require('winston');
|
||||||
|
|
||||||
const db = require('../../models');
|
const db = require('../../models');
|
||||||
|
const chainquery = require('chainquery');
|
||||||
|
|
||||||
const getClaimIdByChannel = (channelName, channelClaimId, claimName) => {
|
const getClaimIdByChannel = async (channelName, channelClaimId, claimName) => {
|
||||||
logger.debug(`getClaimIdByChannel(${channelName}, ${channelClaimId}, ${claimName})`);
|
logger.debug(`getClaimIdByChannel(${channelName}, ${channelClaimId}, ${claimName})`);
|
||||||
return db.Certificate
|
|
||||||
.getLongChannelId(channelName, channelClaimId)
|
let channelId = await chainquery.claim.queries.getLongClaimIdFromShortClaimId(channelName, channelClaimId);
|
||||||
.then(longChannelId => {
|
|
||||||
return db.Claim.getClaimIdByLongChannelId(longChannelId, claimName);
|
if(channelId === null) {
|
||||||
});
|
channelId = await db.Certificate.getLongChannelId(channelName, channelClaimId);
|
||||||
|
}
|
||||||
|
|
||||||
|
let claimId = await chainquery.claim.queries.getClaimIdByLongChannelId(longChannelId, claimName);
|
||||||
|
|
||||||
|
if(claimId === null) {
|
||||||
|
claimId = db.Claim.getClaimIdByLongChannelId(longChannelId, claimName);
|
||||||
|
}
|
||||||
|
|
||||||
|
return claimId;
|
||||||
};
|
};
|
||||||
|
|
||||||
const getClaimId = (channelName, channelClaimId, name, claimId) => {
|
const getClaimId = async (channelName, channelClaimId, name, claimId) => {
|
||||||
logger.debug(`getClaimId: ${channelName}, ${channelClaimId}, ${name}, ${claimId})`);
|
logger.debug(`getClaimId: ${channelName}, ${channelClaimId}, ${name}, ${claimId})`);
|
||||||
if (channelName) {
|
if (channelName) {
|
||||||
return getClaimIdByChannel(channelName, channelClaimId, name);
|
return await getClaimIdByChannel(channelName, channelClaimId, name);
|
||||||
} else {
|
} else {
|
||||||
return db.Claim.getLongClaimId(name, claimId);
|
let claimIdResult = await chainquery.claim.queries.getLongClaimId(name, claimId);
|
||||||
|
|
||||||
|
if(claimIdResult === null) {
|
||||||
|
claimIdResult = await db.Claim.getLongClaimId(name, claimId);
|
||||||
|
}
|
||||||
|
|
||||||
|
return claimIdResult;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,25 @@ const {
|
||||||
},
|
},
|
||||||
} = require('@config/siteConfig');
|
} = require('@config/siteConfig');
|
||||||
|
|
||||||
|
function logMetricsMiddleware(req, res, next) {
|
||||||
|
res.on('finish', () => {
|
||||||
|
const userAgent = req.get('user-agent');
|
||||||
|
|
||||||
|
db.RequestMetrics.create({
|
||||||
|
isInternal: /node\-fetch/.test(userAgent),
|
||||||
|
routePath: httpContext.get('routePath'),
|
||||||
|
params: JSON.stringify(req.params),
|
||||||
|
ip: req.headers['x-forwarded-for'] || req.connection.remoteAddress,
|
||||||
|
request: req.url,
|
||||||
|
routeData: JSON.stringify(httpContext.get('routeData')),
|
||||||
|
referrer: req.get('referrer'),
|
||||||
|
userAgent,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
|
||||||
function setRouteDataInContextMiddleware(routePath, routeData) {
|
function setRouteDataInContextMiddleware(routePath, routeData) {
|
||||||
return function (req, res, next) {
|
return function (req, res, next) {
|
||||||
httpContext.set('routePath', routePath);
|
httpContext.set('routePath', routePath);
|
||||||
|
@ -97,7 +116,12 @@ function Server () {
|
||||||
let routeMethod = routeData.hasOwnProperty('method') ? routeData.method : 'get';
|
let routeMethod = routeData.hasOwnProperty('method') ? routeData.method : 'get';
|
||||||
let controllers = Array.isArray(routeData.controller) ? routeData.controller : [routeData.controller];
|
let controllers = Array.isArray(routeData.controller) ? routeData.controller : [routeData.controller];
|
||||||
|
|
||||||
app[routeMethod](routePath, setRouteDataInContextMiddleware(routePath, routeData), ...controllers);
|
app[routeMethod](
|
||||||
|
routePath,
|
||||||
|
logMetricsMiddleware,
|
||||||
|
setRouteDataInContextMiddleware(routePath, routeData),
|
||||||
|
...controllers,
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.app = app;
|
this.app = app;
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
const Sequelize = require('sequelize');
|
const Sequelize = require('sequelize');
|
||||||
const logger = require('winston');
|
const logger = require('winston');
|
||||||
|
|
||||||
const Certificate = require('./certificate.js');
|
const Blocked = require('./blocked');
|
||||||
const Channel = require('./channel.js');
|
const Certificate = require('./certificate');
|
||||||
const Claim = require('./claim.js');
|
const Channel = require('./channel');
|
||||||
const File = require('./file.js');
|
const Claim = require('./claim');
|
||||||
const User = require('./user.js');
|
const File = require('./file');
|
||||||
const Blocked = require('./blocked.js');
|
const Metrics = require('./metrics');
|
||||||
const Tor = require('./tor.js');
|
const Tor = require('./tor');
|
||||||
|
const User = require('./user');
|
||||||
|
|
||||||
const {
|
const {
|
||||||
database,
|
database,
|
||||||
|
@ -48,13 +49,14 @@ sequelize
|
||||||
|
|
||||||
// manually add each model to the db object (note: make this dynamic)
|
// manually add each model to the db object (note: make this dynamic)
|
||||||
const db = {};
|
const db = {};
|
||||||
|
db['Blocked'] = sequelize.import('Blocked', Blocked);
|
||||||
db['Certificate'] = sequelize.import('Certificate', Certificate);
|
db['Certificate'] = sequelize.import('Certificate', Certificate);
|
||||||
db['Channel'] = sequelize.import('Channel', Channel);
|
db['Channel'] = sequelize.import('Channel', Channel);
|
||||||
db['Claim'] = sequelize.import('Claim', Claim);
|
db['Claim'] = sequelize.import('Claim', Claim);
|
||||||
db['File'] = sequelize.import('File', File);
|
db['File'] = sequelize.import('File', File);
|
||||||
db['User'] = sequelize.import('User', User);
|
db['Metrics'] = sequelize.import('Metrics', Metrics);
|
||||||
db['Blocked'] = sequelize.import('Blocked', Blocked);
|
|
||||||
db['Tor'] = sequelize.import('Tor', Tor);
|
db['Tor'] = sequelize.import('Tor', Tor);
|
||||||
|
db['User'] = sequelize.import('User', User);
|
||||||
|
|
||||||
// run model.association for each model in the db object that has an association
|
// run model.association for each model in the db object that has an association
|
||||||
logger.info('associating db models...');
|
logger.info('associating db models...');
|
||||||
|
|
53
server/models/metrics.js
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
module.exports = (sequelize, { BOOLEAN, DATE, STRING }) => {
|
||||||
|
const RequestMetrics = sequelize.define(
|
||||||
|
'RequestMetrics',
|
||||||
|
{
|
||||||
|
time: {
|
||||||
|
type: DATE(6),
|
||||||
|
defaultValue: sequelize.NOW,
|
||||||
|
},
|
||||||
|
isInternal: {
|
||||||
|
type: BOOLEAN,
|
||||||
|
},
|
||||||
|
claimId: {
|
||||||
|
type: STRING,
|
||||||
|
defaultValue: null,
|
||||||
|
},
|
||||||
|
ip: {
|
||||||
|
type: STRING,
|
||||||
|
defaultValue: null,
|
||||||
|
},
|
||||||
|
request: {
|
||||||
|
type: STRING,
|
||||||
|
defaultValue: null,
|
||||||
|
},
|
||||||
|
userAgent: {
|
||||||
|
type: STRING,
|
||||||
|
defaultValue: null,
|
||||||
|
},
|
||||||
|
referrer: {
|
||||||
|
type: STRING,
|
||||||
|
defaultValue: null,
|
||||||
|
},
|
||||||
|
routePath: {
|
||||||
|
type: STRING,
|
||||||
|
defaultValue: null,
|
||||||
|
},
|
||||||
|
params: {
|
||||||
|
type: STRING,
|
||||||
|
defaultValue: null,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
freezeTableName: true,
|
||||||
|
timestamps: false, // don't use default timestamps columns
|
||||||
|
indexes: [
|
||||||
|
{
|
||||||
|
fields: ['isInternal', 'isChannel', 'time', 'claimId', 'routePath'],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
return RequestMetrics;
|
||||||
|
};
|
|
@ -22,10 +22,14 @@ const getBlockedList = require('../../controllers/api/blocked');
|
||||||
const getOEmbedData = require('../../controllers/api/oEmbed');
|
const getOEmbedData = require('../../controllers/api/oEmbed');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
// homepage routes
|
||||||
|
'/api/homepage/data/channels': { controller: [ torCheckMiddleware, channelData ] },
|
||||||
|
|
||||||
// channel routes
|
// channel routes
|
||||||
'/api/channel/availability/:name': { controller: [ torCheckMiddleware, channelAvailability ] },
|
'/api/channel/availability/:name': { controller: [ torCheckMiddleware, channelAvailability ] },
|
||||||
'/api/channel/short-id/:longId/:name': { controller: [ torCheckMiddleware, channelShortId ] },
|
'/api/channel/short-id/:longId/:name': { controller: [ torCheckMiddleware, channelShortId ] },
|
||||||
'/api/channel/data/:channelName/:channelClaimId': { controller: [ torCheckMiddleware, channelData ] },
|
'/api/channel/data/:channelName/:channelClaimId': { controller: [ torCheckMiddleware, channelData ] },
|
||||||
|
'/api/channel/data/:channelName/:channelClaimId': { controller: [ torCheckMiddleware, channelData ] },
|
||||||
'/api/channel/claims/:channelName/:channelClaimId/:page': { controller: [ torCheckMiddleware, channelClaims ] },
|
'/api/channel/claims/:channelName/:channelClaimId/:page': { controller: [ torCheckMiddleware, channelClaims ] },
|
||||||
// claim routes
|
// claim routes
|
||||||
'/api/claim/availability/:name': { controller: [ torCheckMiddleware, claimAvailability ] },
|
'/api/claim/availability/:name': { controller: [ torCheckMiddleware, claimAvailability ] },
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
module.exports = {
|
module.exports = {
|
||||||
...require('./pages'),
|
...require('./pages'),
|
||||||
...require('./api'),
|
...require('./api'),
|
||||||
...require('./assets'),
|
|
||||||
...require('./auth'),
|
...require('./auth'),
|
||||||
|
...require('./assets'),
|
||||||
...require('./fallback'),
|
...require('./fallback'),
|
||||||
};
|
};
|
||||||
|
|
|
@ -2,8 +2,12 @@ const handlePageRequest = require('../../controllers/pages/sendReactApp');
|
||||||
const handleVideoEmbedRequest = require('../../controllers/pages/sendVideoEmbedPage');
|
const handleVideoEmbedRequest = require('../../controllers/pages/sendVideoEmbedPage');
|
||||||
const redirect = require('../../controllers/utils/redirect');
|
const redirect = require('../../controllers/utils/redirect');
|
||||||
|
|
||||||
|
// TODO: Adjust build & sources to use import/export everywhere
|
||||||
|
const Actions = require('@actions').default;
|
||||||
|
const Sagas = require('@sagas').default;
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
'/': { controller: handlePageRequest },
|
'/': { controller: handlePageRequest, action: Actions.onHandleShowHomepage, saga: Sagas.handleShowHomepage },
|
||||||
'/login': { controller: handlePageRequest },
|
'/login': { controller: handlePageRequest },
|
||||||
'/about': { controller: handlePageRequest },
|
'/about': { controller: handlePageRequest },
|
||||||
'/trending': { controller: redirect('/popular') },
|
'/trending': { controller: redirect('/popular') },
|
||||||
|
|
this is only used for database migrations. Not of use to speech. I would ignore this table.