block txs partially wired up
This commit is contained in:
parent
8d676886de
commit
1ad21a667c
@ -52,6 +52,7 @@ https://docs.google.com/a/bit-pay.com/spreadsheets/d/1hDlf16F6zAxBrOC3ZdnvfRrSB9
|
|||||||
* Mongo Models : Bcoin primitives. A Bcoin block primitive does not represent all of bitcore's data.
|
* Mongo Models : Bcoin primitives. A Bcoin block primitive does not represent all of bitcore's data.
|
||||||
1. scriptpubkey asm
|
1. scriptpubkey asm
|
||||||
2. peer's best block height is learned on peer connect but not retained by the app. Block height is the current sync height
|
2. peer's best block height is learned on peer connect but not retained by the app. Block height is the current sync height
|
||||||
|
3. Multiple Outputs were overlooked in the mongo model
|
||||||
|
|
||||||
# ToDo but not Required for a release
|
# ToDo but not Required for a release
|
||||||
* Reorg testing - Bcoin will handle this but we need to account for this in our mongo indexes.
|
* Reorg testing - Bcoin will handle this but we need to account for this in our mongo indexes.
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
const config = {
|
const config = {
|
||||||
start_node: false,
|
start_node: true,
|
||||||
logging: 'debug',
|
logging: 'debug',
|
||||||
bcoin: {
|
bcoin: {
|
||||||
network: 'main',
|
network: 'main',
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
const express = require('express');
|
const express = require('express');
|
||||||
const config = require('../../config');
|
const config = require('../../config');
|
||||||
|
|
||||||
|
|
||||||
const app = express();
|
const app = express();
|
||||||
const api = express.Router();
|
const api = express.Router();
|
||||||
@ -28,4 +29,7 @@ app.use((req, res) => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
module.exports = app;
|
const server = require('http').Server(app);
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = server;
|
||||||
|
|||||||
@ -1,7 +1,24 @@
|
|||||||
|
const Block = require('../../models/block.js');
|
||||||
const Transaction = require('../../models/transaction');
|
const Transaction = require('../../models/transaction');
|
||||||
const logger = require('../logger');
|
const logger = require('../logger');
|
||||||
|
|
||||||
const MAX_TXS = 200;
|
const MAX_TXS = 20;
|
||||||
|
const MAX_BLOCKS = 1;
|
||||||
|
|
||||||
|
// Shoe horned in. Not dry, also in blocks. Make db api later
|
||||||
|
function getBlock(params, options, cb) {
|
||||||
|
const defaultOptions = { _id: 0 };
|
||||||
|
|
||||||
|
Object.assign(defaultOptions, options);
|
||||||
|
|
||||||
|
Block.find(
|
||||||
|
params,
|
||||||
|
defaultOptions,
|
||||||
|
cb)
|
||||||
|
.sort({ height: -1 })
|
||||||
|
.limit(MAX_BLOCKS);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function getTransactions(params, options, cb) {
|
function getTransactions(params, options, cb) {
|
||||||
const defaultOptions = { _id: 0 };
|
const defaultOptions = { _id: 0 };
|
||||||
@ -73,17 +90,86 @@ module.exports = function transactionAPI(router) {
|
|||||||
req.query.address;
|
req.query.address;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
if (req.query.block) {
|
||||||
|
getBlock(
|
||||||
|
{ hash: req.query.block },
|
||||||
|
{ rawBlock: 0 },
|
||||||
|
(err, block) => {
|
||||||
|
if (err) {
|
||||||
|
res.status(501).send();
|
||||||
|
logger.log('err', err);
|
||||||
|
}
|
||||||
|
if (block[0]) {
|
||||||
|
const b = block[0];
|
||||||
|
res.json({
|
||||||
|
pagesTotal: 1,
|
||||||
|
txs: b.txs.map(tx => ({
|
||||||
|
txid: tx.hash,
|
||||||
|
version: tx.version,
|
||||||
|
locktime: tx.locktime,
|
||||||
|
vin: tx.inputs.map(input => ({
|
||||||
|
coinbase: input.script,
|
||||||
|
sequence: input.sequence,
|
||||||
|
n: 0,
|
||||||
|
})),
|
||||||
|
vout: tx.outputs.map(output => ({
|
||||||
|
value: output.value / 1e8,
|
||||||
|
n: 0,
|
||||||
|
scriptPubKey: {
|
||||||
|
hex: '',
|
||||||
|
asm: '',
|
||||||
|
addresses: [output.address],
|
||||||
|
type: output.type,
|
||||||
|
},
|
||||||
|
spentTxid: '',
|
||||||
|
spentIndex: 0,
|
||||||
|
spentHeight: 0,
|
||||||
|
})),
|
||||||
|
})),
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
res.send();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (req.query.address) {
|
||||||
|
|
||||||
getTransactions(
|
} else {
|
||||||
{},
|
getTransactions(
|
||||||
{},
|
{},
|
||||||
(err, txs) => {
|
{},
|
||||||
if (err) {
|
(err, txs) => {
|
||||||
res.status(501).send();
|
if (err) {
|
||||||
}
|
res.status(501).send();
|
||||||
res.send(txs);
|
}
|
||||||
},
|
res.json({
|
||||||
);
|
pagesTotal: 1,
|
||||||
|
txs: txs.map(tx => ({
|
||||||
|
txid: tx.hash,
|
||||||
|
version: tx.version,
|
||||||
|
locktime: tx.locktime,
|
||||||
|
vin: tx.inputs.map(input => ({
|
||||||
|
coinbase: input.script,
|
||||||
|
sequence: input.sequence,
|
||||||
|
n: 0,
|
||||||
|
})),
|
||||||
|
vout: tx.outputs.map(output => ({
|
||||||
|
value: output.value,
|
||||||
|
n: 0,
|
||||||
|
scriptPubKey: {
|
||||||
|
hex: '',
|
||||||
|
asm: '',
|
||||||
|
addresses: [output.address],
|
||||||
|
type: output.type,
|
||||||
|
},
|
||||||
|
spentTxid: '',
|
||||||
|
spentIndex: 0,
|
||||||
|
spentHeight: 0,
|
||||||
|
})),
|
||||||
|
})),
|
||||||
|
});
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/rawtx/:txid', (req, res) => {
|
router.get('/rawtx/:txid', (req, res) => {
|
||||||
|
|||||||
@ -11,7 +11,7 @@ function parse(entry, txs) {
|
|||||||
|
|
||||||
tx.outputs.forEach((output) => {
|
tx.outputs.forEach((output) => {
|
||||||
const outputJSON = output.toJSON();
|
const outputJSON = output.toJSON();
|
||||||
console.log(outputJSON);
|
//console.log(outputJSON);
|
||||||
/*
|
/*
|
||||||
return new OutputModel({
|
return new OutputModel({
|
||||||
address: outputJSON.address,
|
address: outputJSON.address,
|
||||||
@ -22,7 +22,7 @@ function parse(entry, txs) {
|
|||||||
|
|
||||||
tx.inputs.forEach((input) => {
|
tx.inputs.forEach((input) => {
|
||||||
const inputJSON = input.toJSON();
|
const inputJSON = input.toJSON();
|
||||||
console.log(inputJSON);
|
//console.log(inputJSON);
|
||||||
/* return new InputModel({
|
/* return new InputModel({
|
||||||
prevout: inputJSON.prevout,
|
prevout: inputJSON.prevout,
|
||||||
script: inputJSON.script,
|
script: inputJSON.script,
|
||||||
|
|||||||
@ -1,4 +1,6 @@
|
|||||||
const BlockModel = require('../../models/block');
|
const BlockModel = require('../../models/block');
|
||||||
|
const InputModel = require('../../models/input');
|
||||||
|
const OutputModel = require('../../models/output');
|
||||||
const config = require('../../config');
|
const config = require('../../config');
|
||||||
const util = require('../../lib/util');
|
const util = require('../../lib/util');
|
||||||
const logger = require('../logger');
|
const logger = require('../logger');
|
||||||
@ -19,12 +21,48 @@ function parse(entry, block) {
|
|||||||
ts: blockJSON.ts,
|
ts: blockJSON.ts,
|
||||||
bits: blockJSON.bits,
|
bits: blockJSON.bits,
|
||||||
nonce: blockJSON.nonce,
|
nonce: blockJSON.nonce,
|
||||||
txs: block.txs.map(tx => util.revHex(tx.hash().toString('hex'))),
|
txs: block.txs.map((tx) => {
|
||||||
|
const txJSON = tx.toJSON();
|
||||||
|
return {
|
||||||
|
hash: txJSON.hash,
|
||||||
|
witnessHash: txJSON.witnessHash,
|
||||||
|
fee: txJSON.fee,
|
||||||
|
rate: txJSON.rate,
|
||||||
|
ps: txJSON.ps,
|
||||||
|
height: entry.height,
|
||||||
|
block: util.revHex(entry.hash),
|
||||||
|
ts: entry.ts,
|
||||||
|
date: txJSON.date,
|
||||||
|
index: txJSON.index,
|
||||||
|
version: txJSON.version,
|
||||||
|
flag: txJSON.flag,
|
||||||
|
inputs: tx.inputs.map((input) => {
|
||||||
|
const inputJSON = input.toJSON();
|
||||||
|
return new InputModel({
|
||||||
|
prevout: inputJSON.prevout,
|
||||||
|
script: inputJSON.script,
|
||||||
|
witness: inputJSON.witness,
|
||||||
|
sequence: inputJSON.sequence,
|
||||||
|
address: inputJSON.address,
|
||||||
|
});
|
||||||
|
}),
|
||||||
|
outputs: tx.outputs.map((output) => {
|
||||||
|
const outputJSON = output.toJSON();
|
||||||
|
return new OutputModel({
|
||||||
|
address: outputJSON.address,
|
||||||
|
script: outputJSON.script,
|
||||||
|
value: outputJSON.value,
|
||||||
|
});
|
||||||
|
}),
|
||||||
|
lockTime: txJSON.locktime,
|
||||||
|
chain: config.bcoin.network,
|
||||||
|
};
|
||||||
|
}),
|
||||||
chainwork: entry.chainwork,
|
chainwork: entry.chainwork,
|
||||||
reward: reward,
|
reward,
|
||||||
network: config.bcoin.network,
|
network: config.bcoin.network,
|
||||||
poolInfo: {},
|
poolInfo: {},
|
||||||
rawBlock: rawBlock,
|
rawBlock,
|
||||||
});
|
});
|
||||||
|
|
||||||
newBlock.save((err) => {
|
newBlock.save((err) => {
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
const mongoose = require('mongoose');
|
const mongoose = require('mongoose');
|
||||||
|
const Transaction = require('./transaction');
|
||||||
|
|
||||||
const Schema = mongoose.Schema;
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
@ -12,7 +13,7 @@ const BlockSchema = new Schema({
|
|||||||
ts: Number,
|
ts: Number,
|
||||||
bits: Number,
|
bits: Number,
|
||||||
nonce: Number,
|
nonce: Number,
|
||||||
txs: Array,
|
txs: [Transaction.schema],
|
||||||
chainwork: Number,
|
chainwork: Number,
|
||||||
reward: Number,
|
reward: Number,
|
||||||
network: String,
|
network: String,
|
||||||
|
|||||||
107
package-lock.json
generated
107
package-lock.json
generated
@ -95,8 +95,7 @@
|
|||||||
"backo2": {
|
"backo2": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
|
||||||
"integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
|
"integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc="
|
||||||
"optional": true
|
|
||||||
},
|
},
|
||||||
"balanced-match": {
|
"balanced-match": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
@ -112,8 +111,7 @@
|
|||||||
"base64id": {
|
"base64id": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
|
||||||
"integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=",
|
"integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY="
|
||||||
"optional": true
|
|
||||||
},
|
},
|
||||||
"bcoin": {
|
"bcoin": {
|
||||||
"version": "1.0.0-beta.14",
|
"version": "1.0.0-beta.14",
|
||||||
@ -128,6 +126,22 @@
|
|||||||
"secp256k1": "3.2.5",
|
"secp256k1": "3.2.5",
|
||||||
"socket.io": "2.0.1",
|
"socket.io": "2.0.1",
|
||||||
"socket.io-client": "2.0.1"
|
"socket.io-client": "2.0.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"socket.io": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.1.tgz",
|
||||||
|
"integrity": "sha1-BkwSUXhGLkd6bfI9L9rRjdHFkU8=",
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"debug": "2.6.8",
|
||||||
|
"engine.io": "3.1.0",
|
||||||
|
"object-assign": "4.1.1",
|
||||||
|
"socket.io-adapter": "1.1.1",
|
||||||
|
"socket.io-client": "2.0.1",
|
||||||
|
"socket.io-parser": "3.1.2"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"bcoin-native": {
|
"bcoin-native": {
|
||||||
@ -305,8 +319,7 @@
|
|||||||
"component-bind": {
|
"component-bind": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
|
||||||
"integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=",
|
"integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E="
|
||||||
"optional": true
|
|
||||||
},
|
},
|
||||||
"component-emitter": {
|
"component-emitter": {
|
||||||
"version": "1.2.1",
|
"version": "1.2.1",
|
||||||
@ -316,8 +329,7 @@
|
|||||||
"component-inherit": {
|
"component-inherit": {
|
||||||
"version": "0.0.3",
|
"version": "0.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
|
||||||
"integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=",
|
"integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM="
|
||||||
"optional": true
|
|
||||||
},
|
},
|
||||||
"concat-map": {
|
"concat-map": {
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
@ -515,7 +527,6 @@
|
|||||||
"version": "3.1.0",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.0.tgz",
|
||||||
"integrity": "sha1-XKQ4486f28kVxKIcjdnhJmcG5X4=",
|
"integrity": "sha1-XKQ4486f28kVxKIcjdnhJmcG5X4=",
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"accepts": "1.3.3",
|
"accepts": "1.3.3",
|
||||||
"base64id": "1.0.0",
|
"base64id": "1.0.0",
|
||||||
@ -530,7 +541,6 @@
|
|||||||
"version": "3.1.1",
|
"version": "3.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.1.tgz",
|
||||||
"integrity": "sha1-QVqYUrrbFPoAj6PvHjFgjbZ2EyU=",
|
"integrity": "sha1-QVqYUrrbFPoAj6PvHjFgjbZ2EyU=",
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"component-emitter": "1.2.1",
|
"component-emitter": "1.2.1",
|
||||||
"component-inherit": "0.0.3",
|
"component-inherit": "0.0.3",
|
||||||
@ -1373,14 +1383,12 @@
|
|||||||
"object-assign": {
|
"object-assign": {
|
||||||
"version": "4.1.1",
|
"version": "4.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||||
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
|
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
|
||||||
"optional": true
|
|
||||||
},
|
},
|
||||||
"object-component": {
|
"object-component": {
|
||||||
"version": "0.0.3",
|
"version": "0.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
|
||||||
"integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=",
|
"integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE="
|
||||||
"optional": true
|
|
||||||
},
|
},
|
||||||
"on-finished": {
|
"on-finished": {
|
||||||
"version": "2.3.0",
|
"version": "2.3.0",
|
||||||
@ -1432,7 +1440,6 @@
|
|||||||
"version": "0.0.3",
|
"version": "0.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz",
|
||||||
"integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=",
|
"integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=",
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"better-assert": "1.0.2"
|
"better-assert": "1.0.2"
|
||||||
}
|
}
|
||||||
@ -1441,7 +1448,6 @@
|
|||||||
"version": "0.0.5",
|
"version": "0.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
|
||||||
"integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
|
"integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"better-assert": "1.0.2"
|
"better-assert": "1.0.2"
|
||||||
}
|
}
|
||||||
@ -1824,44 +1830,44 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"socket.io": {
|
"socket.io": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.3.tgz",
|
||||||
"integrity": "sha1-BkwSUXhGLkd6bfI9L9rRjdHFkU8=",
|
"integrity": "sha1-Q1nwaiSTOua9CHeYr3jGgOrjReM=",
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"debug": "2.6.8",
|
"debug": "2.6.8",
|
||||||
"engine.io": "3.1.0",
|
"engine.io": "3.1.0",
|
||||||
"object-assign": "4.1.1",
|
"object-assign": "4.1.1",
|
||||||
"socket.io-adapter": "1.1.0",
|
"socket.io-adapter": "1.1.1",
|
||||||
"socket.io-client": "2.0.1",
|
"socket.io-client": "2.0.3",
|
||||||
"socket.io-parser": "3.1.2"
|
"socket.io-parser": "3.1.2"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"socket.io-client": {
|
||||||
|
"version": "2.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.3.tgz",
|
||||||
|
"integrity": "sha1-bK9K/5+FsZ/ZG2zhPWmttWT4hzs=",
|
||||||
|
"requires": {
|
||||||
|
"backo2": "1.0.2",
|
||||||
|
"base64-arraybuffer": "0.1.5",
|
||||||
|
"component-bind": "1.0.0",
|
||||||
|
"component-emitter": "1.2.1",
|
||||||
|
"debug": "2.6.8",
|
||||||
|
"engine.io-client": "3.1.1",
|
||||||
|
"has-cors": "1.1.0",
|
||||||
|
"indexof": "0.0.1",
|
||||||
|
"object-component": "0.0.3",
|
||||||
|
"parseqs": "0.0.5",
|
||||||
|
"parseuri": "0.0.5",
|
||||||
|
"socket.io-parser": "3.1.2",
|
||||||
|
"to-array": "0.1.4"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"socket.io-adapter": {
|
"socket.io-adapter": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz",
|
||||||
"integrity": "sha1-x6pGUB3VVsLLiiivj/lcC14dqkw=",
|
"integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs="
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"debug": "2.3.3"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"debug": {
|
|
||||||
"version": "2.3.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
|
|
||||||
"integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"ms": "0.7.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ms": {
|
|
||||||
"version": "0.7.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
|
|
||||||
"integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=",
|
|
||||||
"optional": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"socket.io-client": {
|
"socket.io-client": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
@ -2041,8 +2047,7 @@
|
|||||||
"to-array": {
|
"to-array": {
|
||||||
"version": "0.1.4",
|
"version": "0.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
|
||||||
"integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=",
|
"integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA="
|
||||||
"optional": true
|
|
||||||
},
|
},
|
||||||
"tough-cookie": {
|
"tough-cookie": {
|
||||||
"version": "2.3.2",
|
"version": "2.3.2",
|
||||||
@ -2197,8 +2202,7 @@
|
|||||||
"xmlhttprequest-ssl": {
|
"xmlhttprequest-ssl": {
|
||||||
"version": "1.5.3",
|
"version": "1.5.3",
|
||||||
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz",
|
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz",
|
||||||
"integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=",
|
"integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0="
|
||||||
"optional": true
|
|
||||||
},
|
},
|
||||||
"xtend": {
|
"xtend": {
|
||||||
"version": "4.0.1",
|
"version": "4.0.1",
|
||||||
@ -2208,8 +2212,7 @@
|
|||||||
"yeast": {
|
"yeast": {
|
||||||
"version": "0.1.2",
|
"version": "0.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
|
||||||
"integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=",
|
"integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk="
|
||||||
"optional": true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,6 +17,7 @@
|
|||||||
"express": "^4.15.3",
|
"express": "^4.15.3",
|
||||||
"mongoose": "^4.11.5",
|
"mongoose": "^4.11.5",
|
||||||
"request": "^2.81.0",
|
"request": "^2.81.0",
|
||||||
|
"socket.io": "^2.0.3",
|
||||||
"winston": "^2.3.1"
|
"winston": "^2.3.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user