retry With Backoff
suspend fun <T> retryWithBackoff(retries: Int = 3, initialDelay: Long = 1000, maxDelay: Long = 10000, factor: Double = 2.0, shouldRetry: (Throwable) -> Boolean = { throwable ->
val error = handleError(throwable)
error !is AppError.AuthError && error !is AppError.TwoFactorRequired
}, block: suspend () -> T): Result<T>