Page 1 of 1

Fetch Evernode Hosts

Posted: Sat Jan 03, 2026 10:10 pm
by deployking
evernode-hosts.js

Code: Select all

#!/usr/bin/env node
"use strict";

const fs = require("fs");
const path = require("path");
const evernode = require("evernode-js-client");

function parseArgs() {
  const args = process.argv.slice(2);
  let server = null;
  let host = null;
  let output = null;

  for (let i = 0; i < args.length; i++) {
    if ((args[i] === "--server" || args[i] === "-s") && args[i + 1]) {
      server = args[++i];
      continue;
    }
    if ((args[i] === "--host" || args[i] === "-h") && args[i + 1]) {
      host = args[++i];
      continue;
    }
    if ((args[i] === "--output" || args[i] === "-o") && args[i + 1]) {
      output = args[++i];
      continue;
    }
  }

  return {
    server: server || "wss://xahau.network",
    host,
    output
  };
}

const { server, host, output } = parseArgs();

if (!server.startsWith("ws://") && !server.startsWith("wss://")) {
  console.error("Error: --server must be a ws:// or wss:// URL");
  process.exit(1);
}

const OUT_FILE = output
  ? path.resolve(output)
  : path.join(
      process.pkg ? path.dirname(process.execPath) : process.cwd(),
      "hosts.json"
    );

async function main() {
  console.log("Starting Evernode host fetch");
  console.log(`Xahau server : ${server}`);
  if (host) console.log(`Query host  : ${host}`);

  evernode.Defaults.set({
    governorAddress: "rBvKgF3jSZWdJcwSsmoJspoXLLDVLDp6jg",
    rippledServer: server
  });

  const registryClient = await evernode.HookClientFactory.create(
    evernode.HookTypes.registry
  );

  try {
    await registryClient.connect();
    console.log("Connected to registry hook.");

    console.time("fetch");

    if (host) {
      let result;

      if (/^[0-9A-F]{64}$/i.test(host)) {
        result = await registryClient.getHostByUriTokenId(host);
      } else {
        result = await registryClient.getHostInfo(host);
      }

      if (!result) {
        console.error("Host not found.");
        process.exit(1);
      }

      console.timeEnd("fetch");
      process.stdout.write(JSON.stringify(result, null, 2) + "\n");
      return;
    }

    const hosts = await registryClient.getActiveHostsFromLedger();
    console.timeEnd("fetch");

    fs.mkdirSync(path.dirname(OUT_FILE), { recursive: true });
    fs.writeFileSync(OUT_FILE, JSON.stringify(hosts, null, 2));

    console.log(`Saved ${hosts.length} hosts ${OUT_FILE}`);
  } finally {
    if (typeof registryClient.disconnect === "function") {
      await registryClient.disconnect();
    }
  }

  console.log("Done. Exiting cleanly.");
  process.exit(0);
}

main().catch(err => {
  console.error("Fatal error:", err);
  process.exit(1);
});
package.json

Code: Select all

{
  "name": "evernode-js-client",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "evernode-js-client": "^0.6.61",
    "express": "^5.1.0",
    "ws": "^8.18.3"
  }
}

First, write npm i to install the packages needed.

Fetch with node evernode-hosts.js

Optional flags:
--server wss://yourserver --output youroutput

--host rAddress

The --host flag will only fetch that particular host and not the whole list as the other ones do.

Make a bin with these commands:
pkg evernode-hosts.js --targets node18-linux-x64 --output evernode-hosts
pkg evernode-hosts.js --targets node18-win-x64 --output evernode-hosts.exe
pkg evernode-hosts.js --targets node18-macos-x64 --output evernode-macos