UNPKG

simonflex-framework

Version:

A library implements Meter Flex interface

68 lines 5.15 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); function newHeadTracker(driver) { let head = Object.assign({}, driver.head); let resolvers = []; (() => __awaiter(this, void 0, void 0, function* () { for (;;) { try { const newHead = yield driver.pollHead(); if (newHead.id !== head.id && newHead.number >= head.number) { head = Object.assign({}, newHead); const resolversCopy = resolvers; resolvers = []; resolversCopy.forEach(r => r(newHead)); } else { yield new Promise(resolve => setTimeout(resolve, 1 * 1000)); } } catch (_a) { // rejection from driver.getHead means driver closed break; } } }))(); const genesisTs = driver.genesis.timestamp; return { get head() { return head; }, get progress() { const nowTsMs = Date.now(); const headTsMs = head.timestamp * 1000; if (nowTsMs - headTsMs < 30 * 1000) { return 1; } const genesisTsMs = genesisTs * 1000; const p = (headTsMs - genesisTsMs) / (nowTsMs - genesisTsMs); return p < 0 ? NaN : p; }, ticker: () => { let lastHeadId = head.id; return { next: () => { return new Promise(resolve => { if (lastHeadId !== head.id) { return resolve(Object.assign({}, head)); } resolvers.push(newHead => { resolve(Object.assign({}, newHead)); }); }).then(h => { lastHeadId = h.id; return h; }); } }; } }; } exports.newHeadTracker = newHeadTracker; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZC10cmFja2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZyYW1ld29yay9oZWFkLXRyYWNrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLFNBQWdCLGNBQWMsQ0FBQyxNQUFtQjtJQUM5QyxJQUFJLElBQUkscUJBQVEsTUFBTSxDQUFDLElBQUksQ0FBRSxDQUFBO0lBQzdCLElBQUksU0FBUyxHQUFxRCxFQUFFLENBQUM7SUFFckUsQ0FBQyxHQUFTLEVBQUU7UUFDUixTQUFVO1lBQ04sSUFBSTtnQkFDQSxNQUFNLE9BQU8sR0FBRyxNQUFNLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQTtnQkFDdkMsSUFBSSxPQUFPLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO29CQUN6RCxJQUFJLHFCQUFRLE9BQU8sQ0FBRSxDQUFBO29CQUNyQixNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUE7b0JBQy9CLFNBQVMsR0FBRyxFQUFFLENBQUE7b0JBQ2QsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO2lCQUN6QztxQkFBTTtvQkFDSCxNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtpQkFDOUQ7YUFDSjtZQUFDLFdBQU07Z0JBQ0osb0RBQW9EO2dCQUNwRCxNQUFLO2FBQ1I7U0FDSjtJQUNMLENBQUMsQ0FBQSxDQUFDLEVBQUUsQ0FBQTtJQUVKLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFBO0lBRTFDLE9BQU87UUFDSCxJQUFJLElBQUksS0FBSyxPQUFPLElBQUksQ0FBQSxDQUFDLENBQUM7UUFDMUIsSUFBSSxRQUFRO1lBQ1IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFBO1lBQzFCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFBO1lBQ3RDLElBQUksT0FBTyxHQUFHLFFBQVEsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFO2dCQUNoQyxPQUFPLENBQUMsQ0FBQTthQUNYO1lBQ0QsTUFBTSxXQUFXLEdBQUcsU0FBUyxHQUFHLElBQUksQ0FBQTtZQUNwQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsQ0FBQTtZQUM1RCxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzFCLENBQUM7UUFDRCxNQUFNLEVBQUUsR0FBRyxFQUFFO1lBQ1QsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQTtZQUN4QixPQUFPO2dCQUNILElBQUksRUFBRSxHQUFHLEVBQUU7b0JBQ1AsT0FBTyxJQUFJLE9BQU8sQ0FBNEIsT0FBTyxDQUFDLEVBQUU7d0JBQ3BELElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUU7NEJBQ3hCLE9BQU8sT0FBTyxtQkFBTSxJQUFJLEVBQUcsQ0FBQTt5QkFDOUI7d0JBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTs0QkFDckIsT0FBTyxtQkFBTSxPQUFPLEVBQUcsQ0FBQTt3QkFDM0IsQ0FBQyxDQUFDLENBQUE7b0JBQ04sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUNSLFVBQVUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFBO3dCQUNqQixPQUFPLENBQUMsQ0FBQTtvQkFDWixDQUFDLENBQUMsQ0FBQTtnQkFDTixDQUFDO2FBQ0osQ0FBQTtRQUNMLENBQUM7S0FDSixDQUFBO0FBQ0wsQ0FBQztBQXhERCx3Q0F3REMifQ==