UNPKG

@spartacus/core

Version:

Spartacus - the core framework

69 lines 11 kB
import { HttpErrorResponse, } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { of, throwError } from 'rxjs'; import { catchError, switchMap, take } from 'rxjs/operators'; import { InterceptorUtil, USE_CLIENT_TOKEN, } from '../../../occ/utils/interceptor-util'; import * as i0 from "@angular/core"; import * as i1 from "../services/client-token.service"; import * as i2 from "../services/client-error-handling.service"; import * as i3 from "../../../occ/services/occ-endpoints.service"; /** * Interceptor for handling requests with `USE_CLIENT_TOKEN` header. * Provides `Authorization` header with client token and handles errors related to client auth. */ export class ClientTokenInterceptor { constructor(clientTokenService, clientErrorHandlingService, occEndpoints) { this.clientTokenService = clientTokenService; this.clientErrorHandlingService = clientErrorHandlingService; this.occEndpoints = occEndpoints; } intercept(request, next) { const isClientTokenRequest = this.isClientTokenRequest(request); if (isClientTokenRequest) { request = InterceptorUtil.removeHeader(USE_CLIENT_TOKEN, request); } return this.getClientToken(isClientTokenRequest).pipe(take(1), switchMap((token) => { if ((token === null || token === void 0 ? void 0 : token.access_token) && request.url.includes(this.occEndpoints.getBaseUrl())) { request = request.clone({ setHeaders: { Authorization: `${token.token_type || 'Bearer'} ${token.access_token}`, }, }); } return next.handle(request).pipe(catchError((errResponse) => { if (errResponse instanceof HttpErrorResponse) { if (errResponse.status === 401) { if (isClientTokenRequest) { if (this.isExpiredToken(errResponse)) { return this.clientErrorHandlingService.handleExpiredClientToken(request, next); } } } } return throwError(errResponse); })); })); } getClientToken(isClientTokenRequest) { if (isClientTokenRequest) { return this.clientTokenService.getClientToken(); } return of(null); } isClientTokenRequest(request) { const isRequestMapping = InterceptorUtil.getInterceptorParam(USE_CLIENT_TOKEN, request.headers); return Boolean(isRequestMapping); } isExpiredToken(resp) { var _a, _b, _c; return ((_c = (_b = (_a = resp.error) === null || _a === void 0 ? void 0 : _a.errors) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.type) === 'InvalidTokenError'; } } ClientTokenInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ClientTokenInterceptor, deps: [{ token: i1.ClientTokenService }, { token: i2.ClientErrorHandlingService }, { token: i3.OccEndpointsService }], target: i0.ɵɵFactoryTarget.Injectable }); ClientTokenInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ClientTokenInterceptor, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ClientTokenInterceptor, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: function () { return [{ type: i1.ClientTokenService }, { type: i2.ClientErrorHandlingService }, { type: i3.OccEndpointsService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LXRva2VuLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvYXV0aC9jbGllbnQtYXV0aC9odHRwLWludGVyY2VwdG9ycy9jbGllbnQtdG9rZW4uaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixHQUtsQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0QsT0FBTyxFQUNMLGVBQWUsRUFDZixnQkFBZ0IsR0FDakIsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7QUFLN0M7OztHQUdHO0FBRUgsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxZQUNZLGtCQUFzQyxFQUN0QywwQkFBc0QsRUFDdEQsWUFBaUM7UUFGakMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QywrQkFBMEIsR0FBMUIsMEJBQTBCLENBQTRCO1FBQ3RELGlCQUFZLEdBQVosWUFBWSxDQUFxQjtJQUMxQyxDQUFDO0lBRUosU0FBUyxDQUNQLE9BQXlCLEVBQ3pCLElBQWlCO1FBRWpCLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hFLElBQUksb0JBQW9CLEVBQUU7WUFDeEIsT0FBTyxHQUFHLGVBQWUsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDbkU7UUFFRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQ25ELElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxTQUFTLENBQUMsQ0FBQyxLQUFrQixFQUFFLEVBQUU7WUFDL0IsSUFDRSxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxZQUFZO2dCQUNuQixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQ3BEO2dCQUNBLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO29CQUN0QixVQUFVLEVBQUU7d0JBQ1YsYUFBYSxFQUFFLEdBQUcsS0FBSyxDQUFDLFVBQVUsSUFBSSxRQUFRLElBQzVDLEtBQUssQ0FBQyxZQUNSLEVBQUU7cUJBQ0g7aUJBQ0YsQ0FBQyxDQUFDO2FBQ0o7WUFFRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUM5QixVQUFVLENBQUMsQ0FBQyxXQUFnQixFQUFFLEVBQUU7Z0JBQzlCLElBQUksV0FBVyxZQUFZLGlCQUFpQixFQUFFO29CQUM1QyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFO3dCQUM5QixJQUFJLG9CQUFvQixFQUFFOzRCQUN4QixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0NBQ3BDLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLHdCQUF3QixDQUM3RCxPQUFPLEVBQ1AsSUFBSSxDQUNMLENBQUM7NkJBQ0g7eUJBQ0Y7cUJBQ0Y7aUJBQ0Y7Z0JBQ0QsT0FBTyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRVMsY0FBYyxDQUN0QixvQkFBNkI7UUFFN0IsSUFBSSxvQkFBb0IsRUFBRTtZQUN4QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUNqRDtRQUNELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFUyxvQkFBb0IsQ0FBQyxPQUF5QjtRQUN0RCxNQUFNLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxtQkFBbUIsQ0FDMUQsZ0JBQWdCLEVBQ2hCLE9BQU8sQ0FBQyxPQUFPLENBQ2hCLENBQUM7UUFDRixPQUFPLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFUyxjQUFjLENBQUMsSUFBdUI7O1FBQzlDLE9BQU8sQ0FBQSxNQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsS0FBSywwQ0FBRSxNQUFNLDBDQUFHLENBQUMsQ0FBQywwQ0FBRSxJQUFJLE1BQUssbUJBQW1CLENBQUM7SUFDL0QsQ0FBQzs7bUhBeEVVLHNCQUFzQjt1SEFBdEIsc0JBQXNCLGNBRFQsTUFBTTsyRkFDbkIsc0JBQXNCO2tCQURsQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEh0dHBFcnJvclJlc3BvbnNlLFxuICBIdHRwRXZlbnQsXG4gIEh0dHBIYW5kbGVyLFxuICBIdHRwSW50ZXJjZXB0b3IsXG4gIEh0dHBSZXF1ZXN0LFxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT2NjRW5kcG9pbnRzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL29jYy9zZXJ2aWNlcy9vY2MtZW5kcG9pbnRzLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgSW50ZXJjZXB0b3JVdGlsLFxuICBVU0VfQ0xJRU5UX1RPS0VOLFxufSBmcm9tICcuLi8uLi8uLi9vY2MvdXRpbHMvaW50ZXJjZXB0b3ItdXRpbCc7XG5pbXBvcnQgeyBDbGllbnRUb2tlbiB9IGZyb20gJy4uL21vZGVscy9jbGllbnQtdG9rZW4ubW9kZWwnO1xuaW1wb3J0IHsgQ2xpZW50RXJyb3JIYW5kbGluZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jbGllbnQtZXJyb3ItaGFuZGxpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBDbGllbnRUb2tlblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jbGllbnQtdG9rZW4uc2VydmljZSc7XG5cbi8qKlxuICogSW50ZXJjZXB0b3IgZm9yIGhhbmRsaW5nIHJlcXVlc3RzIHdpdGggYFVTRV9DTElFTlRfVE9LRU5gIGhlYWRlci5cbiAqIFByb3ZpZGVzIGBBdXRob3JpemF0aW9uYCBoZWFkZXIgd2l0aCBjbGllbnQgdG9rZW4gYW5kIGhhbmRsZXMgZXJyb3JzIHJlbGF0ZWQgdG8gY2xpZW50IGF1dGguXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQ2xpZW50VG9rZW5JbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjbGllbnRUb2tlblNlcnZpY2U6IENsaWVudFRva2VuU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY2xpZW50RXJyb3JIYW5kbGluZ1NlcnZpY2U6IENsaWVudEVycm9ySGFuZGxpbmdTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBvY2NFbmRwb2ludHM6IE9jY0VuZHBvaW50c1NlcnZpY2VcbiAgKSB7fVxuXG4gIGludGVyY2VwdChcbiAgICByZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LFxuICAgIG5leHQ6IEh0dHBIYW5kbGVyXG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcbiAgICBjb25zdCBpc0NsaWVudFRva2VuUmVxdWVzdCA9IHRoaXMuaXNDbGllbnRUb2tlblJlcXVlc3QocmVxdWVzdCk7XG4gICAgaWYgKGlzQ2xpZW50VG9rZW5SZXF1ZXN0KSB7XG4gICAgICByZXF1ZXN0ID0gSW50ZXJjZXB0b3JVdGlsLnJlbW92ZUhlYWRlcihVU0VfQ0xJRU5UX1RPS0VOLCByZXF1ZXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRDbGllbnRUb2tlbihpc0NsaWVudFRva2VuUmVxdWVzdCkucGlwZShcbiAgICAgIHRha2UoMSksXG4gICAgICBzd2l0Y2hNYXAoKHRva2VuOiBDbGllbnRUb2tlbikgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdG9rZW4/LmFjY2Vzc190b2tlbiAmJlxuICAgICAgICAgIHJlcXVlc3QudXJsLmluY2x1ZGVzKHRoaXMub2NjRW5kcG9pbnRzLmdldEJhc2VVcmwoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3QuY2xvbmUoe1xuICAgICAgICAgICAgc2V0SGVhZGVyczoge1xuICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgJHt0b2tlbi50b2tlbl90eXBlIHx8ICdCZWFyZXInfSAke1xuICAgICAgICAgICAgICAgIHRva2VuLmFjY2Vzc190b2tlblxuICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCkucGlwZShcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJSZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyUmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgICBpZiAoZXJyUmVzcG9uc2Uuc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNDbGllbnRUb2tlblJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRXhwaXJlZFRva2VuKGVyclJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGllbnRFcnJvckhhbmRsaW5nU2VydmljZS5oYW5kbGVFeHBpcmVkQ2xpZW50VG9rZW4oXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgICAgICAgICAgICBuZXh0XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJSZXNwb25zZSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDbGllbnRUb2tlbihcbiAgICBpc0NsaWVudFRva2VuUmVxdWVzdDogYm9vbGVhblxuICApOiBPYnNlcnZhYmxlPENsaWVudFRva2VuPiB7XG4gICAgaWYgKGlzQ2xpZW50VG9rZW5SZXF1ZXN0KSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGllbnRUb2tlblNlcnZpY2UuZ2V0Q2xpZW50VG9rZW4oKTtcbiAgICB9XG4gICAgcmV0dXJuIG9mKG51bGwpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzQ2xpZW50VG9rZW5SZXF1ZXN0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4pOiBib29sZWFuIHtcbiAgICBjb25zdCBpc1JlcXVlc3RNYXBwaW5nID0gSW50ZXJjZXB0b3JVdGlsLmdldEludGVyY2VwdG9yUGFyYW0oXG4gICAgICBVU0VfQ0xJRU5UX1RPS0VOLFxuICAgICAgcmVxdWVzdC5oZWFkZXJzXG4gICAgKTtcbiAgICByZXR1cm4gQm9vbGVhbihpc1JlcXVlc3RNYXBwaW5nKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc0V4cGlyZWRUb2tlbihyZXNwOiBIdHRwRXJyb3JSZXNwb25zZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZXNwLmVycm9yPy5lcnJvcnM/LlswXT8udHlwZSA9PT0gJ0ludmFsaWRUb2tlbkVycm9yJztcbiAgfVxufVxuIl19