Cleanup: use ex-info over js/Error to construct exceptions