I do have mixed feelings about exposing the NSQDConnection objects to clients. I don't love having the "internal state" of the reader exposed. However, the events I was bolting onto the Reader were essentially pushing me in that direction. Also, truly hiding internals in JS a bit pointless so I relaxed that requirement.

The NSQDConnection object is there for clients to listen if they're so interested. I think the vast majority of clients of nsqjs could do without it. In part to ensure that most clients won't need to poke around NSQDConnection, I added the auto-reconnect as you pointed out in pynsq for when providing nsqd addresses or lookupd addresses.