feat: add pattern/subscribe