todo: create separate composer package and have laravel wrap it