v0.3.0 — Multi-Q + multi-transport
Lockstep release of @raasimpact/arduino-uno-q-bridge@0.3.0 and n8n-nodes-uno-q@0.3.0. A single n8n instance can now drive several UNO Qs (locally and remotely) by assigning a different Arduino UNO Q Router credential to each node, including remote Qs reached over plain TCP or mTLS via the relay containers shipped under deploy/relay/ and deploy/relay-mtls/.
@raasimpact/arduino-uno-q-bridge 0.2.0 → 0.3.0
Added
- Plain TCP transport —
Bridge.connect({ host, port })for use with the Variant Asocatrelay on a trusted LAN. Same wire protocol as the Unix socket, just over a TCP stream. - mTLS transport —
Bridge.connect({ host, port, tls: { ca, cert, key } })for the Variant Cstunnelrelay. The bridge presents a client certificate and validates the server cert against the supplied CA. PEM strings inline; no filesystem path required. TransportDescriptordiscriminated union ({ kind: 'unix' | 'tcp' | 'tls', ... }) — what the newconnect()overloads compile down to internally and what consumers liken8n-nodes-uno-q's credential resolver round-trip through configuration.disconnectevent reason payload — surfaces why the socket dropped so consumers can distinguish a clean close from a network failure or a timeout.
Changed
- The single-file
transport.tswas split into atransport/directory (unix-socket.ts,tcp.ts,tls.ts, plus asocket-base.tsmixin and afactory.tsfor descriptor → transport instantiation). Behaviour preserved for existing Unix-socket callers; the new structure is what made TCP/TLS additions clean.
Fixed
[code, message]error tuple format — Arduino'sArduino_RouterBridgelibrary returns errors as a[code, message]array; the bridge now decodes both formats so msgpack-RPC errors raised by the MCU surface readably instead of as opaque arrays.- Requests for unregistered methods now respond with a structured error rather than dropping silently.
n8n-nodes-uno-q 0.2.1 → 0.3.0
Added
Arduino UNO Q Routercredential type — replaces the implicit per-package socket path with a per-node credential. Three transport modes:- Unix Socket (local) — same-host, default
/var/run/arduino-router.sock. - TCP (plain) — Variant A relay, trusted LAN.
- TCP + mTLS — Variant C relay, untrusted networks. Three PEM fields (CA, client cert, client key) when Use TLS is on; key encrypted at rest.
- Test Connection runs
\$/versionover the configured transport and surfaces transport-specific failures (socket not found, TLS handshake, connection refused, …) instead of a generic error.
- Unix Socket (local) — same-host, default
- Multi-Q workflows — assign different credentials to different nodes in the same workflow to read sensors on one Q and fire actuators on another. The
BridgeManagersingleton now keys its connection pool by transport descriptor, refcounts subscriptions per(descriptor, method), and tears each connection down independently when its subscriber count hits zero. transport-resolvermodule that turns a credential payload into aTransportDescriptor, with explicit validation for the mTLS PEM trio.- Diagnostic snapshots in
BridgeManager(entries-by-descriptor, refcounts, pending close state) for troubleshooting connection-pool issues against a remote Q.
Changed
- All four nodes (
Arduino UNO Q Call,Arduino UNO Q Trigger,Arduino UNO Q Respond,Arduino UNO Q Method) now require a credential assignment. Workflows configured before 0.3.0 will need a one-time credential creation per Q. - Bumped
@raasimpact/arduino-uno-q-bridgepeer dependency to^0.3.0— required for the new TCP / mTLS transports.
Fixed
BridgeManagerrefcount leaks — refcounts now restore on every error path, includingprovideregistrations that fail mid-handshake.- Request-mode single-owner invariant — a Trigger node in synchronous response mode is the only owner of its method's bridge subscription; a second node trying to claim the same method now errors at registration instead of silently sharing the channel.
- Credential UI masking — TLS PEM fields render as multi-line text (not password-masked single-line), preserving whitespace exactly so the PEM parser sees what the user pasted.
Companion release
A separate, brand-new package shipped alongside this one — same monorepo, disjoint runtime: n8n-nodes-arduino-cloud@0.1.0, tagged at n8n-nodes-arduino-cloud-v0.1.0. Read / write Arduino Cloud Thing Properties, react to property updates over MQTT, and expose properties as AI Agent tools — for any Arduino Cloud-connected board (Nano 33 IoT, MKR WiFi 1010, Portenta, UNO R4 WiFi, Nano ESP32, …), not just the UNO Q.