Socket
Socket
Sign inDemoInstall

@node-red/runtime

Package Overview
Dependencies
Maintainers
2
Versions
109
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@node-red/runtime - npm Package Compare versions

Comparing version 1.0.6 to 1.1.0-beta.1

26

lib/api/flows.js

@@ -243,14 +243,22 @@ /**

}
var definition = runtime.nodes.getCredentialDefinition(opts.type) || {};
var sendCredentials = {};
for (var cred in definition) {
if (definition.hasOwnProperty(cred)) {
if (definition[cred].type == "password") {
var key = 'has_' + cred;
sendCredentials[key] = credentials[cred] != null && credentials[cred] !== '';
continue;
var cred;
if (/^subflow(:|$)/.test(opts.type)) {
for (cred in credentials) {
if (credentials.hasOwnProperty(cred)) {
sendCredentials['has_'+cred] = credentials[cred] != null && credentials[cred] !== '';
}
sendCredentials[cred] = credentials[cred] || '';
}
} else {
var definition = runtime.nodes.getCredentialDefinition(opts.type) || {};
for (cred in definition) {
if (definition.hasOwnProperty(cred)) {
if (definition[cred].type == "password") {
var key = 'has_' + cred;
sendCredentials[key] = credentials[cred] != null && credentials[cred] !== '';
continue;
}
sendCredentials[cred] = credentials[cred] || '';
}
}
}

@@ -257,0 +265,0 @@ resolve(sendCredentials);

@@ -65,3 +65,3 @@ /**

runtime.log.audit({event: "nodes.info.get",id:id,error:"not_found"}, opts.req);
var err = new Error();
var err = new Error("Node not found");
err.code = "not_found";

@@ -109,3 +109,3 @@ err.status = 404;

runtime.log.audit({event: "nodes.config.get",id:id,error:"not_found"}, opts.req);
var err = new Error();
var err = new Error("Node not found");
err.code = "not_found";

@@ -150,3 +150,3 @@ err.status = 404;

runtime.log.audit({event: "nodes.module.get",id:opts.module,error:"not_found"}, opts.req);
var err = new Error();
var err = new Error("Module not found");
err.code = "not_found";

@@ -165,2 +165,3 @@ err.status = 404;

* @param {String} opts.version - (optional) the version of the module to install
* @param {String} opts.url - (optional) url to install
* @param {Object} opts.req - the request to log (optional)

@@ -190,8 +191,8 @@ * @return {Promise<ModuleInfo>} - the node module info

}
runtime.nodes.installModule(opts.module,opts.version).then(function(info) {
runtime.log.audit({event: "nodes.install",module:opts.module,version:opts.version}, opts.req);
runtime.nodes.installModule(opts.module,opts.version,opts.url).then(function(info) {
runtime.log.audit({event: "nodes.install",module:opts.module,version:opts.version,url:opts.url}, opts.req);
return resolve(info);
}).catch(function(err) {
if (err.code === 404) {
runtime.log.audit({event: "nodes.install",module:opts.module,version:opts.version,error:"not_found"}, opts.req);
runtime.log.audit({event: "nodes.install",module:opts.module,version:opts.version,url:opts.url,error:"not_found"}, opts.req);
// TODO: code/status

@@ -201,6 +202,6 @@ err.status = 404;

err.status = 400;
runtime.log.audit({event: "nodes.install",module:opts.module,version:opts.version,error:err.code}, opts.req);
runtime.log.audit({event: "nodes.install",module:opts.module,version:opts.version,url:opts.url,error:err.code}, opts.req);
} else {
err.status = 400;
runtime.log.audit({event: "nodes.install",module:opts.module,version:opts.version,error:err.code||"unexpected_error",message:err.toString()}, opts.req);
runtime.log.audit({event: "nodes.install",module:opts.module,version:opts.version,url:opts.url,error:err.code||"unexpected_error",message:err.toString()}, opts.req);
}

@@ -240,3 +241,3 @@ return reject(err);

runtime.log.audit({event: "nodes.remove",module:opts.module,error:"not_found"}, opts.req);
var err = new Error();
var err = new Error("Module not found");
err.code = "not_found";

@@ -287,3 +288,3 @@ err.status = 404;

runtime.log.audit({event: "nodes.module.set",module:mod,error:"not_found"}, opts.req);
var err = new Error();
var err = new Error("Module not found");
err.code = "not_found";

@@ -339,3 +340,3 @@ err.status = 404;

runtime.log.audit({event: "nodes.info.set",id:id,error:"not_found"}, opts.req);
var err = new Error();
var err = new Error("Node not found");
err.code = "not_found";

@@ -342,0 +343,0 @@ err.status = 404;

@@ -344,2 +344,3 @@ /**

var nodeType = node.type;
var cred;
var newCreds = node.credentials;

@@ -349,26 +350,54 @@ if (newCreds) {

var savedCredentials = credentialCache[nodeID] || {};
var dashedType = nodeType.replace(/\s+/g, '-');
var definition = credentialsDef[dashedType];
if (!definition) {
log.warn(log._("nodes.credentials.not-registered",{type:nodeType}));
return;
}
if (/^subflow(:|$)/.test(nodeType)) {
for (cred in newCreds) {
if (newCreds.hasOwnProperty(cred)) {
if (newCreds[cred] === "__PWRD__") {
continue;
}
if (0 === newCreds[cred].length || /^\s*$/.test(newCreds[cred])) {
delete savedCredentials[cred];
dirty = true;
continue;
}
if (!savedCredentials.hasOwnProperty(cred) || JSON.stringify(savedCredentials[cred]) !== JSON.stringify(newCreds[cred])) {
savedCredentials[cred] = newCreds[cred];
dirty = true;
}
for (var cred in definition) {
if (definition.hasOwnProperty(cred)) {
if (newCreds[cred] === undefined) {
continue;
}
if (definition[cred].type == "password" && newCreds[cred] == '__PWRD__') {
continue;
}
for (cred in savedCredentials) {
if (savedCredentials.hasOwnProperty(cred)) {
if (!newCreds.hasOwnProperty(cred)) {
delete savedCredentials[cred];
dirty = true;
}
}
if (0 === newCreds[cred].length || /^\s*$/.test(newCreds[cred])) {
delete savedCredentials[cred];
dirty = true;
continue;
}
} else {
var dashedType = nodeType.replace(/\s+/g, '-');
var definition = credentialsDef[dashedType];
if (!definition) {
log.warn(log._("nodes.credentials.not-registered",{type:nodeType}));
return;
}
for (cred in definition) {
if (definition.hasOwnProperty(cred)) {
if (newCreds[cred] === undefined) {
continue;
}
if (definition[cred].type == "password" && newCreds[cred] == '__PWRD__') {
continue;
}
if (0 === newCreds[cred].length || /^\s*$/.test(newCreds[cred])) {
delete savedCredentials[cred];
dirty = true;
continue;
}
if (!savedCredentials.hasOwnProperty(cred) || JSON.stringify(savedCredentials[cred]) !== JSON.stringify(newCreds[cred])) {
savedCredentials[cred] = newCreds[cred];
dirty = true;
}
}
if (!savedCredentials.hasOwnProperty(cred) || JSON.stringify(savedCredentials[cred]) !== JSON.stringify(newCreds[cred])) {
savedCredentials[cred] = newCreds[cred];
dirty = true;
}
}

@@ -375,0 +404,0 @@ }

@@ -25,2 +25,5 @@ /**

const credentials = require("../credentials");
var Log;

@@ -42,2 +45,5 @@

}
if (type === "cred") {
return value;
}
return redUtil.evaluateNodeProperty(value, type, node, null, null);

@@ -47,34 +53,2 @@ }

/**
* Compose information object for env var
*/
function composeInfo(info, val) {
var result = {
name: info.name,
type: info.type,
value: val,
};
if (info.ui) {
var ui = info.ui;
result.ui = {
hasUI: ui.hasUI,
icon: ui.icon,
labels: ui.labels,
type: ui.type
};
var retUI = result.ui;
if (ui.type === "input") {
retUI.inputTypes = ui.inputTypes;
}
if (ui.type === "select") {
retUI.menu = ui.menu;
}
if (ui.type === "spinner") {
retUI.spinner = ui.spinner;
}
}
return result;
}
/**
* This class represents a subflow - which is handled as a special type of Flow

@@ -148,2 +122,5 @@ */

