Programmatic Use#

Connect to a paired peer#

import { connect } from "@vitalops/opendesk-sdk";

const remote = await connect("mini");         // looks up ~/.opendesk/trusted-peers.json
const shot   = await remote.capture();
console.log(shot.width, shot.height);
await remote.close();

RemoteComputer exposes the same surface as the local computer — capture(), cursor(), pointer(), key(), windows(), clipboard(), uiTree(), shell(), and more. Auto-reconnect with exponential back-off is on by default.

Connect via DiscoveredPeer or explicit URL#

import { discover, connect } from "@vitalops/opendesk-sdk";

// mDNS browse
const [peer] = await discover(2000);          // { name, host, port, publicKey, fingerprint }
const remote = await connect(peer);

// Explicit URL (no trusted-peers store required)
const remote2 = await connect("ws://192.168.1.42:8423#<pubkey-hex>");

Pair programmatically#

import { pairWith } from "@vitalops/opendesk-sdk";

const { remote, serverPubkey } = await pairWith(
  "192.168.1.42", 8423, "428901",
  { name: "mini" },
);
// remote is a connected RemoteComputer; serverPubkey is a Buffer
await remote.close();

Run the server daemon from Node.js#

import {
  OpendeskServer, Identity, TrustedPeers,
  ToolDispatcher, AuditLog,
  createRegistry, allowAllContext,
} from "@vitalops/opendesk-sdk";

const identity = Identity.loadOrCreate();       // ~/.opendesk/identity.key
const trusted  = new TrustedPeers();            // ~/.opendesk/trusted-peers.json
const registry = createRegistry();
const ctx      = allowAllContext();
const audit    = new AuditLog();                // ~/.opendesk/audit/

const server = new OpendeskServer(identity, trusted, {
  audit,
  dispatcherFactory: ({ peerName, peerFingerprint, sessionId }) =>
    new ToolDispatcher({ registry, ctx, audit, peerName, peerFingerprint, sessionId }),
});

await server.start();
console.log("Listening on port", server.port);

Identity and peer storage#

import { Identity, TrustedPeers, fingerprint } from "@vitalops/opendesk-sdk";

const identity = Identity.loadOrCreate();
console.log(fingerprint(identity.publicBytes));   // e.g. 9c2f:1abc:b3d4:8870

const peers = new TrustedPeers();
console.log(peers.list());
peers.setDefault("mini");

Running into issues? See Troubleshooting →