New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

remote-serial-port-client

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

remote-serial-port-client - npm Package Compare versions

Comparing version 0.2.0 to 0.4.0

index.js

4

dist/RemoteSerialPort.min.js

@@ -1,2 +0,2 @@

/*! RemoteSerialPort v0.2.0 | https://github.com/papnkukn/remote-serial-port-client | MIT license */
!function(e){function t(e){var t=this;t.events={};var n={verbose:!1,url:null,userAgent:null};if(t.options=Object.assign({},n,e||{}),!e.url)throw new Error("Missing required 'url' parameter!");if(!e.userAgent&&"function"==typeof require){var r=require("../package.json");e.userAgent="RemoteSerialPort/"+r.version}"function"==typeof o.defaults&&o.defaults({headers:{Accept:"application/json","User-Agent":e.userAgent}}),t.emit=function(e,o){var n=t.events[e];"function"==typeof n&&n(o)},t.request=function(e,n){try{o({method:e.method||"GET",url:t.options.url+e.route,headers:e.headers,body:e.body},function(e,t,o){if(n)try{if(e)throw e;var r;try{r=JSON.parse(o)}catch(e){r=o}if(t&&t.statusCode>=400)throw new Error(r.error||"HTTP Status Code "+t.statusCode);n(null,r)}catch(e){n(e)}})}catch(e){n&&n(e)}}}var o,n;if("object"==typeof exports||"function"==typeof define&&define.amd)o=require("request"),n=function(e){var t=require("ws"),o=new t(e);return o._onevent={},o._delayed=[],o._emit=function(e,t){var n=o._onevent[e];n?t?n(t):n():o._delayed.push({name:e,data:t})},o.on("open",function(){o._emit("open")}),o.on("close",function(){o._emit("close")}),o.on("message",function(e,t){o._emit("read",e)}),o.on("error",function(e){o._emit("error",event)}),o._on=o.on,o.on=function(e,t){if(!o._onevent[e])for(var n=0;o._delayed[n++];){var r=o._delayed[n];r.name==e&&(r.data?t(r.data):t()),o._delayed.splice(n,1),n--}o._onevent[e]=t},o.write=function(e){o.send(e),o._emit("write",e)},o},"node";else{if("undefined"==typeof jQuery)return console.error("RemoteSerialPort not available in this environment! Hint: try with Node.js or jQuery.");o=function(e,t){var o={cache:!1,type:e.method||"GET",url:e.url||"#",data:e.body,dataType:"json",error:function(e,o,n){t&&t(e.responseJSON,{statusCode:o},null)},success:function(e,o,n){t&&t(null,{statusCode:o},e)}};e.headers&&(o.headers=e.headers),e.headers&&e.headers["Content-Type"]&&(o.contentType=e.headers["Content-Type"]),console.log(o),jQuery.ajax(o)},n=function(t){if(!e.WebSocket)throw new Error("Browser does not support WebSocket!");var o=new e.WebSocket(t);return o.binaryType="arraybuffer",o._onevent={},o._delayed=[],o._emit=function(e,t){var n=o._onevent[e];n?t?n(t):n():o._delayed.push({name:e,data:t})},o.onopen=function(e){o._emit("open")},o.onclose=function(e){o._emit("close")},o.onmessage=function(e){o._emit("read",new Uint8Array(e.data))},o.onerror=function(e){o._emit("error",e)},o._on=o.on,o.on=function(e,t){if(!o._onevent[e])for(var n=0;o._delayed[n++];){var r=o._delayed[n];r.name==e&&(r.data?t(r.data):t()),o._delayed.splice(n,1),n--}o._onevent[e]=t},o.write=function(e){o.send(e),o._emit("write",e)},o},"jquery"}t.prototype.list=function(e){this.request({method:"GET",route:"api/v1/port"},e)},t.prototype.status=function(e,t){this.request({method:"GET",route:"api/v1/port/"+e},t)},t.prototype.open=function(e,t,o){this.request({method:"POST",route:"api/v1/port/"+e+"/open",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(t||{})},o)},t.prototype.close=function(e,t){this.request({method:"POST",route:"api/v1/port/"+e+"/close",headers:{Accept:"application/json"}},t)},t.prototype.write=function(e,t,o){this.request({method:"POST",route:"api/v1/port/"+e+"/write",headers:{Accept:"application/json","Content-Type":"application/octet-stream"},body:t},o)},t.prototype.read=function(e,t){this.request({method:"GET",route:"api/v1/port/"+e+"/read",headers:{Accept:"application/json"}},t)},t.prototype.clearReadBuffer=function(e,t){this.request({method:"DELETE",route:"api/v1/port/"+e+"/read",headers:{Accept:"application/json"}},t)},t.prototype.available=function(e,t){this.request({method:"GET",route:"api/v1/port/"+e+"/available",headers:{Accept:"application/json"}},t)},t.prototype.bind=function(e,t){if(!t)throw new Error("Missing serial port name!");if("data"!=e&&"control"!=e)throw new Error("Only 'data' and 'control' line allowed!");var o=n("ws://localhost:5147/api/v1/port/"+t+"/"+e);return"control"==e&&(o.open=function(e){var t={event:"open",data:e};o.send(JSON.stringify(t)),o._emit("write",e)}),o},t.prototype.on=function(e,t){this.events[e]=t},"object"==typeof exports?module.exports=t:"function"==typeof define&&define.amd?define(function(){return t}):e.RemoteSerialPort=t}(this);
/*! RemoteSerialPort v0.4.0 | https://github.com/papnkukn/remote-serial-port-client | MIT license */
!function(e){function t(e){function t(e,t,o,n){throw new Error("Not available in this mode!")}var n=this;n.events={};var i={verbose:!1,mode:"http",url:null,userAgent:null};switch(n.options=Object.assign({},i,e||{}),n.options.mode){case"http":if(!n.options.url)throw new Error("Missing required 'url' parameter!");if(!n.options.userAgent&&"function"==typeof require){var a=require("../package.json");n.options.userAgent="RemoteSerialPort/"+a.version}"function"==typeof o.defaults&&o.defaults({headers:{Accept:"application/json","User-Agent":n.options.userAgent}});break;case"udp":case"tcp":if("node"!=r)throw new Error("TCP and UDP sockets are available only in Node.js");var s=new(require("./RemoteSerialPortSocket.js"))(n.options);n.socket=s,n.options=s.options,n.events=s.events,n.emit=s.emit,n.buffer=s.buffer,n.list=t,n.status=t,n.open=function(e,t,o){var n=this;e&&n.options.verbose&&console.warn("Warning: Serial port name is ignored when using a socket!"),t&&n.options.verbose&&console.warn("Warning: Serial port options are ignored when using a socket!"),n.socket.open(o)},n.close=function(e,t){n.socket.close(t)},n.write=function(e,t,o){n.socket.write(t,o)},n.read=function(e,t){n.socket.read(t)},n.clearReadBuffer=function(e,t){n.socket.clearReadBuffer(t)},n.available=function(e,t){n.socket.available(t)},n.bind=t,n.on=s.on;break;default:throw new Error("Unknown mode: "+n.options.mode)}n.emit=function(e,t){var o=n.events[e];"function"==typeof o&&o(t)},n.request=function(e,t){try{o({method:e.method||"GET",url:n.options.url+e.route,headers:e.headers,body:e.body},function(e,o,n){if(t)try{if(e)throw e;var r;try{r=JSON.parse(n)}catch(e){r=n}if(o&&o.statusCode>=400)throw new Error(r.error||"HTTP Status Code "+o.statusCode);t(null,r)}catch(e){t(e)}})}catch(e){t&&t(e)}}}var o,n,r="unknown";if("object"==typeof exports||"function"==typeof define&&define.amd)o=require("request"),n=function(e){var t=new(require("ws"))(e);return t._onevent={},t._delayed=[],t._emit=function(e,o){var n=t._onevent[e];n?o?n(o):n():t._delayed.push({name:e,data:o})},t.on("open",function(){t._emit("open")}),t.on("close",function(){t._emit("close")}),t.on("message",function(e,o){t._emit("read",e)}),t.on("error",function(e){t._emit("error",event)}),t._on=t.on,t.on=function(e,o){if(!t._onevent[e])for(var n=0;t._delayed[n++];){var r=t._delayed[n];r.name==e&&(r.data?o(r.data):o()),t._delayed.splice(n,1),n--}t._onevent[e]=o},t.write=function(e){t.send(e),t._emit("write",e)},t},r="node";else{if("undefined"==typeof jQuery)return console.error("RemoteSerialPort not available in this environment! Hint: try with Node.js or jQuery.");o=function(e,t){var o={cache:!1,type:e.method||"GET",url:e.url||"#",data:e.body,dataType:"json",error:function(e,o,n){t&&t(e.responseJSON,{statusCode:o},null)},success:function(e,o,n){t&&t(null,{statusCode:o},e)}};e.headers&&(o.headers=e.headers),e.headers&&e.headers["Content-Type"]&&(o.contentType=e.headers["Content-Type"]),console.log(o),jQuery.ajax(o)},n=function(t){if(!e.WebSocket)throw new Error("Browser does not support WebSocket!");var o=new e.WebSocket(t);return o.binaryType="arraybuffer",o._onevent={},o._delayed=[],o._emit=function(e,t){var n=o._onevent[e];n?t?n(t):n():o._delayed.push({name:e,data:t})},o.onopen=function(e){o._emit("open")},o.onclose=function(e){o._emit("close")},o.onmessage=function(e){o._emit("read",new Uint8Array(e.data))},o.onerror=function(e){o._emit("error",e)},o._on=o.on,o.on=function(e,t){if(!o._onevent[e])for(var n=0;o._delayed[n++];){var r=o._delayed[n];r.name==e&&(r.data?t(r.data):t()),o._delayed.splice(n,1),n--}o._onevent[e]=t},o.write=function(e){o.send(e),o._emit("write",e)},o},r="jquery"}t.prototype.list=function(e){this.request({method:"GET",route:"api/v1/port"},e)},t.prototype.status=function(e,t){this.request({method:"GET",route:"api/v1/port/"+e},t)},t.prototype.open=function(e,t,o){this.request({method:"POST",route:"api/v1/port/"+e+"/open",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(t||{})},o)},t.prototype.close=function(e,t){this.request({method:"POST",route:"api/v1/port/"+e+"/close",headers:{Accept:"application/json"}},t)},t.prototype.write=function(e,t,o){this.request({method:"POST",route:"api/v1/port/"+e+"/write",headers:{Accept:"application/json","Content-Type":"application/octet-stream"},body:t},o)},t.prototype.read=function(e,t){this.request({method:"GET",route:"api/v1/port/"+e+"/read",headers:{Accept:"application/json"}},t)},t.prototype.clearReadBuffer=function(e,t){this.request({method:"DELETE",route:"api/v1/port/"+e+"/read",headers:{Accept:"application/json"}},t)},t.prototype.available=function(e,t){this.request({method:"GET",route:"api/v1/port/"+e+"/available",headers:{Accept:"application/json"}},t)},t.prototype.bind=function(e,t){if(!t)throw new Error("Missing serial port name!");if("data"!=e&&"control"!=e)throw new Error("Only 'data' and 'control' line allowed!");var o=n("ws://localhost:5147/api/v1/port/"+t+"/"+e);return"control"==e&&(o.open=function(e){var t={event:"open",data:e};o.send(JSON.stringify(t)),o._emit("write",e)}),o},t.prototype.on=function(e,t){this.events[e]=t},"object"==typeof exports?module.exports=t:"function"==typeof define&&define.amd?define(function(){return t}):e.RemoteSerialPort=t}(this);

