Websockets are the way. It’s possible to subscribe to all the events then filter them… it’s just a bit of a PITA managing the websockets and all the connection/reconnection states, making sure it’s not stale, detecting when remote is down, retry logic etc.
Just had trouble finding the code… it was before custom nodes exist so it’s in a branch of my n8n repo