import * as R from 'ramda'; import { RelayerResponse, RelayerResponseNetwork } from '../../data_sources/relayer-registry'; import { Relayer } from '../../entities'; /** * Parses a raw relayer registry response into an array of Relayer entities. * @param rawResp raw response from the relayer-registry json file. */ export function parseRelayers(rawResp: Map): Relayer[] { const parsedAsObject = R.mapObjIndexed(parseRelayer, rawResp); return R.values(parsedAsObject); } function parseRelayer(relayerResp: RelayerResponse, uuid: string): Relayer { const relayer = new Relayer(); relayer.uuid = uuid; relayer.name = relayerResp.name; relayer.homepageUrl = relayerResp.homepage_url; relayer.appUrl = relayerResp.app_url; const mainNetworkRelayerInfo = getMainNetwork(relayerResp); if (mainNetworkRelayerInfo !== undefined) { relayer.sraHttpEndpoint = mainNetworkRelayerInfo.sra_http_endpoint || null; relayer.sraWsEndpoint = mainNetworkRelayerInfo.sra_ws_endpoint || null; relayer.feeRecipientAddresses = R.path(['static_order_fields', 'fee_recipient_addresses'], mainNetworkRelayerInfo) || []; relayer.takerAddresses = R.path(['static_order_fields', 'taker_addresses'], mainNetworkRelayerInfo) || []; } else { relayer.feeRecipientAddresses = []; relayer.takerAddresses = []; } return relayer; } function getMainNetwork(relayerResp: RelayerResponse): RelayerResponseNetwork | undefined { return R.find(network => network.networkId === 1, relayerResp.networks); }