From dfbae014cda266dd3ca0f315a0a930769af1fbbb Mon Sep 17 00:00:00 2001 From: Torresmorah Date: Tue, 10 Jan 2023 13:43:13 -0600 Subject: [PATCH] feat(hapi): save supported APIs in the node_info table --- hapi/src/services/node.service.js | 40 +++++++++++++++++++++---------- hapi/src/utils/producer.util.js | 15 ++++++++++++ 2 files changed, 43 insertions(+), 12 deletions(-) diff --git a/hapi/src/services/node.service.js b/hapi/src/services/node.service.js index dc224318..7f0e525c 100644 --- a/hapi/src/services/node.service.js +++ b/hapi/src/services/node.service.js @@ -73,7 +73,16 @@ const updateNodeInfo = async nodes => { } ` + const clearMutation = ` + mutation { + delete_node_info(where: {_and: [{version: {_eq: ""}},{features: {_eq: {}}}]}) { + affected_rows + } + } + ` + await hasuraUtil.request(upsertMutation, { nodes }) + await hasuraUtil.request(clearMutation) } const getNodeEnpoints = node => { @@ -113,11 +122,11 @@ const getFormatNode = node => { node.features = [node.features] } - if (node.features?.length || !!node.keys) { + if (endpoints.length || node.features?.length || !!node.keys) { formatNode.node_info = { data: { version: '', - features: { list: node.features, keys: node.keys } + features: { list: node?.features, keys: node.keys } } } } @@ -128,16 +137,23 @@ const getFormatNode = node => { const updateNodesInfo = async nodes => { nodes = await Promise.all( nodes.map(async (node) => { - if ( - node?.type?.includes('query') && - node?.endpoints?.length && - !!node.node_info[0] - ) { - const { nodeInfo } = await producerUtil.getNodeInfo( - node.endpoints[0].value - ) - - node.node_info[0].version = nodeInfo?.server_version_string || '' + if (node?.endpoints?.length && !!node.node_info[0]) { + const sslEndpoint = node.endpoints.find( + (endpoint) => endpoint.type === 'ssl' + )?.value + + if (sslEndpoint) { + const { nodeInfo } = await producerUtil.getNodeInfo(sslEndpoint) + const { supportedAPIs } = await producerUtil.getSupportedAPIs( + sslEndpoint + ) + + node.node_info[0].version = nodeInfo?.server_version_string || '' + node.node_info[0].features = { + ...node.node_info[0]?.features, + ...(supportedAPIs && { supportedAPIs }) + } + } return node.node_info[0] } diff --git a/hapi/src/utils/producer.util.js b/hapi/src/utils/producer.util.js index a4d42aa6..bf2bf677 100644 --- a/hapi/src/utils/producer.util.js +++ b/hapi/src/utils/producer.util.js @@ -20,6 +20,20 @@ const getNodeInfo = async (api) => { } } +const getSupportedAPIs = async (api) => { + let supportedAPIs + + try { + const response = await axiosUtil.instance.get( + `${api}/v1/node/get_supported_apis` + ) + + supportedAPIs = response.data?.apis + } catch (error) {} + + return { supportedAPIs } +} + const getEndpoints = (nodes) => { if (!nodes?.length) { return { @@ -246,6 +260,7 @@ module.exports = { getNodeInfo, getEndpoints, getExpectedRewards, + getSupportedAPIs, getVotes, jsonParse }