Socket
Socket
Sign inDemoInstall

@node-red/registry

Package Overview
Dependencies
Maintainers
2
Versions
113
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@node-red/registry - npm Package Compare versions

Comparing version 2.0.0-beta.2 to 2.0.0

80

lib/externalModules.js

@@ -15,3 +15,2 @@ // This module handles the management of modules required by the runtime and flows.

const BUILTIN_MODULES = require('module').builtinModules;
const EXTERNAL_MODULES_DIR = "externalModules";

@@ -31,12 +30,33 @@ // TODO: outsource running npm to a plugin

let IMPORT_SUPPORTED = true;
const nodeVersionParts = process.versions.node.split(".").map(v => parseInt(v));
if (nodeVersionParts[0] < 12 || (nodeVersionParts[0] === 12 && nodeVersionParts[1] < 17)) {
IMPORT_SUPPORTED = false;
}
function getInstallDir() {
return path.resolve(path.join(settings.userDir || process.env.NODE_RED_HOME || ".", "externalModules"));
return path.resolve(settings.userDir || process.env.NODE_RED_HOME || ".");
}
let loggedLegacyWarning = false;
async function refreshExternalModules() {
const externalModuleDir = path.resolve(path.join(settings.userDir || process.env.NODE_RED_HOME || ".", EXTERNAL_MODULES_DIR));
if (!loggedLegacyWarning) {
loggedLegacyWarning = true;
const oldExternalModulesDir = path.join(path.resolve(settings.userDir || process.env.NODE_RED_HOME || "."),"externalModules");
if (fs.existsSync(oldExternalModulesDir)) {
try {
log.warn(log._("server.install.old-ext-mod-dir-warning",{oldDir:oldExternalModulesDir, newDir:getInstallDir()}))
} catch(err) {console.log(err)}
}
}
const externalModuleDir = getInstallDir();
try {
const pkgFile = JSON.parse(await fs.readFile(path.join(externalModuleDir,"package.json"),"utf-8"));
knownExternalModules = pkgFile.dependencies;
knownExternalModules = pkgFile.dependencies || {};
} catch(err) {
knownExternalModules = {};
}

@@ -49,2 +69,3 @@ }

installEnabled = true;
if (settings.externalModules && settings.externalModules.modules) {

@@ -88,7 +109,42 @@ if (settings.externalModules.modules.allowList || settings.externalModules.modules.denyList) {

}
const externalModuleDir = path.resolve(path.join(settings.userDir || process.env.NODE_RED_HOME || ".", EXTERNAL_MODULES_DIR));
const externalModuleDir = getInstallDir();
const moduleDir = path.join(externalModuleDir,"node_modules",module);
return require(moduleDir);
}
function importModule(module) {
if (!IMPORT_SUPPORTED) {
// On Node < 12.17 - fall back to try a require
return new Promise((resolve, reject) => {
try {
const mod = requireModule(module);
resolve(mod);
} catch(err) {
reject(err);
}
});
}
if (!registryUtil.checkModuleAllowed( module, null,installAllowList,installDenyList)) {
const e = new Error("Module not allowed");
e.code = "module_not_allowed";
throw e;
}
const parsedModule = parseModuleName(module);
if (BUILTIN_MODULES.indexOf(parsedModule.module) !== -1) {
return import(parsedModule.module);
}
if (!knownExternalModules[parsedModule.module]) {
const e = new Error("Module not allowed");
e.code = "module_not_allowed";
throw e;
}
const externalModuleDir = getInstallDir();
const moduleDir = path.join(externalModuleDir,"node_modules",module);
// Import needs the full path to the module's main .js file
const moduleFile = require.resolve(moduleDir);
return import(moduleFile);
}
function parseModuleName(module) {

@@ -221,2 +277,5 @@ var match = /((?:@[^/]+\/)?[^/@]+)(?:@([\s\S]+))?/.exec(module);

log.info(log._("server.install.installed", { name: installSpec }));
const runtimeInstalledModules = settings.get("modules") || {};
runtimeInstalledModules[moduleDetails.module] = moduleDetails;
settings.set("modules",runtimeInstalledModules)
}).catch(result => {

@@ -243,7 +302,8 @@ var output = result.stderr || result.toString();

module.exports = {
init: init,
register: register,
registerSubflow: registerSubflow,
checkFlowDependencies: checkFlowDependencies,
require: requireModule
init,
register,
registerSubflow,
checkFlowDependencies,
require: requireModule,
import: importModule
}

5

lib/loader.js

@@ -226,4 +226,4 @@ /**

// node.err = "Error: "+node.template+" does not exist";
node.types = node.types || [];
if (err.code !== 'ENOENT') {
node.types = [];
node.err = err.toString();

@@ -267,3 +267,3 @@ }

}
isEnabled = info.enabled;
isEnabled = !(info.enabled === false);
}

@@ -358,2 +358,3 @@

if (!node.enabled) {
console.log("BAIL ON",node.id)
return Promise.resolve(node);

@@ -360,0 +361,0 @@ } else {

@@ -197,3 +197,3 @@ /**

if (nodeTypeToId.hasOwnProperty(t)) {
set.err = "Type already registered";
set.err = new Error("Type already registered");
set.err.code = "type_already_registered";

@@ -200,0 +200,0 @@ set.err.details = {

@@ -53,2 +53,12 @@ /**

}
function importModule(name) {
var moduleInfo = require("./index").getModuleInfo(name);
if (moduleInfo && moduleInfo.path) {
var relPath = path.relative(__dirname, moduleInfo.path);
return import(relPath);
} else {
// Require it here to avoid the circular dependency
return require("./externalModules").import(name);
}
}

@@ -65,2 +75,3 @@ function createNodeApi(node) {

require: requireModule,
import: importModule,
comms: {

@@ -67,0 +78,0 @@ publish: function(topic,data,retain) {

{
"name": "@node-red/registry",
"version": "2.0.0-beta.2",
"version": "2.0.0",
"license": "Apache-2.0",

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

"dependencies": {
"@node-red/util": "2.0.0-beta.2",
"@node-red/util": "2.0.0",
"clone": "2.1.2",
"fs-extra": "10.0.0",
"semver": "7.3.5",

@@ -22,0 +24,0 @@ "tar": "6.1.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