UNPKG

@tribecahq/registry

Version:

Registry of Tribeca DAOs.

65 lines (54 loc) 2.06 kB
import { formatNetwork } from "@saberhq/solana-contrib"; import * as fs from "fs/promises"; import * as toml from "toml"; import type { GovernorConfig } from "../config/types"; import { parseGovernorConfig } from "../parser/parse"; import type { GovernorConfigRaw } from "../parser/types"; import { validateConfig } from "../parser/validate"; import { stableStringify } from "../utils/serialize"; function notEmpty<TValue>(value: TValue | null | undefined): value is TValue { return value !== null && value !== undefined; } const buildGovernorMetasForNetwork = async ( network: "mainnet-beta" | "devnet" ) => { const networkFmt = formatNetwork(network); const daoDir = `${__dirname}/../../config/${networkFmt}`; const daos = await fs.readdir(daoDir); const outDir = `${__dirname}/../../data/registry/${networkFmt}`; await fs.mkdir(outDir, { recursive: true }); const governors = await Promise.all( daos.map(async (dao): Promise<GovernorConfig | null> => { const daoStat = await fs.stat(`${daoDir}/${dao}`); if (!daoStat.isDirectory()) { return null; } const config = await fs.readFile(`${daoDir}/${dao}/Tribeca.toml`); const rawConfig = toml.parse(config.toString()) as GovernorConfigRaw; try { const parsedConfig = await parseGovernorConfig(rawConfig, network); const config = validateConfig(parsedConfig); await fs.writeFile(`${outDir}/${dao}.json`, stableStringify(config)); return config; } catch (e) { console.error(`Error parsing config ${networkFmt}/${dao}`, e); throw e; } }) ); const foundDAOs = governors.filter(notEmpty); await fs.writeFile( `${__dirname}/../../data/registry/governor-metas.${networkFmt}.json`, stableStringify(foundDAOs) ); }; const buildGovernorMetas = async () => { await buildGovernorMetasForNetwork("mainnet-beta"); await buildGovernorMetasForNetwork("devnet"); }; buildGovernorMetas() .then() .catch((err) => { console.error(err); process.exit(1); });