UNPKG

@fuel-infrastructure/fuel-hyperlane-registry

Version:

A collection of configs, artifacts, and schemas for Hyperlane

69 lines (68 loc) 2.94 kB
import { BaseRegistry } from './BaseRegistry.js'; import { filterWarpRoutesIds } from './warp-utils.js'; /** * Shared code for sync registries like the FileSystem and Partial registries. * This is required because of the inconsistent sync/async methods across registries. * If the Infra package can be updated to work with async-only methods, this code can be moved to the BaseRegistry class. */ export class SynchronousRegistry extends BaseRegistry { getChains() { return Object.keys(this.listRegistryContent().chains); } getChainMetadata(chainName) { return this.getMetadata()[chainName] || null; } getChainAddresses(chainName) { return this.getAddresses()[chainName] || null; } addChain(chain) { const currentChains = this.listRegistryContent().chains; if (currentChains[chain.chainName]) throw new Error(`Chain ${chain.chainName} already exists in registry`); this.createOrUpdateChain(chain); } updateChain(chain) { const currentChains = this.listRegistryContent(); if (!currentChains.chains[chain.chainName]) { this.logger.debug(`Chain ${chain.chainName} not found in registry, adding it now`); } this.createOrUpdateChain(chain); } removeChain(chainName) { const currentChains = this.listRegistryContent().chains; if (!currentChains[chainName]) throw new Error(`Chain ${chainName} does not exist in registry`); if (this.listContentCache?.chains[chainName]) delete this.listContentCache.chains[chainName]; if (this.metadataCache?.[chainName]) delete this.metadataCache[chainName]; if (this.addressCache?.[chainName]) delete this.addressCache[chainName]; } getWarpRoute(routeId) { return this.getWarpRoutesForIds([routeId])[0] || null; } getWarpDeployConfig(routeId) { return this.getWarpDeployConfigForIds([routeId])[0] || null; } /** * Retrieves a filtered map of the warp routes configs */ getWarpRoutes(filter) { const warpRoutes = this.listRegistryContent().deployments.warpRoutes; const { ids: routeIds } = filterWarpRoutesIds(warpRoutes, filter); const configs = this.getWarpRoutesForIds(routeIds); const idsWithConfigs = routeIds.map((id, i) => [id, configs[i]]); return Object.fromEntries(idsWithConfigs); } /** * Retrieves a map of all the warp routes deployment configs */ getWarpDeployConfigs(filter) { const warpDeployConfig = this.listRegistryContent().deployments.warpDeployConfig; const { ids: routeIds } = filterWarpRoutesIds(warpDeployConfig, filter); const configs = this.getWarpDeployConfigForIds(routeIds); const idsWithConfigs = routeIds.map((id, i) => [id, configs[i]]); return Object.fromEntries(idsWithConfigs); } }