@jackcarey/node-red-wasmer 0.0.6
Execute WebAssembly code within NodeRED.
Use WebAssembly files in NodeRED via wasmer-js.
Prerequisites
None.
How to install
Follow the instructions on the NodeRED website, or run npm i @jackcarey/node-red-wasmer
in your server directory.
How to use
Inputs
- Allowlist : allowlist (regex) : An allowed list of URL regular expression patterns.
- URL : url (string) : The address to fetch the WebAssembly file from.
- Function : functionName (string) : The name of the function to run.
- Standard Input : stdin (string) : Text to pass to the function after it first executes.
- Environment Variables : env (JSON) : Environment variables that can be accessed withing the function.
- Arguments : args (array[string]) : Arguments to pass into the function separated by spaces.
- Directories : dirs (JSON) : Virtual file paths made available to the module, and their contents.
- Age
: maxHours (number) : The maximum number of hours before attempting to re-fetch the
.wasm
file.
Overriding Inputs: The following inputs can be overridden by passing them in msg.payload
: url
, functionName
, stdin
, args
, dirs
.
Outputs
Available inside msg.wasmer
.
- Exit Code : exitCode (number) : The exit code of the function that ran.
- Standard Input : stdin (string) : The input buffer as a string.
- Standard Output : stdout (string) : The console output of the function that ran.
- StdErr : stderr (string) : Any error messages.
- Directories : dirs (JSON) : The path and contents of each virtual file.
Example Flow:
Check out the example flow:
[{"id":"133003c439760d95","type":"tab","label":"nodered-wasmer Example","disabled":false,"info":"","env":[]},{"id":"934b7209325e2a48","type":"inject","z":"133003c439760d95","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":100,"y":40,"wires":[["c45792a03579023d"]]},{"id":"c45792a03579023d","type":"wasmer","z":"133003c439760d95","name":"","allowlist":"cb20093a9c91192e","url":"https://wasmer-js.pages.dev/demo.wasm","maxHours":72,"functionName":"demo","env":"{}","dirs":"{}","args":[],"x":250,"y":40,"wires":[["e900503182390afb"]]},{"id":"4f75ac69e9295bcb","type":"inject","z":"133003c439760d95","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":100,"y":80,"wires":[["85169c18711cd456"]]},{"id":"85169c18711cd456","type":"wasmer","z":"133003c439760d95","name":"","allowlist":"cb20093a9c91192e","url":"https://wasmer-js.pages.dev/envvar.wasm","maxHours":72,"functionName":"envvar","env":"{\"ENV1\":\"one\",\"ENV2\":\"TWO\",\"DOG\":\"WOOF\",\"DOG_TYPE\":\"LABRADOR\"}","dirs":"{}","args":[],"x":250,"y":80,"wires":[["e900503182390afb"]]},{"id":"234baa9942ee8613","type":"inject","z":"133003c439760d95","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":100,"y":160,"wires":[["572654faad6376db"]]},{"id":"572654faad6376db","type":"wasmer","z":"133003c439760d95","name":"","allowlist":"cb20093a9c91192e","url":"https://wasmer-js.pages.dev/mapdir.wasm","maxHours":72,"functionName":"mapdir","stdin":"","env":"{}","dirs":"{\"/a\":\"\",\"/b\":\"\",\"/file\":\"fileContents\"}","args":[],"x":250,"y":160,"wires":[["0b5801ca54f5c0d6"]]},{"id":"13caaf3e2449291d","type":"inject","z":"133003c439760d95","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":100,"y":120,"wires":[["c3863094134224a6"]]},{"id":"c3863094134224a6","type":"wasmer","z":"133003c439760d95","name":"","allowlist":"cb20093a9c91192e","url":"https://wasmer-js.pages.dev/pipe_reverse.wasm","maxHours":72,"functionName":"pipe_reverse","stdin":"Hello world!","env":"{}","dirs":"{}","args":[],"x":270,"y":120,"wires":[["e900503182390afb"]]},{"id":"e900503182390afb","type":"debug","z":"133003c439760d95","name":"stdout","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"wasmer.stdout","targetType":"msg","statusVal":"","statusType":"auto","x":430,"y":80,"wires":[]},{"id":"0b5801ca54f5c0d6","type":"debug","z":"133003c439760d95","name":"wasmer","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"wasmer","targetType":"msg","statusVal":"","statusType":"auto","x":440,"y":160,"wires":[]},{"id":"cb20093a9c91192e","type":"urlAllowlist","name":"wasmer-js","mode":"and","flags":"gmi","pttns":"^https:\\/\\/wasmer-js.pages.dev\\/"}]