UNPKG

farmbot

Version:
7 lines (5 loc) 14.1 kB
var $eSX5Q$mqtt=require("mqtt");function $parcel$exportWildcard(e,r){return Object.keys(r).forEach(function(t){"default"===t||"__esModule"===t||Object.prototype.hasOwnProperty.call(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:function(){return r[t]}})}),e}function $parcel$export(e,r,t,s){Object.defineProperty(e,r,{get:t,set:s,enumerable:!0,configurable:!0})}function $parcel$interopDefault(e){return e&&e.__esModule?e.default:e}var $parcel$global=globalThis,$parcel$modules={},$parcel$inits={},parcelRequire=$parcel$global.parcelRequire1c57;null==parcelRequire&&((parcelRequire=function(e){if(e in $parcel$modules)return $parcel$modules[e].exports;if(e in $parcel$inits){var r=$parcel$inits[e];delete $parcel$inits[e];var t={id:e,exports:{}};return $parcel$modules[e]=t,r.call(t.exports,t,t.exports),t.exports}var s=Error("Cannot find module '"+e+"'");throw s.code="MODULE_NOT_FOUND",s}).register=function(e,r){$parcel$inits[e]=r},$parcel$global.parcelRequire1c57=parcelRequire);var parcelRegister=parcelRequire.register;parcelRegister("b3Gr5",function(e,r){var t=parcelRequire("crlg5"),s=parcelRequire("jKhzW"),i=parcelRequire("kgNDz"),n=parcelRequire("el3kn"),a=parcelRequire("hWgEQ");$parcel$exportWildcard(e.exports,t),$parcel$exportWildcard(e.exports,s),$parcel$exportWildcard(e.exports,i),$parcel$exportWildcard(e.exports,n),$parcel$exportWildcard(e.exports,a)}),parcelRegister("crlg5",function(e,r){$parcel$export(e.exports,"LATEST_VERSION",()=>t),$parcel$export(e.exports,"DIGITAL",()=>s),$parcel$export(e.exports,"ANALOG",()=>i);let t=0x133ecf1,s=0,i=1}),parcelRegister("jKhzW",function(e,r){$parcel$export(e.exports,"Farmbot",()=>u),parcelRequire("el3kn");var t=parcelRequire("d3ujF"),s=parcelRequire("2Wyna"),i=parcelRequire("bu5Qj");parcelRequire("b3Gr5");var n=parcelRequire("el3kn"),a=parcelRequire("lYlQL"),o=parcelRequire("c7gS9"),c=parcelRequire("7nBDP"),l=parcelRequire("g4iX8"),p=parcelRequire("7L8KP"),s=parcelRequire("2Wyna");class u{constructor(e){this.getConfig=e=>this.config[e],this.setConfig=(e,r)=>{this.config[e]=r},this.installFarmware=e=>this.send((0,s.rpcRequest)([{kind:"install_farmware",args:{url:e}}])),this.updateFarmware=e=>this.send((0,s.rpcRequest)([{kind:"update_farmware",args:{package:e}}])),this.removeFarmware=e=>this.send((0,s.rpcRequest)([{kind:"remove_farmware",args:{package:e}}])),this.installFirstPartyFarmware=()=>this.send((0,s.rpcRequest)([{kind:"install_first_party_farmware",args:{}}])),this.powerOff=()=>this.send((0,s.rpcRequest)([{kind:"power_off",args:{}}])),this.reboot=()=>this.send((0,s.rpcRequest)([{kind:"reboot",args:{package:"farmbot_os"}}])),this.rebootFirmware=()=>this.send((0,s.rpcRequest)([{kind:"reboot",args:{package:"arduino_firmware"}}])),this.checkUpdates=()=>this.send((0,s.rpcRequest)([{kind:"check_updates",args:{package:"farmbot_os"}}])),this.resetOS=()=>this.publish((0,s.rpcRequest)([{kind:"factory_reset",args:{package:"farmbot_os"}}])),this.resetMCU=()=>this.send((0,s.rpcRequest)([{kind:"factory_reset",args:{package:"arduino_firmware"}}])),this.flashFirmware=e=>this.send((0,s.rpcRequest)([{kind:"flash_firmware",args:{package:e}}])),this.emergencyLock=()=>{let e=(0,s.rpcRequest)([{kind:"emergency_lock",args:{}}],s.Priority.HIGHEST);return this.send(e)},this.emergencyUnlock=()=>{let e=(0,s.rpcRequest)([{kind:"emergency_unlock",args:{}}],s.Priority.HIGHEST);return this.send(e)},this.execSequence=(e,r=[])=>this.send((0,s.rpcRequest)([{kind:"execute",args:{sequence_id:e},body:r}])),this.execScript=(e,r)=>this.send((0,s.rpcRequest)([{kind:"execute_script",args:{label:e},body:r}])),this.home=e=>this.send((0,s.rpcRequest)([{kind:"home",args:e}])),this.findHome=e=>this.send((0,s.rpcRequest)([{kind:"find_home",args:e}])),this.moveAbsolute=e=>{let{x:r,y:i,z:n}=e,o=e.speed||a.CONFIG_DEFAULTS.speed;return this.send((0,s.rpcRequest)([{kind:"move_absolute",args:{location:(0,t.coordinate)(r,i,n),offset:(0,t.coordinate)(0,0,0),speed:o}}]))},this.moveRelative=e=>{let{x:r,y:t,z:i}=e,n=e.speed||a.CONFIG_DEFAULTS.speed;return this.send((0,s.rpcRequest)([{kind:"move_relative",args:{x:r,y:t,z:i,speed:n}}]))},this.writePin=e=>this.send((0,s.rpcRequest)([{kind:"write_pin",args:e}])),this.readPin=e=>this.send((0,s.rpcRequest)([{kind:"read_pin",args:e}])),this.togglePin=e=>this.send((0,s.rpcRequest)([{kind:"toggle_pin",args:e}])),this.readStatus=(e={})=>this.send((0,s.rpcRequest)([{kind:"read_status",args:e}])),this.takePhoto=(e={})=>this.send((0,s.rpcRequest)([{kind:"take_photo",args:e}])),this.sync=(e={})=>this.send((0,s.rpcRequest)([{kind:"sync",args:e}])),this.setZero=e=>this.send((0,s.rpcRequest)([{kind:"zero",args:{axis:e}}])),this.setUserEnv=e=>{let r=Object.keys(e).map(function(r){return{kind:"pair",args:{label:r,value:e[r]||c.Misc.NULL}}});return this.send((0,s.rpcRequest)([{kind:"set_user_env",args:{},body:r}]))},this.sendMessage=(e,r,t=[])=>{this.send((0,s.rpcRequest)([{kind:"send_message",args:{message_type:e,message:r},body:t.map(e=>({kind:"channel",args:{channel_name:e}}))}]))},this.setServoAngle=e=>{let r=this.send((0,s.rpcRequest)([{kind:"set_servo_angle",args:e}]));if(![4,5,6,11].includes(e.pin_number))throw Error("Servos only work on pins 4 and 5");if(e.pin_value>180||e.pin_value<0)throw Error("Pin value outside of 0...180 range");return r},this.calibrate=e=>this.send((0,s.rpcRequest)([{kind:"calibrate",args:e}])),this.lua=e=>this.send((0,s.rpcRequest)([{kind:"lua",args:{lua:e}}])),this.event=e=>(this._events[e]=this._events[e]||[],this._events[e]),this.on=(e,r,t=!1)=>{this.event(e).push({value:r,once:t,event:e})},this.emit=(e,r)=>{let t=[];this.event(e).concat(this.event("*")).forEach(function(s){try{s.value(r,e),s.once||s.event!==e||t.push(s)}catch(r){console.warn(`Exception thrown while handling '${e}' event.`),console.dir(r)}}),0===t.length?delete this._events[e]:this._events[e]=t},this.publish=(e,r=!0)=>{if(this.client)this.emit(c.FbjsEventName.sent,e),this.client.publish(this.channel.toDevice,JSON.stringify(e));else if(r)throw Error("Not connected to server")},this.send=e=>new Promise((r,t)=>{this.publish(e),this.on(e.args.label,function(e){switch(e.kind){case"rpc_ok":return r(e);case"rpc_error":return t(Error((e.body||[]).map(e=>e.args.message).join(", ")));default:throw console.dir(e),Error("Got a bad CeleryScript node.")}},!0)}),this._onmessage=(e,r)=>{let t=(0,n.bufferToString)(r),s=e.split(c.Misc.MQTT_DELIM),{emit:i}=this;try{let e=JSON.parse(t);if(s[0]==c.MqttChanName.publicBroadcast)return i(c.MqttChanName.publicBroadcast,e);switch(s[2]){case c.MqttChanName.logs:return i(c.FbjsEventName.logs,e);case c.MqttChanName.status:return i(c.FbjsEventName.status,e);case c.MqttChanName.sync:return i(c.FbjsEventName.sync,e);case c.MqttChanName.pong:return i(s[3],e);default:let r=(0,l.hasLabel)(e)?e.args.label:c.FbjsEventName.malformed;return i(r,e)}}catch(e){console.dir({text:"Could not parse inbound message from MQTT.",error:e}),i(c.FbjsEventName.malformed,t)}},this.ping=(e=1e4,r=(0,p.timestamp)())=>(this.setConfig("LAST_PING_OUT",r),this.doPing(r,e)),this.doPing=(e,r)=>Promise.race([new Promise((e,t)=>setTimeout(()=>t(-0),r)),new Promise((r,t)=>{let s=()=>{let t=(0,p.timestamp)();this.setConfig("LAST_PING_IN",t),r(t-e)};this.on(""+e,s,!0);let i=this.channel.ping(e);this.client&&this.client.publish(i,JSON.stringify(e))})]),this.connect=()=>{let{mqttUsername:e,token:r,mqttServer:t}=this.config,s=c.Misc.RECONNECT_THROTTLE_MS,n=$parcel$interopDefault($eSX5Q$mqtt).connect(t,{clean:!0,clientId:`FBJS-${u.VERSION}-${(0,i.uuid)()}`,password:r,protocolId:"MQTT",protocolVersion:4,reconnectPeriod:s,username:e});this.client=n,this.resources=new(0,o.ResourceAdapter)(this,this.config.mqttUsername),n.on("message",this._onmessage),n.on("offline",()=>this.emit(c.FbjsEventName.offline,{})),n.on("connect",()=>this.emit(c.FbjsEventName.online,{}));let a=[this.channel.logs,this.channel.status,this.channel.sync,this.channel.toClient,this.channel.pong];return n.subscribe(a),new Promise((e,r)=>{if(this.client)this.client.once("connect",()=>e(this));else throw Error("Please connect first.")})},this._events={},this.config=(0,a.generateConfig)(e),this.resources=new(0,o.ResourceAdapter)(this,this.config.mqttUsername)}get channel(){let e=this.config.mqttUsername;return{toDevice:`bot/${e}/${c.MqttChanName.fromClients}`,toClient:`bot/${e}/${c.MqttChanName.fromDevice}`,status:`bot/${e}/${c.MqttChanName.status}`,logs:`bot/${e}/${c.MqttChanName.logs}`,sync:`bot/${e}/${c.MqttChanName.sync}/#`,pong:`bot/${e}/pong/#`,ping:r=>`bot/${e}/ping/${r}`}}}u.VERSION="15.9.5"}),parcelRegister("el3kn",function(e,r){$parcel$export(e.exports,"stringToBuffer",()=>c),$parcel$export(e.exports,"bufferToString",()=>p);var t=parcelRequire("d3ujF"),s=parcelRequire("g4iX8"),i=parcelRequire("cobLS"),n=parcelRequire("Az9Ui"),a=parcelRequire("2Wyna"),o=parcelRequire("bu5Qj");function c(e){return new Uint8Array(e.split("").map(e=>e.charCodeAt(0)))}let l="u">typeof util&&util.TextDecoder?new util.TextDecoder:"u">typeof window&&window.TextDecoder?new window.TextDecoder:{decode(e){let r=[];return e.forEach(e=>r.push(String.fromCharCode(e))),r.join("")}},p=e=>l.decode(e);$parcel$exportWildcard(e.exports,t),$parcel$exportWildcard(e.exports,s),$parcel$exportWildcard(e.exports,i),$parcel$exportWildcard(e.exports,n),$parcel$exportWildcard(e.exports,a),$parcel$exportWildcard(e.exports,o)}),parcelRegister("d3ujF",function(e,r){$parcel$export(e.exports,"coordinate",()=>t);function t(e,r,t){return{kind:"coordinate",args:{x:e,y:r,z:t}}}}),parcelRegister("g4iX8",function(e,r){$parcel$export(e.exports,"isCeleryScript",()=>s),$parcel$export(e.exports,"hasLabel",()=>i);let t=e=>!!(e&&"object"==typeof e);function s(e){return t(e)&&"string"==typeof e.kind&&t(e)&&!!e.args}function i(e){return!!s(e)&&"string"==typeof e.args.label}}),parcelRegister("cobLS",function(e,r){$parcel$export(e.exports,"isNode",()=>t);function t(){return"u"<typeof window}}),parcelRegister("Az9Ui",function(e,r){$parcel$export(e.exports,"pick",()=>t);function t(e,r,t){return e[r]}}),parcelRegister("2Wyna",function(e,r){$parcel$export(e.exports,"Priority",()=>s),$parcel$export(e.exports,"rpcRequest",()=>n);var t,s,i=parcelRequire("bu5Qj");(t=s||(s={}))[t.HIGHEST=9e3]="HIGHEST",t[t.NORMAL=600]="NORMAL",t[t.LOWEST=300]="LOWEST";let n=(e,r=s.NORMAL)=>({kind:"rpc_request",args:{label:(0,i.uuid)(),priority:r},body:e})}),parcelRegister("bu5Qj",function(e,r){$parcel$export(e.exports,"uuid",()=>t);function t(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){let r=16*Math.random()|0;return("x"===e?r:3&r|8).toString(16)})}}),parcelRegister("lYlQL",function(e,r){$parcel$export(e.exports,"CONFIG_DEFAULTS",()=>s),$parcel$export(e.exports,"generateConfig",()=>n),parcelRequire("el3kn");var t=parcelRequire("cobLS");let s={speed:100},i=`NOTE TO NODEJS USERS: This library requires an 'atob()' function. Please fix this first. SOLUTION: https://github.com/FarmBot/farmbot-js/issues/33`,n=e=>{if((0,t.isNode)()&&!$parcel$global.atob)throw Error(i);let r=(e=>{try{return JSON.parse(atob(e.split(".")[1]))}catch(e){throw console.warn(e),Error("Unable to parse token. Is it properly formatted?")}})(e.token);return{speed:e.speed||s.speed,token:e.token,secure:!1!==e.secure,mqttServer:(0,t.isNode)()?`mqtt://${r.mqtt}:1883`:r.mqtt_ws,mqttUsername:r.bot||"MISSING_MQTT_USERNAME",LAST_PING_OUT:0,LAST_PING_IN:0}}}),parcelRegister("c7gS9",function(e,r){$parcel$export(e.exports,"ResourceAdapter",()=>n),parcelRequire("b3Gr5");var t=parcelRequire("bu5Qj"),s=parcelRequire("a32Lo"),i=parcelRequire("adIE7");class n{constructor(e,r){this.parent=e,this.username=r,this.destroy=e=>{let{client:r}=this.parent;return r?this.doDestroy(r,e.kind,e.id):(0,i.rejectRpc)()},this.save=e=>{let{client:r}=this.parent;return r?this.doSave(r,e):(0,i.rejectRpc)()},this.destroyAll=e=>Promise.all(e.map(e=>this.destroy(e))),this.doDestroy=(e,r,i)=>new Promise((n,a)=>{let o=(0,t.uuid)();this.parent.on(o,(0,s.resolveOrReject)(n,a)),e.publish((0,s.outboundChanFor)(this.username,"destroy",r,o,i),"")}),this.doSave=(e,r)=>new Promise((i,n)=>{let a=(0,t.uuid)();this.parent.on(a,(0,s.resolveOrReject)(i,n));let o=(0,s.outboundChanFor)(this.username,"save",r.kind,a,r.body.id);e.publish(o,JSON.stringify(r.body))})}}}),parcelRegister("a32Lo",function(e,r){$parcel$export(e.exports,"outboundChanFor",()=>t),$parcel$export(e.exports,"internalError",()=>s),$parcel$export(e.exports,"resolveOrReject",()=>i);let t=(e,r,t,s,i=0)=>["bot",e,"resources_v0",r,t,s,i].join("/"),s={kind:"rpc_error",args:{label:"BROWSER_LEVEL_FAILURE"},body:[{kind:"explanation",args:{message:"Tried to perform batch operation before connect."}}]},i=(e,r)=>t=>("rpc_ok"==t.kind?e:r)(t)}),parcelRegister("adIE7",function(e,r){$parcel$export(e.exports,"rejectRpc",()=>s);var t=parcelRequire("a32Lo");let s=()=>Promise.reject(t.internalError)}),parcelRegister("7nBDP",function(e,r){var t,s,i,n,a,o;$parcel$export(e.exports,"MqttChanName",()=>t),$parcel$export(e.exports,"FbjsEventName",()=>s),$parcel$export(e.exports,"Misc",()=>i),(n=t||(t={})).fromApi="from_api",n.fromClients="from_clients",n.fromDevice="from_device",n.logs="logs",n.status="status",n.sync="sync",n.publicBroadcast="public_broadcast",n.pong="pong",(a=s||(s={})).status="status",a.logs="logs",a.malformed="malformed",a.offline="offline",a.online="online",a.publicBroadcast="public_broadcast",a.sent="sent",a.sync="sync",a.remove="remove",(o=i||(i={})).MQTT_DELIM="/",o.NULL="null",o[o.RECONNECT_THROTTLE_MS=1e3]="RECONNECT_THROTTLE_MS"}),parcelRegister("7L8KP",function(e,r){$parcel$export(e.exports,"timestamp",()=>t);function t(){return Math.round(new Date().getTime()/100)}}),parcelRegister("kgNDz",function(e,r){var t,s;$parcel$export(e.exports,"Encoder",()=>t),(s=t||(t={}))[s.unknown=-1]="unknown",s[s.quadrature=0]="quadrature",s[s.differential=1]="differential"}),parcelRegister("hWgEQ",function(e,r){var t,s;$parcel$export(e.exports,"SpecialStatus",()=>t),(s=t||(t={})).DIRTY="DIRTY",s.SAVING="SAVING",s.SAVED=""}),window.fbjs=parcelRequire("b3Gr5"); //# sourceMappingURL=farmbot_single_file.js.map