diff --git a/src/content/docs/modules/db/mysql.mdx b/src/content/docs/modules/db/mysql.mdx new file mode 100644 index 0000000..3250952 --- /dev/null +++ b/src/content/docs/modules/db/mysql.mdx @@ -0,0 +1,24 @@ +--- +title: MySQL +sidebar: + order: 1 +--- +import SchemaInfo from '../../../../components/SchemaInfo.astro'; + +The `db.mysql` module can open a connection to MySQL databases + + + +This module implements the `DatabaseModule` interface. + + +### Example + +Opens a connection to a MySQL database + +```yaml +- id: myDatabase + type: db.mysql + params: + dsn: "user:password@tcp(localhost:3306)/mydatabase" +``` diff --git a/src/content/docs/modules/db/postgres.mdx b/src/content/docs/modules/db/postgres.mdx new file mode 100644 index 0000000..f1b80ac --- /dev/null +++ b/src/content/docs/modules/db/postgres.mdx @@ -0,0 +1,24 @@ +--- +title: PostgreSQL +sidebar: + order: 1 +--- +import SchemaInfo from '../../../../components/SchemaInfo.astro'; + +The `db.postgres` module can open a connection to PostgreSQL databases + + + +This module implements the `DatabaseModule` interface. + + +### Example + +Opens a connection to a PostgreSQL database + +```yaml +- id: myDatabase + type: db.postgres + params: + url: "postgresql://user:password@localhost:5432/mydatabase" +``` diff --git a/src/data/modules.schema.json b/src/data/modules.schema.json index a075c2e..dfb830d 100644 --- a/src/data/modules.schema.json +++ b/src/data/modules.schema.json @@ -1,182 +1,49 @@ { - "type": "array", + "$id": "https://showbridge.io/modules.schema.json", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "default": [], + "description": "module configurations", "items": { "oneOf": [ { - "type": "object", + "$id": "mqtt.client", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" }, "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": { - "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": { - "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 - }, - { - "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 - }, - "params": { - "type": "object", + "additionalProperties": false, "properties": { "broker": { - "type": "string", + "description": "the URL of the MQTT broker to connect to", "title": "Broker URL", - "description": "the URL of the MQTT broker to connect to" + "type": "string" }, "clientId": { - "type": "string", + "description": "the client ID to use when connecting to the MQTT broker", "title": "Client ID", - "description": "the client ID to use when connecting to the MQTT broker" + "type": "string" }, "qos": { - "type": "integer", - "title": "QoS", - "description": "the QoS level to use when publishing messages", "default": 0, + "description": "the QoS level to use when publishing messages", + "maximum": 2, "minimum": 0, - "maximum": 2 + "title": "QoS", + "type": "integer" }, "retained": { - "type": "boolean", - "title": "Retained", + "default": false, "description": "whether to set the retained flag when publishing messages", - "default": false + "title": "Retained", + "type": "boolean" }, "topic": { - "type": "string", + "description": "an MQTT topic to subscribe to", "title": "Topic", - "description": "an MQTT topic to subscribe to" + "type": "string" } }, "required": [ @@ -184,113 +51,72 @@ "topic", "clientId" ], - "additionalProperties": false + "type": "object" }, "type": { "const": "mqtt.client" } }, - "$id": "mqtt.client", - "title": "MQTT Client", "required": [ "id", "type", "params" ], - "additionalProperties": false + "title": "MQTT Client", + "type": "object" }, { - "type": "object", + "$id": "nats.client", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" }, "params": { - "type": "object", + "additionalProperties": false, "properties": { "subject": { - "type": "string", + "description": "the subject to subscribe to", "title": "Subject", - "description": "the subject to subscribe to" + "type": "string" }, "url": { - "type": "string", + "description": "the URL of the NATS server to connect to", "title": "NATS Server URL", - "description": "the URL of the NATS server to connect to" + "type": "string" } }, "required": [ "url", "subject" ], - "additionalProperties": false + "type": "object" }, "type": { "const": "nats.client" } }, - "$id": "nats.client", + "required": [ + "id", + "type", + "params" + ], "title": "NATS Client", - "required": [ - "id", - "type", - "params" - ], - "additionalProperties": false + "type": "object" }, { - "type": "object", + "$id": "net.tcp.client", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" }, "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", + "additionalProperties": false, "properties": { "framing": { - "type": "string", - "title": "Framing Method", "description": "the method used to frame messages over the TCP connection", "enum": [ "LF", @@ -298,169 +124,21 @@ "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": { - "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": { - "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 - }, - "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": { - "framing": { - "type": "string", + ], "title": "Framing Method", - "description": "the method used to frame messages over the TCP connection", - "enum": [ - "LF", - "CR", - "CRLF", - "SLIP", - "RAW" - ] + "type": "string" }, "host": { - "type": "string", + "description": "the hostname or IP address of the TCP server to connect to", "title": "Host", - "description": "the hostname or IP address of the TCP server to connect to" + "type": "string" }, "port": { - "type": "integer", - "title": "Port", "description": "the port of the TCP server to connect to", + "maximum": 65535, "minimum": 1, - "maximum": 65535 + "title": "Port", + "type": "integer" } }, "required": [ @@ -468,209 +146,517 @@ "port", "framing" ], - "additionalProperties": false + "type": "object" }, "type": { "const": "net.tcp.client" } }, - "$id": "net.tcp.client", - "title": "TCP Client", "required": [ "id", "type", "params" ], - "additionalProperties": false + "title": "TCP Client", + "type": "object" }, { - "type": "object", + "$id": "net.tcp.server", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" }, "params": { - "type": "object", + "additionalProperties": false, "properties": { + "framing": { + "description": "the method used to frame messages over the TCP connection", + "enum": [ + "LF", + "CR", + "CRLF", + "SLIP", + "RAW" + ], + "title": "Framing Method", + "type": "string" + }, "ip": { - "type": "string", + "default": "0.0.0.0", + "description": "the IP address to bind the TCP server to", "title": "IP", - "description": "the multicast address to listen on" + "type": "string" }, "port": { - "type": "integer", - "title": "Port", - "description": "the port to listen on", + "description": "the port for the TCP server to listen on", + "maximum": 65535, "minimum": 1024, - "maximum": 65535 + "title": "Port", + "type": "integer" + } + }, + "required": [ + "port", + "framing" + ], + "type": "object" + }, + "type": { + "const": "net.tcp.server" + } + }, + "required": [ + "id", + "type", + "params" + ], + "title": "TCP Server", + "type": "object" + }, + { + "$id": "midi.output", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "params": { + "additionalProperties": false, + "properties": { + "port": { + "description": "the name of the MIDI port to send messages to", + "title": "Port", + "type": "string" + } + }, + "required": [ + "port" + ], + "type": "object" + }, + "type": { + "const": "midi.output" + } + }, + "required": [ + "id", + "type", + "params" + ], + "title": "MIDI Output", + "type": "object" + }, + { + "$id": "psn.client", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "type": { + "const": "psn.client" + } + }, + "required": [ + "id", + "type" + ], + "title": "PosiStageNet Client", + "type": "object" + }, + { + "$id": "db.mysql", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "params": { + "additionalProperties": false, + "properties": { + "dsn": { + "description": "the connection DSN for the MySQL database", + "minLength": 1, + "title": "Database DSN", + "type": "string" + } + }, + "required": [ + "dsn" + ], + "type": "object" + }, + "type": { + "const": "db.mysql" + } + }, + "required": [ + "id", + "type", + "params" + ], + "title": "MySQL Database", + "type": "object" + }, + { + "$id": "nats.server", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "params": { + "additionalProperties": false, + "properties": { + "ip": { + "default": "0.0.0.0", + "description": "the IP address to bind the NATS server to", + "title": "IP", + "type": "string" + }, + "port": { + "default": 4222, + "description": "the port for the NATS server to listen on", + "maximum": 65535, + "minimum": 1024, + "title": "Port", + "type": "integer" + } + }, + "type": "object" + }, + "type": { + "const": "nats.server" + } + }, + "required": [ + "id", + "type" + ], + "title": "NATS Server", + "type": "object" + }, + { + "$id": "redis.client", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "params": { + "additionalProperties": false, + "properties": { + "host": { + "description": "the hostname or IP address of the Redis server to connect to", + "title": "Host", + "type": "string" + }, + "port": { + "description": "the port to use when connecting to the Redis server", + "maximum": 65535, + "minimum": 1, + "title": "Port", + "type": "integer" + } + }, + "required": [ + "host", + "port" + ], + "type": "object" + }, + "type": { + "const": "redis.client" + } + }, + "required": [ + "id", + "type", + "params" + ], + "title": "Redis Client", + "type": "object" + }, + { + "$id": "time.timer", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "params": { + "additionalProperties": false, + "properties": { + "duration": { + "description": "time in milliseconds before the timer fires", + "title": "Duration", + "type": "integer" + } + }, + "required": [ + "duration" + ], + "type": "object" + }, + "type": { + "const": "time.timer" + } + }, + "required": [ + "id", + "type", + "params" + ], + "title": "Timer", + "type": "object" + }, + { + "$id": "net.udp.client", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "params": { + "additionalProperties": false, + "properties": { + "host": { + "description": "the hostname or IP address of the UDP server to connect to", + "title": "Host", + "type": "string" + }, + "port": { + "description": "the port of the UDP server to connect to", + "maximum": 65535, + "minimum": 1, + "title": "Port", + "type": "integer" + } + }, + "required": [ + "host", + "port" + ], + "type": "object" + }, + "type": { + "const": "net.udp.client" + } + }, + "required": [ + "id", + "type", + "params" + ], + "title": "UDP Client", + "type": "object" + }, + { + "$id": "net.udp.multicast", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "params": { + "additionalProperties": false, + "properties": { + "ip": { + "description": "the multicast address to listen on", + "title": "IP", + "type": "string" + }, + "port": { + "description": "the port to listen on", + "maximum": 65535, + "minimum": 1024, + "title": "Port", + "type": "integer" } }, "required": [ "ip", "port" ], - "additionalProperties": false + "type": "object" }, "type": { "const": "net.udp.multicast" } }, - "$id": "net.udp.multicast", + "required": [ + "id", + "type", + "params" + ], "title": "UDP Multicast", + "type": "object" + }, + { + "$id": "websocket.client", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "params": { + "additionalProperties": false, + "properties": { + "url": { + "description": "the URL of the WebSocket server to connect", + "title": "URL", + "type": "string" + } + }, + "required": [ + "url" + ], + "type": "object" + }, + "type": { + "const": "websocket.client" + } + }, "required": [ "id", "type", "params" ], - "additionalProperties": false + "title": "WebSocket Client", + "type": "object" }, { - "type": "object", + "$id": "db.postgres", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" }, "params": { - "type": "object", + "additionalProperties": false, + "properties": { + "url": { + "description": "the connection URL for the PostgreSQL database", + "minLength": 1, + "title": "Database URL", + "type": "string" + } + }, + "required": [ + "url" + ], + "type": "object" + }, + "type": { + "const": "db.postgres" + } + }, + "required": [ + "id", + "type", + "params" + ], + "title": "PostgreSQL Database", + "type": "object" + }, + { + "$id": "db.sqlite", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "params": { + "additionalProperties": false, + "properties": { + "dsn": { + "description": "the data source name (DSN) for the SQLite database", + "minLength": 1, + "title": "Data Source Name", + "type": "string" + } + }, + "required": [ + "dsn" + ], + "type": "object" + }, + "type": { + "const": "db.sqlite" + } + }, + "required": [ + "id", + "type", + "params" + ], + "title": "SQLite Database", + "type": "object" + }, + { + "$id": "midi.input", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "params": { + "additionalProperties": false, "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", + "description": "the name of the MIDI port to listen to", "title": "Port", - "description": "the port for the UDP server to listen on", - "minimum": 1024, - "maximum": 65535 + "type": "string" } }, "required": [ "port" ], - "additionalProperties": false + "type": "object" }, "type": { - "const": "net.udp.server" + "const": "midi.input" } }, - "$id": "net.udp.server", - "title": "UDP Server", "required": [ "id", "type", "params" ], - "additionalProperties": false + "title": "MIDI Input", + "type": "object" }, { - "type": "object", + "$id": "serial.client", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" }, "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": { - "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", + "additionalProperties": false, "properties": { "baudRate": { - "type": "integer", + "description": "the baud rate to use when connecting to the serial port", "title": "Baud Rate", - "description": "the baud rate to use when connecting to the serial port" + "type": "integer" }, "framing": { - "type": "string", - "title": "Framing Method", "description": "the method to use for framing messages on the serial port", "enum": [ "LF", @@ -678,12 +664,14 @@ "CRLF", "SLIP", "RAW" - ] + ], + "title": "Framing Method", + "type": "string" }, "port": { - "type": "string", + "description": "the name of the serial port to connect to", "title": "Port", - "description": "the name of the serial port to connect to" + "type": "string" } }, "required": [ @@ -691,60 +679,142 @@ "baudRate", "framing" ], - "additionalProperties": false + "type": "object" }, "type": { "const": "serial.client" } }, - "$id": "serial.client", - "title": "Serial Client", "required": [ "id", "type", "params" ], - "additionalProperties": false + "title": "Serial Client", + "type": "object" }, { - "type": "object", + "$id": "time.interval", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" }, "params": { - "type": "object", + "additionalProperties": false, "properties": { "duration": { - "type": "integer", + "description": "time in milliseconds between emitted events", "title": "Duration", - "description": "time in milliseconds before the timer fires" + "type": "integer" } }, "required": [ "duration" ], - "additionalProperties": false + "type": "object" }, "type": { - "const": "time.timer" + "const": "time.interval" } }, - "$id": "time.timer", - "title": "Timer", "required": [ "id", "type", "params" ], - "additionalProperties": false + "title": "Interval", + "type": "object" + }, + { + "$id": "net.udp.server", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "params": { + "additionalProperties": false, + "properties": { + "bufferSize": { + "default": 2048, + "description": "the size of the buffer for incoming UDP messages", + "maximum": 65535, + "minimum": 1, + "title": "Buffer Size", + "type": "integer" + }, + "ip": { + "default": "0.0.0.0", + "description": "the IP address to bind the UDP server to", + "title": "IP", + "type": "string" + }, + "port": { + "description": "the port for the UDP server to listen on", + "maximum": 65535, + "minimum": 1024, + "title": "Port", + "type": "integer" + } + }, + "required": [ + "port" + ], + "type": "object" + }, + "type": { + "const": "net.udp.server" + } + }, + "required": [ + "id", + "type", + "params" + ], + "title": "UDP Server", + "type": "object" + }, + { + "$id": "http.server", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "params": { + "additionalProperties": false, + "properties": { + "port": { + "description": "the port for the HTTP server to listen on", + "maximum": 65535, + "minimum": 1024, + "title": "Port", + "type": "integer" + } + }, + "required": [ + "port" + ], + "type": "object" + }, + "type": { + "const": "http.server" + } + }, + "required": [ + "id", + "type", + "params" + ], + "title": "HTTP Server", + "type": "object" } ] }, - "$id": "https://showbridge.io/modules.schema.json", - "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "Modules", - "description": "module configurations", - "default": [] + "type": "array" } \ No newline at end of file diff --git a/src/data/processors.schema.json b/src/data/processors.schema.json index 8e1f045..2eaf64e 100644 --- a/src/data/processors.schema.json +++ b/src/data/processors.schema.json @@ -1,543 +1,586 @@ { - "type": "array", + "$id": "https://showbridge.io/processors.schema.json", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "default": [], + "description": "processor configurations", "items": { "oneOf": [ { - "type": "object", + "$id": "json.decode", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" + }, + "type": { + "const": "json.decode" + } + }, + "required": [ + "id", + "type" + ], + "title": "Decode JSON", + "type": "object" + }, + { + "$id": "kv.get", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "params": { + "additionalProperties": false, + "properties": { + "key": { + "description": "key to retrieve from the key-value module", + "title": "Key", + "type": "string" + }, + "module": { + "description": "ID of the key-value module to get the value from", + "title": "Module ID", + "type": "string" + } + }, + "required": [ + "module", + "key" + ], + "type": "object" + }, + "type": { + "const": "kv.get" + } + }, + "required": [ + "id", + "type", + "params" + ], + "title": "Get Key", + "type": "object" + }, + { + "$id": "midi.message.encode", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "type": { + "const": "midi.message.encode" + } + }, + "required": [ + "id", + "type" + ], + "title": "Encode MIDI Message", + "type": "object" + }, + { + "$id": "http.response.create", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "params": { + "additionalProperties": false, + "properties": { + "bodyTemplate": { + "description": "template for the response body", + "title": "Body Template", + "type": "string" + }, + "status": { + "description": "status code to set on the response", + "title": "Status Code", + "type": "integer" + } + }, + "required": [ + "status", + "bodyTemplate" + ], + "type": "object" + }, + "type": { + "const": "http.response.create" + } + }, + "required": [ + "id", + "type", + "params" + ], + "title": "Create HTTP Response", + "type": "object" + }, + { + "$id": "midi.message.unpack", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "type": { + "const": "midi.message.unpack" + } + }, + "required": [ + "id", + "type" + ], + "title": "Unpack MIDI Message", + "type": "object" + }, + { + "$id": "pubsub.publish", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "params": { + "additionalProperties": false, + "properties": { + "module": { + "description": "ID of the module to publish to", + "title": "Module ID", + "type": "string" + }, + "topic": { + "description": "topic to publish to", + "title": "Topic", + "type": "string" + } + }, + "required": [ + "module", + "topic" + ], + "type": "object" + }, + "type": { + "const": "pubsub.publish" + } + }, + "required": [ + "id", + "type", + "params" + ], + "title": "Publish to Pub/Sub Topic", + "type": "object" + }, + { + "$id": "string.decode", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "type": { + "const": "string.decode" + } + }, + "required": [ + "id", + "type" + ], + "title": "Decode String", + "type": "object" + }, + { + "$id": "struct.method.get", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "params": { + "additionalProperties": false, + "properties": { + "name": { + "description": "name of the struct method to extract and call (with no arguments)", + "title": "Method Name", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "type": { + "const": "struct.method.get" + } + }, + "required": [ + "id", + "type", + "params" + ], + "title": "Get Struct Method", + "type": "object" + }, + { + "$id": "debug.log", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" }, "type": { "const": "debug.log" } }, - "$id": "debug.log", + "required": [ + "id", + "type" + ], "title": "Debug Log", - "required": [ - "id", - "type" - ], - "additionalProperties": false + "type": "object" }, { - "type": "object", + "$id": "int.random", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" }, "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": [ - "id", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "minLength": 1 - }, - "params": { - "type": "object", + "additionalProperties": false, "properties": { "max": { - "type": "integer", + "description": "inclusive maximum value of the random integer", "title": "Maximum", - "description": "inclusive maximum value of the random integer" + "type": "integer" }, "min": { - "type": "integer", + "description": "inclusive minimum value of the random integer", "title": "Minimum", - "description": "inclusive minimum value of the random integer" + "type": "integer" } }, "required": [ "min", "max" ], - "additionalProperties": false + "type": "object" }, "type": { "const": "int.random" } }, - "$id": "int.random", + "required": [ + "id", + "type", + "params" + ], "title": "Random Int", - "required": [ - "id", - "type", - "params" - ], - "additionalProperties": false + "type": "object" }, { - "type": "object", + "$id": "midi.note_off.create", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 - }, - "type": { - "const": "json.decode" - } - }, - "$id": "json.decode", - "title": "Decode JSON", - "required": [ - "id", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" }, "params": { - "type": "object", + "additionalProperties": false, "properties": { - "key": { - "type": "string", - "title": "Key", - "description": "key to retrieve from the key-value module" + "channel": { + "description": "channel number for the note off message", + "title": "Channel", + "type": "string" }, - "module": { - "type": "string", - "title": "Module ID", - "description": "ID of the key-value module to get the value from" + "note": { + "description": "note number for the note off message", + "title": "Note", + "type": "string" + }, + "velocity": { + "description": "velocity for the note off message", + "title": "Velocity", + "type": "string" } }, "required": [ - "module", - "key" + "channel", + "note", + "velocity" ], - "additionalProperties": false + "type": "object" }, "type": { - "const": "kv.get" + "const": "midi.note_off.create" } }, - "$id": "kv.get", - "title": "Get Key", "required": [ "id", "type", "params" ], - "additionalProperties": false + "title": "Create MIDI Note Off Message", + "type": "object" }, { - "type": "object", + "$id": "script.expr", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 - }, - "type": { - "const": "midi.message.decode" - } - }, - "$id": "midi.message.decode", - "title": "Decode MIDI Message", - "required": [ - "id", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" }, "params": { - "type": "object", + "additionalProperties": false, "properties": { - "program": { - "type": "string", - "title": "Program", - "description": "JavaScript program to run" + "expression": { + "description": "Expr expression to evaluate", + "title": "Expression", + "type": "string" } }, "required": [ - "program" + "expression" ], - "additionalProperties": false + "type": "object" }, "type": { - "const": "script.js" + "const": "script.expr" } }, - "$id": "script.js", - "title": "Run JavaScript", "required": [ "id", "type", "params" ], - "additionalProperties": false + "title": "Evaluate Expr Expression", + "type": "object" }, { - "type": "object", + "$id": "string.create", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" }, "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": [ - "id", - "type", - "params" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "minLength": 1 - }, - "params": { - "type": "object", + "additionalProperties": false, "properties": { "template": { - "type": "string", + "description": "template to evaluate", "title": "Template", - "description": "template to evaluate" + "type": "string" } }, "required": [ "template" ], - "additionalProperties": false + "type": "object" }, "type": { "const": "string.create" } }, - "$id": "string.create", + "required": [ + "id", + "type", + "params" + ], "title": "Create String", - "required": [ - "id", - "type", - "params" - ], - "additionalProperties": false + "type": "object" }, { - "type": "object", + "$id": "string.split", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" }, "params": { - "type": "object", + "additionalProperties": false, "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" + "separator": { + "description": "separator to split the string on", + "title": "Separator", + "type": "string" } }, "required": [ - "inMin", - "inMax", - "outMin", - "outMax" + "separator" ], - "additionalProperties": false + "type": "object" }, "type": { - "const": "int.scale" + "const": "string.split" } }, - "$id": "int.scale", - "title": "Scale Int", "required": [ "id", "type", "params" ], - "additionalProperties": false + "title": "Split String", + "type": "object" }, { - "type": "object", + "$id": "time.sleep", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" }, "params": { - "type": "object", + "additionalProperties": false, "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" + "duration": { + "description": "time to sleep in milliseconds", + "title": "Duration", + "type": "integer" } }, "required": [ - "module", - "key" + "duration" ], - "additionalProperties": false + "type": "object" }, "type": { - "const": "kv.set" + "const": "time.sleep" } }, - "$id": "kv.set", - "title": "Set Key", "required": [ "id", "type", "params" ], - "additionalProperties": false + "title": "Sleep", + "type": "object" }, { - "type": "object", + "$id": "float.random", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" }, "params": { - "type": "object", + "additionalProperties": false, "properties": { - "address": { - "type": "string", - "title": "Address", - "description": "OSC address for the message" + "bitSize": { + "default": 32, + "description": "bit size of the resulting float", + "enum": [ + 32, + 64 + ], + "title": "Bit Size", + "type": "integer" }, - "args": { - "type": "array", - "items": { - "type": "string" - }, - "title": "Arguments", - "description": "arguments for the OSC message" + "max": { + "description": "exclusive maximum value of the random float", + "title": "Maximum", + "type": "number" }, - "types": { - "type": "string", - "title": "Argument Types", - "description": "string of OSC types corresponding to the arguments in args" + "min": { + "description": "inclusive minimum value of the random float", + "title": "Minimum", + "type": "number" } }, "required": [ - "address" + "min", + "max" ], - "additionalProperties": false + "type": "object" }, "type": { - "const": "osc.message.create" + "const": "float.random" } }, - "$id": "osc.message.create", - "title": "Create OSC Message", "required": [ "id", "type", "params" ], - "additionalProperties": false + "title": "Random Float", + "type": "object" }, { - "type": "object", + "$id": "freed.create", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" }, "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": [ - "id", - "type", - "params" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "minLength": 1 - }, - "type": { - "const": "midi.message.encode" - } - }, - "$id": "midi.message.encode", - "title": "Encode MIDI Message", - "required": [ - "id", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "minLength": 1 - }, - "params": { - "type": "object", + "additionalProperties": false, "properties": { "focus": { - "type": "string", + "description": "focus level of the camera", "title": "Focus", - "description": "focus level of the camera" + "type": "string" }, "id": { - "type": "string", + "description": "ID of the camera this FreeD position corresponds to", "title": "Camera ID", - "description": "ID of the camera this FreeD position corresponds to" + "type": "string" }, "pan": { - "type": "string", + "description": "pan angle of the camera", "title": "Pan", - "description": "pan angle of the camera" + "type": "string" }, "posX": { - "type": "string", + "description": "X coordinate of the camera's position", "title": "Position X", - "description": "X coordinate of the camera's position" + "type": "string" }, "posY": { - "type": "string", + "description": "Y coordinate of the camera's position", "title": "Position Y", - "description": "Y coordinate of the camera's position" + "type": "string" }, "posZ": { - "type": "string", + "description": "Z coordinate of the camera's position", "title": "Position Z", - "description": "Z coordinate of the camera's position" + "type": "string" }, "roll": { - "type": "string", + "description": "roll angle of the camera", "title": "Roll", - "description": "roll angle of the camera" + "type": "string" }, "tilt": { - "type": "string", + "description": "tilt angle of the camera", "title": "Tilt", - "description": "tilt angle of the camera" + "type": "string" }, "zoom": { - "type": "string", + "description": "zoom level of the camera", "title": "Zoom", - "description": "zoom level of the camera" + "type": "string" } }, "required": [ @@ -551,223 +594,252 @@ "zoom", "focus" ], - "additionalProperties": false + "type": "object" }, "type": { "const": "freed.create" } }, - "$id": "freed.create", - "title": "Create FreeD", "required": [ "id", "type", "params" ], - "additionalProperties": false + "title": "Create FreeD", + "type": "object" }, { - "type": "object", + "$id": "midi.note_on.create", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" + }, + "params": { + "additionalProperties": false, + "properties": { + "channel": { + "description": "channel number for the note on message", + "title": "Channel", + "type": "string" + }, + "note": { + "description": "note number for the note on message", + "title": "Note", + "type": "string" + }, + "velocity": { + "description": "velocity for the note on message", + "title": "Velocity", + "type": "string" + } + }, + "required": [ + "channel", + "note", + "velocity" + ], + "type": "object" }, "type": { - "const": "freed.decode" + "const": "midi.note_on.create" } }, - "$id": "freed.decode", - "title": "Decode FreeD", "required": [ "id", - "type" + "type", + "params" ], - "additionalProperties": false + "title": "Create MIDI Note On Message", + "type": "object" }, { - "type": "object", + "$id": "osc.message.create", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" + }, + "params": { + "additionalProperties": false, + "properties": { + "address": { + "description": "OSC address for the message", + "title": "Address", + "type": "string" + }, + "args": { + "description": "arguments for the OSC message", + "items": { + "type": "string" + }, + "title": "Arguments", + "type": "array" + }, + "types": { + "description": "string of OSC types corresponding to the arguments in args", + "title": "Argument Types", + "type": "string" + } + }, + "required": [ + "address" + ], + "type": "object" + }, + "type": { + "const": "osc.message.create" + } + }, + "required": [ + "id", + "type", + "params" + ], + "title": "Create OSC Message", + "type": "object" + }, + { + "$id": "router.input", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "params": { + "additionalProperties": false, + "properties": { + "source": { + "description": "source to report as to the router", + "title": "Source", + "type": "string" + } + }, + "required": [ + "source" + ], + "type": "object" + }, + "type": { + "const": "router.input" + } + }, + "required": [ + "id", + "type", + "params" + ], + "title": "Router Input", + "type": "object" + }, + { + "$id": "script.js", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "params": { + "additionalProperties": false, + "properties": { + "program": { + "description": "JavaScript program to run", + "title": "Program", + "type": "string" + } + }, + "required": [ + "program" + ], + "type": "object" + }, + "type": { + "const": "script.js" + } + }, + "required": [ + "id", + "type", + "params" + ], + "title": "Run JavaScript", + "type": "object" + }, + { + "$id": "artnet.packet.decode", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" }, "type": { "const": "artnet.packet.decode" } }, - "$id": "artnet.packet.decode", + "required": [ + "id", + "type" + ], "title": "Decode ArtNet Packet", - "required": [ - "id", - "type" - ], - "additionalProperties": false + "type": "object" }, { - "type": "object", + "$id": "db.query", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 - }, - "type": { - "const": "filter.change" - } - }, - "$id": "filter.change", - "title": "Filter On Change", - "required": [ - "id", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" }, "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": [ - "id", - "type", - "params" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "minLength": 1 - }, - "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": [ - "id", - "type", - "params" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "minLength": 1 - }, - "type": { - "const": "json.encode" - } - }, - "$id": "json.encode", - "title": "Encode JSON", - "required": [ - "id", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "minLength": 1 - }, - "params": { - "type": "object", + "additionalProperties": false, "properties": { "module": { - "type": "string", + "description": "ID of the database module to query", "title": "Module ID", - "description": "ID of the database module to query" + "type": "string" }, "query": { - "type": "string", + "description": "SQL query to execute", "title": "Query", - "description": "SQL query to execute" + "type": "string" } }, "required": [ "module", "query" ], - "additionalProperties": false + "type": "object" }, "type": { "const": "db.query" } }, - "$id": "db.query", - "title": "Query Database", "required": [ "id", "type", "params" ], - "additionalProperties": false + "title": "Query Database", + "type": "object" }, { - "type": "object", + "$id": "http.request.do", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" }, "params": { - "type": "object", + "additionalProperties": false, "properties": { "method": { - "type": "string", - "title": "HTTP Method", "description": "method to use for the HTTP request", "enum": [ "GET", @@ -775,98 +847,288 @@ "PUT", "PATCH", "DELETE" - ] + ], + "title": "HTTP Method", + "type": "string" }, "url": { - "type": "string", + "description": "URL to send the HTTP request to", "title": "URL", - "description": "URL to send the HTTP request to" + "type": "string" } }, "required": [ "method", "url" ], - "additionalProperties": false + "type": "object" }, "type": { "const": "http.request.do" } }, - "$id": "http.request.do", - "title": "Do HTTP Request", "required": [ "id", "type", "params" ], - "additionalProperties": false + "title": "Do HTTP Request", + "type": "object" }, { - "type": "object", + "$id": "int.parse", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" }, "params": { - "type": "object", + "additionalProperties": false, "properties": { - "channel": { - "type": "string", - "title": "Channel", - "description": "channel number for the note off message" + "base": { + "default": 10, + "description": "numerical base to use for parsing the integer", + "enum": [ + 0, + 2, + 8, + 10, + 16 + ], + "title": "Base", + "type": "integer" }, - "note": { - "type": "string", - "title": "Note", - "description": "note number for the note off message" + "bitSize": { + "default": 64, + "description": "bit size of the resulting integer", + "enum": [ + 0, + 8, + 16, + 32, + 64 + ], + "title": "Bit Size", + "type": "integer" + } + }, + "type": "object" + }, + "type": { + "const": "int.parse" + } + }, + "required": [ + "id", + "type" + ], + "title": "Parse Int", + "type": "object" + }, + { + "$id": "kv.set", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "params": { + "additionalProperties": false, + "properties": { + "key": { + "description": "key to set in the key-value module", + "title": "Key", + "type": "string" }, - "velocity": { - "type": "string", - "title": "Velocity", - "description": "velocity for the note off message" + "module": { + "description": "ID of the key-value module to set the value in", + "title": "Module ID", + "type": "string" } }, "required": [ - "channel", - "note", - "velocity" + "module", + "key" ], - "additionalProperties": false + "type": "object" }, "type": { - "const": "midi.note_off.create" + "const": "kv.set" } }, - "$id": "midi.note_off.create", - "title": "Create MIDI Note Off Message", "required": [ "id", "type", "params" ], - "additionalProperties": false + "title": "Set Key", + "type": "object" }, { - "type": "object", + "$id": "module.output", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" }, "params": { - "type": "object", + "additionalProperties": false, + "properties": { + "module": { + "description": "ID of module to send output to", + "title": "Module ID", + "type": "string" + } + }, + "required": [ + "module" + ], + "type": "object" + }, + "type": { + "const": "module.output" + } + }, + "required": [ + "id", + "type", + "params" + ], + "title": "Module Output", + "type": "object" + }, + { + "$id": "osc.message.decode", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "type": { + "const": "osc.message.decode" + } + }, + "required": [ + "id", + "type" + ], + "title": "Decode OSC Message", + "type": "object" + }, + { + "$id": "int.scale", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "params": { + "additionalProperties": false, + "properties": { + "inMax": { + "description": "maximum value of the input integer", + "title": "Input Maximum", + "type": "integer" + }, + "inMin": { + "description": "minimum value of the input integer", + "title": "Input Minimum", + "type": "integer" + }, + "outMax": { + "description": "maximum value of the output integer", + "title": "Output Maximum", + "type": "integer" + }, + "outMin": { + "description": "minimum value of the output integer", + "title": "Output Minimum", + "type": "integer" + } + }, + "required": [ + "inMin", + "inMax", + "outMin", + "outMax" + ], + "type": "object" + }, + "type": { + "const": "int.scale" + } + }, + "required": [ + "id", + "type", + "params" + ], + "title": "Scale Int", + "type": "object" + }, + { + "$id": "json.encode", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "type": { + "const": "json.encode" + } + }, + "required": [ + "id", + "type" + ], + "title": "Encode JSON", + "type": "object" + }, + { + "$id": "midi.message.decode", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "type": { + "const": "midi.message.decode" + } + }, + "required": [ + "id", + "type" + ], + "title": "Decode MIDI Message", + "type": "object" + }, + { + "$id": "midi.program_change.create", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "params": { + "additionalProperties": false, "properties": { "channel": { - "type": "string", + "description": "channel number for the program change message", "title": "Channel", - "description": "channel number for the program change message" + "type": "string" }, "program": { - "type": "string", + "description": "program number for the program change message", "title": "Program", - "description": "program number for the program change message" + "type": "string" } }, "required": [ @@ -874,565 +1136,148 @@ "channel", "program" ], - "additionalProperties": false + "type": "object" }, "type": { "const": "midi.program_change.create" } }, - "$id": "midi.program_change.create", + "required": [ + "id", + "type", + "params" + ], "title": "Create MIDI Prgoram Change Message", - "required": [ - "id", - "type", - "params" - ], - "additionalProperties": false + "type": "object" }, { - "type": "object", + "$id": "script.wasm", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 - }, - "type": { - "const": "osc.message.decode" - } - }, - "$id": "osc.message.decode", - "title": "Decode OSC Message", - "required": [ - "id", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "minLength": 1 - }, - "type": { - "const": "osc.message.encode" - } - }, - "$id": "osc.message.encode", - "title": "Encode OSC Message", - "required": [ - "id", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" }, "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": [ - "id", - "type", - "params" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "minLength": 1 - }, - "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": [ - "id", - "type", - "params" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "minLength": 1 - }, - "type": { - "const": "freed.encode" - } - }, - "$id": "freed.encode", - "title": "Encode FreeD", - "required": [ - "id", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "minLength": 1 - }, - "type": { - "const": "artnet.packet.encode" - } - }, - "$id": "artnet.packet.encode", - "title": "Encode ArtNet Packet", - "required": [ - "id", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "minLength": 1 - }, - "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": [ - "id", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "minLength": 1 - }, - "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": [ - "id", - "type", - "params" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "minLength": 1 - }, - "type": { - "const": "string.encode" - } - }, - "$id": "string.encode", - "title": "Encode String", - "required": [ - "id", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "minLength": 1 - }, - "type": { - "const": "midi.message.unpack" - } - }, - "$id": "midi.message.unpack", - "title": "Unpack MIDI Message", - "required": [ - "id", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "minLength": 1 - }, - "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": [ - "id", - "type", - "params" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "minLength": 1 - }, - "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": [ - "id", - "type", - "params" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "minLength": 1 - }, - "params": { - "type": "object", + "additionalProperties": false, "properties": { "enableWasi": { - "type": "boolean", - "title": "Enable WASI", + "default": false, "description": "whether to enable WASI when running the WASM plugin", - "default": false + "title": "Enable WASI", + "type": "boolean" }, "function": { - "type": "string", - "title": "Function", + "default": "process", "description": "exported function to call on the WASM plugin", - "default": "process" + "title": "Function", + "type": "string" }, "path": { - "type": "string", + "description": "path to the WASM plugin to load", "title": "Path", - "description": "path to the WASM plugin to load" + "type": "string" } }, "required": [ "path" ], - "additionalProperties": false + "type": "object" }, "type": { "const": "script.wasm" } }, - "$id": "script.wasm", - "title": "Run WASM Plugin", "required": [ "id", "type", "params" ], - "additionalProperties": false + "title": "Run WASM Plugin", + "type": "object" }, { - "type": "object", + "$id": "string.encode", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" }, "type": { - "const": "string.decode" + "const": "string.encode" } }, - "$id": "string.decode", - "title": "Decode String", "required": [ "id", "type" ], - "additionalProperties": false + "title": "Encode String", + "type": "object" }, { - "type": "object", + "$id": "artnet.packet.encode", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 - }, - "params": { - "type": "object", - "properties": { - "separator": { - "type": "string", - "title": "Separator", - "description": "separator to split the string on" - } - }, - "required": [ - "separator" - ], - "additionalProperties": false + "minLength": 1, + "type": "string" }, "type": { - "const": "string.split" + "const": "artnet.packet.encode" } }, - "$id": "string.split", - "title": "Split String", "required": [ "id", - "type", - "params" + "type" ], - "additionalProperties": false + "title": "Encode ArtNet Packet", + "type": "object" }, { - "type": "object", + "$id": "freed.decode", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 - }, - "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 + "minLength": 1, + "type": "string" }, "type": { - "const": "struct.method.get" + "const": "freed.decode" } }, - "$id": "struct.method.get", - "title": "Get Struct Method", "required": [ "id", - "type", - "params" + "type" ], - "additionalProperties": false + "title": "Decode FreeD", + "type": "object" }, { - "type": "object", + "$id": "midi.control_change.create", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" }, "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": [ - "id", - "type", - "params" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "minLength": 1 - }, - "params": { - "type": "object", + "additionalProperties": false, "properties": { "channel": { - "type": "string", + "description": "channel number for the control change message", "title": "Channel", - "description": "channel number for the control change message" + "type": "string" }, "control": { - "type": "string", + "description": "control number for the control change message", "title": "Control", - "description": "control number for the control change message" + "type": "string" }, "value": { - "type": "string", + "description": "value for the control change message", "title": "Value", - "description": "value for the control change message" + "type": "string" } }, "required": [ @@ -1440,94 +1285,249 @@ "control", "value" ], - "additionalProperties": false + "type": "object" }, "type": { "const": "midi.control_change.create" } }, - "$id": "midi.control_change.create", - "title": "Create MIDI Control Change Message", "required": [ "id", "type", "params" ], - "additionalProperties": false + "title": "Create MIDI Control Change Message", + "type": "object" }, { - "type": "object", + "$id": "osc.message.encode", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" + }, + "type": { + "const": "osc.message.encode" + } + }, + "required": [ + "id", + "type" + ], + "title": "Encode OSC Message", + "type": "object" + }, + { + "$id": "freed.encode", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "type": { + "const": "freed.encode" + } + }, + "required": [ + "id", + "type" + ], + "title": "Encode FreeD", + "type": "object" + }, + { + "$id": "struct.field.get", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" }, "params": { - "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "description": "name of the struct field to extract", + "title": "Field Name", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "type": { + "const": "struct.field.get" + } + }, + "required": [ + "id", + "type", + "params" + ], + "title": "Get Struct Field", + "type": "object" + }, + { + "$id": "filter.change", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "type": { + "const": "filter.change" + } + }, + "required": [ + "id", + "type" + ], + "title": "Filter On Change", + "type": "object" + }, + { + "$id": "filter.expr", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "params": { + "additionalProperties": false, "properties": { "expression": { - "type": "string", + "description": "Expr expression to evaluate, must return a boolean", "title": "Expression", - "description": "Expr expression to evaluate, must return a boolean" + "type": "string" } }, "required": [ "expression" ], - "additionalProperties": false + "type": "object" }, "type": { "const": "filter.expr" } }, - "$id": "filter.expr", - "title": "Filter by Expr expression", "required": [ "id", "type", "params" ], - "additionalProperties": false + "title": "Filter by Expr expression", + "type": "object" }, { - "type": "object", + "$id": "filter.rate", + "additionalProperties": false, "properties": { "id": { - "type": "string", - "minLength": 1 + "minLength": 1, + "type": "string" }, "params": { - "type": "object", "properties": { - "module": { - "type": "string", - "title": "Module ID", - "description": "ID of module to send output to" + "rate": { + "description": "number of events to allow per second", + "title": "Rate", + "type": "integer" } }, "required": [ - "module" + "rate" ], - "additionalProperties": false + "type": "object" }, "type": { - "const": "module.output" + "const": "filter.rate" } }, - "$id": "module.output", - "title": "Module Output", "required": [ "id", "type", "params" ], - "additionalProperties": false + "title": "Filter by Rate", + "type": "object" + }, + { + "$id": "filter.regex", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "params": { + "additionalProperties": false, + "properties": { + "pattern": { + "description": "regex pattern to match against", + "title": "Pattern", + "type": "string" + } + }, + "required": [ + "pattern" + ], + "type": "object" + }, + "type": { + "const": "filter.regex" + } + }, + "required": [ + "id", + "type", + "params" + ], + "title": "Filter by Regex", + "type": "object" + }, + { + "$id": "float.parse", + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "params": { + "additionalProperties": false, + "properties": { + "bitSize": { + "default": 64, + "description": "bit size of the resulting float", + "enum": [ + 32, + 64 + ], + "title": "Bit Size", + "type": "integer" + } + }, + "type": "object" + }, + "type": { + "const": "float.parse" + } + }, + "required": [ + "id", + "type" + ], + "title": "Parse Float", + "type": "object" } ] }, - "$id": "https://showbridge.io/processors.schema.json", - "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "Processors", - "description": "processor configurations", - "default": [] + "type": "array" } \ No newline at end of file