UNPKG

@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
/** * @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