https://github.com/farmbot/farmbot-js
Javascript wrapper for FarmBot's authentication and RPC instructions
https://github.com/farmbot/farmbot-js
farmbot
Last synced: 12 months ago
JSON representation
Javascript wrapper for FarmBot's authentication and RPC instructions
- Host: GitHub
- URL: https://github.com/farmbot/farmbot-js
- Owner: FarmBot
- License: mit
- Created: 2015-11-25T13:37:52.000Z (over 10 years ago)
- Default Branch: main
- Last Pushed: 2024-01-19T23:01:57.000Z (about 2 years ago)
- Last Synced: 2025-04-02T16:52:19.976Z (12 months ago)
- Topics: farmbot
- Language: TypeScript
- Homepage:
- Size: 6.45 MB
- Stars: 115
- Watchers: 19
- Forks: 81
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.md
- Security: SECURITY.md
Awesome Lists containing this project
README
[](https://www.npmjs.com/package/farmbot?activeTab=versions)
[](https://github.com/FarmBot/farmbot-js/actions?query=branch%3Amain)
[](https://coveralls.io/github/FarmBot/farmbot-js?branch=main)
# FarmbotJS: Farmbot RPC wrapper
## Browser Support
Works on all _modern_ browsers that were released in the last 12 months.
## NodeJS Support
Independent developers have reported success when using FarmBotJS in a Node environment, but we do not test against Node based setups, nor do we (FarmBot, Inc) use FarmBotJS in a production Node environment. Issue reports related to NodeJS are highly appreciated.
## Installation (NPM)
```bash
npm install farmbot
```
## Installation (Vanilla JS)
```
var farmbot123 = new fbjs.Farmbot({ token: "foo.bar.baz" });
```
## Running the Test Suite (Advanced)
```bash
npm run test
```
## Other Package Managers
Please raise an issue if you require support with other package managers.
## Login with an API Token
Login using your API token from the [Farmbot Web App](http://my.farm.bot).
[Click here for instructions on how to generate an API token.](https://developer.farm.bot/docs/rest-api#section-generating-an-api-token)
### Example:
```javascript
import { Farmbot } from "farmbot";
var SUPER_SECRET_TOKEN = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJ0ZXN0MTIzQHRlc3QuY29tIiwiaWF0IjoxNDU5MTA5NzI4LCJqdGkiOiI5MjJhNWEwZC0wYjNhLTQ3NjctOTMxOC0xZTQxYWU2MDAzNTIiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjMwMDAvIiwiZXhwIjoxNDU5NDU1MzI4LCJtcXR0IjoibG9jYWxob3N0IiwiYm90IjoiYWE3YmIzN2YtNWJhMy00NjU0LWIyZTQtNThlZDU3NDY1MDhjIn0.KpkNGR9YH68AF3iHP48GormqXzspBJrDGm23aMFGyL_eRIN8iKzy4gw733SaJgFjmebJOqZkz3cly9P5ZpCKwlaxAyn9RvfjQgFcUK0mywWAAvKp5lHfOFLhBBGICTW1r4HcZBgY1zTzVBw4BqS4zM7Y0BAAsflYRdl4dDRG_236p9ETCj0MSYxFagfLLLq0W63943jSJtNwv_nzfqi3TTi0xASB14k5vYMzUDXrC-Z2iBdgmwAYUZUVTi2HsfzkIkRcTZGE7l-rF6lvYKIiKpYx23x_d7xGjnQb8hqbDmLDRXZJnSBY3zGY7oEURxncGBMUp4F_Yaf3ftg4Ry7CiA";
let bot = new Farmbot({ token: SUPER_SECRET_TOKEN });
bot
.connect()
.then(function () {
return bot.moveRelative({ x: 1, y: 2, z: 3, speed: 100 });
});
```
# Sending Commands to a Farmbot Object
```javascript
bot
.connect()
.then(function(bot){
console.log("Bot online!");
return bot.emergencyStop(); // You can chain commands.
})
.then(function(bot){
console.log("Bot has stopped!");
})
.catch(function(error) {
console.log("Something went wrong :(");
});
```
## Basic RPC Commands
Call RPC commands using the corresponding method on `bot`. All RPC commands return a promise.
### Example:
```javascript
bot
.home({ axis: "x", speed: 800 })
.then(function (ack) {
console.log("X Axis is now at 0.");
})
.catch(function (err) {
console.log("Failed to bring X axis home.");
})
```
### Currently supported commands:
[See the annotated type definitions for available methods and properties.](https://github.com/FarmBot/farmbot-js/blob/main/dist/farmbot.d.ts)
## Using Events
```javascript
var bot = Farmbot({ token: '---'});
bot.on("eventName", function(data, eventName) {
console.log("I just got an" + eventName + " event!");
console.log("This is the payload: " + data);
})
// "I just got an eventName event!"
// "This is the payload: any javascript object or primitive"
bot.emit("eventName", "any javascript object or primitive");
var eventHandlers = bot.event("eventName");
// [function(){...}]
```
## Routine Events
* `"status"`: Most important. When the REMOTE device state changes (eg: "x" goes from 0 to 100), the bot will emit this event.
* `"logs"`: The bot will send logs to this channel.
* `"offline"`: Connection lost. **Note: FarmbotJS will try to auto-reconnect**.
* `"online"`: Client is connected and subscribed to bot.
* `"sent"`: Triggered when the application begins sending a message.
* `"sync"`: A resource on the API has changed.
## Special Events
* ``: RPC commands have UUIDs when they leave the browser. When the bot responds to that message, FarmbotJS will emit an event named after the request's UUID. Mostly for internal use.
* `"malformed"`: When the bot gets a bad RPC command, it will notify you via this channel.
* `*`: Catch all events (for debugging).
# Q: Where do I report security issues?
We take security seriously and value the input of independent researchers. Please see our [responsible disclosure guidelines](https://farm.bot/responsible-disclosure-of-security-vulnerabilities/).