An optionally-secure, full-duplex TCP command server and client.
// An insecure CommandServer (`Server` from `node:net`)
const server = new CommandServer({
host: "localhost",
port: 3351,
secure: false,
});
// A secure CommandServer (`Server` from `node:tls`)
// https://nodejs.org/api/tls.html#new-tlstlssocketsocket-options
const server = new CommandServer({
host: "localhost",
port: 3351,
secure: true,
key: fs.readFileSync("certs/server/server.key"),
cert: fs.readFileSync("certs/server/server.crt"),
ca: fs.readFileSync("certs/server/ca.crt"),
requestCert: true,
});
// -------------------
// Defining a command handler
server.command(0, async (payload: any, connection: Connection) => {
return { ok: "OK" };
});
// An insecure client (`Socket` from `node:net`)
const client = new CommandClient({
host: "localhost",
port: 3351,
secure: false,
});
// A secure client (`TLSSocket` from `node:tls`)
const client = new CommandClient({
host: "localhost",
port: 3351,
secure: true,
key: fs.readFileSync("certs/client/client.key"),
cert: fs.readFileSync("certs/client/client.crt"),
ca: fs.readFileSync("certs/ca/ca.crt"),
});
// -------------------
// Awaiting the response
try {
const response = await client.command(0, { some: "payload" }, 1000);
// command^ ^payload ^expiration
// response: { ok: "OK" };
} catch (error) {
console.error(error);
}
// ...or receiving the response in a callback
const callback = (response: any, error: CodeError) => {
if (error) {
console.error(error.code);
return;
}
// response is { ok: "OK" }
};
// Sending a command to the server
client.command(0, { some: "payload" }, 1000, callback);