UNPKG

@ledgerhq/coin-celo

Version:
64 lines 2.1 kB
import { BigNumber } from "bignumber.js"; import { Subject } from "rxjs"; import { log } from "@ledgerhq/logs"; import { PRELOAD_MAX_AGE } from "../logic"; import { getValidatorGroups } from "../network/validators"; let currentCeloPreloadedData = { validatorGroups: [], }; function fromHydrateValidator(validatorGroupRaw) { return { address: validatorGroupRaw.address.toString(), name: validatorGroupRaw.name.toString(), votes: new BigNumber(validatorGroupRaw.votes), }; } function fromHydratePreloadData(data) { let validatorGroups = []; if (typeof data === "object" && data && "validatorGroups" in data) { if (Array.isArray(data.validatorGroups)) { validatorGroups = data.validatorGroups.map(fromHydrateValidator); } } return { validatorGroups, }; } const updates = new Subject(); export function getCurrentCeloPreloadData() { return currentCeloPreloadedData; } function setCeloPreloadData(data) { if (data === currentCeloPreloadedData) return; currentCeloPreloadedData = data; updates.next(data); } export function getCeloPreloadDataUpdates() { return updates.asObservable(); } export const getPreloadStrategy = () => ({ preloadMaxAge: PRELOAD_MAX_AGE, }); export const preload = async () => { const { validatorGroups: previousValidatorGroups } = currentCeloPreloadedData; let validatorGroups = previousValidatorGroups; if (!validatorGroups || !validatorGroups.length) { log("celo/preload", "refreshing celo validatorGroups..."); try { validatorGroups = await getValidatorGroups(); } catch (error) { log("celo/preload", "failed to fetch validatorGroups", { error, }); } } return { validatorGroups }; }; export const hydrate = (data) => { const hydrated = fromHydratePreloadData(data); log("celo/preload", "hydrate " + hydrated.validatorGroups.length + " celo validatorGroups"); setCeloPreloadData(hydrated); }; //# sourceMappingURL=preload.js.map