{ "version": 3, "sources": ["src/app/services/auth.service.ts"], "sourcesContent": ["import { Injectable } from '@angular/core';\r\nimport { Observable, catchError, map, of, tap } from 'rxjs';\r\nimport { UserModel } from '../models/user.model';\r\nimport { environment } from '../../environments/environment';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { jwtDecode } from 'jwt-decode';\r\nimport { DecodeToken } from '../models/token/deoced-token.model';\r\nimport { ApplicationService } from './application.service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AuthService {\r\n baseUrl = environment.apiUrl;\r\n menuList!: any[];\r\n routeToMenuMap: { [key: string]: number } = {};\r\n private tokenValidated = false; // Flag to track token validation\r\n\r\n private _localUser: UserModel | null = null;\r\n public get localUser(): UserModel | null {\r\n return this._localUser;\r\n }\r\n public set localUser(v: UserModel) {\r\n this._localUser = v;\r\n }\r\n\r\n constructor(private http: HttpClient) {\r\n if (\r\n localStorage.getItem('auth_app_user') !== null &&\r\n localStorage.getItem('auth_app_user') !== undefined\r\n ) {\r\n this.localUser = JSON.parse(localStorage.getItem('auth_app_user')!);\r\n }\r\n\r\n // Fetch menu data on service initialization\r\n // this.getAllMenus().subscribe(\r\n // (menuData) => {\r\n // this.menuList = menuData;\r\n // console.log('Fetched Menu List:', this.menuList); // Logs the fetched menu data\r\n\r\n // this.routeToMenuMap = this.buildRouteToMenuMap(menuData);\r\n // //log('Route to Menu Map:', this.routeToMenuMap); // Logs the generated routeToMenuMap\r\n // },\r\n // (error) => {\r\n // console.error('Error fetching menu data:', error); // Handles any errors during API call\r\n // }\r\n // );\r\n }\r\n\r\n logIn(userModel: UserModel): Observable {\r\n return this.http\r\n .post(`${this.baseUrl}/api/User/Login/`, userModel)\r\n .pipe(map((response) => response));\r\n }\r\n\r\n isAuthenticated(): Observable {\r\n return of(\r\n localStorage.getItem('auth_app_token') !== null &&\r\n localStorage.getItem('auth_app_user') !== null\r\n );\r\n }\r\n\r\n setLocalUser(jwtToken: string): void {\r\n // Decode the JWT token\r\n // localStorage.removeItem('auth_app_token');\r\n localStorage.setItem('auth_app_token', jwtToken);\r\n\r\n // let decoded = this.decodeToken(jwtToken);\r\n let decoded: any = jwtDecode(jwtToken);\r\n // console.log('DECODED TOKEN ============> ', decoded);\r\n let entityId = Number.parseInt(decoded.EntityId);\r\n let userId = Number.parseInt(decoded.UserId);\r\n let employeeId = Number.parseInt(decoded.employeeId);\r\n let isOwner = decoded.IsOwner == 'False' ? false : true;\r\n\r\n let outletIds: number[] = [];\r\n if (decoded.outletIds != undefined && decoded.outletIds != null) {\r\n outletIds = decoded.outletIds\r\n .split(',')\r\n .map((a: any) => Number(a.trim()));\r\n }\r\n\r\n let menuIds: number[] = [];\r\n if (decoded.menuIds != undefined && decoded.menuIds != null) {\r\n menuIds = decoded.menuIds.split(',').map((a: any) => Number(a.trim()));\r\n }\r\n // Log the payload data\r\n this._localUser = {\r\n userId: userId,\r\n password: '',\r\n firstName: decoded.firstName,\r\n lastName: decoded.lastName,\r\n userName: decoded.unique_name,\r\n countryId: 0,\r\n phoneNumber: '',\r\n email: '',\r\n countryCode: '',\r\n entityIds: entityId,\r\n profPic: `${this.baseUrl}/images/${decoded.EntityLogoUrl}`,\r\n outletIds: outletIds,\r\n employeeId: employeeId,\r\n isOwner: isOwner,\r\n menuIds: menuIds,\r\n //userRoles, roleNames\r\n };\r\n\r\n localStorage.setItem('auth_app_user', JSON.stringify(this.localUser));\r\n }\r\n\r\n // buildRouteToMenuMap(menuList: any[]): { [key: string]: number } {\r\n // const routeToMenuMap: { [key: string]: number } = {};\r\n\r\n // // Map menu names (converted to lowercase or key-friendly strings) to menu IDs\r\n // menuList.forEach((menuItem) => {\r\n // if (menuItem.parentMenuName) {\r\n // const menuName = menuItem.parentMenuName\r\n // .replace(/\\s+/g, '')\r\n // .toLowerCase(); // Remove spaces and convert to lowercase\r\n // routeToMenuMap[menuName] = menuItem.parentMenuId;\r\n\r\n // // Log each mapping to ensure correctness\r\n // console.log(`Mapped ${menuName} to ID ${menuItem.parentMenuId}`);\r\n // }\r\n // });\r\n\r\n // return routeToMenuMap;\r\n // }\r\n\r\n // hasAccessToRoute(routePath: string | undefined): boolean {\r\n // if (!routePath || !this.localUser) {\r\n // return false;\r\n // }\r\n\r\n // // const routeToMenuMap: { [key: string]: number } = {\r\n // // branch: 2,\r\n // // addons: 9,\r\n // // };\r\n // // const requiredMenuId = routeToMenuMap[routePath];\r\n // const requiredMenuId =\r\n // this.routeToMenuMap[routePath.replace(/\\s+/g, '').toLowerCase()];\r\n\r\n // if (!requiredMenuId) {\r\n // return false;\r\n // }\r\n\r\n // return this.localUser.menuIds.includes(requiredMenuId);\r\n // }\r\n\r\n private decodeToken(token: string): DecodeToken {\r\n const payloadBase64 = token.split('.')[1];\r\n const payload = JSON.parse(atob(payloadBase64));\r\n return payload;\r\n }\r\n\r\n getAllMenus(): Observable {\r\n return this.http.get(`${this.baseUrl}/AppMenu/`);\r\n }\r\n\r\n //#region new Validate Token\r\n // Validate token API call\r\n validateToken(token: string): Observable {\r\n return this.http\r\n .post(`${this.baseUrl}/api/User/ValidateToken`, { token })\r\n .pipe(\r\n tap((response) => {\r\n if (response.success) {\r\n this.setTokenValidated(true); // Set validated flag on success\r\n }\r\n })\r\n );\r\n }\r\n\r\n // Set token validation flag\r\n setTokenValidated(isValid: boolean): void {\r\n this.tokenValidated = isValid;\r\n // You can also store this in sessionStorage or localStorage if needed\r\n sessionStorage.setItem('tokenValidated', JSON.stringify(isValid)); // Persist across page refresh\r\n }\r\n\r\n // Get the token validation status\r\n // unused\r\n isTokenValidated(): boolean {\r\n const token = localStorage.getItem('auth_app_token');\r\n return !!token; // Returns true if token exists, false otherwise\r\n /*\r\n const validated = sessionStorage.getItem('auth_app_token');\r\n return validated ? JSON.parse(validated) : this.tokenValidated;\r\n */\r\n }\r\n\r\n // unused\r\n isTokenValid(token: string): Observable {\r\n if (!token) {\r\n return of(false); // No token provided, so it's invalid\r\n }\r\n\r\n // API call to validate the token\r\n return this.http\r\n .post(`${this.baseUrl}/api/User/ValidateToken`, { token })\r\n .pipe(\r\n map((response: any) => response.isSuccess), // Assume API returns { isValid: true/false }\r\n catchError((error) => {\r\n console.error('Token validation failed:', error);\r\n return of(false)\r\n }) // Handle errors by considering token invalid\r\n );\r\n }\r\n\r\n getTokenExpiry(token: string): number | null {\r\n try {\r\n const payload = JSON.parse(atob(token.split('.')[1])); // Decode the JWT payload\r\n return payload.exp ? payload.exp * 1000 : null; // Convert expiry to milliseconds\r\n } catch (error) {\r\n console.error('Invalid token format', error);\r\n return null;\r\n }\r\n }\r\n //#endregion\r\n}\r\n"], "mappings": "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", "names": ["AuthService", "localUser", "_localUser", "v", "constructor", "http", "baseUrl", "environment", "apiUrl", "routeToMenuMap", "tokenValidated", "localStorage", "getItem", "undefined", "JSON", "parse", "logIn", "userModel", "post", "pipe", "map", "response", "isAuthenticated", "of", "setLocalUser", "jwtToken", "setItem", "decoded", "jwtDecode", "entityId", "Number", "parseInt", "EntityId", "userId", "UserId", "employeeId", "isOwner", "IsOwner", "outletIds", "split", "a", "trim", "menuIds", "password", "firstName", "lastName", "userName", "unique_name", "countryId", "phoneNumber", "email", "countryCode", "entityIds", "profPic", "EntityLogoUrl", "stringify", "decodeToken", "token", "payloadBase64", "atob", "getAllMenus", "get", "validateToken", "tap", "success", "setTokenValidated", "isValid", "sessionStorage", "isTokenValidated", "isTokenValid", "isSuccess", "catchError", "error", "console", "getTokenExpiry", "payload", "exp", "\u0275\u0275inject", "HttpClient", "factory", "\u0275fac", "providedIn", "_AuthService"] }