import axios from 'axios' import { z } from 'zod' import { assertSuccessJsonResponse } from '../assertSuccessJsonResponse' const schema = z.object({ software: z.object({ name: z.string(), version: z.string() }), protocols: z.array( z.string() ), usage: z.optional(z.object({ users: z.optional(z.object({ total: z.optional(z.number()), activeMonth: z.optional(z.number()), activeHalfyear: z.optional(z.number()) })), localPosts: z.optional(z.number()) })), openRegistrations: z.optional(z.boolean()) }) export type NodeInfo = z.infer export const retrieveNodeInfo = async (url:string):Promise => { console.info('Retrieving node info', { url: url }) const nodeInfoResponse = await axios.get(url, { timeout: 10000 }) assertSuccessJsonResponse(nodeInfoResponse) return schema.parse(nodeInfoResponse.data) }