@ledgerhq/coin-celo
Version:
64 lines • 2.1 kB
JavaScript
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