UNPKG

@mutopad/connex-framework

Version:
81 lines 6.45 kB
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()); }); }; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types const checkpointInterval = 180; export function newHeadTracker(driver) { let head = Object.assign({}, driver.head); let finalized = driver.genesis.id; let resolvers = []; void (() => __awaiter(this, void 0, void 0, function* () { for (;;) { try { const newHead = yield driver.pollHead(); if (newHead.id !== head.id && newHead.number >= head.number) { if (head.number === 0 || (newHead.number + 1) % checkpointInterval === 0) { try { const finalizedBlk = yield driver.getBlock('finalized'); if (finalizedBlk && finalizedBlk.id != finalized) { finalized = finalizedBlk.id; } } catch (_a) { void 0; } } head = Object.assign({}, newHead); const resolversCopy = resolvers; resolvers = []; resolversCopy.forEach(r => r(newHead)); } else { yield new Promise(resolve => setTimeout(resolve, 1 * 1000)); } } catch (_b) { // 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; }, get finalized() { return finalized; }, 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; }); } }; } }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZC10cmFja2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2hlYWQtdHJhY2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSw2RUFBNkU7QUFDN0UsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUE7QUFFOUIsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUFxQjtJQUNoRCxJQUFJLElBQUkscUJBQVEsTUFBTSxDQUFDLElBQUksQ0FBRSxDQUFBO0lBQzdCLElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFBO0lBQ2pDLElBQUksU0FBUyxHQUFzRCxFQUFFLENBQUM7SUFFdEUsS0FBSyxDQUFDLEdBQVMsRUFBRTtRQUNiLFNBQVU7WUFDTixJQUFJO2dCQUNBLE1BQU0sT0FBTyxHQUFHLE1BQU0sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFBO2dCQUN2QyxJQUFJLE9BQU8sQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQ3pELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLGtCQUFrQixLQUFLLENBQUMsRUFBRTt3QkFDdEUsSUFBSTs0QkFDQSxNQUFNLFlBQVksR0FBRyxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUE7NEJBQ3ZELElBQUksWUFBWSxJQUFJLFlBQVksQ0FBQyxFQUFFLElBQUksU0FBUyxFQUFFO2dDQUM5QyxTQUFTLEdBQUcsWUFBWSxDQUFDLEVBQUUsQ0FBQTs2QkFDOUI7eUJBQ0o7d0JBQUMsV0FBTTs0QkFBRSxLQUFLLENBQUMsQ0FBQTt5QkFBRTtxQkFDckI7b0JBQ0QsSUFBSSxxQkFBUSxPQUFPLENBQUUsQ0FBQTtvQkFDckIsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFBO29CQUMvQixTQUFTLEdBQUcsRUFBRSxDQUFBO29CQUNkLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtpQkFDekM7cUJBQU07b0JBQ0gsTUFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUE7aUJBQzlEO2FBQ0o7WUFBQyxXQUFNO2dCQUNKLG9EQUFvRDtnQkFDcEQsTUFBSzthQUNSO1NBQ0o7SUFDTCxDQUFDLENBQUEsQ0FBQyxFQUFFLENBQUE7SUFFSixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQTtJQUUxQyxPQUFPO1FBQ0gsSUFBSSxJQUFJLEtBQUssT0FBTyxJQUFJLENBQUEsQ0FBQyxDQUFDO1FBQzFCLElBQUksUUFBUTtZQUNSLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQTtZQUMxQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTtZQUN0QyxJQUFJLE9BQU8sR0FBRyxRQUFRLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRTtnQkFDaEMsT0FBTyxDQUFDLENBQUE7YUFDWDtZQUNELE1BQU0sV0FBVyxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUE7WUFDcEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLENBQUE7WUFDNUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUMxQixDQUFDO1FBQ0QsSUFBSSxTQUFTLEtBQUssT0FBTyxTQUFTLENBQUEsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sRUFBRSxHQUFHLEVBQUU7WUFDVCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFBO1lBQ3hCLE9BQU87Z0JBQ0gsSUFBSSxFQUFFLEdBQUcsRUFBRTtvQkFDUCxPQUFPLElBQUksT0FBTyxDQUE2QixPQUFPLENBQUMsRUFBRTt3QkFDckQsSUFBSSxVQUFVLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRTs0QkFDeEIsT0FBTyxPQUFPLG1CQUFNLElBQUksRUFBRyxDQUFBO3lCQUM5Qjt3QkFDRCxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFOzRCQUNyQixPQUFPLG1CQUFNLE9BQU8sRUFBRyxDQUFBO3dCQUMzQixDQUFDLENBQUMsQ0FBQTtvQkFDTixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQ1IsVUFBVSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUE7d0JBQ2pCLE9BQU8sQ0FBQyxDQUFBO29CQUNaLENBQUMsQ0FBQyxDQUFBO2dCQUNOLENBQUM7YUFDSixDQUFBO1FBQ0wsQ0FBQztLQUNKLENBQUE7QUFDTCxDQUFDIn0=