UNPKG

ros-client

Version:

Node.js client for MikroTik RouterOS API with support for plain text and encrypted connections

200 lines (144 loc) • 4.98 kB
# RouterOS API Client 🌐 [![npm version](https://img.shields.io/npm/v/ros-client.svg?style=flat-square)](https://www.npmjs.org/package/ros-client) [![Build Status](https://img.shields.io/travis/SDWORLLD/ros-client/master.svg?style=flat-square)](https://travis-ci.org/SDWORLLD/ros-client) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](https://opensource.org/licenses/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 ```bash npm install ros-client ``` ## šŸš€ Quick Start ```javascript 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 ```javascript 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. ```javascript await api.connect(); ``` #### `close()` Gracefully terminates the RouterOS connection. ```javascript await api.close(); ``` ### šŸ› ļø Command Methods #### `send(words)` Executes commands on the RouterOS device. ```javascript const result = await api.send(["/system/resource/print"]); ``` ## šŸ“ Command Examples ### šŸ–„ļø System Management ```javascript // 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 ```javascript // 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 ```javascript // 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 ```javascript 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: ```javascript const api = new RouterOSClient({ debug: true, // other options... }); ``` ## āŒ Error Handling ```javascript 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](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!