feat: implement EventBus