refactor: add type enforcement to message passing