{ "version": 3, "sources": ["libs/angular/ng-auth/src/lib/deprecated/token-management.service.ts"], "sourcesContent": ["import { Inject, Injectable } from '@angular/core';\nimport {\n catchError,\n combineLatest,\n filter,\n from,\n map,\n merge,\n Observable,\n of,\n switchMap,\n} from 'rxjs';\n\n/**\n * @deprecated\n */\nexport class InvalidTokenError implements Error {\n public readonly name: string = 'InvalidTokenError';\n constructor(public message: string) {}\n}\n\n/**\n * @deprecated\n */\nexport class TokenExpiredError implements Error {\n public readonly name: string = 'TokenExpiredError';\n constructor(public message: string) {}\n}\n\n/**\n * @deprecated\n */\nexport class TokenRequestError implements Error {\n public readonly name: string = 'TokenRequestError';\n constructor(public message: string) {}\n}\n\n/**\n * @deprecated\n */\nexport interface JwtTokenData {\n email: string;\n exp: number;\n first_name: string;\n last_name: string;\n iat: number;\n iss: string;\n jti: string;\n lite_key: string;\n member_uuid: string;\n roles: string[];\n token_type: string;\n user_id: number;\n}\n\n/**\n * @deprecated\n */\nexport interface JwtTokenError {\n error: string;\n}\n\n/**\n * @deprecated\n */\n@Injectable()\nexport class ItkTokenManagementServiceDeprecated {\n constructor(\n @Inject('REFRESH_TOKEN') private readonly refreshTokenUrl: string,\n ) {}\n\n isValidTokenFormat(token: string): boolean {\n return !!/[a-z0-9\\]+.[a-z0-9]+.[a-z0-9]+/i.test(token);\n }\n\n tokensExist(): boolean {\n return !!this.getAccessToken() && !!this.getRefreshToken();\n }\n\n isValidToken(token: string): boolean {\n return this.tokensExist() && this.isValidTokenFormat(token);\n }\n\n clearTokens(): void {\n this.setAccessToken('');\n this.setRefreshToken('');\n }\n\n hasTokenExpired(token: string): Observable {\n const claims = this.getTokenClaims(token);\n return merge(\n claims.pipe(\n filter((x): x is JwtTokenError => 'error' in x),\n map(() => true),\n ),\n claims.pipe(\n filter((x): x is JwtTokenData => !('error' in x)),\n map((c) => {\n const unixNow = Number(new Date());\n const { exp } = c;\n return (exp ?? 0) * 1000 - unixNow <= 0;\n }),\n ),\n );\n }\n\n getTokenClaims(token: string): Observable {\n const x = this.isValidToken(token);\n if (!x) return of({ error: 'Invalid token error' });\n const [, claims] = token.split('.');\n try {\n return of(JSON.parse(atob(claims))); //FIXME: replace atob\n } catch (e) {\n return of({ error: 'Invalid token error. Could not parse.' });\n }\n }\n\n hasAccessTokenExpired(): Observable {\n return this.hasTokenExpired(this.getAccessToken());\n }\n\n hasRefreshTokenExpired(): Observable {\n return this.hasTokenExpired(this.getRefreshToken());\n }\n\n hasAccessTokenOrRefreshTokenExpired(): Observable {\n return combineLatest(\n this.hasAccessTokenExpired(),\n this.hasRefreshTokenExpired(),\n ).pipe(map((x) => x.some((a) => a === true)));\n }\n\n refreshTokenIfNeeded(): Observable {\n if (!this.refreshTokenUrl)\n return of({ error: 'Invalid token refresh token' } as JwtTokenError);\n\n const refresh = this.getRefreshToken();\n const accessTokenExpired = this.hasAccessTokenExpired();\n const refreshTokenExpired = this.hasRefreshTokenExpired();\n\n return combineLatest({\n accessTokenExpired,\n refreshTokenExpired,\n }).pipe(\n switchMap((results) => {\n if (results.refreshTokenExpired)\n return of({ error: 'Refresh token has expired' });\n else if (results.accessTokenExpired) {\n const apiRequest = from(\n fetch(this.refreshTokenUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ refresh }),\n }),\n );\n\n return merge(\n apiRequest.pipe(\n filter((x) => !x.ok),\n map(() => ({ error: 'Could not refresh token.' })),\n ),\n apiRequest.pipe(\n filter((x) => x.ok),\n switchMap((x) => x.json()),\n switchMap((json: { access: string; refresh: string }) => {\n const { access, refresh: r } = json;\n this.setAccessToken(access);\n this.setRefreshToken(r);\n return this.getTokenClaims(access);\n }),\n ),\n ).pipe(catchError(() => of({ error: 'Could not refresh token.' })));\n } else {\n const at = this.getAccessToken();\n if (!at) return of({ error: 'Invalid Access Token' });\n return this.getTokenClaims(at);\n }\n }),\n );\n }\n\n getAccessToken(): string {\n return localStorage.getItem('accessToken') ?? '';\n }\n\n getRefreshToken(): string {\n return localStorage.getItem('refreshToken') ?? '';\n }\n\n setAccessToken(tok: string): void {\n localStorage.setItem('accessToken', tok);\n }\n\n setRefreshToken(tok: string): void {\n localStorage.setItem('refreshToken', tok);\n }\n}\n"], "mappings": "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", "names": ["ItkTokenManagementServiceDeprecated", "constructor", "refreshTokenUrl", "isValidTokenFormat", "token", "test", "tokensExist", "getAccessToken", "getRefreshToken", "isValidToken", "clearTokens", "setAccessToken", "setRefreshToken", "hasTokenExpired", "claims", "getTokenClaims", "merge", "pipe", "filter", "x", "map", "c", "unixNow", "Number", "Date", "exp", "of", "error", "split", "JSON", "parse", "atob", "hasAccessTokenExpired", "hasRefreshTokenExpired", "hasAccessTokenOrRefreshTokenExpired", "combineLatest", "some", "a", "refreshTokenIfNeeded", "refresh", "accessTokenExpired", "refreshTokenExpired", "switchMap", "results", "apiRequest", "from", "fetch", "method", "headers", "body", "stringify", "ok", "json", "access", "r", "catchError", "at", "localStorage", "getItem", "tok", "setItem", "\u0275\u0275inject", "factory", "\u0275fac", "_ItkTokenManagementServiceDeprecated"] }