@artela-network/registry
Version:
A collection of configs, artifacts, and schemas for Hyperlane
68 lines (67 loc) • 2.33 kB
JavaScript
import { RegistryType } from './IRegistry.js';
import { SynchronousRegistry } from './SynchronousRegistry.js';
import { warpRouteConfigToId } from './warp-utils.js';
const PARTIAL_URI_PLACEHOLDER = '__partial_registry__';
export class PartialRegistry extends SynchronousRegistry {
type = RegistryType.Partial;
chainMetadata;
chainAddresses;
warpRoutes;
constructor({ chainMetadata, chainAddresses, warpRoutes, logger }) {
super({ uri: PARTIAL_URI_PLACEHOLDER, logger });
this.chainMetadata = chainMetadata || {};
this.chainAddresses = chainAddresses || {};
this.warpRoutes = warpRoutes || [];
}
listRegistryContent() {
const chains = {};
Object.keys(this.chainMetadata).forEach((c) => {
chains[c] ||= {};
chains[c].metadata = PARTIAL_URI_PLACEHOLDER;
});
Object.keys(this.chainAddresses).forEach((c) => {
chains[c] ||= {};
chains[c].addresses = PARTIAL_URI_PLACEHOLDER;
});
const warpRoutes = this.warpRoutes.reduce((acc, r) => {
// Cast is useful because this handles partials and is safe because the fn validates data
const id = warpRouteConfigToId(r);
acc[id] = PARTIAL_URI_PLACEHOLDER;
return acc;
}, {});
return {
chains,
deployments: {
warpRoutes,
},
};
}
getMetadata() {
return this.chainMetadata;
}
getAddresses() {
return this.chainAddresses;
}
removeChain(chainName) {
super.removeChain(chainName);
if (this.chainMetadata?.[chainName])
delete this.chainMetadata[chainName];
if (this.chainAddresses?.[chainName])
delete this.chainAddresses[chainName];
}
addWarpRoute(_config) {
throw new Error('Method not implemented.');
}
getWarpRoutesForIds(ids) {
return this.warpRoutes.filter((r) => {
const id = warpRouteConfigToId(r);
return ids.includes(id);
});
}
createOrUpdateChain(chain) {
if (chain.metadata)
this.chainMetadata[chain.chainName] = chain.metadata;
if (chain.addresses)
this.chainAddresses[chain.chainName] = chain.addresses;
}
}