JSFiddle - React, Tailwind, and code Playground

by matox

JavaScript

class AuthService {
  public refreshToken(): Observable<BearerToken> {
          const url = environment.host + '/users/refresh/';

          return combineLatest(
              this.tokenStorage.getAccessToken(),
              this.tokenStorage.getRefreshToken()
          ).pipe(
              switchMap(tokens => {
                  return this.http.post<BearerToken>(url, {
                      refresh_token: tokens[1],
                      client_id: this.CLIENT_ID,
                      grant_type: 'refresh_token'
                  });
              }),
              tap(_ => {
                  this.saveAccessData.bind(this);
                  this.retryFailedRequests();
              })
          );
      }
   });
}


class TokenInterceptor {
	return this.auth.refreshToken().pipe(
 		switchMap((token: BearerToken) => {
                  if (token) {
                    this.tokenSubject.next(token.access_token);
                    return next.handle(
                      this.addTokenToRequest(request, token.access_token)
                    );
                  }

                  return <any>this.auth.logout();
                }),
    catchError(err => {
      return <any>this.auth.logout();
    }),
    finalize(() => {
      this.isRefreshingToken = false;
    })
  );
}