``` class LoginManager(private val apiClient: ApiC...
# getting-started
u
Copy code
class LoginManager(private val apiClient: ApiClient, private val authTokenManager: AuthTokenManager) {

    private val apiErrorTransformer = { t: Throwable ->
        when {
            t is ApiException && t.hasError("error authorizing") -> ApiErrorType.INVALID_LOGIN
            t is ApiException -> ApiErrorType.API
            t is IOException -> <http://ApiErrorType.IO|ApiErrorType.IO>
            else -> ApiErrorType.OTHER
        }
    }

    fun login(code: String): Observable<LoginApiEvent> {
        return apiClient.login(code)
                .doOnSuccess {
                    authTokenManager.writeAuthToken(it)
                }
                .toObservable()
                .endWith("")
                .emitEvents(
                        { LoginApiEvent.Started },
                        { LoginApiEvent.Success },
                        { LoginApiEvent.Error(it) },
                        apiErrorTransformer
                )
    }
}