Skip to content

A Node.js module for interacting with MikroTik RouterOS API, supporting both plain text (port 8728) and encrypted (port 8729) connections.

License

Notifications You must be signed in to change notification settings

sparrow-code/ros-client

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

9 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

RouterOS API Client 🌐

npm version Build Status License: MIT

A powerful Node.js module for seamless interaction with MikroTik RouterOS API, supporting both plain text (port 8728) and encrypted (port 8729) connections. πŸš€

✨ Key Features

  • πŸ”’ Secure connections via plain text and TLS encryption
  • πŸ”„ Full support for RouterOS API protocol encoding/decoding
  • ⚑ Modern Promise-based API implementation
  • πŸ› οΈ Comprehensive MikroTik API command helpers
  • πŸ› Robust error handling mechanism
  • πŸ” Built-in debug mode for troubleshooting
  • πŸ“¦ Lightweight with minimal dependencies

πŸ“¦ Installation

npm install ros-client

πŸš€ Quick Start

const RouterOSClient = require("ros-client");

// Create API client instance
const api = new RouterOSClient({
  host: "192.168.88.1",
  username: "admin",
  password: "your-password",
  port: 8728, // Use 8729 for TLS
  tls: false, // Set to true for encrypted connection
});

async function example() {
  try {
    await api.connect();
    console.log("βœ… Connected successfully!");

    // Get system identity
    const identity = await api.send(["/system/identity/print"]);
    console.log("πŸ–₯️ Router identity:", identity);

    // Get all interfaces
    const interfaces = await api.send(["/interface/print"]);
    console.log("🌐 Interfaces:", interfaces);

    await api.close();
  } catch (err) {
    console.error("❌ Error:", err.message);
  }
}

example();

βš™οΈ Configuration Options

const api = new RouterOSClient({
  host: "192.168.88.1", // Router IP address
  username: "admin", // Username
  password: "password", // Password
  port: 8728, // API port (8729 for TLS)
  tls: false, // TLS encryption
  timeout: 10000, // Connection timeout (ms)
  debug: false, // Debug output
});

πŸ“š API Documentation

πŸ”Œ Connection Methods

connect()

Establishes and authenticates the RouterOS connection.

await api.connect();

close()

Gracefully terminates the RouterOS connection.

await api.close();

πŸ› οΈ Command Methods

send(words)

Executes commands on the RouterOS device.

const result = await api.send(["/system/resource/print"]);

πŸ“ Command Examples

πŸ–₯️ System Management

// System identity operations
const identity = await api.send(["/system/identity/print"]);
await api.send(["/system/identity/set", "=name=my-router"]);

// Resource monitoring
const resources = await api.send(["/system/resource/print"]);

// System maintenance
await api.send(["/system/reboot"]);

🌐 Network Interface Management

// Interface operations
const interfaces = await api.send(["/interface/print"]);
await api.send(["/interface/enable", "=.id=ether1"]);

// Wireless interface management
const wireless = await api.send(["/interface/wireless/print"]);

πŸ”§ IP Configuration

// IP address management
const addresses = await api.send(["/ip/address/print"]);
await api.send([
  "/ip/address/add",
  "=address=192.168.1.1/24",
  "=interface=ether1",
]);

// DHCP server management
const leases = await api.send(["/ip/dhcp-server/lease/print"]);

🎯 Events

The client emits these events:

  • connected βœ… - Connection established
  • error ❌ - Error occurred
  • close πŸ”’ - Connection terminated
api.on("connected", () => console.log("βœ… Connected"));
api.on("error", (err) => console.error("❌ Error:", err.message));
api.on("close", () => console.log("πŸ”’ Connection closed"));

πŸ” Debug Mode

Enable detailed logging:

const api = new RouterOSClient({
  debug: true,
  // other options...
});

❌ Error Handling

try {
  await api.connect();
  const result = await api.send(["/command"]);
} catch (err) {
  console.error("❌ Error:", err.message);
}

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

🀝 Contributing

We welcome contributions! Here's how:

  1. πŸ”€ Fork the repository
  2. 🌿 Create your feature branch (git checkout -b feature/amazing-feature)
  3. ✍️ Commit changes (git commit -m 'Add amazing feature')
  4. πŸ“€ Push to branch (git push origin feature/amazing-feature)
  5. πŸ“« Open a Pull Request

⭐ Star this repository if you find it helpful!

About

A Node.js module for interacting with MikroTik RouterOS API, supporting both plain text (port 8728) and encrypted (port 8729) connections.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published