Skip to content

An optionally-secure, full-duplex TCP command server and client.

License

Notifications You must be signed in to change notification settings

node-prism/duplex

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Jul 23, 2023
8b0a842 · Jul 23, 2023

History

41 Commits
Jul 23, 2023
Jul 23, 2023
Jan 5, 2023
Apr 12, 2023
Feb 4, 2023
May 29, 2023
Jul 23, 2023
May 29, 2023
Apr 12, 2023

Repository files navigation

duplex

NPM version

An optionally-secure, full-duplex TCP command server and client.

Server

// 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" };
});

Client

// 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);

About

An optionally-secure, full-duplex TCP command server and client.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published