Skip to content

Release 1.0.0-alpha.18

Pre-release
Pre-release

Choose a tag to compare

@mrbungle64 mrbungle64 released this 07 Jun 07:04
· 47 commits to 1.0.0-alpha.0 since this release

Breaking changes

  • XML-based device support has been removed. The "non950type" module — covering both XMPP/XML and MQTT/XML protocol variants — has been deleted entirely. Devices that communicated via these older protocols are no longer supported. Only JSON-based MQTT devices ("950-type" and later) remain supported.
  • Node.js ≥ 22.15 is now required. Older versions are no longer supported.
  • The native node-canvas dependency has been removed entirely (see Map rendering below). Any project that relied on it being a transitive dependency must install it directly.

New features

  • The map rendering stack has been completely rewritten in pure JavaScript
    • A custom framebuffer, PNG encoder, and rasterizer for map overlays replace the previous node-canvas dependency.
    • Live map rendering with piece tracking and validation is now included, along with zstd decompression support for map data.
  • Promise-based command execution
    • runAsync() provides a promise-based API for sending commands and awaiting their response.
    • A new PendingCommandRegistry tracks in-flight commands and routes responses back to their callers.
  • Shared MQTT connections
    • connectShared() allows multiple VacBot instances to share a single MQTT client connection, reducing resource usage when managing a fleet of devices.
  • Revised device support
    • Optional auto-empty station capability
    • smartType / productIotMap for internal IoT protocol resolution
    • deviceType property on model definitions
    • Heuristic model resolver for discovery and similarity analysis

Developer ergonomics

  • sendCommand() convenience wrapper on VacBot
  • ApiDevice typedef for type-safe device objects
  • client property exposed on VacBot
  • Case-insensitive command registry lookup

Bug fixes and improvements

  • Model dictionaries are now frozen at load time and deep-clone calls on hot paths have been removed, reducing GC pressure during high-frequency message handling.
  • MQTT client ID now includes a truncated device ID suffix to ensure uniqueness when connecting multiple devices.
  • Incoming MQTT messages with malformed JSON are now caught and logged rather than crashing the handler.
  • set-prefixed commands are excluded from command name normalization to prevent misrouting.

Infrastructure

  • Docker support added with a Dockerfile and updated local deployment docs.
  • ESLint migrated to flat config format; linting added to CI.
  • Removed all native build dependencies from the Dockerfile (no more node-gyp, python, make, etc.).
  • Comprehensive unit test coverage added for map decoding, MQTT message parsing, command dispatch, and model capability regression testing.