@meterio/flex-framework
Version:
A library implements Meter Flex interface
70 lines • 5.26 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
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) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.newHeadTracker = void 0;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZC10cmFja2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZyYW1ld29yay9oZWFkLXRyYWNrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsU0FBZ0IsY0FBYyxDQUFDLE1BQW1CO0lBQzlDLElBQUksSUFBSSxxQkFBUSxNQUFNLENBQUMsSUFBSSxDQUFFLENBQUE7SUFDN0IsSUFBSSxTQUFTLEdBQXFELEVBQUUsQ0FBQztJQUVyRSxDQUFDLEdBQVMsRUFBRTtRQUNSLFNBQVU7WUFDTixJQUFJO2dCQUNBLE1BQU0sT0FBTyxHQUFHLE1BQU0sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFBO2dCQUN2QyxJQUFJLE9BQU8sQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQ3pELElBQUkscUJBQVEsT0FBTyxDQUFFLENBQUE7b0JBQ3JCLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQTtvQkFDL0IsU0FBUyxHQUFHLEVBQUUsQ0FBQTtvQkFDZCxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7aUJBQ3pDO3FCQUFNO29CQUNILE1BQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO2lCQUM5RDthQUNKO1lBQUMsV0FBTTtnQkFDSixvREFBb0Q7Z0JBQ3BELE1BQUs7YUFDUjtTQUNKO0lBQ0wsQ0FBQyxDQUFBLENBQUMsRUFBRSxDQUFBO0lBRUosTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUE7SUFFMUMsT0FBTztRQUNILElBQUksSUFBSSxLQUFLLE9BQU8sSUFBSSxDQUFBLENBQUMsQ0FBQztRQUMxQixJQUFJLFFBQVE7WUFDUixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUE7WUFDMUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUE7WUFDdEMsSUFBSSxPQUFPLEdBQUcsUUFBUSxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUU7Z0JBQ2hDLE9BQU8sQ0FBQyxDQUFBO2FBQ1g7WUFDRCxNQUFNLFdBQVcsR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFBO1lBQ3BDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxDQUFBO1lBQzVELE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDMUIsQ0FBQztRQUNELE1BQU0sRUFBRSxHQUFHLEVBQUU7WUFDVCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFBO1lBQ3hCLE9BQU87Z0JBQ0gsSUFBSSxFQUFFLEdBQUcsRUFBRTtvQkFDUCxPQUFPLElBQUksT0FBTyxDQUE0QixPQUFPLENBQUMsRUFBRTt3QkFDcEQsSUFBSSxVQUFVLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRTs0QkFDeEIsT0FBTyxPQUFPLG1CQUFNLElBQUksRUFBRyxDQUFBO3lCQUM5Qjt3QkFDRCxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFOzRCQUNyQixPQUFPLG1CQUFNLE9BQU8sRUFBRyxDQUFBO3dCQUMzQixDQUFDLENBQUMsQ0FBQTtvQkFDTixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQ1IsVUFBVSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUE7d0JBQ2pCLE9BQU8sQ0FBQyxDQUFBO29CQUNaLENBQUMsQ0FBQyxDQUFBO2dCQUNOLENBQUM7YUFDSixDQUFBO1FBQ0wsQ0FBQztLQUNKLENBQUE7QUFDTCxDQUFDO0FBeERELHdDQXdEQyJ9
;