events: add before/after observer callbacks
events: WIP add error callback