import { PackageItemData } from "./stakers.js"; // Optimism export const executionClientsOptimism = Object.freeze([ "op-geth.dnp.dappnode.eth", "op-erigon.dnp.dappnode.eth", ] as const); export type ExecutionClientOptimism = typeof executionClientsOptimism[number]; export type OptimismNode = "op-node.dnp.dappnode.eth"; export const optimismNode: OptimismNode = "op-node.dnp.dappnode.eth"; export type OptimismL2Geth = "op-l2geth.dnp.dappnode.eth"; export const optimismL2Geth: OptimismL2Geth = "op-l2geth.dnp.dappnode.eth"; export type OptimismType = "archive" | "execution" | "rollup"; export type OptimismItem = | OptimismItemOk | OptimismItemError; interface OptimismArchive { dnpName: OptimismL2Geth; } interface OptimismExecution { dnpName: ExecutionClientOptimism; enableHistorical: boolean; } interface OptimismRollup { dnpName: OptimismNode; mainnetRpcUrl: string; } type OptimismItemBasic = T extends "archive" ? OptimismArchive : T extends "execution" ? OptimismExecution : T extends "rollup" ? OptimismRollup : never; export type OptimismItemError = { status: "error"; error: string; } & OptimismItemBasic; export type OptimismItemOk = { status: "ok"; avatarUrl: string; isInstalled: boolean; isUpdated: boolean; isRunning: boolean; data?: PackageItemData; isSelected: boolean; } & OptimismItemBasic; export interface OptimismConfigGet { archive: OptimismItem<"archive">; executionClients: OptimismItem<"execution">[]; rollup: OptimismItem<"rollup">; } export interface OptimismConfigGetOk { archive: OptimismItemOk<"archive">; executionClients: OptimismItemOk<"execution">[]; rollup: OptimismItemOk<"rollup">; } export interface OptimismConfigSet { archive?: OptimismItemOk<"archive">; executionClient?: OptimismItemOk<"execution">; rollup?: OptimismItemOk<"rollup">; } // TODO: Polygon