-
Notifications
You must be signed in to change notification settings - Fork 0
dynamic palette
Currently, the palette of nodes is loaded when the runtime starts and does not change.
The runtime needs to allow nodes to be added/removed dynamically.
To add a new node to the palette:
-
a request is POSTed to
{admin root}/nodesto trigger the add. The post body is a JSON structure that identifies where the node information comes from, either a local file (filename) or an npm module (npm).{ filename: "path to local node .js file", npm: "npm module name" } -
For
filename, we require that the files already exist somewhere underNODE_RED_HOME/nodes/This reduces security concerns over exposing arbitrary files and removes the need for the runtime to 'remember' what extra nodes have been added.For
npm, we npm install the node. -
The node's
.jsis then loaded using the existing node loading code. -
An event is fired over the comms link telling any connected editors that a node has been added. This triggers a HTTP Get back to
{admin root}/nodes/{node-type}to load the node definition/help/edit template.
To remove a node from the palette:
- a DELETE http request is sent to
{admin root}/nodes/{node-type}to trigger the remove. - The runtime registry removes the node. This will stop the current flow if it uses the node.
- An event is fired over the comms link telling any connected editors that a node has been removed.
This poses some problems:
- What to do with the node's files? If the runtime restarts, the node will come back. As a file may contain multiple nodes, we can't delete/npm-uninstall the node's files. Add node to an excludes list? That is currently based on filename not node-type.