Skip to content

v0.3.0 — Multi-Q + multi-transport

Choose a tag to compare

@linucs linucs released this 25 Apr 14:27
· 9 commits to main since this release

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 transportBridge.connect({ host, port }) for use with the Variant A socat relay on a trusted LAN. Same wire protocol as the Unix socket, just over a TCP stream.
  • mTLS transportBridge.connect({ host, port, tls: { ca, cert, key } }) for the Variant C stunnel relay. The bridge presents a client certificate and validates the server cert against the supplied CA. PEM strings inline; no filesystem path required.
  • TransportDescriptor discriminated union ({ kind: 'unix' | 'tcp' | 'tls', ... }) — what the new connect() overloads compile down to internally and what consumers like n8n-nodes-uno-q's credential resolver round-trip through configuration.
  • disconnect event 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.ts was split into a transport/ directory (unix-socket.ts, tcp.ts, tls.ts, plus a socket-base.ts mixin and a factory.ts for 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's Arduino_RouterBridge library 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 Router credential 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 \$/version over the configured transport and surfaces transport-specific failures (socket not found, TLS handshake, connection refused, …) instead of a generic error.
  • 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 BridgeManager singleton 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-resolver module that turns a credential payload into a TransportDescriptor, 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-bridge peer dependency to ^0.3.0 — required for the new TCP / mTLS transports.

Fixed

  • BridgeManager refcount leaks — refcounts now restore on every error path, including provide registrations 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.