diff --git a/.gitignore b/.gitignore index a4bd58a..3b762af 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,13 @@ # See https://help.github.com/ignore-files/ for more about ignoring files. # dependencies -/node_modules +node_modules # testing -/backend/coverage -/frontend/coverage +packages/*/coverage # production -/backend/build -/frontend/build +packages/*/build # misc .DS_Store diff --git a/packages/backend/build/aggregator.js b/packages/backend/build/aggregator.js deleted file mode 100644 index c581435..0000000 --- a/packages/backend/build/aggregator.js +++ /dev/null @@ -1,59 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const EventEmitter = require("events"); -const feed_1 = require("./feed"); -const common_1 = require("@dotstats/common"); -class Aggregator extends EventEmitter { - constructor() { - super(); - this.nodes = new common_1.IdSet(); - this.feeds = new common_1.IdSet(); - this.height = 0; - setInterval(() => this.timeoutCheck(), 10000); - } - addNode(node) { - this.nodes.add(node); - this.broadcast(feed_1.default.addedNode(node)); - node.once('disconnect', () => { - node.removeAllListeners('block'); - this.nodes.remove(node); - this.broadcast(feed_1.default.removedNode(node)); - }); - node.on('block', () => this.updateBlock(node)); - } - addFeed(feed) { - this.feeds.add(feed); - feed.send(feed_1.default.bestBlock(this.height)); - for (const node of this.nodes.entries) { - feed.send(feed_1.default.addedNode(node)); - } - feed.once('disconnect', () => { - this.feeds.remove(feed); - }); - } - nodeList() { - return this.nodes.entries; - } - broadcast(data) { - for (const feed of this.feeds.entries) { - feed.send(data); - } - } - timeoutCheck() { - const now = Date.now(); - for (const node of this.nodes.entries) { - node.timeoutCheck(now); - } - } - updateBlock(node) { - if (node.height > this.height) { - this.height = node.height; - this.broadcast(feed_1.default.bestBlock(this.height)); - console.log(`New block ${this.height}`); - } - this.broadcast(feed_1.default.imported(node)); - console.log(`${node.name} imported ${node.height}, block time: ${node.blockTime / 1000}s, average: ${node.average / 1000}s | latency ${node.latency}`); - } -} -exports.default = Aggregator; -//# sourceMappingURL=aggregator.js.map \ No newline at end of file diff --git a/packages/backend/build/aggregator.js.map b/packages/backend/build/aggregator.js.map deleted file mode 100644 index 50badd7..0000000 --- a/packages/backend/build/aggregator.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"aggregator.js","sourceRoot":"","sources":["../src/aggregator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/backend/build/backend/src/aggregator.js b/packages/backend/build/backend/src/aggregator.js deleted file mode 100644 index 6146921..0000000 --- a/packages/backend/build/backend/src/aggregator.js +++ /dev/null @@ -1,59 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const EventEmitter = require("events"); -const feed_1 = require("./feed"); -const shared_1 = require("@dotstats/shared"); -class Aggregator extends EventEmitter { - constructor() { - super(); - this.nodes = new shared_1.IdSet(); - this.feeds = new shared_1.IdSet(); - this.height = 0; - setInterval(() => this.timeoutCheck(), 10000); - } - addNode(node) { - this.nodes.add(node); - this.broadcast(feed_1.default.addedNode(node)); - node.once('disconnect', () => { - node.removeAllListeners('block'); - this.nodes.remove(node); - this.broadcast(feed_1.default.removedNode(node)); - }); - node.on('block', () => this.updateBlock(node)); - } - addFeed(feed) { - this.feeds.add(feed); - feed.send(feed_1.default.bestBlock(this.height)); - for (const node of this.nodes.entries) { - feed.send(feed_1.default.addedNode(node)); - } - feed.once('disconnect', () => { - this.feeds.remove(feed); - }); - } - nodeList() { - return this.nodes.entries; - } - broadcast(data) { - for (const feed of this.feeds.entries) { - feed.send(data); - } - } - timeoutCheck() { - const now = Date.now(); - for (const node of this.nodes.entries) { - node.timeoutCheck(now); - } - } - updateBlock(node) { - if (node.height > this.height) { - this.height = node.height; - this.broadcast(feed_1.default.bestBlock(this.height)); - console.log(`New block ${this.height}`); - } - this.broadcast(feed_1.default.imported(node)); - console.log(`${node.name} imported ${node.height}, block time: ${node.blockTime / 1000}s, average: ${node.average / 1000}s | latency ${node.latency}`); - } -} -exports.default = Aggregator; -//# sourceMappingURL=aggregator.js.map \ No newline at end of file diff --git a/packages/backend/build/backend/src/aggregator.js.map b/packages/backend/build/backend/src/aggregator.js.map deleted file mode 100644 index 7fafc5e..0000000 --- a/packages/backend/build/backend/src/aggregator.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"aggregator.js","sourceRoot":"","sources":["../../../src/aggregator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/backend/build/backend/src/feed.js b/packages/backend/build/backend/src/feed.js deleted file mode 100644 index f23c696..0000000 --- a/packages/backend/build/backend/src/feed.js +++ /dev/null @@ -1,51 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const EventEmitter = require("events"); -const shared_1 = require("@dotstats/shared"); -const nextId = shared_1.idGenerator(); -function serialize(msg) { - return JSON.stringify(msg); -} -class Feed extends EventEmitter { - constructor(socket) { - super(); - this.id = nextId(); - this.socket = socket; - socket.on('error', () => this.disconnect()); - socket.on('close', () => this.disconnect()); - } - static bestBlock(height) { - return serialize({ - action: 'best', - payload: height - }); - } - static addedNode(node) { - return serialize({ - action: 'added', - payload: [node.id, node.nodeInfo(), node.blockInfo()] - }); - } - static removedNode(node) { - return serialize({ - action: 'removed', - payload: node.id - }); - } - static imported(node) { - return serialize({ - action: 'imported', - payload: [node.id, node.blockInfo()] - }); - } - send(data) { - this.socket.send(data); - } - disconnect() { - this.socket.removeAllListeners(); - this.socket.close(); - this.emit('disconnect'); - } -} -exports.default = Feed; -//# sourceMappingURL=feed.js.map \ No newline at end of file diff --git a/packages/backend/build/backend/src/feed.js.map b/packages/backend/build/backend/src/feed.js.map deleted file mode 100644 index 86d009a..0000000 --- a/packages/backend/build/backend/src/feed.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"feed.js","sourceRoot":"","sources":["../../../src/feed.ts"],"names":[],"mappings":";;AACA,uCAAuC;AAEvC,6CAA2D;AAE3D,MAAM,MAAM,GAAG,oBAAW,EAAQ,CAAC;AAoCnC,mBAAmB,GAAY;IAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAa,CAAC;AAC3C,CAAC;AAED,UAA0B,SAAQ,YAAY;IAK1C,YAAY,MAAiB;QACzB,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAChD,CAAC;IAEM,MAAM,CAAC,SAAS,CAAC,MAAc;QAClC,OAAO,SAAS,CAAC;YACb,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,MAAM;SAClB,CAAC,CAAC;IACP,CAAC;IAEM,MAAM,CAAC,SAAS,CAAC,IAAU;QAC9B,OAAO,SAAS,CAAC;YACb,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;SACxD,CAAC,CAAA;IACN,CAAC;IAEM,MAAM,CAAC,WAAW,CAAC,IAAU;QAChC,OAAO,SAAS,CAAC;YACb,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,IAAI,CAAC,EAAE;SACnB,CAAC,CAAC;IACP,CAAC;IAEM,MAAM,CAAC,QAAQ,CAAC,IAAU;QAC7B,OAAO,SAAS,CAAC;YACb,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;SACvC,CAAC,CAAC;IACP,CAAC;IAEM,IAAI,CAAC,IAAc;QACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAEO,UAAU;QACd,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAEpB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;CACJ;AArDD,uBAqDC"} \ No newline at end of file diff --git a/packages/backend/build/backend/src/index.js b/packages/backend/build/backend/src/index.js deleted file mode 100644 index 9268ae6..0000000 --- a/packages/backend/build/backend/src/index.js +++ /dev/null @@ -1,41 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const WebSocket = require("ws"); -const express = require("express"); -const http_1 = require("http"); -const node_1 = require("./node"); -const feed_1 = require("./feed"); -const aggregator_1 = require("./aggregator"); -const shared_1 = require("@dotstats/shared"); -const aggregator = new aggregator_1.default; -const app = express(); -const server = http_1.createServer(app); -// WebSocket for Nodes feeding telemetry data to the server -const incomingTelemetry = new WebSocket.Server({ port: 1024 }); -// WebSocket for web clients listening to the telemetry data aggregate -const telemetryFeed = new WebSocket.Server({ server }); -app.get('/', function (req, res) { - function nodeInfo(node) { - return `${node.name} | ${node.height} | Block time ${node.blockTime / 1000}s`; - } - res.send(`
-Best block: ${aggregator.height}
-
-Node list:
-${shared_1.join(shared_1.map(aggregator.nodeList(), nodeInfo), '\n')}
-`);
-});
-incomingTelemetry.on('connection', async (socket) => {
- try {
- aggregator.addNode(await node_1.default.fromSocket(socket));
- }
- catch (err) {
- console.error(err);
- }
-});
-telemetryFeed.on('connection', (socket) => {
- aggregator.addFeed(new feed_1.default(socket));
-});
-console.log('Starting server on port 8080');
-server.listen(8080);
-//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/packages/backend/build/backend/src/index.js.map b/packages/backend/build/backend/src/index.js.map
deleted file mode 100644
index a139b4e..0000000
--- a/packages/backend/build/backend/src/index.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";;AAAA,gCAAgC;AAChC,mCAAmC;AACnC,+BAAoC;AACpC,iCAA0B;AAC1B,iCAA0B;AAC1B,6CAAsC;AACtC,6CAA6C;AAE7C,MAAM,UAAU,GAAG,IAAI,oBAAU,CAAC;AAClC,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;AACtB,MAAM,MAAM,GAAG,mBAAY,CAAC,GAAG,CAAC,CAAC;AAEjC,2DAA2D;AAC3D,MAAM,iBAAiB,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAE/D,sEAAsE;AACtE,MAAM,aAAa,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AAEvD,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,EAAE,GAAG;IAC3B,kBAAkB,IAAU;QACxB,OAAO,GAAG,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,MAAM,iBAAiB,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,CAAC;IAClF,CAAC;IAED,GAAG,CAAC,IAAI,CAEZ;cACc,UAAU,CAAC,MAAM;;;EAG5B,aAAI,CAAC,YAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAE;OAC7C,CAEF,CAAC;AACN,CAAC,CAAC,CAAC;AAEH,iBAAiB,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,MAAiB,EAAE,EAAE;IAC3D,IAAI;QACA,UAAU,CAAC,OAAO,CAAC,MAAM,cAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;KACrD;IAAC,OAAO,GAAG,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KACtB;AACL,CAAC,CAAC,CAAC;AAEH,aAAa,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAiB,EAAE,EAAE;IACjD,UAAU,CAAC,OAAO,CAAC,IAAI,cAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC"}
\ No newline at end of file
diff --git a/packages/backend/build/backend/src/message.js b/packages/backend/build/backend/src/message.js
deleted file mode 100644
index 5f7763a..0000000
--- a/packages/backend/build/backend/src/message.js
+++ /dev/null
@@ -1,32 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-function parseMessage(data) {
- try {
- const message = JSON.parse(data.toString());
- if (message && typeof message.msg === 'string' && typeof message.ts === 'string') {
- message.ts = new Date(message.ts);
- return message;
- }
- }
- catch (_) {
- console.warn('Error parsing message JSON');
- }
- return null;
-}
-exports.parseMessage = parseMessage;
-function getBestBlock(message) {
- switch (message.msg) {
- case 'node.start':
- case 'system.interval':
- case 'block.import':
- return message;
- default:
- return null;
- }
-}
-exports.getBestBlock = getBestBlock;
-// received: {"msg":"block.import","level":"INFO","ts":"2018-06-18T17:30:35.285406538+02:00","best":"3d4fdc7960078ddc9be87dddc48324a6d64afdf1f65fffe89529ce9965cd5f29","height":526}
-// received: {"msg":"node.start","level":"INFO","ts":"2018-06-18T17:30:40.038731057+02:00","best":"3d4fdc7960078ddc9be87dddc48324a6d64afdf1f65fffe89529ce9965cd5f29","height":526}
-// received: {"msg":"system.connected","level":"INFO","ts":"2018-06-18T17:30:40.038975471+02:00","chain":"dev","config":"","version":"0.2.0","implementation":"parity-polkadot","name":"Majestic Widget"}
-// received: {"msg":"system.interval","level":"INFO","ts":"2018-06-19T14:00:05.091355364+02:00","txcount":0,"best":"360c9563857308703398f637932b7ffe884e5c7b09692600ff09a4d753c9d948","height":7559,"peers":0,"status":"Idle"}
-//# sourceMappingURL=message.js.map
\ No newline at end of file
diff --git a/packages/backend/build/backend/src/message.js.map b/packages/backend/build/backend/src/message.js.map
deleted file mode 100644
index 1694aa9..0000000
--- a/packages/backend/build/backend/src/message.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/message.ts"],"names":[],"mappings":";;AAGA,sBAA6B,IAAU;IACnC,IAAI;QACA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE5C,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ,EAAE;YAC9E,OAAO,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAElC,OAAO,OAAO,CAAC;SAClB;KACJ;IAAC,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;KAC9C;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAdD,oCAcC;AAED,sBAA6B,OAAgB;IACzC,QAAQ,OAAO,CAAC,GAAG,EAAE;QACjB,KAAK,YAAY,CAAC;QAClB,KAAK,iBAAiB,CAAC;QACvB,KAAK,cAAc;YACf,OAAO,OAAO,CAAC;QACnB;YACI,OAAO,IAAI,CAAC;KACnB;AACL,CAAC;AATD,oCASC;AA8CD,oLAAoL;AACpL,kLAAkL;AAClL,yMAAyM;AACzM,8NAA8N"}
\ No newline at end of file
diff --git a/packages/backend/build/backend/src/node.js b/packages/backend/build/backend/src/node.js
deleted file mode 100644
index f7d0b66..0000000
--- a/packages/backend/build/backend/src/node.js
+++ /dev/null
@@ -1,124 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-const EventEmitter = require("events");
-const shared_1 = require("@dotstats/shared");
-const message_1 = require("./message");
-const BLOCK_TIME_HISTORY = 10;
-const TIMEOUT = 1000 * 60 * 5; // 5 seconds
-const nextId = shared_1.idGenerator();
-class Node extends EventEmitter {
- constructor(socket, name, config, implentation, version) {
- super();
- this.height = 0;
- this.latency = 0;
- this.blockTime = 0;
- this.blockTimes = new Array(BLOCK_TIME_HISTORY);
- this.lastBlockAt = null;
- this.lastMessage = Date.now();
- this.id = nextId();
- this.socket = socket;
- this.name = name;
- this.config = config;
- this.implementation = implentation;
- this.version = version;
- console.log(`Listening to a new node: ${name}`);
- socket.on('message', (data) => {
- const message = message_1.parseMessage(data);
- if (!message)
- return;
- this.lastMessage = Date.now();
- this.updateLatency(message.ts);
- const update = message_1.getBestBlock(message);
- if (update) {
- this.updateBestBlock(update);
- }
- });
- socket.on('close', () => {
- console.log(`${this.name} has disconnected`);
- this.disconnect();
- });
- socket.on('error', (error) => {
- console.error(`${this.name} has errored`, error);
- this.disconnect();
- });
- }
- static fromSocket(socket) {
- return new Promise((resolve, reject) => {
- function cleanup() {
- clearTimeout(timeout);
- socket.removeAllListeners('message');
- }
- function handler(data) {
- const message = message_1.parseMessage(data);
- if (message && message.msg === "system.connected") {
- cleanup();
- const { name, config, implementation, version } = message;
- resolve(new Node(socket, name, config, implementation, version));
- }
- }
- socket.on('message', handler);
- const timeout = setTimeout(() => {
- cleanup();
- socket.close();
- return reject(new Error('Timeout on waiting for system.connected message'));
- }, 5000);
- });
- }
- timeoutCheck(now) {
- if (this.lastMessage + TIMEOUT < now) {
- this.disconnect();
- }
- }
- nodeInfo() {
- return {
- name: this.name,
- };
- }
- blockInfo() {
- return {
- height: this.height,
- blockTime: this.blockTime,
- };
- }
- get average() {
- let accounted = 0;
- let sum = 0;
- for (const time of this.blockTimes) {
- if (time) {
- accounted += 1;
- sum += time;
- }
- }
- if (accounted === 0) {
- return 0;
- }
- return sum / accounted;
- }
- disconnect() {
- this.socket.removeAllListeners();
- this.socket.close();
- this.emit('disconnect');
- }
- updateLatency(time) {
- this.latency = this.lastMessage - +time;
- }
- updateBestBlock(update) {
- const { height, ts: time, best } = update;
- if (this.height < height) {
- const blockTime = this.getBlockTime(time);
- this.height = height;
- this.lastBlockAt = time;
- this.blockTimes[height % BLOCK_TIME_HISTORY] = blockTime;
- this.blockTime = blockTime;
- this.emit('block');
- }
- }
- getBlockTime(time) {
- if (!this.lastBlockAt) {
- return 0;
- }
- return +time - +this.lastBlockAt;
- }
-}
-exports.default = Node;
-//# sourceMappingURL=node.js.map
\ No newline at end of file
diff --git a/packages/backend/build/backend/src/node.js.map b/packages/backend/build/backend/src/node.js.map
deleted file mode 100644
index 906af09..0000000
--- a/packages/backend/build/backend/src/node.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"node.js","sourceRoot":"","sources":["../../../src/node.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/packages/backend/build/feed.js b/packages/backend/build/feed.js
deleted file mode 100644
index 06d6bf6..0000000
--- a/packages/backend/build/feed.js
+++ /dev/null
@@ -1,51 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-const EventEmitter = require("events");
-const common_1 = require("@dotstats/common");
-const nextId = common_1.idGenerator();
-function serialize(msg) {
- return JSON.stringify(msg);
-}
-class Feed extends EventEmitter {
- constructor(socket) {
- super();
- this.id = nextId();
- this.socket = socket;
- socket.on('error', () => this.disconnect());
- socket.on('close', () => this.disconnect());
- }
- static bestBlock(height) {
- return serialize({
- action: 'best',
- payload: height
- });
- }
- static addedNode(node) {
- return serialize({
- action: 'added',
- payload: [node.id, node.nodeInfo(), node.blockInfo()]
- });
- }
- static removedNode(node) {
- return serialize({
- action: 'removed',
- payload: node.id
- });
- }
- static imported(node) {
- return serialize({
- action: 'imported',
- payload: [node.id, node.blockInfo()]
- });
- }
- send(data) {
- this.socket.send(data);
- }
- disconnect() {
- this.socket.removeAllListeners();
- this.socket.close();
- this.emit('disconnect');
- }
-}
-exports.default = Feed;
-//# sourceMappingURL=feed.js.map
\ No newline at end of file
diff --git a/packages/backend/build/feed.js.map b/packages/backend/build/feed.js.map
deleted file mode 100644
index 268bd7c..0000000
--- a/packages/backend/build/feed.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"feed.js","sourceRoot":"","sources":["../src/feed.ts"],"names":[],"mappings":";;AACA,uCAAuC;AAEvC,6CAA2D;AAE3D,MAAM,MAAM,GAAG,oBAAW,EAAQ,CAAC;AAoCnC,mBAAmB,GAAY;IAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAa,CAAC;AAC3C,CAAC;AAED,UAA0B,SAAQ,YAAY;IAK1C,YAAY,MAAiB;QACzB,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAChD,CAAC;IAEM,MAAM,CAAC,SAAS,CAAC,MAAc;QAClC,OAAO,SAAS,CAAC;YACb,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,MAAM;SAClB,CAAC,CAAC;IACP,CAAC;IAEM,MAAM,CAAC,SAAS,CAAC,IAAU;QAC9B,OAAO,SAAS,CAAC;YACb,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;SACxD,CAAC,CAAA;IACN,CAAC;IAEM,MAAM,CAAC,WAAW,CAAC,IAAU;QAChC,OAAO,SAAS,CAAC;YACb,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,IAAI,CAAC,EAAE;SACnB,CAAC,CAAC;IACP,CAAC;IAEM,MAAM,CAAC,QAAQ,CAAC,IAAU;QAC7B,OAAO,SAAS,CAAC;YACb,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;SACvC,CAAC,CAAC;IACP,CAAC;IAEM,IAAI,CAAC,IAAc;QACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAEO,UAAU;QACd,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAEpB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;CACJ;AArDD,uBAqDC"}
\ No newline at end of file
diff --git a/packages/backend/build/index.js b/packages/backend/build/index.js
deleted file mode 100644
index f2ba89b..0000000
--- a/packages/backend/build/index.js
+++ /dev/null
@@ -1,41 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-const WebSocket = require("ws");
-const express = require("express");
-const http_1 = require("http");
-const node_1 = require("./node");
-const feed_1 = require("./feed");
-const aggregator_1 = require("./aggregator");
-const common_1 = require("@dotstats/common");
-const aggregator = new aggregator_1.default;
-const app = express();
-const server = http_1.createServer(app);
-// WebSocket for Nodes feeding telemetry data to the server
-const incomingTelemetry = new WebSocket.Server({ port: 1024 });
-// WebSocket for web clients listening to the telemetry data aggregate
-const telemetryFeed = new WebSocket.Server({ server });
-app.get('/', function (req, res) {
- function nodeInfo(node) {
- return `${node.name} | ${node.height} | Block time ${node.blockTime / 1000}s`;
- }
- res.send(`
-Best block: ${aggregator.height}
-
-Node list:
-${common_1.join(common_1.map(aggregator.nodeList(), nodeInfo), '\n')}
-`);
-});
-incomingTelemetry.on('connection', async (socket) => {
- try {
- aggregator.addNode(await node_1.default.fromSocket(socket));
- }
- catch (err) {
- console.error(err);
- }
-});
-telemetryFeed.on('connection', (socket) => {
- aggregator.addFeed(new feed_1.default(socket));
-});
-console.log('Starting server on port 8080');
-server.listen(8080);
-//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/packages/backend/build/index.js.map b/packages/backend/build/index.js.map
deleted file mode 100644
index b49fdb9..0000000
--- a/packages/backend/build/index.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,gCAAgC;AAChC,mCAAmC;AACnC,+BAAoC;AACpC,iCAA0B;AAC1B,iCAA0B;AAC1B,6CAAsC;AACtC,6CAA6C;AAE7C,MAAM,UAAU,GAAG,IAAI,oBAAU,CAAC;AAClC,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;AACtB,MAAM,MAAM,GAAG,mBAAY,CAAC,GAAG,CAAC,CAAC;AAEjC,2DAA2D;AAC3D,MAAM,iBAAiB,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAE/D,sEAAsE;AACtE,MAAM,aAAa,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AAEvD,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,EAAE,GAAG;IAC3B,kBAAkB,IAAU;QACxB,OAAO,GAAG,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,MAAM,iBAAiB,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,CAAC;IAClF,CAAC;IAED,GAAG,CAAC,IAAI,CAEZ;cACc,UAAU,CAAC,MAAM;;;EAG5B,aAAI,CAAC,YAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAE;OAC7C,CAEF,CAAC;AACN,CAAC,CAAC,CAAC;AAEH,iBAAiB,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,MAAiB,EAAE,EAAE;IAC3D,IAAI;QACA,UAAU,CAAC,OAAO,CAAC,MAAM,cAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;KACrD;IAAC,OAAO,GAAG,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KACtB;AACL,CAAC,CAAC,CAAC;AAEH,aAAa,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAiB,EAAE,EAAE;IACjD,UAAU,CAAC,OAAO,CAAC,IAAI,cAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC"}
\ No newline at end of file
diff --git a/packages/backend/build/message.js b/packages/backend/build/message.js
deleted file mode 100644
index 5f7763a..0000000
--- a/packages/backend/build/message.js
+++ /dev/null
@@ -1,32 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-function parseMessage(data) {
- try {
- const message = JSON.parse(data.toString());
- if (message && typeof message.msg === 'string' && typeof message.ts === 'string') {
- message.ts = new Date(message.ts);
- return message;
- }
- }
- catch (_) {
- console.warn('Error parsing message JSON');
- }
- return null;
-}
-exports.parseMessage = parseMessage;
-function getBestBlock(message) {
- switch (message.msg) {
- case 'node.start':
- case 'system.interval':
- case 'block.import':
- return message;
- default:
- return null;
- }
-}
-exports.getBestBlock = getBestBlock;
-// received: {"msg":"block.import","level":"INFO","ts":"2018-06-18T17:30:35.285406538+02:00","best":"3d4fdc7960078ddc9be87dddc48324a6d64afdf1f65fffe89529ce9965cd5f29","height":526}
-// received: {"msg":"node.start","level":"INFO","ts":"2018-06-18T17:30:40.038731057+02:00","best":"3d4fdc7960078ddc9be87dddc48324a6d64afdf1f65fffe89529ce9965cd5f29","height":526}
-// received: {"msg":"system.connected","level":"INFO","ts":"2018-06-18T17:30:40.038975471+02:00","chain":"dev","config":"","version":"0.2.0","implementation":"parity-polkadot","name":"Majestic Widget"}
-// received: {"msg":"system.interval","level":"INFO","ts":"2018-06-19T14:00:05.091355364+02:00","txcount":0,"best":"360c9563857308703398f637932b7ffe884e5c7b09692600ff09a4d753c9d948","height":7559,"peers":0,"status":"Idle"}
-//# sourceMappingURL=message.js.map
\ No newline at end of file
diff --git a/packages/backend/build/message.js.map b/packages/backend/build/message.js.map
deleted file mode 100644
index e2ef7aa..0000000
--- a/packages/backend/build/message.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"message.js","sourceRoot":"","sources":["../src/message.ts"],"names":[],"mappings":";;AAGA,sBAA6B,IAAU;IACnC,IAAI;QACA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE5C,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ,EAAE;YAC9E,OAAO,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAElC,OAAO,OAAO,CAAC;SAClB;KACJ;IAAC,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;KAC9C;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAdD,oCAcC;AAED,sBAA6B,OAAgB;IACzC,QAAQ,OAAO,CAAC,GAAG,EAAE;QACjB,KAAK,YAAY,CAAC;QAClB,KAAK,iBAAiB,CAAC;QACvB,KAAK,cAAc;YACf,OAAO,OAAO,CAAC;QACnB;YACI,OAAO,IAAI,CAAC;KACnB;AACL,CAAC;AATD,oCASC;AA8CD,oLAAoL;AACpL,kLAAkL;AAClL,yMAAyM;AACzM,8NAA8N"}
\ No newline at end of file
diff --git a/packages/backend/build/node.js b/packages/backend/build/node.js
deleted file mode 100644
index 9184094..0000000
--- a/packages/backend/build/node.js
+++ /dev/null
@@ -1,124 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-const EventEmitter = require("events");
-const common_1 = require("@dotstats/common");
-const message_1 = require("./message");
-const BLOCK_TIME_HISTORY = 10;
-const TIMEOUT = 1000 * 60 * 5; // 5 seconds
-const nextId = common_1.idGenerator();
-class Node extends EventEmitter {
- constructor(socket, name, config, implentation, version) {
- super();
- this.height = 0;
- this.latency = 0;
- this.blockTime = 0;
- this.blockTimes = new Array(BLOCK_TIME_HISTORY);
- this.lastBlockAt = null;
- this.lastMessage = Date.now();
- this.id = nextId();
- this.socket = socket;
- this.name = name;
- this.config = config;
- this.implementation = implentation;
- this.version = version;
- console.log(`Listening to a new node: ${name}`);
- socket.on('message', (data) => {
- const message = message_1.parseMessage(data);
- if (!message)
- return;
- this.lastMessage = Date.now();
- this.updateLatency(message.ts);
- const update = message_1.getBestBlock(message);
- if (update) {
- this.updateBestBlock(update);
- }
- });
- socket.on('close', () => {
- console.log(`${this.name} has disconnected`);
- this.disconnect();
- });
- socket.on('error', (error) => {
- console.error(`${this.name} has errored`, error);
- this.disconnect();
- });
- }
- static fromSocket(socket) {
- return new Promise((resolve, reject) => {
- function cleanup() {
- clearTimeout(timeout);
- socket.removeAllListeners('message');
- }
- function handler(data) {
- const message = message_1.parseMessage(data);
- if (message && message.msg === "system.connected") {
- cleanup();
- const { name, config, implementation, version } = message;
- resolve(new Node(socket, name, config, implementation, version));
- }
- }
- socket.on('message', handler);
- const timeout = setTimeout(() => {
- cleanup();
- socket.close();
- return reject(new Error('Timeout on waiting for system.connected message'));
- }, 5000);
- });
- }
- timeoutCheck(now) {
- if (this.lastMessage + TIMEOUT < now) {
- this.disconnect();
- }
- }
- nodeInfo() {
- return {
- name: this.name,
- };
- }
- blockInfo() {
- return {
- height: this.height,
- blockTime: this.blockTime,
- };
- }
- get average() {
- let accounted = 0;
- let sum = 0;
- for (const time of this.blockTimes) {
- if (time) {
- accounted += 1;
- sum += time;
- }
- }
- if (accounted === 0) {
- return 0;
- }
- return sum / accounted;
- }
- disconnect() {
- this.socket.removeAllListeners();
- this.socket.close();
- this.emit('disconnect');
- }
- updateLatency(time) {
- this.latency = this.lastMessage - +time;
- }
- updateBestBlock(update) {
- const { height, ts: time, best } = update;
- if (this.height < height) {
- const blockTime = this.getBlockTime(time);
- this.height = height;
- this.lastBlockAt = time;
- this.blockTimes[height % BLOCK_TIME_HISTORY] = blockTime;
- this.blockTime = blockTime;
- this.emit('block');
- }
- }
- getBlockTime(time) {
- if (!this.lastBlockAt) {
- return 0;
- }
- return +time - +this.lastBlockAt;
- }
-}
-exports.default = Node;
-//# sourceMappingURL=node.js.map
\ No newline at end of file
diff --git a/packages/backend/build/node.js.map b/packages/backend/build/node.js.map
deleted file mode 100644
index 3f8acca..0000000
--- a/packages/backend/build/node.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":";;AACA,uCAAuC;AACvC,6CAA0D;AAC1D,uCAA2E;AAE3E,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,YAAY;AAE3C,MAAM,MAAM,GAAG,oBAAW,EAAQ,CAAC;AAWnC,UAA0B,SAAQ,YAAY;IAe1C,YAAY,MAAiB,EAAE,IAAY,EAAE,MAAc,EAAE,YAAoB,EAAE,OAAe;QAC9F,KAAK,EAAE,CAAC;QAVL,WAAM,GAAW,CAAC,CAAC;QAEnB,YAAO,GAAW,CAAC,CAAC;QACpB,cAAS,GAAW,CAAC,CAAC;QAGrB,eAAU,GAAkB,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC1D,gBAAW,GAAgB,IAAI,CAAC;QAKpC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,YAAY,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;QAEhD,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;YAC1B,MAAM,OAAO,GAAG,sBAAY,CAAC,IAAI,CAAC,CAAC;YAEnC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAErB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC9B,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAE/B,MAAM,MAAM,GAAG,sBAAY,CAAC,OAAO,CAAC,CAAC;YAErC,IAAI,MAAM,EAAE;gBACR,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;aAChC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACpB,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,mBAAmB,CAAC,CAAC;YAE7C,IAAI,CAAC,UAAU,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACzB,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,cAAc,EAAE,KAAK,CAAC,CAAC;YAEjD,IAAI,CAAC,UAAU,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,MAAM,CAAC,UAAU,CAAC,MAAiB;QACtC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC;gBACI,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;YACzC,CAAC;YAED,iBAAiB,IAAoB;gBACjC,MAAM,OAAO,GAAG,sBAAY,CAAC,IAAI,CAAC,CAAC;gBAEnC,IAAI,OAAO,IAAI,OAAO,CAAC,GAAG,KAAK,kBAAkB,EAAE;oBAC/C,OAAO,EAAE,CAAC;oBAEV,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;oBAE1D,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;iBACpE;YACL,CAAC;YAED,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAE9B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,OAAO,EAAE,CAAC;gBAEV,MAAM,CAAC,KAAK,EAAE,CAAC;gBAEf,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC,CAAC;YAChF,CAAC,EAAE,IAAI,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,YAAY,CAAC,GAAW;QAC3B,IAAI,IAAI,CAAC,WAAW,GAAG,OAAO,GAAG,GAAG,EAAE;YAClC,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;IACL,CAAC;IAEM,QAAQ;QACX,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,IAAI;SAClB,CAAC;IACN,CAAC;IAEM,SAAS;QACZ,OAAO;YACH,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC5B,CAAC;IACN,CAAC;IAED,IAAW,OAAO;QACd,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,GAAG,GAAG,CAAC,CAAC;QAEZ,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;YAChC,IAAI,IAAI,EAAE;gBACN,SAAS,IAAI,CAAC,CAAC;gBACf,GAAG,IAAI,IAAI,CAAC;aACf;SACJ;QAED,IAAI,SAAS,KAAK,CAAC,EAAE;YACjB,OAAO,CAAC,CAAC;SACZ;QAED,OAAO,GAAG,GAAG,SAAS,CAAC;IAC3B,CAAC;IAIO,UAAU;QACd,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAEpB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;IAEO,aAAa,CAAC,IAAU;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC;IAC5C,CAAC;IAEO,eAAe,CAAC,MAAiB;QACrC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;QAE1C,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE;YACtB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAE1C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,kBAAkB,CAAC,GAAG,SAAS,CAAC;YACzD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAE3B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACtB;IACL,CAAC;IAEO,YAAY,CAAC,IAAU;QAC3B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB,OAAO,CAAC,CAAC;SACZ;QAED,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;IACrC,CAAC;CACJ;AA/JD,uBA+JC"}
\ No newline at end of file
diff --git a/packages/backend/build/shared/src/id.js b/packages/backend/build/shared/src/id.js
deleted file mode 100644
index 3e1b124..0000000
--- a/packages/backend/build/shared/src/id.js
+++ /dev/null
@@ -1,26 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * Higher order function producing new auto-incremented `Id`s.
- */
-function idGenerator() {
- let current = 0;
- return () => current++;
-}
-exports.idGenerator = idGenerator;
-class IdSet {
- constructor() {
- this.map = new Map();
- }
- add(item) {
- this.map.set(item.id, item);
- }
- remove(item) {
- this.map.delete(item.id);
- }
- get entries() {
- return this.map.values();
- }
-}
-exports.IdSet = IdSet;
-//# sourceMappingURL=id.js.map
\ No newline at end of file
diff --git a/packages/backend/build/shared/src/id.js.map b/packages/backend/build/shared/src/id.js.map
deleted file mode 100644
index cd26c14..0000000
--- a/packages/backend/build/shared/src/id.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"id.js","sourceRoot":"","sources":["../../../../shared/src/id.ts"],"names":[],"mappings":";;AAOA;;GAEG;AACH;IACI,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,OAAO,GAAG,EAAE,CAAC,OAAO,EAAW,CAAC;AACpC,CAAC;AAJD,kCAIC;AAMD;IAAA;QACY,QAAG,GAAkB,IAAI,GAAG,EAAE,CAAC;IAa3C,CAAC;IAXU,GAAG,CAAC,IAAkB;QACzB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;IAEM,MAAM,CAAC,IAAkB;QAC5B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;IAC7B,CAAC;CACJ;AAdD,sBAcC"}
\ No newline at end of file
diff --git a/packages/backend/build/shared/src/index.js b/packages/backend/build/shared/src/index.js
deleted file mode 100644
index 20ef905..0000000
--- a/packages/backend/build/shared/src/index.js
+++ /dev/null
@@ -1,9 +0,0 @@
-"use strict";
-function __export(m) {
- for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
-}
-Object.defineProperty(exports, "__esModule", { value: true });
-__export(require("./id"));
-__export(require("./iterators"));
-__export(require("./types"));
-//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/packages/backend/build/shared/src/index.js.map b/packages/backend/build/shared/src/index.js.map
deleted file mode 100644
index 1fba37d..0000000
--- a/packages/backend/build/shared/src/index.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../shared/src/index.ts"],"names":[],"mappings":";;;;;AAAA,0BAAqB;AACrB,iCAA4B;AAC5B,6BAAwB"}
\ No newline at end of file
diff --git a/packages/backend/build/shared/src/iterators.js b/packages/backend/build/shared/src/iterators.js
deleted file mode 100644
index 1a01bb7..0000000
--- a/packages/backend/build/shared/src/iterators.js
+++ /dev/null
@@ -1,57 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-function* map(iter, fn) {
- for (const item of iter) {
- yield fn(item);
- }
-}
-exports.map = map;
-function* chain(a, b) {
- yield* a;
- yield* b;
-}
-exports.chain = chain;
-function* zip(a, b) {
- let itemA = a.next();
- let itemB = b.next();
- while (!itemA.done && !itemB.done) {
- yield [itemA.value, itemB.value];
- itemA = a.next();
- itemB = b.next();
- }
-}
-exports.zip = zip;
-function* take(iter, n) {
- for (const item of iter) {
- if (n-- === 0) {
- return;
- }
- yield item;
- }
-}
-exports.take = take;
-function skip(iter, n) {
- while (n-- !== 0 && !iter.next().done) { }
- return iter;
-}
-exports.skip = skip;
-function reduce(iter, fn, accumulator) {
- for (const item of iter) {
- accumulator = fn(accumulator, item);
- }
- return accumulator;
-}
-exports.reduce = reduce;
-function join(iter, glue) {
- const first = iter.next();
- if (first.done) {
- return '';
- }
- let result = first.value.toString();
- for (const item of iter) {
- result += glue + item;
- }
- return result;
-}
-exports.join = join;
-//# sourceMappingURL=iterators.js.map
\ No newline at end of file
diff --git a/packages/backend/build/shared/src/iterators.js.map b/packages/backend/build/shared/src/iterators.js.map
deleted file mode 100644
index 957477e..0000000
--- a/packages/backend/build/shared/src/iterators.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"iterators.js","sourceRoot":"","sources":["../../../../shared/src/iterators.ts"],"names":[],"mappings":";;AAAA,QAAe,CAAC,KAAW,IAAyB,EAAE,EAAkB;IACpE,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;QACrB,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;KAClB;AACL,CAAC;AAJD,kBAIC;AAED,QAAe,CAAC,OAAU,CAAsB,EAAE,CAAsB;IACpE,KAAK,CAAC,CAAC,CAAC,CAAC;IACT,KAAK,CAAC,CAAC,CAAC,CAAC;AACb,CAAC;AAHD,sBAGC;AAED,QAAe,CAAC,KAAW,CAAsB,EAAE,CAAsB;IACrE,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACrB,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAErB,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;QAC/B,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAEjC,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;KACpB;AACL,CAAC;AAVD,kBAUC;AAED,QAAe,CAAC,MAAS,IAAyB,EAAE,CAAS;IACzD,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;QACrB,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE;YACX,OAAO;SACV;QAED,MAAM,IAAI,CAAC;KACd;AACL,CAAC;AARD,oBAQC;AAED,cAAwB,IAAyB,EAAE,CAAS;IACxD,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,GAAE;IAEzC,OAAO,IAAI,CAAC;AAChB,CAAC;AAJD,oBAIC;AAED,gBAA6B,IAAyB,EAAE,EAA2B,EAAE,WAAc;IAC/F,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;QACrB,WAAW,GAAG,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;KACvC;IAED,OAAO,WAAW,CAAC;AACvB,CAAC;AAND,wBAMC;AAED,cAAqB,IAAkD,EAAE,IAAY;IACjF,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAE1B,IAAI,KAAK,CAAC,IAAI,EAAE;QACZ,OAAO,EAAE,CAAC;KACb;IAED,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAEpC,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;QACrB,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC;KACzB;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAdD,oBAcC"}
\ No newline at end of file
diff --git a/packages/backend/build/shared/src/types.js b/packages/backend/build/shared/src/types.js
deleted file mode 100644
index 2abb657..0000000
--- a/packages/backend/build/shared/src/types.js
+++ /dev/null
@@ -1,10 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-/**
- * PhantomData akin to Rust, because sometimes you need to be smarter than
- * the compiler.
- */
-class PhantomData {
-}
-exports.PhantomData = PhantomData;
-//# sourceMappingURL=types.js.map
\ No newline at end of file
diff --git a/packages/backend/build/shared/src/types.js.map b/packages/backend/build/shared/src/types.js.map
deleted file mode 100644
index 9f78d18..0000000
--- a/packages/backend/build/shared/src/types.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../shared/src/types.ts"],"names":[],"mappings":";;AAAA;;;GAGG;AACH;CAAsD;AAAtD,kCAAsD"}
\ No newline at end of file
diff --git a/packages/backend/src/aggregator.ts b/packages/backend/src/aggregator.ts
index be5644c..7261d88 100644
--- a/packages/backend/src/aggregator.ts
+++ b/packages/backend/src/aggregator.ts
@@ -1,13 +1,13 @@
import * as EventEmitter from 'events';
import Node from './node';
import Feed, { FeedData } from './feed';
-import { Id, IdSet } from '@dotstats/common';
+import { Types, IdSet } from '@dotstats/common';
export default class Aggregator extends EventEmitter {
- private nodes: IdSet { private __PHANTOM__: P }
+
+/**
+ * Opaque type, similar to `opaque type` in Flow, or new types in Rust/C.
+ * These should be produced only by manually casting `t as Opaque ;
+
+/**
+ * Just a readable shorthand for null-ish-able types, akin to `T?` in Flow.
+ */
+export type Maybe { private __PHANTOM__: P }
+import { Opaque } from './helpers';
+import { Id } from './id';
-/**
- * Opaque type, similar to `opaque type` in Flow, or new types in Rust/C.
- * These should be produced only by manually casting `t as Opaque ;
+export type FeedId = Id<'Feed'>;
+export type NodeId = Id<'Node'>;
+export type NodeName = Opaque
-
))
}
@@ -85,11 +54,11 @@ export default class App extends React.Component<{}, State> {
);
}
- private nodes(): Array<[Id{node.nodeInfo.name}
- {node.blockInfo.height}
- {node.blockInfo.blockTime / 1000}s
+ {node.nodeDetails.name}
+ {node.blockDetails.height}
+ {node.blockDetails.blockTime / 1000}s