UNPKG

@pvway/alpha-oas

Version:

Alpha OAuth Service by p.v.Way

1 lines 42 kB
{"version":3,"file":"pvway-alpha-oas.mjs","sources":["../../../projects/alpha-oas/src/lib/alpha-oas-abstractions.ts","../../../projects/alpha-oas/src/lib/alpha-principal.ts","../../../projects/alpha-oas/src/lib/alpha-session-data.ts","../../../projects/alpha-oas/src/lib/alpha-refresh-data.ts","../../../projects/alpha-oas/src/lib/alpha-user.ts","../../../projects/alpha-oas/src/lib/alpha-auth-envelop.ts","../../../projects/alpha-oas/src/lib/alpha-oas.service.ts","../../../projects/alpha-oas/src/lib/alpha-oas-interceptor.ts","../../../projects/alpha-oas/src/public-api.ts","../../../projects/alpha-oas/src/pvway-alpha-oas.ts"],"sourcesContent":["export enum AlphaAuthStatusEnum {\r\n Undefined,\r\n Anonymous,\r\n Authenticating,\r\n Refreshing,\r\n Authenticated\r\n}\r\n\r\nexport interface IAlphaUser {\r\n userId: string;\r\n username: string;\r\n languageCode: string;\r\n properties: Map<string, any>\r\n}\r\n\r\nexport interface IAlphaAuthEnvelop {\r\n accessToken: string;\r\n expiresIn: number;\r\n refreshToken: string;\r\n user: IAlphaUser;\r\n}\r\n\r\nexport interface IAlphaPrincipal {\r\n status: AlphaAuthStatusEnum;\r\n user: IAlphaUser | null;\r\n languageCode: string;\r\n isAuthenticated: boolean;\r\n isAnonymous: boolean;\r\n isAuthenticating: boolean;\r\n setSessionLanguageCode(lc: string): void;\r\n}\r\n","// noinspection JSUnresolvedReference\r\n\r\nimport {AlphaAuthStatusEnum, IAlphaPrincipal, IAlphaUser} from \"./alpha-oas-abstractions\";\r\n\r\nexport class AlphaPrincipal implements IAlphaPrincipal {\r\n\r\n private mStatus: AlphaAuthStatusEnum;\r\n get status(): AlphaAuthStatusEnum {\r\n return this.mStatus;\r\n }\r\n setStatus(status: AlphaAuthStatusEnum): void {\r\n this.mStatus = status;\r\n }\r\n\r\n private mUser: IAlphaUser | null;\r\n get user(): IAlphaUser | null {\r\n return this.mUser;\r\n }\r\n setUser(user: IAlphaUser): void {\r\n this.mUser = user;\r\n this.setSessionLanguageCode(user.languageCode);\r\n }\r\n setSessionLanguageCode(lc: string): void {\r\n // interceptor will use this value for inserting\r\n // the language-code header on each outgoing request\r\n sessionStorage.setItem('alphaLanguageCode', lc);\r\n }\r\n clearUser(): void {\r\n this.mUser = null;\r\n sessionStorage.removeItem('alphaLanguageCode');\r\n }\r\n\r\n get languageCode(): string {\r\n if (this.mUser) {\r\n return this.mUser.languageCode;\r\n }\r\n const lsLc = sessionStorage.getItem('alphaLanguageCode');\r\n if (lsLc) {\r\n return lsLc;\r\n }\r\n const nav = window.navigator as any;\r\n const userLang = (nav.language || nav.userLanguage) as string;\r\n return userLang\r\n ? userLang.substring(0, 2).toLowerCase()\r\n : 'en';\r\n }\r\n\r\n get isAuthenticated(): boolean {\r\n return this.mStatus === AlphaAuthStatusEnum.Authenticated;\r\n }\r\n\r\n get isAnonymous(): boolean {\r\n return this.mStatus === AlphaAuthStatusEnum.Undefined\r\n || this.mStatus === AlphaAuthStatusEnum.Anonymous;\r\n }\r\n\r\n get isAuthenticating(): boolean {\r\n return this.mStatus === AlphaAuthStatusEnum.Authenticating\r\n || this.mStatus === AlphaAuthStatusEnum.Refreshing;\r\n }\r\n\r\n constructor() {\r\n this.mStatus = AlphaAuthStatusEnum.Undefined;\r\n this.mUser = null;\r\n }\r\n\r\n}\r\n","export class AlphaSessionData {\r\n\r\n private static readonly rememberMeFieldName = 'alphaRememberMe';\r\n private static readonly accessTokenFieldName = 'alphaAccessToken';\r\n private static readonly receptionTsFieldName = 'alphaReceptionTs';\r\n private static readonly expirationTsFieldName = 'alphaExpirationTs';\r\n\r\n rememberMe: boolean;\r\n accessToken: string;\r\n /** timestamp of token reception in ms */\r\n receptionTs: number;\r\n /** timestamp of token expiration in ms */\r\n expirationTs: number;\r\n\r\n get isExpiredOrExpiring(): boolean {\r\n const nowTs = new Date().getTime();\r\n return this.expirationTs - nowTs < 60000;\r\n }\r\n\r\n constructor(\r\n rememberMe: boolean,\r\n accessToken: string,\r\n receptionTs: number, // timestamp of token reception in ms\r\n expirationTs: number) {\r\n this.rememberMe = rememberMe;\r\n this.accessToken = accessToken;\r\n this.receptionTs = receptionTs;\r\n this.expirationTs = expirationTs;\r\n }\r\n\r\n // expiresIn is expressed in seconds\r\n static getTimestamps(expiresIn: number): {\r\n receptionTs: number,\r\n expirationTs: number\r\n } {\r\n const receptionTs = new Date().getTime();\r\n const expirationTs = receptionTs + expiresIn * 1000;\r\n return {\r\n receptionTs,\r\n expirationTs\r\n };\r\n }\r\n\r\n static retrieve(): AlphaSessionData | null {\r\n const rmString = sessionStorage\r\n .getItem(AlphaSessionData.rememberMeFieldName);\r\n if (rmString == null) return null;\r\n\r\n const rm = rmString === 'true';\r\n\r\n const at = sessionStorage\r\n .getItem(AlphaSessionData.accessTokenFieldName) ?? '';\r\n\r\n const rTsString = sessionStorage\r\n .getItem(AlphaSessionData.receptionTsFieldName) ?? '0';\r\n const rTs = parseInt(rTsString, 10);\r\n\r\n const xTsString = sessionStorage\r\n .getItem(AlphaSessionData.expirationTsFieldName) ?? '0';\r\n const xTs = parseInt(xTsString, 10);\r\n\r\n return new AlphaSessionData(rm, at, rTs, xTs);\r\n }\r\n\r\n static clear(): void {\r\n sessionStorage.removeItem(AlphaSessionData.rememberMeFieldName);\r\n sessionStorage.removeItem(AlphaSessionData.accessTokenFieldName);\r\n sessionStorage.removeItem(AlphaSessionData.receptionTsFieldName);\r\n sessionStorage.removeItem(AlphaSessionData.expirationTsFieldName);\r\n }\r\n\r\n store(): void {\r\n sessionStorage.setItem(\r\n AlphaSessionData.rememberMeFieldName, this.rememberMe.toString());\r\n sessionStorage.setItem(\r\n AlphaSessionData.accessTokenFieldName, this.accessToken);\r\n sessionStorage.setItem(\r\n AlphaSessionData.receptionTsFieldName, this.receptionTs.toString());\r\n sessionStorage.setItem(\r\n AlphaSessionData.expirationTsFieldName, this.expirationTs.toString());\r\n }\r\n\r\n}\r\n","export class AlphaRefreshData {\r\n\r\n private static readonly refreshTokenFieldName = 'alphaRefreshToken';\r\n\r\n refreshToken: string;\r\n\r\n constructor(\r\n refreshToken: string) {\r\n this.refreshToken = refreshToken;\r\n }\r\n\r\n static retrieve(): AlphaRefreshData | null {\r\n const rt = localStorage\r\n .getItem(AlphaRefreshData.refreshTokenFieldName);\r\n if (rt == null) {\r\n return null;\r\n }\r\n return new AlphaRefreshData(rt);\r\n }\r\n\r\n static clear(): void {\r\n localStorage.removeItem(AlphaRefreshData.refreshTokenFieldName);\r\n }\r\n\r\n store(): void {\r\n localStorage.setItem(\r\n AlphaRefreshData.refreshTokenFieldName,\r\n this.refreshToken);\r\n }\r\n\r\n}\r\n","// noinspection JSUnresolvedReference\r\n\r\nimport {IAlphaUser} from \"./alpha-oas-abstractions\";\r\n\r\n// FACTORY\r\nexport class AlphaUserFactory {\r\n static factorFromDso(dso: any): IAlphaUser {\r\n const ds = new DsoSlicer(dso);\r\n return new AlphaUser(ds.SingleFragment);\r\n }\r\n}\r\n\r\n// FRAGMENTS\r\ninterface SingleFragment {\r\n userId: string;\r\n username: string;\r\n languageCode: string;\r\n properties: Map<string, any>\r\n}\r\n\r\n// DSO SLICER\r\nclass DsoSlicer {\r\n private _dso: any;\r\n constructor(dso: any) {\r\n this._dso = dso;\r\n }\r\n\r\n get SingleFragment(): SingleFragment {\r\n const propertyArray =\r\n Object.entries(this._dso.userProperties);\r\n return {\r\n userId: this._dso.userId,\r\n username: this._dso.username,\r\n languageCode: this._dso.languageCode,\r\n properties: new Map(propertyArray)\r\n };\r\n }\r\n}\r\n\r\n// CONCRETES\r\nclass AlphaUser implements IAlphaUser {\r\n userId: string;\r\n username: string;\r\n languageCode: string;\r\n properties: Map<string, any>;\r\n\r\n constructor(\r\n f0: SingleFragment) {\r\n this.userId = f0.userId;\r\n this.username = f0.username;\r\n this.languageCode = f0.languageCode;\r\n this.properties = f0.properties;\r\n }\r\n\r\n}\r\n","// noinspection JSUnresolvedReference\r\n\r\nimport { AlphaUserFactory } from './alpha-user';\r\nimport {IAlphaAuthEnvelop, IAlphaUser} from \"./alpha-oas-abstractions\";\r\n\r\n// FACTORY\r\nexport class AlphaAuthEnvelopFactory {\r\n static factorFromDso(dso: any): IAlphaAuthEnvelop {\r\n const ds = new DsoSlicer(dso);\r\n return new AuthEnvelop(ds.SingleFragment);\r\n }\r\n}\r\n\r\n// FRAGMENTS\r\ninterface SingleFragment {\r\n accessToken: string;\r\n expiresIn: number;\r\n refreshToken: string;\r\n user: IAlphaUser;\r\n}\r\n\r\n// DSO SLICER\r\nclass DsoSlicer {\r\n private _dso: any;\r\n constructor(dso: any) {\r\n this._dso = dso;\r\n }\r\n\r\n get SingleFragment(): SingleFragment {\r\n return {\r\n accessToken: this._dso.access_token,\r\n expiresIn: this._dso.expires_in,\r\n refreshToken: this._dso.refresh_token,\r\n user: AlphaUserFactory.factorFromDso(this._dso.user)\r\n };\r\n }\r\n\r\n}\r\n\r\n// CONCRETES\r\nclass AuthEnvelop implements IAlphaAuthEnvelop {\r\n accessToken: string;\r\n expiresIn: number;\r\n refreshToken: string;\r\n\r\n user: IAlphaUser;\r\n\r\n constructor(\r\n f0: SingleFragment) {\r\n this.accessToken = f0.accessToken;\r\n this.expiresIn = f0.expiresIn;\r\n this.refreshToken = f0.refreshToken;\r\n this.user = f0.user;\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {HttpClient, HttpErrorResponse, HttpHeaders} from \"@angular/common/http\";\r\nimport {AlphaPrincipal} from \"./alpha-principal\";\r\nimport {catchError, map, mergeMap, Observable, Subscriber, throwError} from \"rxjs\";\r\nimport {AlphaSessionData} from \"./alpha-session-data\";\r\nimport {AlphaRefreshData} from \"./alpha-refresh-data\";\r\nimport {AlphaAuthEnvelopFactory} from \"./alpha-auth-envelop\";\r\nimport {AlphaUserFactory} from \"./alpha-user\";\r\nimport {\r\n AlphaAuthStatusEnum, IAlphaAuthEnvelop,\r\n IAlphaPrincipal, IAlphaUser\r\n} from \"./alpha-oas-abstractions\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AlphaOasService {\r\n\r\n private mHttp: HttpClient | undefined;\r\n private readonly mContext = 'OAuthService';\r\n private readonly mPrincipal: AlphaPrincipal;\r\n private mSignInUrl: string | undefined;\r\n private mRefreshUrl: string | undefined;\r\n private mGetMeUrl: string | undefined;\r\n\r\n private mOnPrincipalUpdated:\r\n (principal: AlphaPrincipal) => any =\r\n () => {\r\n };\r\n private mPostErrorLog:\r\n (context: string, method: string, error: string) => any =\r\n () => {\r\n };\r\n\r\n get principal(): IAlphaPrincipal {\r\n return this.mPrincipal;\r\n }\r\n\r\n constructor() {\r\n this.mPrincipal = new AlphaPrincipal();\r\n }\r\n\r\n /**\r\n * Initializes the authentication process by retrieving session data, refresh data, or setting authentication to anonymous mode.\r\n *\r\n * @param httpClient - need to inject the httpClient here\r\n * @param {string} [getMeUrl] - The URL for retrieving user information.\r\n * @param {string} [refreshUrl] - The URL for refreshing authentication.\r\n * @param {string} [signInUrl] - The URL for signing in.\r\n * @param {function} [postErrorLog] - A function that handles error logging.\r\n * It accepts three parameters: context, method, and error.\r\n * @param {function} [onPrincipalUpdated] - A function that will be triggered whenever the principal is updated.\r\n * It accepts one parameter: principal of type IAlphaPrincipal.\r\n *\r\n * @return {Observable} - An Observable that emits the result of the initialization process.\r\n */\r\n init(httpClient: HttpClient,\r\n getMeUrl?: string,\r\n refreshUrl?: string,\r\n signInUrl?: string,\r\n postErrorLog?: (context: string, method: string, error: string) => any,\r\n onPrincipalUpdated?: (principal: IAlphaPrincipal) => any): Observable<string> {\r\n this.mHttp = httpClient;\r\n this.mSignInUrl = signInUrl;\r\n this.mRefreshUrl = refreshUrl;\r\n this.mGetMeUrl = getMeUrl;\r\n if (postErrorLog) {\r\n this.mPostErrorLog = postErrorLog;\r\n }\r\n if (onPrincipalUpdated) {\r\n this.mOnPrincipalUpdated = onPrincipalUpdated;\r\n }\r\n\r\n // let's first see if there is still a session data\r\n const sd = AlphaSessionData.retrieve();\r\n if (sd != null) {\r\n return this.initFromSd();\r\n }\r\n\r\n // then check if there is a refresh data available\r\n const rd = AlphaRefreshData.retrieve();\r\n if (rd != null) {\r\n return this.initFromRd();\r\n }\r\n\r\n // no sd and no rd found let's start as anonymous\r\n return this.initAsAnonymous();\r\n }\r\n\r\n private initFromSd(): Observable<string> {\r\n console.log('Sd found... calling getMe');\r\n return new Observable(\r\n (subscriber: Subscriber<string>) => {\r\n this.getMe().subscribe({\r\n next: () => subscriber.next('principal reloaded'),\r\n error: e => subscriber.error(e)\r\n });\r\n });\r\n }\r\n\r\n private initFromRd(): Observable<string> {\r\n return new Observable(\r\n (subscriber: Subscriber<string>) => {\r\n console.log('rd active... calling refresh');\r\n this.mPrincipal.setStatus(AlphaAuthStatusEnum.Refreshing);\r\n this.refresh().subscribe({\r\n next: refreshed => {\r\n if (refreshed) {\r\n subscriber.next('identity refreshed');\r\n } else {\r\n this.mPrincipal.setStatus(AlphaAuthStatusEnum.Anonymous);\r\n subscriber.next('refreshed failed');\r\n }\r\n },\r\n error: (e: any) => {\r\n subscriber.error(e);\r\n }\r\n });\r\n });\r\n }\r\n\r\n private initAsAnonymous(): Observable<string> {\r\n return new Observable(\r\n (subscriber: Subscriber<string>) => {\r\n this.mPrincipal.setStatus(AlphaAuthStatusEnum.Anonymous);\r\n subscriber.next('anonymous');\r\n });\r\n }\r\n\r\n /**\r\n * Inject your own signIn method */\r\n useSignIn(\r\n signIn: (\r\n userName: string,\r\n password: string,\r\n rememberMe: boolean) => Observable<IAlphaAuthEnvelop>): void {\r\n this.internalSignIn = signIn;\r\n }\r\n\r\n /**\r\n * Inject your own refresh method */\r\n useRefresh(refresh: (\r\n refreshToken: string) => Observable<IAlphaAuthEnvelop>) {\r\n this.internalRefresh = refresh;\r\n }\r\n\r\n /** Inject your own authorize method */\r\n useAuthorize(authorize: (request: Observable<any>) => Observable<any>): void {\r\n this.internalAuthorize = authorize;\r\n }\r\n\r\n internalSignIn: (\r\n userName: string,\r\n password: string,\r\n rememberMe: boolean) =>\r\n Observable<IAlphaAuthEnvelop> =\r\n (username: string, password: string) => {\r\n\r\n if (this.mHttp === undefined) {\r\n throw new Error('service is not initialized');\r\n }\r\n\r\n const body = 'grant_type=password' +\r\n '&username=' + encodeURIComponent(username) +\r\n '&password=' + encodeURIComponent(password);\r\n\r\n const headers = new HttpHeaders()\r\n .set('content-type', 'application/x-www-form-urlencoded');\r\n\r\n const url = this.mSignInUrl!;\r\n return this.mHttp!\r\n .post<any>(url, body, {headers: headers})\r\n .pipe(\r\n map(dso =>\r\n AlphaAuthEnvelopFactory.factorFromDso(dso)),\r\n catchError(error => {\r\n this.mPostErrorLog(this.mContext,\r\n '_signIn', JSON.stringify(error));\r\n return throwError(() => error);\r\n }));\r\n }\r\n\r\n /**\r\n * On successful login call storeIdentity.\r\n * Remark: there is no need to call getMe from signIn as getMe\r\n * is actually returning the same data as signIn\r\n * @param username\r\n * @param password\r\n * @param rememberMe\r\n */\r\n signIn(\r\n username: string,\r\n password: string,\r\n rememberMe: boolean): Observable<boolean> {\r\n\r\n return new Observable<boolean>(\r\n (subscriber: Subscriber<boolean>) => {\r\n this.internalSignIn(username, password, rememberMe)\r\n .subscribe({\r\n next: (token: IAlphaAuthEnvelop) => {\r\n this.storeIdentity(token, rememberMe);\r\n subscriber.next(true);\r\n },\r\n error: (e: HttpErrorResponse) => {\r\n this.signOut();\r\n if (e.status === 400 || e.status === 401) {\r\n subscriber.next(false);\r\n } else {\r\n this.mPostErrorLog(\r\n this.mContext, 'login', JSON.stringify(e))\r\n subscriber.error(e);\r\n }\r\n }\r\n });\r\n return;\r\n });\r\n }\r\n\r\n /**\r\n * default implementation of refresh\r\n * this implementation can be overridden by calling useRefresh\r\n */\r\n internalRefresh: (refreshToken: string) => Observable<IAlphaAuthEnvelop> =\r\n (refreshToken: string) => {\r\n\r\n if (this.mHttp === undefined) {\r\n throw new Error('service is not initialized');\r\n }\r\n\r\n const body = 'grant_type=refresh_token' +\r\n '&refresh_token=' + encodeURIComponent(refreshToken);\r\n\r\n const headers = new HttpHeaders()\r\n .set('content-type', 'application/x-www-form-urlencoded');\r\n\r\n const url = this.mRefreshUrl!;\r\n return this.mHttp!.post<any>(url, body, {headers: headers})\r\n .pipe(\r\n map(dso =>\r\n AlphaAuthEnvelopFactory.factorFromDso(dso)));\r\n }\r\n\r\n /**\r\n * refreshes the accessToken from the refreshToken\r\n * found in the local storage data\r\n */\r\n refresh(): Observable<boolean> {\r\n\r\n const rd = AlphaRefreshData.retrieve();\r\n if (rd == null) {\r\n this.mPostErrorLog(this.mContext,\r\n 'refresh', 'rd should not be null');\r\n return throwError(\r\n () => 'rd should not be null');\r\n }\r\n\r\n return new Observable<boolean>(\r\n (subscriber: Subscriber<boolean>) => {\r\n this.internalRefresh(rd.refreshToken)\r\n .subscribe({\r\n next: (token: IAlphaAuthEnvelop) => {\r\n this.storeIdentity(token, true);\r\n subscriber.next(true);\r\n },\r\n error: (e: HttpErrorResponse) => {\r\n this.signOut();\r\n if (e.status == 401) {\r\n subscriber.next(false);\r\n } else {\r\n this.mPostErrorLog(this.mContext,\r\n 'refresh', JSON.stringify(e));\r\n subscriber.error(e);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * called from the init() method when the session data is present\r\n */\r\n getMe(): Observable<IAlphaUser> {\r\n if (!this.mHttp) {\r\n throw new Error('service is not initialized');\r\n }\r\n const url = this.mGetMeUrl!;\r\n const call = this.mHttp.get<any>(url)\r\n .pipe(\r\n map(\r\n dso => {\r\n const user = AlphaUserFactory.factorFromDso(dso);\r\n this.populatePrincipal(user);\r\n return user;\r\n }),\r\n catchError((error: HttpErrorResponse) => {\r\n this.mPostErrorLog(this.mContext, url,\r\n JSON.stringify(error));\r\n return throwError(() => error);\r\n }));\r\n\r\n return this.authorize(call);\r\n }\r\n\r\n editUserInfo(\r\n firstName: string,\r\n lastName: string,\r\n languageCode: string): void {\r\n if (!this.mPrincipal.user) {\r\n return;\r\n }\r\n this.mPrincipal.user.username = firstName + \" \" + lastName;\r\n this.mPrincipal.user.languageCode = languageCode;\r\n\r\n this.mOnPrincipalUpdated(this.mPrincipal)\r\n }\r\n\r\n signOut(): void {\r\n AlphaSessionData.clear();\r\n AlphaRefreshData.clear();\r\n this.mPrincipal.clearUser();\r\n this.mPrincipal.setStatus(AlphaAuthStatusEnum.Anonymous);\r\n this.mOnPrincipalUpdated(this.mPrincipal);\r\n }\r\n\r\n /**\r\n * checks that the accessToken is not expired or\r\n * expiring (expirationTime - 1 minute).\r\n * if still valid fires the request directly else inserts a\r\n * refresh before firing the request\r\n */\r\n internalAuthorize(httpRequest: Observable<any>): Observable<any> {\r\n const sd = AlphaSessionData.retrieve();\r\n if (sd == null || sd.isExpiredOrExpiring) {\r\n return this.refresh()\r\n .pipe(\r\n mergeMap(() => httpRequest),\r\n catchError(error => {\r\n this.mPostErrorLog(this.mContext,\r\n '_authorize', JSON.stringify(error));\r\n return throwError(() => error)\r\n }\r\n ));\r\n } else {\r\n return httpRequest;\r\n }\r\n }\r\n\r\n /**\r\n * checks the accessToken and eventually refreshes it\r\n * before calling the request\r\n */\r\n authorize(httpRequest: Observable<any>): Observable<any> {\r\n return this.internalAuthorize(httpRequest);\r\n }\r\n\r\n /**\r\n * (1) stores the access token in the session storage\r\n * (2) stores the refresh token in the local storage\r\n * (3) populates the principal using the user info\r\n */\r\n storeIdentity(\r\n authEnvelop: IAlphaAuthEnvelop,\r\n rememberMe: boolean): void {\r\n\r\n const ts = AlphaSessionData\r\n .getTimestamps(authEnvelop.expiresIn);\r\n\r\n const sd = new AlphaSessionData(\r\n true, authEnvelop.accessToken,\r\n ts.receptionTs, ts.expirationTs);\r\n sd.store();\r\n console.log('sd populated');\r\n\r\n if (rememberMe) {\r\n const rd = new AlphaRefreshData(\r\n authEnvelop.refreshToken);\r\n rd.store();\r\n console.log('rd populated');\r\n }\r\n\r\n this.populatePrincipal(authEnvelop.user);\r\n }\r\n\r\n private populatePrincipal(user: IAlphaUser) {\r\n this.mPrincipal.setUser(user);\r\n console.log('principal user is set');\r\n this.mPrincipal.setStatus(AlphaAuthStatusEnum.Authenticated);\r\n this.mOnPrincipalUpdated(this.mPrincipal);\r\n }\r\n\r\n}\r\n","import {HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpHandlerFn} from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { v4 as uuidV4 } from 'uuid';\r\nimport { AlphaSessionData } from \"./alpha-session-data\";\r\n\r\nexport class AlphaOasInterceptor implements HttpInterceptor {\r\n\r\n intercept(req: HttpRequest<any>, next: HttpHandler):\r\n Observable<HttpEvent<any>> {\r\n const eReq = AlphaOasInterceptor.enrichReq(req);\r\n return next.handle(eReq);\r\n }\r\n\r\n static handlerFn(req: HttpRequest<any>, next: HttpHandlerFn): Observable<HttpEvent<any>> {\r\n const eReq = this.enrichReq(req);\r\n return next(eReq);\r\n }\r\n\r\n private static enrichReq(req: HttpRequest<any>): HttpRequest<any> {\r\n let headers = req.headers;\r\n\r\n // getting languageCode\r\n // set by the principal when setting the user\r\n let languageCode =\r\n sessionStorage.getItem('alphaLanguageCode');\r\n if (!languageCode) {\r\n const nav = window.navigator as any;\r\n const userLang = (nav.language || nav.userLanguage) as string;\r\n languageCode = userLang\r\n ? userLang.substring(0, 2)?.toLowerCase()\r\n : 'en';\r\n }\r\n // always add the language-code header\r\n headers = headers.append('language-code', languageCode);\r\n\r\n /**\r\n * the ClientId (client-id header) identifies the client.\r\n * There will be one client-id for each browser.\r\n * With this in place it will be possible to\r\n * map a new user to his browsing history\r\n * ClientId is only generated once and stored in\r\n * the browser localstorage associated to the url\r\n */\r\n let clientId = localStorage.getItem('alphaClientId');\r\n if (clientId == null)\r\n {\r\n clientId = uuidV4();\r\n localStorage.setItem('alphaClientId', clientId);\r\n }\r\n // always add the client-id header\r\n headers = headers.append('client-id', clientId);\r\n\r\n /**\r\n * when an accessToken is present insert the authorization header\r\n * using the accessToken with the bearer scheme\r\n */\r\n const sd = AlphaSessionData.retrieve();\r\n const token = sd?.accessToken;\r\n if (token) {\r\n headers = headers.append(\r\n 'authorization',\r\n `bearer ${token}`);\r\n }\r\n\r\n return req.clone({ headers });\r\n }\r\n\r\n}\r\n","/*\r\n * Public API Surface of alpha-oas\r\n */\r\n\r\nexport * from './lib/alpha-oas-abstractions';\r\nexport * from './lib/alpha-oas.service';\r\nexport * from './lib/alpha-user';\r\nexport * from './lib/alpha-auth-envelop';\r\nexport * from './lib/alpha-principal';\r\nexport * from './lib/alpha-oas-interceptor';\r\nexport * from './lib/alpha-session-data';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DsoSlicer","uuidV4"],"mappings":"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"}