@@ -191,2 +191,3 @@ ;(function(global) {

verbose: false,
mode: "http",
url: null,

@@ -199,19 +200,105 @@ userAgent: null

if (!options.url) {
throw new Error("Missing required 'url' parameter!");
}
if (!options.userAgent && typeof require === 'function') {
var pkg = require('../package.json');
options.userAgent = "RemoteSerialPort/" + pkg.version;
}
if (typeof request.defaults === 'function') {
request.defaults({
headers: {
"Accept": "application/json",
"User-Agent": options.userAgent
//Mode-dependent procedure
switch (self.options.mode) {
case "http":
if (!self.options.url) {
throw new Error("Missing required 'url' parameter!");
}
});
}
if (!self.options.userAgent && typeof require === 'function') {
var pkg = require('../package.json');
self.options.userAgent = "RemoteSerialPort/" + pkg.version;
}
if (typeof request.defaults === 'function') {
request.defaults({
headers: {
"Accept": "application/json",
"User-Agent": self.options.userAgent
}
});
}
break;
case "udp":
case "tcp":
if (env != "node") {
throw new Error("TCP and UDP sockets are available only in Node.js");
}
//Feature not available when using TCP or UDP socket
function unavailable(a, b, c, d) {
throw new Error("Not available in this mode!");
}
//Initialize the socket mode
var RemoteSerialPortSocket = require('./RemoteSerialPortSocket.js');
var socket = new RemoteSerialPortSocket(self.options);
self.socket = socket;
self.options = socket.options;
self.events = socket.events;
self.emit = socket.emit;
self.buffer = socket.buffer;
//Remap to make functions compatible
self.list = unavailable;
self.status = unavailable;
self.open = function(port, options, callback) {
var self = this;
if (port && self.options.verbose) {
console.warn("Warning: Serial port name is ignored when using a socket!");
}
if (options && self.options.verbose) {
console.warn("Warning: Serial port options are ignored when using a socket!");
}
if (typeof port == 'function' && !options) {
options = port; //Shift argument
}
if (typeof options == 'function' && !callback) {
callback = options; //Shift argument
}
self.socket.open(callback);
};
self.close = function(port, callback) {
if (typeof port == 'function' && !callback) {
callback = port; //Shift argument
}
self.socket.close(callback);
};
self.write = function(port, data, callback) {
//Shift arguments
if (port && !data && !callback) {
data = port;
}
if (typeof data == 'function' && !callback) {
data = port;
callback = data;
}
self.socket.write(data, callback);
};
self.read = function(port, callback) {
if (typeof port == 'function' && !callback) {
callback = port; //Shift argument
}
self.socket.read(callback);
};
self.clearReadBuffer = function(port, callback) {
if (typeof port == 'function' && !callback) {
callback = port; //Shift argument
}
self.socket.clearReadBuffer(callback);
};
self.available = function(port, callback) {
if (typeof port == 'function' && !callback) {
callback = port; //Shift argument
}
self.socket.available(callback);
};
self.bind = unavailable;
self.on = socket.on;
break;
default:
throw new Error("Unknown mode: " + self.options.mode);
}

@@ -245,3 +332,3 @@ //Private event emitter

}
catch (error) {
catch (err) {
data = body;

@@ -256,4 +343,4 @@ }

}
catch (error) {
callback(error);
catch (err) {
callback(err);
}

@@ -260,0 +347,0 @@ }

{
"name": "remote-serial-port-client",
"description": "Serial port over Ethernet",
"version": "0.2.0",
"main": "lib/RemoteSerialPort.js",
"description": "Serial port over Ethernet using REST API, WebSocket, TCP or UDP socket",
"version": "0.4.0",
"author": "Papn Kukn",
"license": "MIT",
"main": "index.js",
"scripts": {

@@ -11,8 +13,14 @@ "test": "echo \"Error: no test specified\" && exit 1",

},
"author": "Papn Kukn",
"license": "MIT",
"dependencies": {
"request": "^2.81.0",
"semaphore": "^1.0.5",
"ws": "^2.3.1"
},
"repository": {
"type": "git",
"url": "https://github.com/papnkukn/remote-serial-port-client"
},
"bugs": {
"url": "https://github.com/papnkukn/remote-serial-port-client/issues"
}
}

@@ -22,2 +22,3 @@ ## Introduction

```javascript
var RemoteSerialPort = require('remote-serial-port-client').RemoteSerialPort;
var serialport = new RemoteSerialPort({ url: "http://localhost:5147/" });

@@ -33,3 +34,3 @@ serialport.list(function(error, ports) {

```javascript
var RemoteSerialPort = require("remote-serial-port-client");
var RemoteSerialPort = require('remote-serial-port-client').RemoteSerialPort;
var serialport = new RemoteSerialPort({ url: "http://localhost:5147/" });

@@ -39,2 +40,19 @@ ...

Using a TCP socket
```javascript
var RemoteSerialPort = require('remote-serial-port-client').RemoteSerialPort;
var tcp = new RemoteSerialPort({ mode: "tcp", host: "127.0.0.1", port: 5147 });
tcp.open(function(error, result) {
console.log("Connected");
setTimeout(function() {
tcp.write("AT;\n");
}, 3000);
});
tcp.on("read", function(result) {
console.log("read", result.data.toString('ascii'));
});
```
Similar for UDP, just change the `mode` to `udp`.
## Use in browser

@@ -55,8 +73,16 @@

### Constructor
### new RemoteSerialPort(options)
```
new RemoteSerialPort(options)
```
Creates a new instance.
Propreties of `options` argument:
Argument name | Type | Description
----------------- | --------- | ---------------------------------------------------------------------------------
verbose | boolean | A value indicating whether to print details to console
mode | string | Mode: http, tcp, udp; default: http
url | string | URL to the the HTTP of the serial port server, mode 'http' only
host | string | Host name or IP address of the serial port server, TCP and UDP only
port | number | Port number of the serial port server, TCP and UDP only
### list(callback)

@@ -63,0 +89,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc