diff --git a/src/components/Params.astro b/src/components/Params.astro
new file mode 100644
index 0000000..401e838
--- /dev/null
+++ b/src/components/Params.astro
@@ -0,0 +1,28 @@
+---
+const {schema} = Astro.props
+---
+
+{Object.keys(schema.properties).map((key)=>{
+ const propertySchema = schema.properties[key]
+ const isRequired = schema.required ? schema.required.includes(key) : false
+
+ var description = ""
+
+ if (!isRequired) {
+ if (propertySchema.default !== undefined) {
+ description += `(optional, default ${JSON.stringify(propertySchema.default)})`
+ } else {
+ description += "(optional)"
+ }
+ }
+
+ if (propertySchema.description) {
+ description += ` ${propertySchema.description}`
+ }
+
+ if (description !== "") {
+ description = ": " + description
+ }
+ return {key}
+})}
+
\ No newline at end of file
diff --git a/src/components/SchemaInfo.astro b/src/components/SchemaInfo.astro
new file mode 100644
index 0000000..c18ea3a
--- /dev/null
+++ b/src/components/SchemaInfo.astro
@@ -0,0 +1,23 @@
+---
+import moduleSchema from '../data/modules.schema.json';
+import processorSchema from '../data/processors.schema.json';
+import Params from './Params.astro';
+const {type, id} = Astro.props;
+var schema;
+
+switch(type) {
+ case 'module':
+ schema = moduleSchema.items?.oneOf?.find(schema=>schema["$id"] === id);
+ break;
+ case 'processor':
+ schema = processorSchema.items?.oneOf?.find(schema=>schema["$id"] === id);
+ break;
+}
+---
+{
+schema !== undefined &&
+
+ {schema.properties.type !== undefined && type : {schema.properties.type.const} }
+ {schema.properties.params !== undefined && params : }
+
+}
\ No newline at end of file
diff --git a/src/content/docs/modules/db/sqlite.mdx b/src/content/docs/modules/db/sqlite.mdx
index a93f430..d6cc1d8 100644
--- a/src/content/docs/modules/db/sqlite.mdx
+++ b/src/content/docs/modules/db/sqlite.mdx
@@ -3,24 +3,22 @@ title: SQLite
sidebar:
order: 1
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
The `db.sqlite` module can open/create SQLite databases
-- **type**: `db.sqlite`
-- **params**:
- - **dsn**: the data source name, this can be a file path or the special `:memory:` name for an in-memory DB
+
This module implements the `DatabaseModule` interface.
-## Cap
-### Example snippet
+### Example
Opens an in-memory SQLite database
```yaml
-- id: db
+- id: myDatabase
type: db.sqlite
- params:
- dsn: ":memory:"
+ params:
+ dsn: ":memory:"
```
diff --git a/src/content/docs/modules/http/http-server.mdx b/src/content/docs/modules/http/http-server.mdx
index a853958..9dcfb42 100644
--- a/src/content/docs/modules/http/http-server.mdx
+++ b/src/content/docs/modules/http/http-server.mdx
@@ -4,12 +4,11 @@ sidebar:
label: Server
order: 2
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
The `http.server` module emits a message for every HTTP request that is made to the server.
-- **type**: `http.server`
-- **params**:
- - **port**: TCP port to listen for HTTP requests on
+
### Example
diff --git a/src/content/docs/modules/midi/input.mdx b/src/content/docs/modules/midi/input.mdx
index 6d33caf..aa4e1bf 100644
--- a/src/content/docs/modules/midi/input.mdx
+++ b/src/content/docs/modules/midi/input.mdx
@@ -6,6 +6,7 @@ sidebar:
---
import { Aside } from "@astrojs/starlight/components";
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
This module is not currently included in the docker builds of
@@ -14,9 +15,7 @@ import { Aside } from "@astrojs/starlight/components";
The `midi.input` module connects to a midi device (or virtual device) and emits MIDI messages that come in on that port. This module does not support output.
-- **type**: `midi.input`
-- **params**:
- - **port**: name of the MIDI port to connect to
+
### Example
diff --git a/src/content/docs/modules/midi/output.mdx b/src/content/docs/modules/midi/output.mdx
index 49a37d0..06ccf20 100644
--- a/src/content/docs/modules/midi/output.mdx
+++ b/src/content/docs/modules/midi/output.mdx
@@ -6,6 +6,7 @@ sidebar:
---
import { Aside } from "@astrojs/starlight/components";
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
This module is not currently included in the docker builds of
@@ -14,9 +15,7 @@ import { Aside } from "@astrojs/starlight/components";
The `midi.output` module connects to a midi device (or virtual device) and allows sending MIDI messages out to that device. This module does not produce any messages and so using it as an `input` to a [route](/concepts/routes) would be pointless.
-- **type**: `midi.output`
-- **params**:
- - **port**: name of the MIDI port to connect to
+
### Example
diff --git a/src/content/docs/modules/mqtt/client.mdx b/src/content/docs/modules/mqtt/client.mdx
index 094ec67..4cb0f78 100644
--- a/src/content/docs/modules/mqtt/client.mdx
+++ b/src/content/docs/modules/mqtt/client.mdx
@@ -4,14 +4,11 @@ sidebar:
label: Client
order: 1
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
The `mqtt.client` module connects to a MQTT broker and emits a message messages based on the subscribed topic it receives from the port. This module is also capable of publishing MQTT messages to the connected broker.
-- **type**: `mqtt.client`
-- **params**:
- - **broker**: connection string for the mqtt broker (`mqtt://test.mosquitto.org:1833`)
- - **topic** mqtt topic to subscribe to
- - **clientId** client ID for this connection to the broker
+
This module implements the `PubSubModule` interface.
diff --git a/src/content/docs/modules/nats/client.mdx b/src/content/docs/modules/nats/client.mdx
index cb3eb44..c4f5156 100644
--- a/src/content/docs/modules/nats/client.mdx
+++ b/src/content/docs/modules/nats/client.mdx
@@ -4,13 +4,11 @@ sidebar:
label: Client
order: 1
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
This module connects to a [NATS](https://nats.io/) server and subscribes to a subject.
-- **type**: `nats.client`
-- **params**:
- - **url**: the URL of the NATS server to connect to (e.g. `nats://localhost:4222`)
- - **subject**: the subject to subscribe to
+
This module implements the `PubSubModule` interface.
diff --git a/src/content/docs/modules/nats/server.mdx b/src/content/docs/modules/nats/server.mdx
index ab76b7e..ca3dcef 100644
--- a/src/content/docs/modules/nats/server.mdx
+++ b/src/content/docs/modules/nats/server.mdx
@@ -4,22 +4,20 @@ sidebar:
label: Server
order: 2
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
This module starts a NATS server that listens for incoming connections.
-- **type**: `nats.server`
-- **params**:
- - **ip**: (optional) the IP address to bind the server to defaults to `0.0.0.0`
- - **port**: (optional) the port to listen on defaults to `4222`
+
### Example
Start a local NATS server listening on port 5555
```yaml
-- id: httpServer
- type: http.server
+- id: natsServer
+ type: nats.server
params:
ip: 127.0.0.1
- port: 5555
+ port: 4222
```
diff --git a/src/content/docs/modules/net/tcp/client.mdx b/src/content/docs/modules/net/tcp/client.mdx
index aef190d..f2db1a3 100644
--- a/src/content/docs/modules/net/tcp/client.mdx
+++ b/src/content/docs/modules/net/tcp/client.mdx
@@ -4,19 +4,11 @@ sidebar:
label: Client
order: 1
---
+import SchemaInfo from '../../../../../components/SchemaInfo.astro';
The `net.tcp.client` module connects to TCP server and emits messages based on the data it receives from the server that it connects to. Messages are determined by "framing" techniques as TCP is a stream based protocol. The module will attempt to reconnect anytime the connection is closed.
-- **type**: `net.tcp.client`
-- **params**:
- - **host**: IP or FQDN to connect to
- - **port**: TCP port to connect to
- - **framing**: how to chunk the TCP stream into "messages"
- - LF `\n`
- - CR `\r`
- - CRLF `\r\n`
- - [SLIP](https://en.wikipedia.org/wiki/Serial_Line_Internet_Protocol)
- - RAW (no framing is done bytes are sent out as they are received)
+
### Example
diff --git a/src/content/docs/modules/net/tcp/server.mdx b/src/content/docs/modules/net/tcp/server.mdx
index 2c89427..dc47607 100644
--- a/src/content/docs/modules/net/tcp/server.mdx
+++ b/src/content/docs/modules/net/tcp/server.mdx
@@ -4,19 +4,11 @@ sidebar:
label: Server
order: 2
---
+import SchemaInfo from '../../../../../components/SchemaInfo.astro';
The `net.tcp.server` module emits a message messages based on the data it receives from clients that connect to it. Messages are determined by "framing" techniques as TCP is a stream based protocol.
-- **type**: `net.tcp.server`
-- **params**:
- - **ip**: (optional) IP address to bind the TCP server to, if left out it will listen on all interfaces
- - **port**: TCP port to listen on
- - **framing**: how to chunk of the incoming TCP stream into "messages"
- - LF `\n`
- - CR `\r`
- - CRLF `\r\n`
- - [SLIP](https://en.wikipedia.org/wiki/Serial_Line_Internet_Protocol)
- - RAW (no framing is done bytes are sent out as they are received)
+
### Example
diff --git a/src/content/docs/modules/net/udp/client.mdx b/src/content/docs/modules/net/udp/client.mdx
index 7a0b5b6..3647bc0 100644
--- a/src/content/docs/modules/net/udp/client.mdx
+++ b/src/content/docs/modules/net/udp/client.mdx
@@ -4,13 +4,11 @@ sidebar:
label: Client
order: 1
---
+import SchemaInfo from '../../../../../components/SchemaInfo.astro';
The `net.udp.client` module sends messages to a the configured `host` and `port`. This module does not produce any messages and so using it as an `input` to a [route](/concepts/routes) would be pointless.
-- **type**: `net.udp.client`
-- **params**:
- - **host**: IP or FQDN to send message to
- - **port**: UDP port to send messages to
+
### Example
diff --git a/src/content/docs/modules/net/udp/multicast.mdx b/src/content/docs/modules/net/udp/multicast.mdx
index d738ffc..2d864d5 100644
--- a/src/content/docs/modules/net/udp/multicast.mdx
+++ b/src/content/docs/modules/net/udp/multicast.mdx
@@ -4,11 +4,9 @@ sidebar:
label: Multicast
order: 3
---
+import SchemaInfo from '../../../../../components/SchemaInfo.astro';
-- **type**: `net.udp.multicast`
-- **params**:
- - **ip**: the multicast IP address to listen to
- - **port**: the port to listen on
+
### Example
diff --git a/src/content/docs/modules/net/udp/server.mdx b/src/content/docs/modules/net/udp/server.mdx
index ebd166d..5fa4cf1 100644
--- a/src/content/docs/modules/net/udp/server.mdx
+++ b/src/content/docs/modules/net/udp/server.mdx
@@ -4,14 +4,11 @@ sidebar:
label: Server
order: 2
---
+import SchemaInfo from '../../../../../components/SchemaInfo.astro';
The `net.udp.server` module emits a message for every incoming UDP datagram.
-- **type**: `net.udp.server`
-- **params**:
- - **ip**: (optional) IP address to bind the UDP server to, if left out it will listen on all interfaces
- - **port**: UDP port to listen on
- - **bufferSize**: (optional) Size of the read buffer for incoming UDP datagrams, defaults to `2048`
+
### Example
diff --git a/src/content/docs/modules/psn/client.mdx b/src/content/docs/modules/psn/client.mdx
index 519bf6f..eca51c0 100644
--- a/src/content/docs/modules/psn/client.mdx
+++ b/src/content/docs/modules/psn/client.mdx
@@ -4,11 +4,12 @@ sidebar:
label: Client
order: 1
---
-
-- **type**: `psn.client`
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
This module listens on the [PosiStageNet](http://posistage.net/) multicast address and emits tracker states anytime a new PSN message is received.
+
+
### Example
```yaml
diff --git a/src/content/docs/modules/redis/client.mdx b/src/content/docs/modules/redis/client.mdx
index 646ff19..f19df6b 100644
--- a/src/content/docs/modules/redis/client.mdx
+++ b/src/content/docs/modules/redis/client.mdx
@@ -4,13 +4,11 @@ sidebar:
label: Client
order: 1
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
The `redis.client` module connects to a Redis server. This module does not produce any messages and so using it as an `input` to a [route](/concepts/routes) would be pointless.
-- **type**: `redis.client`
-- **params**:
- - **host**: the Redis server host
- - **port**: the Redis server port
+
This module implements the `KeyValueModule` interface.
diff --git a/src/content/docs/modules/serial/client.mdx b/src/content/docs/modules/serial/client.mdx
index af7dff0..6304a15 100644
--- a/src/content/docs/modules/serial/client.mdx
+++ b/src/content/docs/modules/serial/client.mdx
@@ -4,7 +4,7 @@ sidebar:
label: Client
order: 1
---
-
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
import { Aside } from "@astrojs/starlight/components";
@@ -14,16 +14,7 @@ import { Aside } from "@astrojs/starlight/components";
The `serial.client` module connects to a serial device and emits a message messages based on the data it receives from the port. Messages are determined by "framing" techniques as serial is a stream based protocol.
-- **type**: `serial.client`
-- **params**:
- - **port**: serial port to connect to i.e `/dev/ttyS0`
- - **baudRate** baud rate to use when connecting to serial port
- - **framing**: how to chunk the serial stream into "messages"
- - LF `\n`
- - CR `\r`
- - CRLF `\r\n`
- - [SLIP](https://en.wikipedia.org/wiki/Serial_Line_Internet_Protocol)
- - RAW (no framing is done bytes are sent out as they are received)
+
### Example
diff --git a/src/content/docs/modules/sip/call/server.mdx b/src/content/docs/modules/sip/call/server.mdx
index d95f77f..31ad8bd 100644
--- a/src/content/docs/modules/sip/call/server.mdx
+++ b/src/content/docs/modules/sip/call/server.mdx
@@ -4,15 +4,11 @@ sidebar:
label: Server
order: 1
---
+import SchemaInfo from '../../../../../components/SchemaInfo.astro';
This module starts a [SIP](https://en.wikipedia.org/wiki/Session_Initiation_Protocol) server that listens for incoming connections and emits call events when a new call is received. This can be used with cheap SIP gateway devices to connect an analog phone line and do interesting things like [firing QLab cues with phone calls](/examples/dial-a-cue).
-- **type**: `sip.call.server`
-- **params**:
- - **ip**: (optional) the IP address to bind the server to defaults to `0.0.0.0`
- - **port**: (optional) the port to listen on defaults to `5060`
- - **transport**: (optional) the transport protocol to use (e.g. `udp`, `tcp`, `ws`) defaults to `udp`
- - **userAgent**: (optional) the User-Agent string to use in SIP responses defaults to `showbridge`
+
### Example
diff --git a/src/content/docs/modules/sip/dtmf/server.mdx b/src/content/docs/modules/sip/dtmf/server.mdx
index 7dbad7a..91da4fe 100644
--- a/src/content/docs/modules/sip/dtmf/server.mdx
+++ b/src/content/docs/modules/sip/dtmf/server.mdx
@@ -4,16 +4,11 @@ sidebar:
label: Server
order: 1
---
+import SchemaInfo from '../../../../../components/SchemaInfo.astro';
This module starts a [SIP](https://en.wikipedia.org/wiki/Session_Initiation_Protocol) server that listens for incoming connections. When a call is received this module will emit events based on the touch tones (DTMF) received during the call. The event is sent out whenever the use presses the separator key defined in the params.
-- **type**: `sip.dtmf.server`
-- **params**:
- - **ip**: (optional) the IP address to bind the server to defaults to `0.0.0.0`
- - **port**: (optional) the port to listen on defaults to `5060`
- - **transport**: (optional) the transport protocol to use (e.g. `udp`, `tcp`, `ws`) defaults to `udp`
- - **userAgent**: (optional) the User-Agent string to use in SIP responses defaults to `showbridge`
- - **separator**: the DTMF separator key to know when to emit events
+
### Example
diff --git a/src/content/docs/modules/time/interval.mdx b/src/content/docs/modules/time/interval.mdx
index 4fbe596..b57ddac 100644
--- a/src/content/docs/modules/time/interval.mdx
+++ b/src/content/docs/modules/time/interval.mdx
@@ -3,12 +3,11 @@ title: Interval
sidebar:
order: 2
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
The `time.interval` module emits a message at a specified duration. Sending any message to this module will reset the interval timer.
-- **type**: `time.interval`
-- **params**:
- - **duration**: time in milliseconds between messsages
+
### Example snippet
diff --git a/src/content/docs/modules/time/timer.mdx b/src/content/docs/modules/time/timer.mdx
index 83f58e9..117a7bd 100644
--- a/src/content/docs/modules/time/timer.mdx
+++ b/src/content/docs/modules/time/timer.mdx
@@ -3,12 +3,11 @@ title: Timer
sidebar:
order: 1
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
The `time.timer` module emits only one message after a specified duration. Sending any message to this module will reset the timer.
-- **type**: `time.timer`
-- **params**:
- - **duration**: time in milliseconds to wait before emitting message
+
### Example snippet
diff --git a/src/content/docs/modules/websocket/client.mdx b/src/content/docs/modules/websocket/client.mdx
index 561e0cc..e7a4258 100644
--- a/src/content/docs/modules/websocket/client.mdx
+++ b/src/content/docs/modules/websocket/client.mdx
@@ -4,12 +4,11 @@ sidebar:
label: Client
order: 1
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
The `websocket.client` module opens a websocket connection to the specified URL. This module supports both text and binary websocket messages.
-- **type**: `websocket.client`
-- **params**:
- - **url**: the full url to connect to (`wss://echo.websocket.org`)
+
### Example
diff --git a/src/content/docs/processors/artnet/decode.mdx b/src/content/docs/processors/artnet/decode.mdx
index a387e9a..e671e86 100644
--- a/src/content/docs/processors/artnet/decode.mdx
+++ b/src/content/docs/processors/artnet/decode.mdx
@@ -4,11 +4,13 @@ sidebar:
label: Decode
order: 1
---
-
-- **type**: `artnet.packet.decode`
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
This processor will decode incoming bytes into an ArtNet packet. This processor will return an error if the message being processed is not an array of bytes.
+
+
+
### Example
```yaml
diff --git a/src/content/docs/processors/artnet/encode.mdx b/src/content/docs/processors/artnet/encode.mdx
index f2bd4ff..2546b81 100644
--- a/src/content/docs/processors/artnet/encode.mdx
+++ b/src/content/docs/processors/artnet/encode.mdx
@@ -4,9 +4,12 @@ sidebar:
label: Encode
order: 2
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
+
+This processor will encode an ArtNet packet into an array of bytes. This processor will return an error if the message being processed is not an ArtNet packet.
+
+
-- **type**: `artnet.packet.encode`
- This processor will encode an ArtNet packet into an array of bytes. This processor will return an error if the message being processed is not an ArtNet packet.
### Example
diff --git a/src/content/docs/processors/db/query.mdx b/src/content/docs/processors/db/query.mdx
index f5dd565..2b18bbe 100644
--- a/src/content/docs/processors/db/query.mdx
+++ b/src/content/docs/processors/db/query.mdx
@@ -4,15 +4,13 @@ sidebar:
label: Query
order: 1
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
The `db.query` processor will issue a query to the specified module and return the result to the next processor in line.
The module must implement the `DatabaseModule` interface for this processor to work.
This processor will return an error if any of the required parameters are missing/invalid or if the module does not implement the `DatabaseModule` interface.
-- **type**: `db.query`
-- **params**:
- - **module**: the id of the [module](/concepts/modules) to issue query to.
- - **query**: the query to execute.
+
### Example
diff --git a/src/content/docs/processors/debug/log.mdx b/src/content/docs/processors/debug/log.mdx
index 2f646a2..b2156db 100644
--- a/src/content/docs/processors/debug/log.mdx
+++ b/src/content/docs/processors/debug/log.mdx
@@ -4,9 +4,11 @@ sidebar:
label: Log
order: 1
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
-- **type**: `debug.log`
- This processor will log information about the message being processed to the console. This processor does not modify the message in any way and will pass the message through to the next processor in the chain.
+This processor will log information about the message being processed to the console. This processor does not modify the message in any way and will pass the message through to the next processor in the chain.
+
+
### Example
diff --git a/src/content/docs/processors/filter/change.mdx b/src/content/docs/processors/filter/change.mdx
index 24fd8e3..b823a86 100644
--- a/src/content/docs/processors/filter/change.mdx
+++ b/src/content/docs/processors/filter/change.mdx
@@ -4,10 +4,11 @@ sidebar:
label: On Change
order: 3
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
This processor will only pass messages through if the value of the message has changed since the last time a message was processed. This processor is useful for filtering out duplicate messages that may be emitted by a module or processor.
-- **type**: `filter.change`
+
### Example
diff --git a/src/content/docs/processors/filter/expr.mdx b/src/content/docs/processors/filter/expr.mdx
index 0d09447..c9514d9 100644
--- a/src/content/docs/processors/filter/expr.mdx
+++ b/src/content/docs/processors/filter/expr.mdx
@@ -4,12 +4,11 @@ sidebar:
label: Expr
order: 2
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
The `filter.expr` processor evaluates an [Expr expression](https://expr-lang.org/playground). If the expression evaluates to true then the payload is sent through. This processor will return an error if the expression fails to evaluate.
-- **type**: `filter.expr`
-- **params**:
- - **expression**: [Expr expression](https://expr-lang.org/playground) to evaluate. The expression has access to the [wrapped payload](/concepts/payload).
+
### Example
@@ -18,5 +17,5 @@ Match a payload great than or equal to 0
```yaml
- type: filter.expr
params:
- pattern: "Payload >= 0"
+ expression: "Payload >= 0"
```
diff --git a/src/content/docs/processors/filter/regex.mdx b/src/content/docs/processors/filter/regex.mdx
index d117bba..dadcf33 100644
--- a/src/content/docs/processors/filter/regex.mdx
+++ b/src/content/docs/processors/filter/regex.mdx
@@ -4,12 +4,11 @@ sidebar:
label: Regex
order: 1
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
The `filter.regex` processor matches incoming string payload against a regular expression. If there is a match then the payload is sent through. This processor will return an error if the message being processed is not a string.
-- **type**: `filter.regex`
-- **params**:
- - **pattern**: regex pattern to match against the incoming string
+
### Example
diff --git a/src/content/docs/processors/float/parse.mdx b/src/content/docs/processors/float/parse.mdx
index de2fc28..6b7837a 100644
--- a/src/content/docs/processors/float/parse.mdx
+++ b/src/content/docs/processors/float/parse.mdx
@@ -4,12 +4,11 @@ sidebar:
label: Parse
order: 1
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
The `float.parse` processor takes a string and parses it as a float with the specified `base` and `bitSize`. This processor will return an error if the message being processed is not a string or if the string cannot be parsed into a float.
-- **type**: `float.parse`
-- **params**:
- - **bitSize**: (optional) the bit size of the float to parse, defaults to 64
+
### Example
diff --git a/src/content/docs/processors/float/random.mdx b/src/content/docs/processors/float/random.mdx
index e40bb8f..873e27d 100644
--- a/src/content/docs/processors/float/random.mdx
+++ b/src/content/docs/processors/float/random.mdx
@@ -4,14 +4,11 @@ sidebar:
label: Random
order: 2
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
The `float.random` processor will set the payload to a random float between the specified `min` and `max` value.
-- **type**: `float.random`
-- **params**:
- - **bitSize**: (optional) the bit size of the float to generate, defaults to 32
- - **min**: the minimum value for the random float (inclusive).
- - **max**: the maximum value for the random float (exclusive).
+
### Example
diff --git a/src/content/docs/processors/free-d/create.mdx b/src/content/docs/processors/free-d/create.mdx
index 87991c3..8260152 100644
--- a/src/content/docs/processors/free-d/create.mdx
+++ b/src/content/docs/processors/free-d/create.mdx
@@ -4,25 +4,16 @@ sidebar:
label: Create
order: 1
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
This processor will create a new FreeD message with the specified parameters.
-- **type**: `free.d.create`
-- **params**:
- - **id**: the ID to set for the FreeD message
- - **pan**: the pan value to set for the FreeD message
- - **tilt**: the tilt value to set for the FreeD message
- - **roll**: the roll value to set for the FreeD message
- - **posX**: the X position value to set for the FreeD message
- - **posY**: the Y position value to set for the FreeD message
- - **posZ**: the Z position value to set for the FreeD message
- - **zoom**: the zoom value to set for the FreeD message
- - **focus**: the focus value to set for the FreeD message
+
### Example
```yaml
-- type: free.d.create
+- type: freed.create
params:
id: "1"
pan: "45"
diff --git a/src/content/docs/processors/free-d/decode.mdx b/src/content/docs/processors/free-d/decode.mdx
index b9c1689..4086034 100644
--- a/src/content/docs/processors/free-d/decode.mdx
+++ b/src/content/docs/processors/free-d/decode.mdx
@@ -4,13 +4,14 @@ sidebar:
label: Decode
order: 3
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
This processor will decode incoming bytes into a FreeD message. This processor will return an error if the message being processed is not an array of bytes.
-- **type**: `free.d.decode`
+
### Example
```yaml
-- type: free.d.decode
+- type: freed.decode
```
diff --git a/src/content/docs/processors/free-d/encode.mdx b/src/content/docs/processors/free-d/encode.mdx
index 42fa222..5dc425c 100644
--- a/src/content/docs/processors/free-d/encode.mdx
+++ b/src/content/docs/processors/free-d/encode.mdx
@@ -4,13 +4,14 @@ sidebar:
label: Encode
order: 2
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
This processor will encode a FreeD message into an array of bytes. This processor will return an error if the message being processed is not a FreeD message.
-- **type**: `free.d.encode`
+
### Example
```yaml
-- type: free.d.encode
+- type: freed.encode
```
diff --git a/src/content/docs/processors/http/request/do.mdx b/src/content/docs/processors/http/request/do.mdx
index 8b9e1e5..6d02771 100644
--- a/src/content/docs/processors/http/request/do.mdx
+++ b/src/content/docs/processors/http/request/do.mdx
@@ -4,13 +4,11 @@ sidebar:
label: Make Request
order: 1
---
+import SchemaInfo from '../../../../../components/SchemaInfo.astro';
This process will make an HTTP request to the specified URL using the specified method. The response will be passed through to the next processor in the chain. This processor will return an error if the request fails for any reason (e.g. network error, invalid URL, etc.).
-- **type**: `http.request.do`
-- **params**:
- - **method**: the HTTP method to use for the request (e.g. `GET`, `POST`, `PUT`, etc.)
- - **url**: the URL to send the request to
+
### Example
diff --git a/src/content/docs/processors/http/response/create.mdx b/src/content/docs/processors/http/response/create.mdx
index d1b2bca..8ba6194 100644
--- a/src/content/docs/processors/http/response/create.mdx
+++ b/src/content/docs/processors/http/response/create.mdx
@@ -4,13 +4,11 @@ sidebar:
label: Create
order: 2
---
+import SchemaInfo from '../../../../../components/SchemaInfo.astro';
This processor will create a new HTTP response with the specified status code and body template. The created response will be passed through to the next processor in the chain. If the response is subsequently sent to an HTTP server module using the [module.output](../module/output.md) processor, the status code and body template set by this processor will be used for the response sent to the client. This processor will return an error if there is an issue executing the body template.
-- **type**: `http.response.create`
-- **params**:
- - **status**: the HTTP status code to set for the response (e.g. `200`, `404`, etc.)
- - **bodyTemplate**: the body template to set for the response
+
### Example
diff --git a/src/content/docs/processors/int/parse.mdx b/src/content/docs/processors/int/parse.mdx
index 362c6f9..a1356b4 100644
--- a/src/content/docs/processors/int/parse.mdx
+++ b/src/content/docs/processors/int/parse.mdx
@@ -4,13 +4,11 @@ sidebar:
label: Parse
order: 1
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
The `int.parse` processor takes a string and parses it as an integer with the specified `base` and `bitSize`. This processor will return an error if the message being processed is not a string or if the string cannot be parsed into an integer.
-- **type**: `int.parse`
-- **params**:
- - **base**: (optional) the base to use for parsing the integer, defaults to 10
- - **bitSize**: (optional) the bit size of the integer to parse, defaults to 64
+
### Example
diff --git a/src/content/docs/processors/int/random.mdx b/src/content/docs/processors/int/random.mdx
index fa9797b..034fc76 100644
--- a/src/content/docs/processors/int/random.mdx
+++ b/src/content/docs/processors/int/random.mdx
@@ -3,13 +3,11 @@ title: Create Random Int
sidebar:
order: 2
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
The `int.random` processor will set the payload to a random integer between the specified `min` and `max` value.
-- **type**: `int.random`
-- **params**:
- - **min**: the minimum value for the random integer (inclusive).
- - **max**: the maximum value for the random integer (inclusive).
+
### Example
diff --git a/src/content/docs/processors/int/scale.mdx b/src/content/docs/processors/int/scale.mdx
index 9862512..d9dddcd 100644
--- a/src/content/docs/processors/int/scale.mdx
+++ b/src/content/docs/processors/int/scale.mdx
@@ -4,15 +4,11 @@ sidebar:
label: Scale
order: 3
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
This processor will scale an integer value from one range to another. This processor will return an error if the message being processed is not an integer or if the parameters are not valid (e.g. if `inMin` is greater than or equal to `inMax`, etc.).
-- **type**: `int.scale`
-- **params**:
- - **inMin**: the minimum value of the input range
- - **inMax**: the maximum value of the input range
- - **outMin**: the minimum value of the output range
- - **outMax**: the maximum value of the output range
+
### Example
diff --git a/src/content/docs/processors/json/decode.mdx b/src/content/docs/processors/json/decode.mdx
index 591d123..918fb1f 100644
--- a/src/content/docs/processors/json/decode.mdx
+++ b/src/content/docs/processors/json/decode.mdx
@@ -4,10 +4,11 @@ sidebar:
label: Decode
order: 2
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
Convert an incoming byte array or raw string into a JSON object. This processor will return an error if the message being processed is not an array of bytes or a raw string, or if the bytes/string cannot be parsed as JSON.
-- **type**: `json.decode`
+
### Example
diff --git a/src/content/docs/processors/json/encode.mdx b/src/content/docs/processors/json/encode.mdx
index ba1ba71..82c54de 100644
--- a/src/content/docs/processors/json/encode.mdx
+++ b/src/content/docs/processors/json/encode.mdx
@@ -4,10 +4,11 @@ sidebar:
label: Encode
order: 1
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
This processor will encode an incoming object into a JSON byte array. This processor will return an error if the message being processed is not able to be serialized as JSON.
-- **type**: `json.encode`
+
### Example
diff --git a/src/content/docs/processors/kv/get.mdx b/src/content/docs/processors/kv/get.mdx
index 361ea89..8624217 100644
--- a/src/content/docs/processors/kv/get.mdx
+++ b/src/content/docs/processors/kv/get.mdx
@@ -4,14 +4,12 @@ sidebar:
label: Get
order: 1
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
The `kv.get` processor gets the value associated with a key from a module that implements the `KeyValueModule` interface.
The output payload is the value if the key is found.
-- **type**: `kv.get`
-- **params**:
- - **module**: id of the module
- - **key**: the key to look up
+
### Example
diff --git a/src/content/docs/processors/kv/set.mdx b/src/content/docs/processors/kv/set.mdx
index 864b489..fac4a4f 100644
--- a/src/content/docs/processors/kv/set.mdx
+++ b/src/content/docs/processors/kv/set.mdx
@@ -4,23 +4,19 @@ sidebar:
label: Set
order: 2
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
-The `kv.set` processor sets the value associated with a key from a module that implements the `KeyValueModule` interface. The payload is unchanged so whatever is received by this payload is output unless any errors are encountered.
+The `kv.set` processor sets the value of the configured key to the incoming payload using a module that implements the `KeyValueModule` interface. The payload is unchanged so whatever is received by this processor is output unless any errors are encountered.
-- **type**: `kv.set`
-- **params**:
- - **module**: id of the module
- - **key**: the key to look up
- - **value**: the value to set
+
### Example
-This will attempt to set the key `hello` to `world` using the module with an id of `redis`
+This will attempt to set the key `hello` using the module with an id of `redis`
```yaml
- type: kv.set
params:
module: redis
key: hello
- value: world
```
diff --git a/src/content/docs/processors/midi/control_change/create.mdx b/src/content/docs/processors/midi/control_change/create.mdx
index 279bffc..00a7b3d 100644
--- a/src/content/docs/processors/midi/control_change/create.mdx
+++ b/src/content/docs/processors/midi/control_change/create.mdx
@@ -4,14 +4,11 @@ sidebar:
label: Create
order: 1
---
+import SchemaInfo from '../../../../../components/SchemaInfo.astro';
This processor will create a MIDI Control Change message with the specified channel, control number, and control value.
-- **type**: `midi.control_change.create`
-- **params**:
- - **channel**: the MIDI channel
- - **control**: the control number
- - **value**: the control value
+
### Example
diff --git a/src/content/docs/processors/midi/message/decode.mdx b/src/content/docs/processors/midi/message/decode.mdx
index 144900c..471c369 100644
--- a/src/content/docs/processors/midi/message/decode.mdx
+++ b/src/content/docs/processors/midi/message/decode.mdx
@@ -4,10 +4,11 @@ sidebar:
label: Decode
order: 3
---
+import SchemaInfo from '../../../../../components/SchemaInfo.astro';
This processor will decode incoming bytes into a MIDI message. This processor will return an error if the message being processed is not an array of bytes.
-- **type**: `midi.message.decode`
+
### Example
diff --git a/src/content/docs/processors/midi/message/encode.mdx b/src/content/docs/processors/midi/message/encode.mdx
index 800d033..48432fd 100644
--- a/src/content/docs/processors/midi/message/encode.mdx
+++ b/src/content/docs/processors/midi/message/encode.mdx
@@ -4,10 +4,11 @@ sidebar:
label: Encode
order: 2
---
+import SchemaInfo from '../../../../../components/SchemaInfo.astro';
This processor will encode a MIDI message into an array of bytes. This processor will return an error if the message being processed is not a MIDI message.
-- **type**: `midi.message.encode`
+
### Example
diff --git a/src/content/docs/processors/midi/message/unpack.mdx b/src/content/docs/processors/midi/message/unpack.mdx
index 5d884fa..3cbfad4 100644
--- a/src/content/docs/processors/midi/message/unpack.mdx
+++ b/src/content/docs/processors/midi/message/unpack.mdx
@@ -4,10 +4,11 @@ sidebar:
label: Unpack
order: 4
---
+import SchemaInfo from '../../../../../components/SchemaInfo.astro';
This processor will unpack a MIDI message into its individual components. This processor will return an error if the message being processed is not a MIDI message.
-- **type**: `midi.message.unpack`
+
### Example
diff --git a/src/content/docs/processors/midi/note_off/create.mdx b/src/content/docs/processors/midi/note_off/create.mdx
index 87f0b10..7d98b4a 100644
--- a/src/content/docs/processors/midi/note_off/create.mdx
+++ b/src/content/docs/processors/midi/note_off/create.mdx
@@ -1,22 +1,19 @@
---
-title: Create MIDI Note On
+title: Create MIDI Note Off
sidebar:
label: Create
order: 1
---
+import SchemaInfo from '../../../../../components/SchemaInfo.astro';
-This processor will create a MIDI Note On message with the specified channel, note, and velocity.
+This processor will create a MIDI Note Off message with the specified channel, note, and velocity.
-- **type**: `midi.note_on.create`
-- **params**:
- - **channel**: the MIDI channel
- - **note**: the note number
- - **velocity**: the velocity
+
### Example
```yaml
-- type: midi.note_on.create
+- type: midi.note_off.create
params:
channel: "1"
note: "60"
diff --git a/src/content/docs/processors/midi/note_on/create.mdx b/src/content/docs/processors/midi/note_on/create.mdx
index bf8c579..6320217 100644
--- a/src/content/docs/processors/midi/note_on/create.mdx
+++ b/src/content/docs/processors/midi/note_on/create.mdx
@@ -1,22 +1,19 @@
---
-title: Create MIDI Note Off
+title: Create MIDI Note On
sidebar:
label: Create
order: 1
---
+import SchemaInfo from '../../../../../components/SchemaInfo.astro';
-This processor will create a MIDI Note Off message with the specified channel, note, and velocity.
+This processor will create a MIDI Note On message with the specified channel, note, and velocity.
-- **type**: `midi.note_off.create`
-- **params**:
- - **channel**: the MIDI channel
- - **note**: the note number
- - **velocity**: the velocity
+
### Example
```yaml
-- type: midi.note_off.create
+- type: midi.note_on.create
params:
channel: "1"
note: "60"
diff --git a/src/content/docs/processors/midi/program_change/create.mdx b/src/content/docs/processors/midi/program_change/create.mdx
index e847206..62c4a4b 100644
--- a/src/content/docs/processors/midi/program_change/create.mdx
+++ b/src/content/docs/processors/midi/program_change/create.mdx
@@ -4,13 +4,11 @@ sidebar:
label: Create
order: 1
---
+import SchemaInfo from '../../../../../components/SchemaInfo.astro';
This processor will create a MIDI Program Change message with the specified channel and program number.
-- **type**: `midi.program_change.create`
-- **params**:
- - **channel**: the MIDI channel
- - **program**: the program number
+
### Example
diff --git a/src/content/docs/processors/module/output.mdx b/src/content/docs/processors/module/output.mdx
index e100074..d34e8bf 100644
--- a/src/content/docs/processors/module/output.mdx
+++ b/src/content/docs/processors/module/output.mdx
@@ -4,12 +4,11 @@ sidebar:
label: Output
order: 1
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
The `module.output` processor takes any payload and outputs to the specified module.
-- **type**: `module.output`
-- **params**:
- - **module**: the id of the [module](/concepts/modules) to output to.
+
### Example
diff --git a/src/content/docs/processors/osc/message/create.mdx b/src/content/docs/processors/osc/message/create.mdx
index de670ff..f95e06c 100644
--- a/src/content/docs/processors/osc/message/create.mdx
+++ b/src/content/docs/processors/osc/message/create.mdx
@@ -4,14 +4,11 @@ sidebar:
label: Create
order: 1
---
+import SchemaInfo from '../../../../../components/SchemaInfo.astro';
This processor will create an OSC message from the provided parameters. This processor will return an error if any of the required parameters are missing or if the parameters are of the wrong type. The address parameter is required, while the args and types parameters are optional. However, if args are provided, then types must also be provided and must match the amount of args provided.
-- **type**: `osc.message.create`
-- **params**:
- - **address**: the address of the OSC message.
- - **args**: (optional) array of string templates for each argument.
- - **types**: (optional) a single string with the of each arg in order. This is required if args are provided.
+
### Example
diff --git a/src/content/docs/processors/osc/message/decode.mdx b/src/content/docs/processors/osc/message/decode.mdx
index 65214e6..6cadc1f 100644
--- a/src/content/docs/processors/osc/message/decode.mdx
+++ b/src/content/docs/processors/osc/message/decode.mdx
@@ -4,10 +4,11 @@ sidebar:
label: Decode
order: 3
---
+import SchemaInfo from '../../../../../components/SchemaInfo.astro';
The `osc.message.decode` processor takes a array of bytes and turn it into OSC message if it can be. This processor will return an error if the bytes cannot be parsed as an OSC message
-- **type**: `osc.message.decode`
+
### Example
diff --git a/src/content/docs/processors/osc/message/encode.mdx b/src/content/docs/processors/osc/message/encode.mdx
index 360911a..512827a 100644
--- a/src/content/docs/processors/osc/message/encode.mdx
+++ b/src/content/docs/processors/osc/message/encode.mdx
@@ -4,10 +4,11 @@ sidebar:
label: Encode
order: 2
---
+import SchemaInfo from '../../../../../components/SchemaInfo.astro';
The `osc.message.encode` processor takes an OSC message and turns it into an array of bytes. This processor will return an error if the OSC message cannot be turned into bytes.
-- **type**: `osc.message.encode`
+
### Example
diff --git a/src/content/docs/processors/pubsub/publish.mdx b/src/content/docs/processors/pubsub/publish.mdx
index bcbef3f..0bfb924 100644
--- a/src/content/docs/processors/pubsub/publish.mdx
+++ b/src/content/docs/processors/pubsub/publish.mdx
@@ -4,15 +4,13 @@ sidebar:
label: Publish
order: 1
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
This processor will publish the incoming payload to a module that implements the `PubSubModule` interface.
This processor will return an error if any of the required parameters are missing or if the parameters are of the wrong type.
The payload is unchanged so whatever is received by this payload is output unless any errors are encountered.
-- **type**: `pubsub.publish`
-- **params**:
- - **module**: the module to publish with.
- - **topic**: the subject to publish to.
+
### Example
diff --git a/src/content/docs/processors/script/expr.mdx b/src/content/docs/processors/script/expr.mdx
index a05b2fd..d42c308 100644
--- a/src/content/docs/processors/script/expr.mdx
+++ b/src/content/docs/processors/script/expr.mdx
@@ -4,12 +4,11 @@ sidebar:
label: Expr
order: 2
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
The processor will execute the provided Expr expression and return the result as the new payload. This processor will return an error if the expression cannot be executed or if there is an error during execution. The expression will have access to the [wrapped payload](/concepts/payloads).
-- **type**: `script.expr`
-- **params**:
- - **expression**: the Expr expressiont to execute.
+
### Example
diff --git a/src/content/docs/processors/script/js.mdx b/src/content/docs/processors/script/js.mdx
index 380cd0b..03827c4 100644
--- a/src/content/docs/processors/script/js.mdx
+++ b/src/content/docs/processors/script/js.mdx
@@ -4,6 +4,7 @@ sidebar:
label: JavaScript
order: 1
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
The `script.js` processor takes in any payload type and executes a JavaScript function that is able to process the payload. The end value of `payload` will be returned as the output of the processor.
@@ -11,9 +12,7 @@ Ending with a `payload` value of `undefined` is treated the same as any other pr
This run your JavaScript program in a [sandboxed environment](https://gitlab.com/cznic/quickjs). It currently support the [ES2023](https://tc39.es/ecma262/2023/) specification.
-- **type**: `script.js`
-- **params**:
- - **program**: The JavaScript program to run. The payload is available as a global variable called `payload`.
+
### Example
diff --git a/src/content/docs/processors/script/wasm.mdx b/src/content/docs/processors/script/wasm.mdx
index fb5926d..1c791b8 100644
--- a/src/content/docs/processors/script/wasm.mdx
+++ b/src/content/docs/processors/script/wasm.mdx
@@ -4,14 +4,11 @@ sidebar:
label: WASM
order: 3
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
This processor will load and execute a WASM plugin using the [Extism](https://extism.org/) runtime. The processor will execute the specified function in the WASM plugin and return the result as the new payload. This processor will return an error if the plugin cannot be loaded, if the function cannot be executed, or if there is an error during execution. The incoming payload will be passed as the argument to the WASM function. If the plugin is successfully executed, the result of the function will be returned as the new payload.
-- **type**: `script.wasm`
-- **params**:
- - **path**: the path to the WASM plugin to load.
- - **function**: (optional) the function to execute in the WASM plugin defaults to `process`
- - **enableWasi**: (optional) whether to enable WASI for the plugin defaults to `false`
+
### Example
diff --git a/src/content/docs/processors/sip/response/audio/create.mdx b/src/content/docs/processors/sip/response/audio/create.mdx
index 0d5f7fc..2383cce 100644
--- a/src/content/docs/processors/sip/response/audio/create.mdx
+++ b/src/content/docs/processors/sip/response/audio/create.mdx
@@ -4,14 +4,11 @@ sidebar:
label: Create
order: 1
---
+import SchemaInfo from '../../../../../../components/SchemaInfo.astro';
This processor will create a SIP response message with an audio file as the payload. If this message is output to a SIP module using the [module.output](/processors/module/output) processor, then the SIP module will send the response to the caller and play the audio file included in the response.
-- **type**: `sip.response.audio.create`
-- **params**:
- - **preWait**: the amount of time in milliseconds to wait before sending the response
- - **audioFile**: the path to the audio file to include in the response
- - **postWait**: the amount of time in milliseconds to wait after sending the response
+
### Example
diff --git a/src/content/docs/processors/sip/response/dtmf/create.mdx b/src/content/docs/processors/sip/response/dtmf/create.mdx
index a6424d1..90fc747 100644
--- a/src/content/docs/processors/sip/response/dtmf/create.mdx
+++ b/src/content/docs/processors/sip/response/dtmf/create.mdx
@@ -4,14 +4,11 @@ sidebar:
label: Create
order: 1
---
+import SchemaInfo from '../../../../../../components/SchemaInfo.astro';
This processor will create a SIP DTMF response from the provided parameters. If this message is output to a SIP module using the [module.output](/processors/module/output) processor, then the SIP module will send the response to the caller and play the DTMF tones specified.
-- **type**: `sip.response.dtmf.create`
-- **params**:
- - **preWait**: the amount of time in milliseconds to wait before sending the response
- - **digits**: the DTMF digits to include in the response
- - **postWait**: the amount of time in milliseconds to wait after sending the response
+
### Example
diff --git a/src/content/docs/processors/string/create.mdx b/src/content/docs/processors/string/create.mdx
index 68b3800..89cf60c 100644
--- a/src/content/docs/processors/string/create.mdx
+++ b/src/content/docs/processors/string/create.mdx
@@ -4,12 +4,11 @@ sidebar:
label: Create
order: 3
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
The `string.create` processor creates a string based on the provided template. This processor will return an error if there is an issue executing the template. The template property is just a [Go template](https://pkg.go.dev/text/template) that will be evaluated with the incoming message provided as an environment.
-- **type**: `string.create`
-- **params**:
- - **template**: string template that will have the incoming message as the context
+
### Example
diff --git a/src/content/docs/processors/string/decode.mdx b/src/content/docs/processors/string/decode.mdx
index 00613c5..82ab331 100644
--- a/src/content/docs/processors/string/decode.mdx
+++ b/src/content/docs/processors/string/decode.mdx
@@ -4,10 +4,11 @@ sidebar:
label: Decode
order: 1
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
The `string.decode` processor takes a array of bytes and turn it into string. This processor will return an error if the message being processed is not an array of bytes.
-- **type**: `string.decode`
+
### Example
diff --git a/src/content/docs/processors/string/encode.mdx b/src/content/docs/processors/string/encode.mdx
index e6d48b7..38ffc22 100644
--- a/src/content/docs/processors/string/encode.mdx
+++ b/src/content/docs/processors/string/encode.mdx
@@ -4,10 +4,11 @@ sidebar:
label: Encode
order: 2
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
The `string.encode` processor takes a string and turns it into an array of bytes. This processor will return an error if the message being processed is not a string.
-- **type**: `string.encode`
+
### Example
diff --git a/src/content/docs/processors/string/split.mdx b/src/content/docs/processors/string/split.mdx
index dcd747c..e0ba393 100644
--- a/src/content/docs/processors/string/split.mdx
+++ b/src/content/docs/processors/string/split.mdx
@@ -4,12 +4,11 @@ sidebar:
label: Split
order: 5
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
The `string.split` processor takes a string and turns it into an array of strings by splitting on `params.separator`. This processor will return an error if the message being processed is not a string.
-- **type**: `string.split`
-- **params**:
- - **pattern**: string to split incoming string on
+
### Example
diff --git a/src/content/docs/processors/time/sleep.mdx b/src/content/docs/processors/time/sleep.mdx
index 230fc76..0c10166 100644
--- a/src/content/docs/processors/time/sleep.mdx
+++ b/src/content/docs/processors/time/sleep.mdx
@@ -4,12 +4,11 @@ sidebar:
label: Sleep
order: 1
---
+import SchemaInfo from '../../../../components/SchemaInfo.astro';
The `time.sleep` processor will sleep for the specified `duration` in milliseconds before passing the message to the next processor.
-- **type**: `time.sleep`
-- **params**:
- - **duration**: the duration to sleep in milliseconds
+
### Example
diff --git a/src/data/modules.schema.json b/src/data/modules.schema.json
new file mode 100644
index 0000000..55e0e7e
--- /dev/null
+++ b/src/data/modules.schema.json
@@ -0,0 +1,625 @@
+{
+ "type": "array",
+ "items": {
+ "oneOf": [
+ {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "minLength": 1 },
+ "params": {
+ "type": "object",
+ "properties": {
+ "port": {
+ "type": "string",
+ "title": "Port",
+ "description": "the name of the MIDI port to send messages to"
+ }
+ },
+ "required": ["port"],
+ "additionalProperties": false
+ },
+ "type": { "const": "midi.output" }
+ },
+ "$id": "midi.output",
+ "title": "MIDI Output",
+ "required": ["id", "type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "minLength": 1 },
+ "params": {
+ "type": "object",
+ "properties": {
+ "broker": {
+ "type": "string",
+ "title": "Broker URL",
+ "description": "the URL of the MQTT broker to connect to"
+ },
+ "clientId": {
+ "type": "string",
+ "title": "Client ID",
+ "description": "the client ID to use when connecting to the MQTT broker"
+ },
+ "qos": {
+ "type": "integer",
+ "title": "QoS",
+ "description": "the QoS level to use when publishing messages",
+ "default": 0,
+ "minimum": 0,
+ "maximum": 2
+ },
+ "retained": {
+ "type": "boolean",
+ "title": "Retained",
+ "description": "whether to set the retained flag when publishing messages",
+ "default": false
+ },
+ "topic": {
+ "type": "string",
+ "title": "Topic",
+ "description": "an MQTT topic to subscribe to"
+ }
+ },
+ "required": ["broker", "topic", "clientId"],
+ "additionalProperties": false
+ },
+ "type": { "const": "mqtt.client" }
+ },
+ "$id": "mqtt.client",
+ "title": "MQTT Client",
+ "required": ["id", "type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "minLength": 1 },
+ "params": {
+ "type": "object",
+ "properties": {
+ "ip": {
+ "type": "string",
+ "title": "IP",
+ "description": "the IP address to bind the NATS server to",
+ "default": "0.0.0.0"
+ },
+ "port": {
+ "type": "integer",
+ "title": "Port",
+ "description": "the port for the NATS server to listen on",
+ "default": 4222,
+ "minimum": 1024,
+ "maximum": 65535
+ }
+ },
+ "additionalProperties": false
+ },
+ "type": { "const": "nats.server" }
+ },
+ "$id": "nats.server",
+ "title": "NATS Server",
+ "required": ["id", "type"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "minLength": 1 },
+ "params": {
+ "type": "object",
+ "properties": {
+ "framing": {
+ "type": "string",
+ "title": "Framing Method",
+ "description": "the method used to frame messages over the TCP connection",
+ "enum": ["LF", "CR", "CRLF", "SLIP", "RAW"]
+ },
+ "host": {
+ "type": "string",
+ "title": "Host",
+ "description": "the hostname or IP address of the TCP server to connect to"
+ },
+ "port": {
+ "type": "integer",
+ "title": "Port",
+ "description": "the port of the TCP server to connect to",
+ "minimum": 1,
+ "maximum": 65535
+ }
+ },
+ "required": ["host", "port", "framing"],
+ "additionalProperties": false
+ },
+ "type": { "const": "net.tcp.client" }
+ },
+ "$id": "net.tcp.client",
+ "title": "TCP Client",
+ "required": ["id", "type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "minLength": 1 },
+ "params": {
+ "type": "object",
+ "properties": {
+ "duration": {
+ "type": "integer",
+ "title": "Duration",
+ "description": "time in milliseconds between emitted events"
+ }
+ },
+ "required": ["duration"],
+ "additionalProperties": false
+ },
+ "type": { "const": "time.interval" }
+ },
+ "$id": "time.interval",
+ "title": "Interval",
+ "required": ["id", "type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "minLength": 1 },
+ "params": {
+ "type": "object",
+ "properties": {
+ "host": {
+ "type": "string",
+ "title": "Host",
+ "description": "the hostname or IP address of the UDP server to connect to"
+ },
+ "port": {
+ "type": "integer",
+ "title": "Port",
+ "description": "the port of the UDP server to connect to",
+ "minimum": 1,
+ "maximum": 65535
+ }
+ },
+ "required": ["host", "port"],
+ "additionalProperties": false
+ },
+ "type": { "const": "net.udp.client" }
+ },
+ "$id": "net.udp.client",
+ "title": "UDP Client",
+ "required": ["id", "type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "minLength": 1 },
+ "params": {
+ "type": "object",
+ "properties": {
+ "bufferSize": {
+ "type": "integer",
+ "title": "Buffer Size",
+ "description": "the size of the buffer for incoming UDP messages",
+ "default": 2048,
+ "minimum": 1,
+ "maximum": 65535
+ },
+ "ip": {
+ "type": "string",
+ "title": "IP",
+ "description": "the IP address to bind the UDP server to",
+ "default": "0.0.0.0"
+ },
+ "port": {
+ "type": "integer",
+ "title": "Port",
+ "description": "the port for the UDP server to listen on",
+ "minimum": 1024,
+ "maximum": 65535
+ }
+ },
+ "required": ["port"],
+ "additionalProperties": false
+ },
+ "type": { "const": "net.udp.server" }
+ },
+ "$id": "net.udp.server",
+ "title": "UDP Server",
+ "required": ["id", "type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "minLength": 1 },
+ "params": {
+ "type": "object",
+ "properties": {
+ "subject": {
+ "type": "string",
+ "title": "Subject",
+ "description": "the subject to subscribe to"
+ },
+ "url": {
+ "type": "string",
+ "title": "NATS Server URL",
+ "description": "the URL of the NATS server to connect to"
+ }
+ },
+ "required": ["url", "subject"],
+ "additionalProperties": false
+ },
+ "type": { "const": "nats.client" }
+ },
+ "$id": "nats.client",
+ "title": "NATS Client",
+ "required": ["id", "type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "minLength": 1 },
+ "params": {
+ "type": "object",
+ "properties": {
+ "host": {
+ "type": "string",
+ "title": "Host",
+ "description": "the hostname or IP address of the Redis server to connect to"
+ },
+ "port": {
+ "type": "integer",
+ "title": "Port",
+ "description": "the port to use when connecting to the Redis server",
+ "minimum": 1,
+ "maximum": 65535
+ }
+ },
+ "required": ["host", "port"],
+ "additionalProperties": false
+ },
+ "type": { "const": "redis.client" }
+ },
+ "$id": "redis.client",
+ "title": "Redis Client",
+ "required": ["id", "type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "minLength": 1 },
+ "params": {
+ "type": "object",
+ "properties": {
+ "ip": {
+ "type": "string",
+ "title": "IP",
+ "description": "the IP address to bind the SIP server to",
+ "default": "0.0.0.0"
+ },
+ "port": {
+ "type": "integer",
+ "title": "Port",
+ "description": "the port for the SIP server to listen on",
+ "default": 5060,
+ "minimum": 1024,
+ "maximum": 65535
+ },
+ "transport": {
+ "type": "string",
+ "title": "Transport",
+ "description": "the transport protocol to use for the SIP server",
+ "default": "udp",
+ "enum": ["udp", "tcp", "ws", "udp4", "tcp4"]
+ },
+ "userAgent": {
+ "type": "string",
+ "title": "User Agent",
+ "description": "the user agent string to use",
+ "default": "showbridge"
+ }
+ },
+ "additionalProperties": false
+ },
+ "type": { "const": "sip.call.server" }
+ },
+ "$id": "sip.call.server",
+ "title": "SIP Call Server",
+ "required": ["id", "type"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "minLength": 1 },
+ "params": {
+ "type": "object",
+ "properties": {
+ "framing": {
+ "type": "string",
+ "title": "Framing Method",
+ "description": "the method used to frame messages over the TCP connection",
+ "enum": ["LF", "CR", "CRLF", "SLIP", "RAW"]
+ },
+ "ip": {
+ "type": "string",
+ "title": "IP",
+ "description": "the IP address to bind the TCP server to",
+ "default": "0.0.0.0"
+ },
+ "port": {
+ "type": "integer",
+ "title": "Port",
+ "description": "the port for the TCP server to listen on",
+ "minimum": 1024,
+ "maximum": 65535
+ }
+ },
+ "required": ["port", "framing"],
+ "additionalProperties": false
+ },
+ "type": { "const": "net.tcp.server" }
+ },
+ "$id": "net.tcp.server",
+ "title": "TCP Server",
+ "required": ["id", "type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "minLength": 1 },
+ "params": {
+ "type": "object",
+ "properties": {
+ "url": {
+ "type": "string",
+ "title": "URL",
+ "description": "the URL of the WebSocket server to connect"
+ }
+ },
+ "required": ["url"],
+ "additionalProperties": false
+ },
+ "type": { "const": "websocket.client" }
+ },
+ "$id": "websocket.client",
+ "title": "WebSocket Client",
+ "required": ["id", "type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "minLength": 1 },
+ "params": {
+ "type": "object",
+ "properties": {
+ "port": {
+ "type": "string",
+ "title": "Port",
+ "description": "the name of the MIDI port to listen to"
+ }
+ },
+ "required": ["port"],
+ "additionalProperties": false
+ },
+ "type": { "const": "midi.input" }
+ },
+ "$id": "midi.input",
+ "title": "MIDI Input",
+ "required": ["id", "type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "minLength": 1 },
+ "type": { "const": "psn.client" }
+ },
+ "$id": "psn.client",
+ "title": "PosiStageNet Client",
+ "required": ["id", "type"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "minLength": 1 },
+ "params": {
+ "type": "object",
+ "properties": {
+ "baudRate": {
+ "type": "integer",
+ "title": "Baud Rate",
+ "description": "the baud rate to use when connecting to the serial port"
+ },
+ "framing": {
+ "type": "string",
+ "title": "Framing Method",
+ "description": "the method to use for framing messages on the serial port",
+ "enum": ["LF", "CR", "CRLF", "SLIP", "RAW"]
+ },
+ "port": {
+ "type": "string",
+ "title": "Port",
+ "description": "the name of the serial port to connect to"
+ }
+ },
+ "required": ["port", "baudRate", "framing"],
+ "additionalProperties": false
+ },
+ "type": { "const": "serial.client" }
+ },
+ "$id": "serial.client",
+ "title": "Serial Client",
+ "required": ["id", "type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "minLength": 1 },
+ "params": {
+ "type": "object",
+ "properties": {
+ "duration": {
+ "type": "integer",
+ "title": "Duration",
+ "description": "time in milliseconds before the timer fires"
+ }
+ },
+ "required": ["duration"],
+ "additionalProperties": false
+ },
+ "type": { "const": "time.timer" }
+ },
+ "$id": "time.timer",
+ "title": "Timer",
+ "required": ["id", "type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "minLength": 1 },
+ "params": {
+ "type": "object",
+ "properties": {
+ "port": {
+ "type": "integer",
+ "title": "Port",
+ "description": "the port for the HTTP server to listen on",
+ "minimum": 1024,
+ "maximum": 65535
+ }
+ },
+ "required": ["port"],
+ "additionalProperties": false
+ },
+ "type": { "const": "http.server" }
+ },
+ "$id": "http.server",
+ "title": "HTTP Server",
+ "required": ["id", "type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "minLength": 1 },
+ "params": {
+ "type": "object",
+ "properties": {
+ "ip": {
+ "type": "string",
+ "title": "IP",
+ "description": "the IP address to bind the SIP server to",
+ "default": "0.0.0.0"
+ },
+ "port": {
+ "type": "integer",
+ "title": "Port",
+ "description": "the port for the SIP server to listen on",
+ "default": 5060,
+ "minimum": 1024,
+ "maximum": 65535
+ },
+ "separator": {
+ "type": "string",
+ "title": "DTMF Separator",
+ "description": "the DTMF character to use as a separator between DTMF digit groups",
+ "minLength": 1,
+ "maxLength": 1
+ },
+ "transport": {
+ "type": "string",
+ "title": "Transport",
+ "description": "the transport protocol to use for the SIP server",
+ "default": "udp",
+ "enum": ["udp", "tcp", "ws", "udp4", "tcp4"]
+ },
+ "userAgent": {
+ "type": "string",
+ "title": "User Agent",
+ "description": "the user agent string to use",
+ "default": "showbridge"
+ }
+ },
+ "required": ["separator"],
+ "additionalProperties": false
+ },
+ "type": { "const": "sip.dtmf.server" }
+ },
+ "$id": "sip.dtmf.server",
+ "title": "SIP DTMF Server",
+ "required": ["id", "type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "minLength": 1 },
+ "params": {
+ "type": "object",
+ "properties": {
+ "ip": {
+ "type": "string",
+ "title": "IP",
+ "description": "the multicast address to listen on"
+ },
+ "port": {
+ "type": "integer",
+ "title": "Port",
+ "description": "the port to listen on",
+ "minimum": 1024,
+ "maximum": 65535
+ }
+ },
+ "required": ["ip", "port"],
+ "additionalProperties": false
+ },
+ "type": { "const": "net.udp.multicast" }
+ },
+ "$id": "net.udp.multicast",
+ "title": "UDP Multicast",
+ "required": ["id", "type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "minLength": 1 },
+ "params": {
+ "type": "object",
+ "properties": {
+ "dsn": {
+ "type": "string",
+ "title": "Data Source Name",
+ "description": "the data source name (DSN) for the SQLite database",
+ "minLength": 1
+ }
+ },
+ "required": ["dsn"],
+ "additionalProperties": false
+ },
+ "type": { "const": "db.sqlite" }
+ },
+ "$id": "db.sqlite",
+ "title": "SQLite Database",
+ "required": ["id", "type", "params"],
+ "additionalProperties": false
+ }
+ ]
+ },
+ "$id": "https://showbridge.io/modules.schema.json",
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "title": "Modules",
+ "description": "module configurations",
+ "default": []
+}
diff --git a/src/data/processors.schema.json b/src/data/processors.schema.json
new file mode 100644
index 0000000..d9d16a5
--- /dev/null
+++ b/src/data/processors.schema.json
@@ -0,0 +1,1035 @@
+{
+ "type": "array",
+ "items": {
+ "oneOf": [
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "digits": {
+ "type": "string",
+ "title": "Digits",
+ "description": "DTMF digits to send"
+ },
+ "postWait": {
+ "type": "integer",
+ "title": "Post Wait (ms)",
+ "description": "number of milliseconds to wait after sending the DTMF tones"
+ },
+ "preWait": {
+ "type": "integer",
+ "title": "Pre Wait (ms)",
+ "description": "number of milliseconds to wait before sending the DTMF tones"
+ }
+ },
+ "required": ["preWait", "postWait", "digits"],
+ "additionalProperties": false
+ },
+ "type": { "const": "sip.response.dtmf.create" }
+ },
+ "$id": "sip.response.dtmf.create",
+ "title": "Create SIP DTMF Response",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": { "type": { "const": "json.encode" } },
+ "$id": "json.encode",
+ "title": "Encode JSON",
+ "required": ["type"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "channel": {
+ "type": "string",
+ "title": "Channel",
+ "description": "channel number for the program change message"
+ },
+ "program": {
+ "type": "string",
+ "title": "Program",
+ "description": "program number for the program change message"
+ }
+ },
+ "required": ["type", "channel", "program"],
+ "additionalProperties": false
+ },
+ "type": { "const": "midi.program_change.create" }
+ },
+ "$id": "midi.program_change.create",
+ "title": "Create MIDI Prgoram Change Message",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "audioFile": {
+ "type": "string",
+ "title": "Audio File",
+ "description": "path to the audio file to play"
+ },
+ "postWait": {
+ "type": "integer",
+ "title": "Post Wait (ms)",
+ "description": "number of milliseconds to wait after playing the audio"
+ },
+ "preWait": {
+ "type": "integer",
+ "title": "Pre Wait (ms)",
+ "description": "number of milliseconds to wait before playing the audio"
+ }
+ },
+ "required": ["preWait", "postWait", "audioFile"],
+ "additionalProperties": false
+ },
+ "type": { "const": "sip.response.audio.create" }
+ },
+ "$id": "sip.response.audio.create",
+ "title": "Create SIP Audio Response",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Field Name",
+ "description": "name of the struct field to extract"
+ }
+ },
+ "required": ["name"],
+ "additionalProperties": false
+ },
+ "type": { "const": "struct.field.get" }
+ },
+ "$id": "struct.field.get",
+ "title": "Get Struct Field",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "duration": {
+ "type": "integer",
+ "title": "Duration",
+ "description": "time to sleep in milliseconds"
+ }
+ },
+ "required": ["duration"],
+ "additionalProperties": false
+ },
+ "type": { "const": "time.sleep" }
+ },
+ "$id": "time.sleep",
+ "title": "Sleep",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "channel": {
+ "type": "string",
+ "title": "Channel",
+ "description": "channel number for the note off message"
+ },
+ "note": {
+ "type": "string",
+ "title": "Note",
+ "description": "note number for the note off message"
+ },
+ "velocity": {
+ "type": "string",
+ "title": "Velocity",
+ "description": "velocity for the note off message"
+ }
+ },
+ "required": ["channel", "note", "velocity"],
+ "additionalProperties": false
+ },
+ "type": { "const": "midi.note_off.create" }
+ },
+ "$id": "midi.note_off.create",
+ "title": "Create MIDI Note Off Message",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "channel": {
+ "type": "string",
+ "title": "Channel",
+ "description": "channel number for the note on message"
+ },
+ "note": {
+ "type": "string",
+ "title": "Note",
+ "description": "note number for the note on message"
+ },
+ "velocity": {
+ "type": "string",
+ "title": "Velocity",
+ "description": "velocity for the note on message"
+ }
+ },
+ "required": ["channel", "note", "velocity"],
+ "additionalProperties": false
+ },
+ "type": { "const": "midi.note_on.create" }
+ },
+ "$id": "midi.note_on.create",
+ "title": "Create MIDI Note On Message",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": { "type": { "const": "string.encode" } },
+ "$id": "string.encode",
+ "title": "Encode String",
+ "required": ["type"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": { "type": { "const": "artnet.packet.decode" } },
+ "$id": "artnet.packet.decode",
+ "title": "Decode ArtNet Packet",
+ "required": ["type"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "module": {
+ "type": "string",
+ "title": "Module ID",
+ "description": "ID of the database module to query"
+ },
+ "query": {
+ "type": "string",
+ "title": "Query",
+ "description": "SQL query to execute"
+ }
+ },
+ "required": ["module", "query"],
+ "additionalProperties": false
+ },
+ "type": { "const": "db.query" }
+ },
+ "$id": "db.query",
+ "title": "Query Database",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": { "type": { "const": "filter.change" } },
+ "$id": "filter.change",
+ "title": "Filter On Change",
+ "required": ["type"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "bitSize": {
+ "type": "integer",
+ "title": "Bit Size",
+ "description": "bit size of the resulting float",
+ "default": 64,
+ "enum": [32, 64]
+ }
+ },
+ "additionalProperties": false
+ },
+ "type": { "const": "float.parse" }
+ },
+ "$id": "float.parse",
+ "title": "Parse Float",
+ "required": ["type"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "bitSize": {
+ "type": "integer",
+ "title": "Bit Size",
+ "description": "bit size of the resulting float",
+ "default": 32,
+ "enum": [32, 64]
+ },
+ "max": {
+ "type": "number",
+ "title": "Maximum",
+ "description": "exclusive maximum value of the random float"
+ },
+ "min": {
+ "type": "number",
+ "title": "Minimum",
+ "description": "inclusive minimum value of the random float"
+ }
+ },
+ "required": ["min", "max"],
+ "additionalProperties": false
+ },
+ "type": { "const": "float.random" }
+ },
+ "$id": "float.random",
+ "title": "Random Float",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "method": {
+ "type": "string",
+ "title": "HTTP Method",
+ "description": "method to use for the HTTP request",
+ "enum": ["GET", "POST", "PUT", "PATCH", "DELETE"]
+ },
+ "url": {
+ "type": "string",
+ "title": "URL",
+ "description": "URL to send the HTTP request to"
+ }
+ },
+ "required": ["method", "url"],
+ "additionalProperties": false
+ },
+ "type": { "const": "http.request.do" }
+ },
+ "$id": "http.request.do",
+ "title": "Do HTTP Request",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "bodyTemplate": {
+ "type": "string",
+ "title": "Body Template",
+ "description": "template for the response body"
+ },
+ "status": {
+ "type": "integer",
+ "title": "Status Code",
+ "description": "status code to set on the response"
+ }
+ },
+ "required": ["status", "bodyTemplate"],
+ "additionalProperties": false
+ },
+ "type": { "const": "http.response.create" }
+ },
+ "$id": "http.response.create",
+ "title": "Create HTTP Response",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "inMax": {
+ "type": "integer",
+ "title": "Input Maximum",
+ "description": "maximum value of the input integer"
+ },
+ "inMin": {
+ "type": "integer",
+ "title": "Input Minimum",
+ "description": "minimum value of the input integer"
+ },
+ "outMax": {
+ "type": "integer",
+ "title": "Output Maximum",
+ "description": "maximum value of the output integer"
+ },
+ "outMin": {
+ "type": "integer",
+ "title": "Output Minimum",
+ "description": "minimum value of the output integer"
+ }
+ },
+ "required": ["inMin", "inMax", "outMin", "outMax"],
+ "additionalProperties": false
+ },
+ "type": { "const": "int.scale" }
+ },
+ "$id": "int.scale",
+ "title": "Scale Int",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "expression": {
+ "type": "string",
+ "title": "Expression",
+ "description": "Expr expression to evaluate, must return a boolean"
+ }
+ },
+ "required": ["expression"],
+ "additionalProperties": false
+ },
+ "type": { "const": "filter.expr" }
+ },
+ "$id": "filter.expr",
+ "title": "Filter by Expr expression",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "rate": {
+ "type": "integer",
+ "title": "Rate",
+ "description": "number of events to allow per second"
+ }
+ },
+ "required": ["rate"]
+ },
+ "type": { "const": "filter.rate" }
+ },
+ "$id": "filter.rate",
+ "title": "Filter by Rate",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "focus": {
+ "type": "string",
+ "title": "Focus",
+ "description": "focus level of the camera"
+ },
+ "id": {
+ "type": "string",
+ "title": "Camera ID",
+ "description": "ID of the camera this FreeD position corresponds to"
+ },
+ "pan": {
+ "type": "string",
+ "title": "Pan",
+ "description": "pan angle of the camera"
+ },
+ "posX": {
+ "type": "string",
+ "title": "Position X",
+ "description": "X coordinate of the camera's position"
+ },
+ "posY": {
+ "type": "string",
+ "title": "Position Y",
+ "description": "Y coordinate of the camera's position"
+ },
+ "posZ": {
+ "type": "string",
+ "title": "Position Z",
+ "description": "Z coordinate of the camera's position"
+ },
+ "roll": {
+ "type": "string",
+ "title": "Roll",
+ "description": "roll angle of the camera"
+ },
+ "tilt": {
+ "type": "string",
+ "title": "Tilt",
+ "description": "tilt angle of the camera"
+ },
+ "zoom": {
+ "type": "string",
+ "title": "Zoom",
+ "description": "zoom level of the camera"
+ }
+ },
+ "required": [
+ "id",
+ "pan",
+ "tilt",
+ "roll",
+ "posX",
+ "posY",
+ "posZ",
+ "zoom",
+ "focus"
+ ],
+ "additionalProperties": false
+ },
+ "type": { "const": "freed.create" }
+ },
+ "$id": "freed.create",
+ "title": "Create FreeD",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": { "type": { "const": "freed.encode" } },
+ "$id": "freed.encode",
+ "title": "Encode FreeD",
+ "required": ["type"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "key": {
+ "type": "string",
+ "title": "Key",
+ "description": "key to retrieve from the key-value module"
+ },
+ "module": {
+ "type": "string",
+ "title": "Module ID",
+ "description": "ID of the key-value module to get the value from"
+ }
+ },
+ "required": ["module", "key"],
+ "additionalProperties": false
+ },
+ "type": { "const": "kv.get" }
+ },
+ "$id": "kv.get",
+ "title": "Get Key",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": { "type": { "const": "osc.message.decode" } },
+ "$id": "osc.message.decode",
+ "title": "Decode OSC Message",
+ "required": ["type"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": { "type": { "const": "osc.message.encode" } },
+ "$id": "osc.message.encode",
+ "title": "Encode OSC Message",
+ "required": ["type"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "module": {
+ "type": "string",
+ "title": "Module ID",
+ "description": "ID of the module to publish to"
+ },
+ "topic": {
+ "type": "string",
+ "title": "Topic",
+ "description": "topic to publish to"
+ }
+ },
+ "required": ["module", "topic"],
+ "additionalProperties": false
+ },
+ "type": { "const": "pubsub.publish" }
+ },
+ "$id": "pubsub.publish",
+ "title": "Publish to Pub/Sub Topic",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "pattern": {
+ "type": "string",
+ "title": "Pattern",
+ "description": "regex pattern to match against"
+ }
+ },
+ "required": ["pattern"],
+ "additionalProperties": false
+ },
+ "type": { "const": "filter.regex" }
+ },
+ "$id": "filter.regex",
+ "title": "Filter by Regex",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": { "type": { "const": "freed.decode" } },
+ "$id": "freed.decode",
+ "title": "Decode FreeD",
+ "required": ["type"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": { "type": { "const": "json.decode" } },
+ "$id": "json.decode",
+ "title": "Decode JSON",
+ "required": ["type"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": { "type": { "const": "midi.message.decode" } },
+ "$id": "midi.message.decode",
+ "title": "Decode MIDI Message",
+ "required": ["type"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "program": {
+ "type": "string",
+ "title": "Program",
+ "description": "JavaScript program to run"
+ }
+ },
+ "required": ["program"],
+ "additionalProperties": false
+ },
+ "type": { "const": "script.js" }
+ },
+ "$id": "script.js",
+ "title": "Run JavaScript",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "template": {
+ "type": "string",
+ "title": "Template",
+ "description": "template to evaluate"
+ }
+ },
+ "required": ["template"],
+ "additionalProperties": false
+ },
+ "type": { "const": "string.create" }
+ },
+ "$id": "string.create",
+ "title": "Create String",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": { "type": { "const": "string.decode" } },
+ "$id": "string.decode",
+ "title": "Decode String",
+ "required": ["type"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Method Name",
+ "description": "name of the struct method to extract and call (with no arguments)"
+ }
+ },
+ "required": ["name"],
+ "additionalProperties": false
+ },
+ "type": { "const": "struct.method.get" }
+ },
+ "$id": "struct.method.get",
+ "title": "Get Struct Method",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": { "type": { "const": "artnet.packet.encode" } },
+ "$id": "artnet.packet.encode",
+ "title": "Encode ArtNet Packet",
+ "required": ["type"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "base": {
+ "type": "integer",
+ "title": "Base",
+ "description": "numerical base to use for parsing the integer",
+ "default": 10,
+ "enum": [0, 2, 8, 10, 16]
+ },
+ "bitSize": {
+ "type": "integer",
+ "title": "Bit Size",
+ "description": "bit size of the resulting integer",
+ "default": 64,
+ "enum": [0, 8, 16, 32, 64]
+ }
+ },
+ "additionalProperties": false
+ },
+ "type": { "const": "int.parse" }
+ },
+ "$id": "int.parse",
+ "title": "Parse Int",
+ "required": ["type"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "key": {
+ "type": "string",
+ "title": "Key",
+ "description": "key to set in the key-value module"
+ },
+ "module": {
+ "type": "string",
+ "title": "Module ID",
+ "description": "ID of the key-value module to set the value in"
+ }
+ },
+ "required": ["module", "key"],
+ "additionalProperties": false
+ },
+ "type": { "const": "kv.set" }
+ },
+ "$id": "kv.set",
+ "title": "Set Key",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": { "type": { "const": "midi.message.encode" } },
+ "$id": "midi.message.encode",
+ "title": "Encode MIDI Message",
+ "required": ["type"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "address": {
+ "type": "string",
+ "title": "Address",
+ "description": "OSC address for the message"
+ },
+ "args": {
+ "type": "array",
+ "items": { "type": "string" },
+ "title": "Arguments",
+ "description": "arguments for the OSC message"
+ },
+ "types": {
+ "type": "string",
+ "title": "Argument Types",
+ "description": "string of OSC types corresponding to the arguments in args"
+ }
+ },
+ "required": ["address"],
+ "additionalProperties": false
+ },
+ "type": { "const": "osc.message.create" }
+ },
+ "$id": "osc.message.create",
+ "title": "Create OSC Message",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "expression": {
+ "type": "string",
+ "title": "Expression",
+ "description": "Expr expression to evaluate"
+ }
+ },
+ "required": ["expression"],
+ "additionalProperties": false
+ },
+ "type": { "const": "script.expr" }
+ },
+ "$id": "script.expr",
+ "title": "Evaluate Expr Expression",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "enableWasi": {
+ "type": "boolean",
+ "title": "Enable WASI",
+ "description": "whether to enable WASI when running the WASM plugin",
+ "default": false
+ },
+ "function": {
+ "type": "string",
+ "title": "Function",
+ "description": "exported function to call on the WASM plugin",
+ "default": "process"
+ },
+ "path": {
+ "type": "string",
+ "title": "Path",
+ "description": "path to the WASM plugin to load"
+ }
+ },
+ "required": ["path"],
+ "additionalProperties": false
+ },
+ "type": { "const": "script.wasm" }
+ },
+ "$id": "script.wasm",
+ "title": "Run WASM Plugin",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "separator": {
+ "type": "string",
+ "title": "Separator",
+ "description": "separator to split the string on"
+ }
+ },
+ "required": ["separator"],
+ "additionalProperties": false
+ },
+ "type": { "const": "string.split" }
+ },
+ "$id": "string.split",
+ "title": "Split String",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": { "type": { "const": "midi.message.unpack" } },
+ "$id": "midi.message.unpack",
+ "title": "Unpack MIDI Message",
+ "required": ["type"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "max": {
+ "type": "integer",
+ "title": "Maximum",
+ "description": "inclusive maximum value of the random integer"
+ },
+ "min": {
+ "type": "integer",
+ "title": "Minimum",
+ "description": "inclusive minimum value of the random integer"
+ }
+ },
+ "required": ["min", "max"],
+ "additionalProperties": false
+ },
+ "type": { "const": "int.random" }
+ },
+ "$id": "int.random",
+ "title": "Random Int",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "channel": {
+ "type": "string",
+ "title": "Channel",
+ "description": "channel number for the control change message"
+ },
+ "control": {
+ "type": "string",
+ "title": "Control",
+ "description": "control number for the control change message"
+ },
+ "value": {
+ "type": "string",
+ "title": "Value",
+ "description": "value for the control change message"
+ }
+ },
+ "required": ["channel", "control", "value"],
+ "additionalProperties": false
+ },
+ "type": { "const": "midi.control_change.create" }
+ },
+ "$id": "midi.control_change.create",
+ "title": "Create MIDI Control Change Message",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "module": {
+ "type": "string",
+ "title": "Module ID",
+ "description": "ID of module to send output to"
+ }
+ },
+ "required": ["module"],
+ "additionalProperties": false
+ },
+ "type": { "const": "module.output" }
+ },
+ "$id": "module.output",
+ "title": "Module Output",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": { "type": { "const": "debug.log" } },
+ "$id": "debug.log",
+ "title": "Debug Log",
+ "required": ["type"],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "params": {
+ "type": "object",
+ "properties": {
+ "source": {
+ "type": "string",
+ "title": "Source",
+ "description": "source to report as to the router"
+ }
+ },
+ "required": ["source"],
+ "additionalProperties": false
+ },
+ "type": { "const": "router.input" }
+ },
+ "$id": "router.input",
+ "title": "Router Input",
+ "required": ["type", "params"],
+ "additionalProperties": false
+ }
+ ]
+ },
+ "$id": "https://showbridge.io/processors.schema.json",
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "title": "Processors",
+ "description": "processor configurations",
+ "default": []
+}