chia-agent
Version:
chia rpc/websocket client library
58 lines (57 loc) • 2.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.defaultTimeoutInMs = void 0;
exports.open = open;
const fs_1 = require("fs");
const config_1 = require("../config");
const WS = require("ws");
const logger_1 = require("../logger");
function create(url) {
const daemonCertPath = (0, config_1.getPathFromConfig)("/daemon_ssl/private_crt") || config_1.defaultDaemonCertPath;
const daemonKeyPath = (0, config_1.getPathFromConfig)("/daemon_ssl/private_key") || config_1.defaultDaemonKeyPath;
if (!(0, fs_1.existsSync)(daemonCertPath)) {
(0, logger_1.getLogger)().error("daemon cert file was not found at: " + daemonCertPath);
throw new Error("Cert file not found");
}
if (!(0, fs_1.existsSync)(daemonCertPath)) {
(0, logger_1.getLogger)().error("daemon key file was not found at: " + daemonCertPath);
throw new Error("Key file not found");
}
const cert = (0, fs_1.readFileSync)(daemonCertPath);
const key = (0, fs_1.readFileSync)(daemonKeyPath);
const options = {
cert,
key,
rejectUnauthorized: false,
};
return new WS(url, options);
}
exports.defaultTimeoutInMs = 50000;
function open(url, timeoutMs) {
return new Promise((resolve, reject) => {
const ws = create(url);
let timer = null;
timeoutMs = typeof timeoutMs === "number" ? timeoutMs : exports.defaultTimeoutInMs;
let opened = false;
timer = setTimeout(() => {
timer = null;
(0, logger_1.getLogger)().error("Request to open connection timed out");
reject("Timeout");
}, timeoutMs);
const onOpenError = (err) => {
if (!opened) {
reject(err);
}
};
ws.on("open", (openEvent) => {
opened = true;
ws.off("error", onOpenError);
if (timer !== null) {
clearTimeout(timer);
timer = null;
resolve({ ws, openEvent });
}
});
ws.on("error", onOpenError);
});
}