trustwallet-assets/script/action/whitelists.ts
Adam R 102f2b88d4
[Internal] New infra for runnig checks (not as jest tests) (#2938)
* CMC mapping update.

* New check infrastructure, move root folder test to new infra.

* Move list of allowed files to config.

* Include new check in other tests.

* More generic way to call checks.

* Organize fix and update actions behind interfaces.

* Organize checks into steps, multiple steps per action.

* Simplify checkStep class/instance creation.

* Migrate chain logo checks.

* Migrate asset folder check.

* Migrate further chain checks.

* Migrate eth fork folder checks.

* Migrate binance chain check.

* Extra output.

* Output improvements.

* Async fix.

* Migrate Tron check.

* Add Tron check.

* Remove Tron check from old.

* White/blacklist check in new intra, combined with fix.

* Refine ETH checks.

* Remove from old infra.

* Migrate CMC check to new infra.

* Migrate validator tests to new check infra.

* Migrate Json files validity check to new check infra.

* Whitelist check fix.

* Cleanup helpers.ts.

* Move helpers.ts.

* Cleanup of models.ts.

* Move models.ts.

* Move index.test.ts.

* Update with BEP8 support.

* Descriptive names for jobs within the builds.

Co-authored-by: Catenocrypt <catenocrypt@users.noreply.github.com>
2020-08-06 21:17:38 +02:00

80 lines
3.3 KiB
TypeScript

import { chainsWithBlacklist } from "../common/blockchains";
import { getChainAssetsList, getChainWhitelistPath, getChainBlacklistPath } from "../common/repo-structure";
import { readFileSync, writeFileSync } from "../common/filesystem";
import { arrayDiff, findCommonElementOrDuplicate } from "../common/types";
import { ActionInterface, CheckStepInterface } from "./interface";
import { formatSortJson, formatUniqueSortJson } from "../common/json";
import * as bluebird from "bluebird";
async function checkUpdateWhiteBlackList(chain: string, checkOnly: boolean ): Promise<[boolean, string]> {
let wrongMsg = "";
const assets = getChainAssetsList(chain);
const whitelistPath = getChainWhitelistPath(chain);
const blacklistPath = getChainBlacklistPath(chain);
const currentWhitelistText = readFileSync(whitelistPath);
const currentBlacklistText = readFileSync(blacklistPath);
const currentWhitelist = JSON.parse(currentWhitelistText);
const currentBlacklist = JSON.parse(currentBlacklistText);
const commonElementsOrDuplicated = findCommonElementOrDuplicate(currentWhitelist, currentBlacklist);
if (commonElementsOrDuplicated && commonElementsOrDuplicated.length > 0) {
wrongMsg += `Blacklist and whitelist for chain ${chain} should have no common elements or duplicates, found ${commonElementsOrDuplicated.length}, ${commonElementsOrDuplicated[0]}\n`;
}
const removedAssets = arrayDiff(currentWhitelist, assets);
if (removedAssets && removedAssets.length > 0) {
wrongMsg += `Whitelist for chain ${chain} contains non-exitent assets, found ${removedAssets.length}, ${removedAssets[0]}\n`;
}
const niceWhite = formatSortJson(assets);
if (niceWhite !== currentWhitelistText) {
wrongMsg += `Whitelist for chain ${chain} has inconsistent content of formatting\n`;
}
const newBlackList = currentBlacklist.concat(removedAssets);
const niceBlack = formatUniqueSortJson(newBlackList);
if (niceBlack !== currentBlacklistText) {
wrongMsg += `Blacklist for chain ${chain} has inconsistent content of formatting\n`;
}
if (wrongMsg.length > 0) {
if (!checkOnly) {
// update
writeFileSync(whitelistPath, niceWhite);
writeFileSync(blacklistPath, niceBlack);
console.log(`Updated white and blacklists for chain ${chain}`);
}
}
return [(wrongMsg.length == 0), wrongMsg];
}
export class Whitelist implements ActionInterface {
getName(): string { return "Whitelists"; }
getChecks(): CheckStepInterface[] {
const steps: CheckStepInterface[] = [];
chainsWithBlacklist.forEach(chain => {
steps.push(
{
getName: () => { return `Whitelist and blacklist for ${chain} should be consistent with assets`},
check: async () => {
const [isOK, msg] = await checkUpdateWhiteBlackList(chain, true);
if (!isOK) {
return msg;
}
return "";
}
}
);
});
return steps;
}
async fix(): Promise<void> {
await bluebird.each(chainsWithBlacklist, async (chain) => await checkUpdateWhiteBlackList(chain, false));
}
update = null;
}