this.templateCredentials = credentials.get(subflowDef.id);
this.instanceCredentials = credentials.get(this.id);
var env = [];

@@ -153,2 +130,5 @@ if (this.subflowDef.env) {

env[e.name] = e;
if (e.type === "cred") {
e.value = this.templateCredentials[e.name];
}
});

@@ -164,2 +144,9 @@ }

}
if (e.type === "cred") {
if (!old || this.instanceCredentials.hasOwnProperty(e.name) ) {
e.value = this.instanceCredentials[e.name];
} else if (old) {
e.value = this.templateCredentials[e.name];
}
}
});

@@ -337,15 +324,6 @@ }

getSetting(name) {
this.trace("getSetting:"+name);
if (!/^\$parent\./.test(name)) {
var env = this.env;
var is_info = name.endsWith("_info");
var is_type = name.endsWith("_type");
var ename = (is_info || is_type) ? name.substring(0, name.length -5) : name; // 5 = length of "_info"/"_type"
if (env && env.hasOwnProperty(ename)) {
var val = env[ename];
if (is_type) {
return val ? val.type : undefined;
}
if (env && env.hasOwnProperty(name)) {
var val = env[name];
// If this is an env type property we need to be careful not

@@ -364,7 +342,3 @@ // to get into lookup loops.

try {
var ret = evaluateInputValue(value, type, this.node);
if (is_info) {
return composeInfo(val, ret);
}
return ret;
return evaluateInputValue(value, type, this.node);
}

@@ -371,0 +345,0 @@ catch (e) {

@@ -88,2 +88,3 @@ /**

flow.flows = {};
flow.groups = {};
flow.missingTypes = [];

@@ -99,4 +100,8 @@

}
if (n.type === 'group') {
flow.groups[n.id] = n;
}
});
// TODO: why a separate forEach? this can be merged with above
config.forEach(function(n) {

@@ -113,3 +118,3 @@ if (n.type === 'subflow') {

config.forEach(function(n) {
if (n.type !== 'subflow' && n.type !== 'tab') {
if (n.type !== 'subflow' && n.type !== 'tab' && n.type !== 'group') {
var subflowDetails = subflowInstanceRE.exec(n.type);

@@ -169,3 +174,3 @@

config.forEach(function(n) {
if (n.type !== 'subflow' && n.type !== 'tab') {
if (n.type !== 'subflow' && n.type !== 'tab' && n.type !== 'group') {
for (var prop in n) {

@@ -172,0 +177,0 @@ if (n.hasOwnProperty(prop) && prop !== 'id' && prop !== 'wires' && prop !== 'type' && prop !== '_users' && flow.configs.hasOwnProperty(n[prop])) {

@@ -153,6 +153,6 @@ /**

function installModule(module,version) {
function installModule(module,version,url) {
var existingModule = registry.getModuleInfo(module);
var isUpgrade = !!existingModule;
return registry.installModule(module,version).then(function(info) {
return registry.installModule(module,version,url).then(function(info) {
if (isUpgrade) {

@@ -159,0 +159,0 @@ events.emit("runtime-event",{id:"node/upgraded",retain:false,payload:{module:module,version:version}});

@@ -90,3 +90,3 @@ /**

var current = globalSettings[prop];
globalSettings[prop] = value;
globalSettings[prop] = clone(value);
try {

@@ -93,0 +93,0 @@ assert.deepEqual(current,value);

@@ -28,2 +28,14 @@ /**

function toSingleLine(text) {
var result = text.replace(/\\/g, "\\\\").replace(/\n/g, "\\n");
return result;
}
function fromSingleLine(text) {
var result = text.replace(/\\[\\n]/g, function(s) {
return ((s === "\\\\") ? "\\" : "\n");
});
return result;
}
function getFileMeta(root, path) {

@@ -47,3 +59,3 @@ var fn = fspath.join(root, path);

if (match) {
meta[match[1]] = match[2];
meta[match[1]] = fromSingleLine(match[2]);
} else {

@@ -158,3 +170,3 @@ read = size;

if (meta.hasOwnProperty(i)) {
headers += "// "+i+": "+meta[i]+"\n";
headers += "// "+i+": "+toSingleLine(meta[i])+"\n";
}

@@ -161,0 +173,0 @@ }

@@ -398,3 +398,3 @@ /**

return loadProject(projectName).then(function(project) {
var globalProjectSettings = settings.get("projects");
var globalProjectSettings = settings.get("projects")||{};
globalProjectSettings.activeProject = project.name;

@@ -401,0 +401,0 @@ return settings.set("projects",globalProjectSettings).then(function() {

@@ -709,3 +709,5 @@ /**

}).catch(function(err) {
err.remote = remote;
if (!err.remote) {
err.remote = remote;
}
throw err;

@@ -712,0 +714,0 @@ })

@@ -35,2 +35,4 @@ {

"install-failed-not-found": "$t(server.install.install-failed-long) module not found",
"install-failed-name": "$t(server.install.install-failed-long) invalid module name: __name__",
"install-failed-url": "$t(server.install.install-failed-long) invalid url: __url__",
"upgrading": "Upgrading module: __name__ to version: __version__",

@@ -51,3 +53,10 @@ "upgraded": "Upgraded module: __name__. Restart Node-RED to use the new version",

"headless-mode": "Running in headless mode",
"httpadminauth-deprecated": "use of httpAdminAuth is deprecated. Use adminAuth instead"
"httpadminauth-deprecated": "use of httpAdminAuth is deprecated. Use adminAuth instead",
"https": {
"refresh-interval": "Refreshing https settings every __interval__ hours",
"settings-refreshed": "Server https settings have been refreshed",
"refresh-failed": "Failed to refresh https settings: __message__",
"nodejs-version": "httpsRefreshInterval requires Node.js 11 or later",
"function-required": "httpsRefreshInterval requires https property to be a function"
}
},

@@ -54,0 +63,0 @@

@@ -49,3 +49,10 @@ {

"headless-mode": "ヘッドレスモードで実行中です",
"httpadminauth-deprecated": "httpAdminAuthは非推奨です。代わりに adminAuth を使用してください"
"httpadminauth-deprecated": "httpAdminAuthは非推奨です。代わりに adminAuth を使用してください",
"https": {
"refresh-interval": "__interval__ 時間毎にhttps設定を更新します",
"settings-refreshed": "サーバのhttps設定が更新されました",
"refresh-failed": "https設定の更新で失敗しました: __message__",
"nodejs-version": "httpsRefreshIntervalにはNode.js 11以降が必要です",
"function-required": "httpsRefreshIntervalでは、httpsプロパティはfunctionである必要があります"
}
},

@@ -52,0 +59,0 @@ "api": {

{
"name": "@node-red/runtime",
"version": "1.0.6",
"version": "1.1.0-beta.1",
"license": "Apache-2.0",

@@ -19,4 +19,4 @@ "main": "./lib/index.js",

"dependencies": {
"@node-red/registry": "1.0.6",
"@node-red/util": "1.0.6",
"@node-red/registry": "1.1.0-beta.1",
"@node-red/util": "1.1.0-beta.1",
"clone": "2.1.2",

@@ -23,0 +23,0 @@ "express": "4.17.1",

Sorry, the diff of this file is not supported yet

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