-import { Injectable } from '@angular/core';
-import { Headers, Http, Response, URLSearchParams } from '@angular/http';
-import { Router } from '@angular/router';
-import { Observable } from 'rxjs/Observable';
-import { Subject } from 'rxjs/Subject';
-import 'rxjs/add/operator/map';
-import 'rxjs/add/operator/mergeMap';
-import 'rxjs/add/observable/throw';
-
-import { NotificationsService } from 'angular2-notifications';
-
-import { AuthStatus } from './auth-status.model';
-import { AuthUser } from './auth-user.model';
-// Do not use the barrel (dependency loop)
-import { RestExtractor } from '../../shared/rest';
+import { Hotkey, HotkeysService } from 'angular2-hotkeys'
+import { Observable, ReplaySubject, Subject, throwError as observableThrowError } from 'rxjs'
+import { catchError, map, mergeMap, share, tap } from 'rxjs/operators'
+import { HttpClient, HttpErrorResponse, HttpHeaders, HttpParams } from '@angular/common/http'
+import { Injectable } from '@angular/core'
+import { Router } from '@angular/router'
+import { Notifier } from '@app/core/notification/notifier.service'
+import { logger, OAuthUserTokens, objectToUrlEncoded, peertubeLocalStorage } from '@root-helpers/index'
+import { HttpStatusCode, MyUser as UserServerModel, OAuthClientLocal, User, UserLogin, UserRefreshToken } from '@shared/models'
+import { environment } from '../../../environments/environment'
+import { RestExtractor } from '../rest/rest-extractor.service'
+import { RedirectService } from '../routing'
+import { AuthStatus } from './auth-status.model'
+import { AuthUser } from './auth-user.model'
+
+interface UserLoginWithUsername extends UserLogin {
+ access_token: string
+ refresh_token: string
+ token_type: string
+ username: string
+}
+
+type UserLoginWithUserInformation = UserLoginWithUsername & User