Robot and Cloud (node.js)
These classes and functions are available via the @transitive-sdk/utils npm package and are for use in node.js, i.e., on the robot and the cloud.
Example
const mqtt = require('mqtt');
const { MqttSync, getLogger, getPackageVersionNamespace } =
  require('@transitive-sdk/utils');
// create a logger and set log level
const log = getLogger('main');
log.setLevel('debug');
// Read config.versionNamespace from parent package.json to determine which
// version namespace to use: major, minor, or patch (default).
const version = getPackageVersionNamespace();
log.debug(`using version namespace ${version}`);
const MQTT_HOST = 'mqtt://localhost'; // the mqtt server provided by robot-agent
const mqttClient  = mqtt.connect(MQTT_HOST, {
  // set the clientId as required the agent to identify ourselves
  clientId: `${process.env.npm_package_name}/${version}`,
  // Transitive abuses the username (which is not used as such) to convey
  // additional information, here the full version number (for reporting).
  username: JSON.stringify({
    version: process.env.npm_package_version,
  }),
  password: process.env.PASSWORD, // is set by agent in startPackage.sh
});
mqttClient.once('connect', (connack) => {
  log.debug('connected to mqtt broker', connack);
  const mqttSync = new MqttSync({mqttClient, ignoreRetain: true,
    // Slices off the first N fields of the topic, i.e., our client NS
    // "/org/device/@scope/name/version":
    sliceTopic: 5
  });
  // use mqttSync ..
});
Capability
Super class for all cloud capabilities.
Parameters
- onReady
- options(optional, default- {})
fetchURL
a simple function to fetch a URL
Parameters
- url
findPath
walk up the directory tree until we find a file or directory called basename
Parameters
- basename
getPackageVersionNamespace
Get from package info the version namespace we should use, e.g.,
{version: '1.2.3', config.versionNamespace: 'minor'} => '1.2'
importCapability
Allows you to dynamically import a capability in node.js to use its API there.
Example:
import { importCapability } from '@transitive-sdk/utils';
const run = async () => {
  const rosTool = await importCapability({
    jwt: 'A_VALID_JWT_FOR_THE_ROS-TOOL_CAPABILITY',
  });
  // Use ros-tool to subscribe to the ROS /odom topic on the device of the JWT.
  // Here "subscribe" is a function exported by the ros-tool capability.
  rosTool.subscribe(1, '/odom');
  // print data as it changes in the local cache:
  rosTool.onData(() =>
    console.log(JSON.stringify(
      rosTool.deviceData.ros?.[1]?.messages?.odom?.pose?.pose, true, 2)),
    'ros/1/messages/odom/pose/pose'
  );
};
run();
Parameters
- args
registerCatchAll
Catch all otherwise uncaught errors
setTerminalTitle
set the title of the terminal we are running in
Parameters
- title