@fuel-infrastructure/fuel-hyperlane-registry
Version:
A collection of configs, artifacts, and schemas for Hyperlane
77 lines (76 loc) • 2.84 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;
warpDeployConfigs;
constructor({ chainMetadata, chainAddresses, warpRoutes, warpDeployConfigs, logger }) {
super({ uri: PARTIAL_URI_PLACEHOLDER, logger });
this.chainMetadata = chainMetadata || {};
this.chainAddresses = chainAddresses || {};
this.warpRoutes = warpRoutes || [];
this.warpDeployConfigs = warpDeployConfigs || [];
}
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,
warpDeployConfig: {} // TODO: This cannot be implemented without deriving the token symbol from config.token
},
};
}
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);
});
}
getWarpDeployConfigForIds(_ids) {
// TODO: Right now this returns an empty array
// This cannot be implemented without deriving the token symbol from config.token
// We will revisit once we merge the configs
return this.warpDeployConfigs;
}
createOrUpdateChain(chain) {
if (chain.metadata)
this.chainMetadata[chain.chainName] = chain.metadata;
if (chain.addresses)
this.chainAddresses[chain.chainName] = chain.addresses;
}
}