@asi-ngtools/lib
Version:
This project is a little components library, simple to use, which will help you to simplify your project.
126 lines (125 loc) • 11.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { throwError, Subject } from 'rxjs';
import { tap, catchError, switchMap, first } from 'rxjs/operators';
/**
* @abstract
*/
var AsiRefreshTokenInceptor = /** @class */ (function () {
function AsiRefreshTokenInceptor() {
this.refreshingToken = false;
this.refreshTokenSubject = new Subject();
this.refreshTokenUrl = this.getRefreshTokenUrl();
this.loginUrl = this.getLoginUrl();
}
/**
* @param {?} req
* @param {?} next
* @return {?}
*/
AsiRefreshTokenInceptor.prototype.intercept = /**
* @param {?} req
* @param {?} next
* @return {?}
*/
function (req, next) {
var _this = this;
req = this.addAuthenticationToken(req, false);
return next.handle(req).pipe(tap(function (evt) {
_this.onRequestSuccess(evt);
}), catchError(function (err) {
// Not a 401 or fail on login page
// tslint:disable-next-line:triple-equals
if ((err.status != AsiRefreshTokenInceptor.UNAUTHORIZED && !req.url.includes(_this.refreshTokenUrl))
|| req.url.includes(_this.loginUrl)) {
return throwError(err);
}
// Fail to refresh the token, go to login page
if (req.url.includes(_this.refreshTokenUrl)) {
_this.refreshingToken = false;
_this.goToLoginPage(req, err);
return throwError(err);
}
if (_this.refreshingToken) {
// refresh token is in progress, we subscribe to the unlocking event
return _this.refreshTokenSubject.pipe(first(), switchMap(function () {
return next.handle(_this.addAuthenticationToken(req, true));
}));
}
else {
_this.refreshingToken = true;
// get and save the refresh token and unlock requests
return _this.callAndSaveRefreshToken().pipe(first(), switchMap(function (token) {
_this.refreshingToken = false;
_this.refreshTokenSubject.next(token);
return next.handle(_this.addAuthenticationToken(req, true));
}), catchError(function (error) {
_this.refreshingToken = false;
_this.goToLoginPage(req, error);
return throwError(error);
}));
}
}));
};
/**
* @param {?} _event
* @return {?}
*/
AsiRefreshTokenInceptor.prototype.onRequestSuccess = /**
* @param {?} _event
* @return {?}
*/
function (_event) { };
AsiRefreshTokenInceptor.UNAUTHORIZED = 401;
return AsiRefreshTokenInceptor;
}());
export { AsiRefreshTokenInceptor };
if (false) {
/** @type {?} */
AsiRefreshTokenInceptor.UNAUTHORIZED;
/** @type {?} */
AsiRefreshTokenInceptor.prototype.refreshingToken;
/** @type {?} */
AsiRefreshTokenInceptor.prototype.loginUrl;
/** @type {?} */
AsiRefreshTokenInceptor.prototype.refreshTokenUrl;
/** @type {?} */
AsiRefreshTokenInceptor.prototype.refreshTokenSubject;
/**
* Add auth token to the request header
* @abstract
* @param {?} req the request
* @param {?} replay is the token replayed
* @return {?}
*/
AsiRefreshTokenInceptor.prototype.addAuthenticationToken = function (req, replay) { };
/**
* Get the refresh token endpoint url
* @abstract
* @return {?}
*/
AsiRefreshTokenInceptor.prototype.getRefreshTokenUrl = function () { };
/**
* Call the refresh token endpoint and save the new token
* @abstract
* @return {?}
*/
AsiRefreshTokenInceptor.prototype.callAndSaveRefreshToken = function () { };
/**
* Get the login endpoint url
* @abstract
* @return {?}
*/
AsiRefreshTokenInceptor.prototype.getLoginUrl = function () { };
/**
* Change the current page to the login page
* @abstract
* @param {?} req the request
* @param {?} err the err
* @return {?}
*/
AsiRefreshTokenInceptor.prototype.goToLoginPage = function (req, err) { };
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpLXJlZnJlc2h0b2tlbi5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bhc2ktbmd0b29scy9saWIvIiwic291cmNlcyI6WyJsaWIvaW50ZXJjZXB0b3JzL2FzaS1yZWZyZXNodG9rZW4uaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLE9BQU8sRUFBYyxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7SUFZakU7K0JBUDBCLEtBQUs7bUNBS0QsSUFBSSxPQUFPLEVBQU87UUFHOUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztLQUNwQzs7Ozs7O0lBRUQsMkNBQVM7Ozs7O0lBQVQsVUFBVSxHQUFxQixFQUFFLElBQWlCO1FBQWxELGlCQXdDQztRQXZDQyxHQUFHLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUU5QyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQUEsR0FBRztZQUNsQyxLQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDNUIsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxVQUFDLEdBQUc7OztZQUlqQixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksdUJBQXVCLENBQUMsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO21CQUM5RixHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3hCOztZQUdELEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNDLEtBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUM3QixLQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDN0IsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN4QjtZQUVELEVBQUUsQ0FBQyxDQUFDLEtBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDOztnQkFFekIsTUFBTSxDQUFDLEtBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxDQUFDO29CQUN0RCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7aUJBQzVELENBQUMsQ0FBQyxDQUFDO2FBQ0w7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDTixLQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQzs7Z0JBRTVCLE1BQU0sQ0FBQyxLQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxDQUFDLFVBQUMsS0FBVTtvQkFDdkUsS0FBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7b0JBQzdCLEtBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3JDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDNUQsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxVQUFDLEtBQUs7b0JBQ25CLEtBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO29CQUM3QixLQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQTtvQkFDOUIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDMUIsQ0FBQyxDQUFDLENBQUM7YUFDTDtTQUNGLENBQUMsQ0FBQyxDQUFDO0tBQ0w7Ozs7O0lBRUQsa0RBQWdCOzs7O0lBQWhCLFVBQWlCLE1BQXNCLEtBQVc7MkNBdkRYLEdBQUc7a0NBTjVDOztTQUlzQix1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSW50ZXJjZXB0b3IsIEh0dHBSZXF1ZXN0LCBIdHRwSGFuZGxlciwgSHR0cEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwLCBjYXRjaEVycm9yLCBzd2l0Y2hNYXAsIGZpcnN0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXNpUmVmcmVzaFRva2VuSW5jZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFVOQVVUSE9SSVpFRCA9IDQwMTtcbiAgcHJpdmF0ZSByZWZyZXNoaW5nVG9rZW4gPSBmYWxzZTtcblxuICBwcml2YXRlIGxvZ2luVXJsO1xuICBwcml2YXRlIHJlZnJlc2hUb2tlblVybDtcblxuICBwcml2YXRlIHJlZnJlc2hUb2tlblN1YmplY3QgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5yZWZyZXNoVG9rZW5VcmwgPSB0aGlzLmdldFJlZnJlc2hUb2tlblVybCgpO1xuICAgIHRoaXMubG9naW5VcmwgPSB0aGlzLmdldExvZ2luVXJsKCk7XG4gIH1cblxuICBpbnRlcmNlcHQocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmVxID0gdGhpcy5hZGRBdXRoZW50aWNhdGlvblRva2VuKHJlcSwgZmFsc2UpO1xuXG4gICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSkucGlwZSh0YXAoZXZ0ID0+IHtcbiAgICAgIHRoaXMub25SZXF1ZXN0U3VjY2VzcyhldnQpO1xuICAgIH0pLCBjYXRjaEVycm9yKChlcnIpID0+IHtcblxuICAgICAgLy8gTm90IGEgNDAxIG9yIGZhaWwgb24gbG9naW4gcGFnZVxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgIGlmICgoZXJyLnN0YXR1cyAhPSBBc2lSZWZyZXNoVG9rZW5JbmNlcHRvci5VTkFVVEhPUklaRUQgJiYgIXJlcS51cmwuaW5jbHVkZXModGhpcy5yZWZyZXNoVG9rZW5VcmwpKVxuICAgICAgICB8fCByZXEudXJsLmluY2x1ZGVzKHRoaXMubG9naW5VcmwpKSB7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycik7XG4gICAgICB9XG5cbiAgICAgIC8vIEZhaWwgdG8gcmVmcmVzaCB0aGUgdG9rZW4sIGdvIHRvIGxvZ2luIHBhZ2VcbiAgICAgIGlmIChyZXEudXJsLmluY2x1ZGVzKHRoaXMucmVmcmVzaFRva2VuVXJsKSkge1xuICAgICAgICB0aGlzLnJlZnJlc2hpbmdUb2tlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmdvVG9Mb2dpblBhZ2UocmVxLCBlcnIpO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5yZWZyZXNoaW5nVG9rZW4pIHtcbiAgICAgICAgLy8gcmVmcmVzaCB0b2tlbiBpcyBpbiBwcm9ncmVzcywgd2Ugc3Vic2NyaWJlIHRvIHRoZSB1bmxvY2tpbmcgZXZlbnRcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcmVzaFRva2VuU3ViamVjdC5waXBlKGZpcnN0KCksIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHRoaXMuYWRkQXV0aGVudGljYXRpb25Ub2tlbihyZXEsIHRydWUpKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoaW5nVG9rZW4gPSB0cnVlO1xuICAgICAgICAvLyBnZXQgYW5kIHNhdmUgdGhlIHJlZnJlc2ggdG9rZW4gYW5kIHVubG9jayByZXF1ZXN0c1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQW5kU2F2ZVJlZnJlc2hUb2tlbigpLnBpcGUoZmlyc3QoKSwgc3dpdGNoTWFwKCh0b2tlbjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoaW5nVG9rZW4gPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlblN1YmplY3QubmV4dCh0b2tlbik7XG4gICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHRoaXMuYWRkQXV0aGVudGljYXRpb25Ub2tlbihyZXEsIHRydWUpKTtcbiAgICAgICAgfSksIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoaW5nVG9rZW4gPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmdvVG9Mb2dpblBhZ2UocmVxLCBlcnJvcilcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBvblJlcXVlc3RTdWNjZXNzKF9ldmVudDogSHR0cEV2ZW50PGFueT4pOiB2b2lkIHsgfVxuXG4gIC8qKlxuICAgKiAgQWRkIGF1dGggdG9rZW4gdG8gdGhlIHJlcXVlc3QgaGVhZGVyXG4gICAqIEBwYXJhbSByZXEgIHRoZSByZXF1ZXN0XG4gICAqIEBwYXJhbSByZXBsYXkgaXMgdGhlIHRva2VuIHJlcGxheWVkXG4gICAqL1xuICBhYnN0cmFjdCBhZGRBdXRoZW50aWNhdGlvblRva2VuKHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgcmVwbGF5OiBib29sZWFuKTogSHR0cFJlcXVlc3Q8YW55PjtcblxuICAvKipcbiAgICogIEdldCB0aGUgcmVmcmVzaCB0b2tlbiBlbmRwb2ludCB1cmxcbiAgICovXG4gIGFic3RyYWN0IGdldFJlZnJlc2hUb2tlblVybCgpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqICBDYWxsIHRoZSByZWZyZXNoIHRva2VuIGVuZHBvaW50IGFuZCBzYXZlIHRoZSBuZXcgdG9rZW5cbiAgICovXG4gIGFic3RyYWN0IGNhbGxBbmRTYXZlUmVmcmVzaFRva2VuKCk6IE9ic2VydmFibGU8YW55PjtcblxuICAvKipcbiAgICogR2V0IHRoZSBsb2dpbiBlbmRwb2ludCB1cmxcbiAgICovXG4gIGFic3RyYWN0IGdldExvZ2luVXJsKCk6IHN0cmluZztcblxuICAvKipcbiAgICogQ2hhbmdlIHRoZSBjdXJyZW50IHBhZ2UgdG8gdGhlIGxvZ2luIHBhZ2VcbiAgICogQHBhcmFtIHJlcSB0aGUgcmVxdWVzdFxuICAgKiBAcGFyYW0gZXJyICB0aGUgZXJyXG4gICAqL1xuICBhYnN0cmFjdCBnb1RvTG9naW5QYWdlKHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgZXJyOiBhbnkpOiB2b2lkO1xufVxuIl19