@terminus/ngx-tools
Version:
[![CircleCI][circle-badge]][circle-link] [![codecov][codecov-badge]][codecov-project] [![semantic-release][semantic-release-badge]][semantic-release] [![MIT License][license-image]][license-url] <br> [![NPM version][npm-version-image]][npm-url] [![Github
53 lines • 6.47 kB
JavaScript
import { __decorate } from "tslib";
import { Injectable } from '@angular/core';
import { Store } from '@ngrx/store';
import { isHttpResponse, isTokenResponse, } from '@terminus/ngx-tools/type-guards';
import { tap } from 'rxjs/operators';
import { StoreToken, } from '../actions';
export const TOKEN_NOT_FOUND_ERROR = new Error('Token Not found in response');
let TokenExtractor = class TokenExtractor {
constructor(
// eslint-disable-next-line @typescript-eslint/no-explicit-any
store) {
this.store = store;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
extractJwtToken({ tokenName, isDefaultToken }) {
return (source) => source.pipe(tap(request => {
const token = this.extractTokenFromResponse(request);
if (token === '') {
throw TOKEN_NOT_FOUND_ERROR;
}
else {
this.store.dispatch(new StoreToken({
tokenName,
token,
isDefaultToken,
}));
}
}));
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
extractTokenFromResponse(input) {
let token = '';
if (isTokenResponse(input)) {
token = input.token;
}
else if (isHttpResponse(input)) {
const authHeader = input.headers.get('Authorization');
const tokenStartsAtChar = 7;
if (authHeader && authHeader.startsWith('Bearer ')) {
token = authHeader.substr(tokenStartsAtChar);
}
}
return token;
}
};
TokenExtractor.ctorParameters = () => [
{ type: Store }
];
TokenExtractor = __decorate([
Injectable()
], TokenExtractor);
export { TokenExtractor };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tZXh0cmFjdG9yLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHRlcm1pbnVzL25neC10b29scy9qd3QvIiwic291cmNlcyI6WyJqd3QtdG9rZW4tbWFuYWdtZW50L3V0aWxpdGllcy90b2tlbi1leHRyYWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsY0FBYyxFQUNkLGVBQWUsR0FDaEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUNMLFVBQVUsR0FFWCxNQUFNLFlBQVksQ0FBQztBQVNwQixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0FBSTlFLElBQWEsY0FBYyxHQUEzQixNQUFhLGNBQWM7SUFzQ3pCO0lBQ0UsOERBQThEO0lBQ3ZELEtBQWlCO1FBQWpCLFVBQUssR0FBTCxLQUFLLENBQVk7SUFDdkIsQ0FBQztJQXhDSiw4REFBOEQ7SUFDdkQsZUFBZSxDQUF1QyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQTBCO1FBQ2hILE9BQU8sQ0FBQyxNQUFxQixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUMzQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDWixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFckQsSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFFO2dCQUNoQixNQUFNLHFCQUFxQixDQUFDO2FBQzdCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksVUFBVSxDQUFLO29CQUNyQyxTQUFTO29CQUNULEtBQUs7b0JBQ0wsY0FBYztpQkFDZixDQUFDLENBQUMsQ0FBQzthQUNMO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCw4REFBOEQ7SUFDdkQsd0JBQXdCLENBQXVDLEtBQVE7UUFDNUUsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBRWYsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUIsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7U0FDckI7YUFBTSxJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNoQyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN0RCxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQztZQUU1QixJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUNsRCxLQUFLLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2FBQzlDO1NBQ0Y7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FPRixDQUFBOztZQUhpQixLQUFLOztBQXhDVixjQUFjO0lBRDFCLFVBQVUsRUFBRTtHQUNBLGNBQWMsQ0EyQzFCO1NBM0NZLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIGlzSHR0cFJlc3BvbnNlLFxuICBpc1Rva2VuUmVzcG9uc2UsXG59IGZyb20gJ0B0ZXJtaW51cy9uZ3gtdG9vbHMvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICBTdG9yZVRva2VuLFxuICBTdG9yZVRva2VuQ29uc3RydWN0b3IsXG59IGZyb20gJy4uL2FjdGlvbnMnO1xuaW1wb3J0IHsgQ2xhaW1NYXAgfSBmcm9tICcuLi9jbGFpbS1tYXAnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgRXh0cmFjdFRva2VuUGFyYW1zPEMgPSBDbGFpbU1hcD4gZXh0ZW5kcyBQYXJ0aWFsPFN0b3JlVG9rZW5Db25zdHJ1Y3RvcjxDPj4ge1xuICB0b2tlbk5hbWU6IEV4dHJhY3Q8a2V5b2YgQywgc3RyaW5nPjtcbn1cblxuXG5leHBvcnQgY29uc3QgVE9LRU5fTk9UX0ZPVU5EX0VSUk9SID0gbmV3IEVycm9yKCdUb2tlbiBOb3QgZm91bmQgaW4gcmVzcG9uc2UnKTtcblxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVG9rZW5FeHRyYWN0b3I8Q00gPSBDbGFpbU1hcD4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwdWJsaWMgZXh0cmFjdEp3dFRva2VuPFQgZXh0ZW5kcyBPYmplY3QgfCBIdHRwUmVzcG9uc2U8YW55Pj4oeyB0b2tlbk5hbWUsIGlzRGVmYXVsdFRva2VuIH06IEV4dHJhY3RUb2tlblBhcmFtczxDTT4pIHtcbiAgICByZXR1cm4gKHNvdXJjZTogT2JzZXJ2YWJsZTxUPikgPT4gc291cmNlLnBpcGUoXG4gICAgICB0YXAocmVxdWVzdCA9PiB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5leHRyYWN0VG9rZW5Gcm9tUmVzcG9uc2UocmVxdWVzdCk7XG5cbiAgICAgICAgaWYgKHRva2VuID09PSAnJykge1xuICAgICAgICAgIHRocm93IFRPS0VOX05PVF9GT1VORF9FUlJPUjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBTdG9yZVRva2VuPENNPih7XG4gICAgICAgICAgICB0b2tlbk5hbWUsXG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIGlzRGVmYXVsdFRva2VuLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHB1YmxpYyBleHRyYWN0VG9rZW5Gcm9tUmVzcG9uc2U8VCBleHRlbmRzIE9iamVjdCB8IEh0dHBSZXNwb25zZTxhbnk+PihpbnB1dDogVCk6IHN0cmluZyB7XG4gICAgbGV0IHRva2VuID0gJyc7XG5cbiAgICBpZiAoaXNUb2tlblJlc3BvbnNlKGlucHV0KSkge1xuICAgICAgdG9rZW4gPSBpbnB1dC50b2tlbjtcbiAgICB9IGVsc2UgaWYgKGlzSHR0cFJlc3BvbnNlKGlucHV0KSkge1xuICAgICAgY29uc3QgYXV0aEhlYWRlciA9IGlucHV0LmhlYWRlcnMuZ2V0KCdBdXRob3JpemF0aW9uJyk7XG4gICAgICBjb25zdCB0b2tlblN0YXJ0c0F0Q2hhciA9IDc7XG5cbiAgICAgIGlmIChhdXRoSGVhZGVyICYmIGF1dGhIZWFkZXIuc3RhcnRzV2l0aCgnQmVhcmVyICcpKSB7XG4gICAgICAgIHRva2VuID0gYXV0aEhlYWRlci5zdWJzdHIodG9rZW5TdGFydHNBdENoYXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcHVibGljIHN0b3JlOiBTdG9yZTxhbnk+LFxuICApIHt9XG5cbn1cbiJdfQ==