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

node-opcua

Package Overview
Dependencies
Maintainers
1
Versions
355
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

node-opcua - npm Package Compare versions

Comparing version 0.0.4 to 0.0.5

test/test_nodeid.js

85

bin/interactive_client.js
var readline = require('readline');
var fs = require("fs");
var treeify = require('treeify');
var OPCUAClient = require("../lib/opcua-client.js").OPCUAClient;
var utils = require('../lib/utils');
var opcua = require('../lib/nodeopcua');
var color = require('colors');
var ec = require("../lib/encode_decode");
var browse_service = require("../lib/browse_service");
var sprintf = require('sprintf');
var opcua = require("..");
var OPCUAClient = opcua.OPCUAClient;
var utils = require('../lib/utils');
function completer(line) {

@@ -63,24 +66,13 @@

var variables = require("./../lib/opcua_node_ids").Variable;
function get_variable_nodeid(value1,value2) {
if(variables.hasOwnProperty(value1)) {
nodeId = get_variable_nodeid(variables[value1],0);
console.log("node 0 ",nodeId);
} else if (parseInt(value1).toString() === value1 ) {
nodeId= ec.makeNodeId(parseInt(value1),parseInt(value2));
console.log("node 1 ",parseInt(value1),nodeId);
} else {
nodeId = ec.makeNodeId(value1,parseInt(value2));
console.log("node 2 ",nodeId);
}
return nodeId;
function colorize(value) {
return ("" + value).yellow.bold;
}
if (rl.history) {
var hostname = require("os").hostname();
rl.history.push("open opc.tcp://" + hostname + ":51210/UA/SampleServer");
rl.history.push("open opc.tcp://" + hostname + ":4841");
rl.history.push("b ObjectsFolder");
rl.history.push("r ns=2;s=Furnace_1.Temperature");
}

@@ -160,24 +152,19 @@

rl.pause();
nodes = [];
nodes.push( {
nodeId: get_variable_nodeid(args[1],args[2]),
includeSubtypes: true,
browseDirection: browse_service.BrowseDirection.Both
});
console.log(" browse ");
console.log(treeify.asTree(nodes,true) );
the_sesssion.browse(nodes,function(err,nodes) {
nodes = [ args[1] ];
the_sesssion.browse(nodes,function(err,nodeResults) {
if (err ) {
console.log(err);
console.log(nodes);
console.log(nodeResults);
} else {
//xx console.log(nodes.continuationPoint.toString("hex"));
//xx console.log(nodes[0].references[0]);
var summary = {};
nodes[0].references.forEach(function(node){
summary[node.browseName.name] = "id: " + (node.isForward ? "->" : "<-") + node.nodeId.toString() ;
});
console.log(treeify.asTree(summary,true));
for (var i = 0; i < nodeResults.length; i++ ) {
console.log("Node: ", nodes[i]);
nodeResults[i].references.forEach(function(node){
str = sprintf(" %-30s%s%s",node.browseName.name,(node.isForward ? "->" : "<-") ,node.nodeId.displayText() );
console.log(str);
});
}
}

@@ -194,13 +181,5 @@ });

rl.pause();
nodes = [];
nodes.push( {
nodeId: get_variable_nodeid(args[1],args[2]),
attributeId: 13,
indexRange: null,
dataEncoding: { id:0 , name: null}
});
console.log(treeify.asTree(nodes,true));
nodes = [args[1]];
the_sesssion.read(nodes,function(err,dataValues) {
console.log(" done ...");
if (err ) {

@@ -210,4 +189,10 @@ console.log(err);

} else {
console.log(dataValues[0]);
for (var i = 0; i < dataValues.length; i++ ) {
var dataValue = dataValues[i];
console.log(" Node : ", (nodes[i]).cyan.bold);
console.log(" type : ",colorize(dataValue.value.dataType.key));
console.log(" value: ",colorize(dataValue.value.value));
console.log(" statusCode: 0x", dataValue.statusCode.toString(16) );
console.log(" sourceTimestamp: ",dataValue.sourceTimestamp, dataValue.sourcePicoseconds );
}
}

@@ -214,0 +199,0 @@ });

var fs = require("fs");
var treeify = require('treeify');
var _ = require("underscore");
var color = require("colors");
var util = require("util");
var Table = require('easy-table');
var async = require("async");
var utils = require('../lib/utils');
var coerceNodeId = require("../lib/nodeid").coerceNodeId;
var util = require("util");
var Table = require('easy-table');
var argv = require('optimist')

@@ -12,6 +15,5 @@ .usage('Usage: $0 --port [num] --hostname <hostname> -d')

var OPCUAClient = require("../lib/opcua-client.js").OPCUAClient;
var async = require("async");
var opcua = require("../");
var client = new OPCUAClient();
var client = new opcua.OPCUAClient();

@@ -25,32 +27,16 @@ var port = argv.port  || 4841

var browse_service = require("../lib/browse_service");
var color = require("colors");
function browseTree(root, nodeId, callback) {
var nodeIds = _.isArray(nodeId) ? nodeId : [nodeId];
var nodeIds = _.isArray(nodeId) ? nodeId : [ nodeId];
var folderTypeNodeId = opcua.resolveNodeId("FolderType");
the_session.browse(nodeIds, function (err, results,diagnostics) {
var nodesToBrowse = [];
nodeIds.map(function(nodeId) {
return {
nodeId: nodeId,
includeSubtypes: true,
browseDirection: browse_service.BrowseDirection.Forward
};
});
var tasks = [];
var folderTypeNodeId = coerceNodeId("i=61");
the_session.browse(nodesToBrowse, function (err, nodes) {
var tasks = [];
var nodeIds = [];
if (!err) {
// we want typeDefinition i=61 => FolderType
nodes[0].references.forEach(function (node) {
results[0].references.forEach(function (node) {

@@ -62,19 +48,22 @@ root[node.browseName.name] = {};

if (node.typeDefinition.value != 0 ) { // folderTypeNodeId.value || node.typeDefinition.value == 2000 || node.typeDefinition.value == 62 ) {
nodeIds.push(node.nodeId);
if (node.typeDefinition.value == folderTypeNodeId.value || node.typeDefinition.value == 2000 || node.typeDefinition.value == 62 ) {
if (node.isForward) {
//xx console.log(" appending : " + node.nodeId.displayText());
tasks.push(function(callback){ browseTree(root[node.browseName.name].nodes,node.nodeId,callback); });
}
}
});
process.nextTick(function(){
async.series(tasks,function() {
callback(err,root);
});
});
} else {
console.log(err.message.red);
console.log(err);
callback(err,null);
}
tasks.push(function(callback){
browseTree(root[node.browseName.name].nodes,nodeIds,callback);
});
process.nextTick(function(){
async.series(tasks,function(){
callback(err,root);
});
});
// xxcallback(err,root);
});

@@ -88,3 +77,3 @@

function(callback) {
console.log(" connecting to ", endpointUrl);
console.log(" connecting to ", endpointUrl.cyan.bold);
client.connect(endpointUrl,callback);

@@ -130,3 +119,3 @@ },

function(callback) {
console.log(" connecting to ", endpointUrl);
console.log(" reconnecting to ", endpointUrl.cyan.bold);
client.connect(endpointUrl,callback);

@@ -138,3 +127,6 @@ },

client.createSession(function (err,session){
the_session = session;
if (!err) {
the_session = session;
console.log(" session created".yellow);
}
callback(err);

@@ -146,5 +138,4 @@ });

function(callback) {
return callback();
var root = {};
browseTree(root,coerceNodeId("i=84"),function(err,root){
browseTree(root,"RootFolder",function(err,root){
console.log(treeify.asTree(root, true));

@@ -156,3 +147,8 @@ callback(err);

function(callback) {
the_session.close(callback);
console.log(" closing session");
the_session.close(function(err){
console.log(" session closed");
callback();
});
},

@@ -166,9 +162,12 @@

if (err) {
console.log(" process terminated with an error");
console.log(" client : process terminated with an error");
console.log(" error" , err) ;
console.log(err.stack) ;
} else {
console.log("success !! ");
}
// force disconnection
if (client) { client.disconnect(function(){}); }
});

@@ -1,4 +0,6 @@

module.exports.OPCUAClient = require("./lib/opcua-client").OPCUAClient;
module.exports.structures = require("./lib/structures");
module.exports.browse_service = require("./lib/browse_service");
module.exports.read_service = require("./lib/read_service");
module.exports.OPCUAClient = require("./lib/opcua-client").OPCUAClient;
module.exports.structures = require("./lib/structures");
module.exports.browse_service = require("./lib/browse_service");
module.exports.read_service = require("./lib/read_service");
module.exports.parseEndpointUrl = require("./lib/nodeopcua").parseEndpointUrl;
module.exports.resolveNodeId = require("./lib/nodeid").resolveNodeId;

@@ -84,4 +84,4 @@

if (response instanceof s.ServiceFault) {
var err = response;
err.request = "TODO : inject request here for future diagnostic ";
var err = new Error(" ServiceFault returned by server "+ JSON.stringify(response,0," "));
err.response = response;
self._terminate(err,null);

@@ -331,2 +331,3 @@

self.emit("receive_response",response);
assert(!err || (err instanceof Error));
callback(err,response);

@@ -333,0 +334,0 @@ });

@@ -29,6 +29,6 @@ var util = require("util");

case NodeIdType.STRING:
return "ns="+ this.namespace +";s='"+this.value+"'";
return "ns="+ this.namespace +";s="+this.value+"";
break;
case NodeIdType.GUID:
return "ns="+ this.namespace +";g='"+this.value+"'";
return "ns="+ this.namespace +";g="+this.value+"";
break;

@@ -43,3 +43,5 @@ case NodeIdType.BYTESTRING:

exports.NodeId = NodeId;
/**

@@ -51,2 +53,6 @@ * Convert a value into a nodeId:

*/
var rege_ns_i =/ns=([0-9]+)\;i=([0-9]+)/ ;
var rege_ns_s =/ns=([0-9]+)\;s=(.*)/ ;
function coerceNodeId(value,namespace){

@@ -69,12 +75,19 @@

} else if ( value.substr(0,2) === "s=" ) {
identifierType = NodeIdType.STRING;
value = value.substr(2);
} else if (is_guid(value)) {
identifierType= NodeIdType.GUID;
} else {
} else if ( (matches = rege_ns_i.exec(value)) !== null) {
identifierType = NodeIdType.NUMERIC;
var r = /ns=([0-9]+)\;i=([0-9]+)/ ;
var matches = r.exec(value);
if (matches) {
namespace = parseInt(matches[1]);
value = parseInt(matches[2]);
}
namespace = parseInt(matches[1]);
value = parseInt(matches[2]);
} else if ( (matches = rege_ns_s.exec(value)) !== null) {
identifierType = NodeIdType.STRING;
namespace = parseInt(matches[1]);
value = matches[2];
}

@@ -165,2 +178,66 @@

return new ExpandedNodeId(NodeIdType.NUMERIC,value,namespace,namespaceUri,serverIndex);
};
};
var variables = require("./../lib/opcua_node_ids").Variable;
var objects = require("./../lib/opcua_node_ids").Object;
var objectTypes = require("./../lib/opcua_node_ids").ObjectType;
var variableTypes = require("./../lib/opcua_node_ids").VariableType;
var methods = require("./../lib/opcua_node_ids").Method;
function resolveNodeId(node_or_string) {
var nodeId;
if(objects.hasOwnProperty(node_or_string)) {
nodeId = resolveNodeId(objects[node_or_string],0);
} else if(variables.hasOwnProperty(node_or_string)) {
nodeId = resolveNodeId(variables[node_or_string],0);
} else if(objectTypes.hasOwnProperty(node_or_string)) {
nodeId = resolveNodeId(objectTypes[node_or_string],0);
} else if(variableTypes.hasOwnProperty(node_or_string)) {
nodeId = resolveNodeId(variableTypes[node_or_string],0);
} else if(methods.hasOwnProperty(node_or_string)) {
nodeId = resolveNodeId(methods[node_or_string],0);
} else {
nodeId = coerceNodeId(node_or_string);
}
return nodeId;
}
exports.resolveNodeId = resolveNodeId;
var _known_NodeIds = null;
NodeId.prototype.displayText = function()
{
if (_known_NodeIds == null) {
// build reverse index
_known_NodeIds = {};
function expand_map(reverse_index,direct_index) {
for ( name in direct_index ) {
if (direct_index.hasOwnProperty(name)) {
var value = direct_index[name];
reverse_index[value] = name;
}
}
}
expand_map(_known_NodeIds,objects);
expand_map(_known_NodeIds,objectTypes);
expand_map(_known_NodeIds,variables);
expand_map(_known_NodeIds,variableTypes);
expand_map(_known_NodeIds,methods);
}
if (this.namespace === 0 ) {
if (_known_NodeIds.hasOwnProperty(this.value)) {
return _known_NodeIds[this.value] + " (" + this.toString() +")";
}
}
return this.toString();
};

@@ -15,2 +15,3 @@ var util = require("util");

var ec = require("./encode_decode");
var resolveNodeId = require("./nodeid").resolveNodeId;

@@ -167,31 +168,30 @@ var debugLog = require("../lib/utils").make_debugLog(__filename);

/**
* session.browse([{
* nodeId: ec.makeNodeId(85),
* includeSubTypes: true,
* browseDirection: browse_service.BrowseDirection.Both,
* }],function(err,nodes) {} );
* @example:
*
* @param nodesToBrowse
* session.browse("RootFolder",function(err,results,diagnostics) {} );
*
* @param nodes
* @param callback
*/
OPCUASession.prototype.browse = function(nodesToBrowse,callback) {
OPCUASession.prototype.browse = function(nodes,callback) {
assert(typeof(callback) === "function");
var request = new browse_service.BrowseRequest({
});
if (!_.isArray(nodes)) { nodes = [nodes]; }
nodesToBrowse.forEach(function(node) {
var b = new browse_service.BrowseDescription(node);
b.resultMask = b.resultMask || 63;
request.nodesToBrowse.push(b);
var nodesToBrowse = [];
nodes.forEach(function(node) {
nodesToBrowse.push({
nodeId: resolveNodeId(node),
includeSubtypes: true,
browseDirection: browse_service.BrowseDirection.Both,
resultMask: 63
});
});
var request = new browse_service.BrowseRequest({ nodesToBrowse:nodesToBrowse });
request.requestHeader.authenticationToken = this.authenticationToken;
var self = this;
self._client._secureChannel.performMessageTransaction(request, browse_service.BrowseResponse,function(err,response){
this.performMessageTransaction(request, browse_service.BrowseResponse,function(err,response){
if(err) {

@@ -210,23 +210,36 @@ callback(err,null,response);

/**
* @example:
*
* @param nodesToRead
* session.read("ns=2;s=Furnace_1.Temperature",function(err,dataValues,diagnostics) {} );
*
* @param nodes
* @param callback
*/
OPCUASession.prototype.read = function(nodesToRead,callback) {
OPCUASession.prototype.read = function(nodes,callback) {
assert(typeof(callback) === "function");
if (!_.isArray(nodes)) { nodes = [nodes]; }
var request = new read_service.ReadRequest({
nodesToRead:nodesToRead
var nodesToRead = [];
nodes.forEach(function(node) {
nodesToRead.push( {
nodeId: resolveNodeId(node),
attributeId: 13,
indexRange: null,
dataEncoding: { id:0 , name: null}
});
});
//xx console.dir(request);
var request = new read_service.ReadRequest({ nodesToRead: nodesToRead });
request.requestHeader.authenticationToken = this.authenticationToken;
assert( nodes.length == request.nodesToRead.length);
var self = this;
self._client._secureChannel.performMessageTransaction(request, read_service.ReadResponse,function(err,response){
this.performMessageTransaction(request, read_service.ReadResponse,function(err,response) {
if(err) {
callback(err,null,response);
callback(err,response);
} else {
assert( nodes.length == response.results.length);
callback(null,response.results,response.diagnosticInfos);

@@ -238,3 +251,10 @@ }

OPCUASession.prototype.performMessageTransaction = function(request, responseClass,callback) {
assert(typeof(callback) === "function");
request.requestHeader.authenticationToken = this.authenticationToken;
this._client._secureChannel.performMessageTransaction(request,responseClass,callback);
};
OPCUASession.prototype.close = function(callback) {

@@ -245,2 +265,3 @@ this._client.closeSession(this,callback);

OPCUAClient.prototype._nextSessionName = function()

@@ -423,2 +444,3 @@ {

if(err) {
assert(err instanceof Error);
callback(err,null);

@@ -425,0 +447,0 @@ } else {

{
"name": "node-opcua",
"version": "0.0.4",
"version": "0.0.5",
"description": "pure nodejs OPCUA SDK",

@@ -5,0 +5,0 @@ "main": "index.js",

@@ -46,4 +46,9 @@ node-opcua

var endpointUrl = "opc.tcp://localhost:4841/UA/Sample";
var endpointUrl = "opc.tcp://" + require("os").hostname() + ":4841";
var the_session = null;
async.series([
// step 1 : connect to
function(callback) {

@@ -59,7 +64,54 @@ client.connect(endpointUrl,function (err) {

},
function(callback) { client.disconnect(callback); }
], function() { console.log("done!")} ) ;
// step 2 : createSession
function(callback) {
client.createSession( function(err,session) {
if(!err) {
the_session = session;
}
callback(err);
});
},
// step 3 : browse
function(callback) {
the_session.browse("RootFolder", function(err,browse_result,diagnostics){
if(!err) {
browse_result[0].references.forEach(function(reference) {
console.log( reference.browseName);
});
}
callback(err);
});
},
// step 4 : read a variable
function(callback) {
the_session.read("ns=2;s=Furnace_1.Temperature", function(err,dataValues,diagnostics) {
if (!err) {
console.log(" temperature = " , dataValues[0].value.value);
}
callback(err);
})
},
], function(err) {
if (err) {
console.log(" failure ",err);
} else {
console.log("done!")
}
// disconnect regardless
client.disconnect(function(){});
}) ;
```
now run it

@@ -66,0 +118,0 @@

Sorry, the diff of this file is not supported yet

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