feat(emitter): add listeners