Shortly after writing this, I realized that ZwaveJS2Mqtt can be used with a websocket connection instead of the mqtt. I've had a great experience with it, so there's really no good reason to use what is below.
Documentation: https://zwave-js.github.io/zwavejs2mqtt/#/
I'll leave the text below, because somebody might find it useful.