import { Config } from './app'; import crypto from 'crypto'; import { getIntrospectionQuery } from 'graphql'; const md5 = (data: string) => crypto.createHash('md5').update(data).digest('hex'); export const getIntrospectionChecksum = async (url: string) => { const introspectionQuery = getIntrospectionQuery(); const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ query: introspectionQuery }) }); const data = await response.text(); const hash = md5(data); return hash; } export const checkUpdates = async (config: Config) => { for await(const service of config.list) { const { versionUrl } = service; try { let hash = ''; if (!versionUrl) { hash = await getIntrospectionChecksum(service.url); } else { const response = await fetch(versionUrl); const { version } = await response.json(); hash = md5(version); } if (hash !== service._version) { service._version = hash; console.log(`Service ${service.name} has been updated`, service._version); return true; } } catch (err) { //console.log('eee', service.url, err); return true; // console.log(`Error checking version for ${service.versionUrl}`, err); } } return false; };