@medha-analytics/medhasso-auth 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +297 -0
- package/fesm2022/medha-analytics-medhasso-auth.mjs +813 -0
- package/fesm2022/medha-analytics-medhasso-auth.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/guards/medhasso-auth.guard.d.ts +48 -0
- package/lib/interceptors/medhasso-auth.interceptor.d.ts +38 -0
- package/lib/interfaces/medhasso-config.interface.d.ts +120 -0
- package/lib/medhasso-auth.module.d.ts +24 -0
- package/lib/services/medhasso-auth.service.d.ts +96 -0
- package/lib/services/token-management.service.d.ts +113 -0
- package/lib/tokens/medhasso-config.token.d.ts +3 -0
- package/package.json +44 -0
- package/public-api.d.ts +7 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"medha-analytics-medhasso-auth.mjs","sources":["../../../projects/medhasso-auth/src/lib/tokens/medhasso-config.token.ts","../../../projects/medhasso-auth/src/lib/services/token-management.service.ts","../../../projects/medhasso-auth/src/lib/interceptors/medhasso-auth.interceptor.ts","../../../projects/medhasso-auth/src/lib/services/medhasso-auth.service.ts","../../../projects/medhasso-auth/src/lib/medhasso-auth.module.ts","../../../projects/medhasso-auth/src/lib/guards/medhasso-auth.guard.ts","../../../projects/medhasso-auth/src/public-api.ts","../../../projects/medhasso-auth/src/medha-analytics-medhasso-auth.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { MedHassoConfig } from '../interfaces/medhasso-config.interface';\n\nexport const MEDHASSO_CONFIG = new InjectionToken<MedHassoConfig>('MEDHASSO_CONFIG');","import { Injectable, Inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { BehaviorSubject, Observable, throwError, timer } from 'rxjs';\nimport { catchError, tap } from 'rxjs/operators';\nimport { MedHassoConfig, TokenConfig, TokenInfo, MedHassoUser } from '../interfaces/medhasso-config.interface';\nimport { MEDHASSO_CONFIG } from '../tokens/medhasso-config.token';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TokenManagementService {\n private refreshTokenInterval: any;\n private tokenSubject = new BehaviorSubject<TokenInfo | null>(null);\n private userSubject = new BehaviorSubject<MedHassoUser | null>(null);\n\n public token$ = this.tokenSubject.asObservable();\n public user$ = this.userSubject.asObservable();\n\n private get tokenConfig(): TokenConfig {\n return this.config.tokenConfig || {};\n }\n\n private get storageType(): 'localStorage' | 'sessionStorage' {\n return this.tokenConfig.storageType || 'localStorage';\n }\n\n private get idTokenKey(): string {\n return this.tokenConfig.idTokenKey || 'idToken';\n }\n\n private get refreshTokenKey(): string {\n return this.tokenConfig.refreshTokenKey || 'refreshToken';\n }\n\n private get refreshBeforeExpiryMinutes(): number {\n return this.tokenConfig.refreshBeforeExpiryMinutes || 5;\n }\n\n private get autoRefresh(): boolean {\n return this.tokenConfig.autoRefresh !== false;\n }\n\n constructor(\n @Inject(MEDHASSO_CONFIG) private config: MedHassoConfig,\n private http: HttpClient\n ) {\n this.initializeFromStorage();\n }\n\n /**\n * Initialize token information from storage\n */\n private initializeFromStorage(): void {\n const token = this.getStoredToken();\n if (token) {\n const tokenInfo = this.createTokenInfo(token);\n this.tokenSubject.next(tokenInfo);\n this.userSubject.next(this.extractUserFromToken(token));\n \n if (this.autoRefresh && !tokenInfo.isExpired) {\n this.setTokenRefreshInterval(tokenInfo);\n }\n }\n }\n\n /**\n * Get stored token from configured storage\n */\n private getStoredToken(): string | null {\n const storage = this.storageType === 'localStorage' ? localStorage : sessionStorage;\n return storage.getItem(this.idTokenKey);\n }\n\n /**\n * Get stored refresh token from configured storage\n */\n private getStoredRefreshToken(): string | null {\n const storage = this.storageType === 'localStorage' ? localStorage : sessionStorage;\n return storage.getItem(this.refreshTokenKey);\n }\n\n /**\n * Store tokens in configured storage\n */\n private storeTokens(idToken: string, refreshToken?: string): void {\n const storage = this.storageType === 'localStorage' ? localStorage : sessionStorage;\n storage.setItem(this.idTokenKey, idToken);\n if (refreshToken) {\n storage.setItem(this.refreshTokenKey, refreshToken);\n }\n }\n\n /**\n * Clear stored tokens\n */\n private clearStoredTokens(): void {\n const storage = this.storageType === 'localStorage' ? localStorage : sessionStorage;\n storage.removeItem(this.idTokenKey);\n storage.removeItem(this.refreshTokenKey);\n }\n\n /**\n * Create token info object from JWT token\n */\n private createTokenInfo(token: string): TokenInfo {\n const payload = this.decodeJwt(token);\n const expiresAt = payload.exp * 1000; // Convert to milliseconds\n const now = Date.now();\n const refreshWindow = this.refreshBeforeExpiryMinutes * 60 * 1000;\n\n return {\n token,\n payload,\n expiresAt,\n isExpired: now >= expiresAt,\n needsRefresh: now >= (expiresAt - refreshWindow)\n };\n }\n\n /**\n * Decode JWT token payload\n */\n private decodeJwt(token: string): any {\n try {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw new Error('Invalid JWT token format');\n }\n const payload = JSON.parse(atob(parts[1].replace(/-/g, '+').replace(/_/g, '/')));\n return payload;\n } catch (error) {\n console.error('Error decoding JWT token:', error);\n throw new Error('Invalid JWT token');\n }\n }\n\n /**\n * Extract user information from JWT token\n */\n private extractUserFromToken(token: string): MedHassoUser {\n const payload = this.decodeJwt(token);\n return {\n upn: payload.upn || payload.email,\n name: payload.name,\n roles: payload.roles || [],\n ...payload\n };\n }\n\n /**\n * Set up automatic token refresh interval\n */\n private setTokenRefreshInterval(tokenInfo: TokenInfo): void {\n this.clearTokenRefreshInterval();\n\n if (!this.autoRefresh || tokenInfo.isExpired) {\n return;\n }\n\n const remainingTime = tokenInfo.expiresAt - Date.now();\n const refreshTime = remainingTime - (this.refreshBeforeExpiryMinutes * 60 * 1000);\n\n if (refreshTime > 0) {\n this.refreshTokenInterval = timer(refreshTime).subscribe(() => {\n this.refreshToken().subscribe();\n });\n } else {\n // Token needs immediate refresh\n this.refreshToken().subscribe();\n }\n }\n\n /**\n * Clear token refresh interval\n */\n private clearTokenRefreshInterval(): void {\n if (this.refreshTokenInterval) {\n this.refreshTokenInterval.unsubscribe();\n this.refreshTokenInterval = null;\n }\n }\n\n /**\n * Get current token information\n */\n getTokenInfo(): TokenInfo | null {\n return this.tokenSubject.value;\n }\n\n /**\n * Get current user information\n */\n getCurrentUser(): MedHassoUser | null {\n return this.userSubject.value;\n }\n\n /**\n * Check if user is authenticated\n */\n isAuthenticated(): boolean {\n const tokenInfo = this.getTokenInfo();\n return tokenInfo !== null && !tokenInfo.isExpired;\n }\n\n /**\n * Check if user has specific role\n */\n hasRole(role: string): boolean {\n const user = this.getCurrentUser();\n return user?.roles?.includes(role) || false;\n }\n\n /**\n * Check if user is admin\n */\n isAdmin(): boolean {\n return this.hasRole('admin') || this.hasRole('administrator');\n }\n\n /**\n * Set tokens (typically called after successful authentication)\n */\n setTokens(idToken: string, refreshToken?: string): void {\n this.storeTokens(idToken, refreshToken);\n const tokenInfo = this.createTokenInfo(idToken);\n const user = this.extractUserFromToken(idToken);\n\n this.tokenSubject.next(tokenInfo);\n this.userSubject.next(user);\n\n if (this.autoRefresh) {\n this.setTokenRefreshInterval(tokenInfo);\n }\n }\n\n /**\n * Refresh the current token\n */\n refreshToken(): Observable<any> {\n const refreshToken = this.getStoredRefreshToken();\n \n if (!refreshToken) {\n return throwError(() => new Error('No refresh token available'));\n }\n\n return this.http.post(`${this.config.refreshUrl}/api/refresh-token`, { refreshToken })\n .pipe(\n tap((response: any) => {\n if (response.id_token) {\n this.setTokens(response.id_token, response.refresh_token);\n }\n }),\n catchError(error => {\n console.error('Token refresh failed:', error);\n this.logout();\n return throwError(() => error);\n })\n );\n }\n\n /**\n * Logout user and clear all tokens\n */\n logout(): void {\n this.clearTokenRefreshInterval();\n this.clearStoredTokens();\n this.tokenSubject.next(null);\n this.userSubject.next(null);\n }\n\n /**\n * Redirect to MedHasso SSO for authentication\n */\n redirectToSSO(returnUrl?: string): void {\n const currentUrl = returnUrl || window.location.href;\n const ssoUrl = `${this.config.ssoUrl}?url=${encodeURIComponent(currentUrl)}&applicationName=${encodeURIComponent(this.config.applicationName)}`;\n window.location.href = ssoUrl;\n }\n\n /**\n * Handle authentication callback (typically from SSO redirect)\n */\n handleAuthCallback(params: { idToken?: string; refreshToken?: string }): boolean {\n if (params.idToken) {\n this.setTokens(params.idToken, params.refreshToken);\n return true;\n }\n return false;\n }\n\n /**\n * Get authorization header value\n */\n getAuthorizationHeader(): string | null {\n const tokenInfo = this.getTokenInfo();\n if (tokenInfo && !tokenInfo.isExpired) {\n const prefix = this.config.interceptorConfig?.authHeaderPrefix || 'Bearer';\n return `${prefix} ${tokenInfo.token}`;\n }\n return null;\n }\n\n /**\n * Cleanup on service destruction\n */\n ngOnDestroy(): void {\n this.clearTokenRefreshInterval();\n }\n}","import { Injectable, Inject } from '@angular/core';\nimport { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpErrorResponse } from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, switchMap } from 'rxjs/operators';\nimport { MedHassoConfig } from '../interfaces/medhasso-config.interface';\nimport { MEDHASSO_CONFIG } from '../tokens/medhasso-config.token';\nimport { TokenManagementService } from '../services/token-management.service';\n\n@Injectable()\nexport class MedHassoAuthInterceptor implements HttpInterceptor {\n\n constructor(\n @Inject(MEDHASSO_CONFIG) private config: MedHassoConfig,\n private tokenService: TokenManagementService\n ) {}\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n // Check if interceptor is enabled\n if (this.config.interceptorConfig?.enabled === false) {\n return next.handle(request);\n }\n\n // Check if request should be excluded\n if (this.shouldExcludeRequest(request)) {\n return next.handle(request);\n }\n\n // Check if request should be included (if includeUrls is specified)\n if (!this.shouldIncludeRequest(request)) {\n return next.handle(request);\n }\n\n // Add authorization header\n const modifiedRequest = this.addAuthorizationHeader(request);\n\n return next.handle(modifiedRequest).pipe(\n catchError((error: HttpErrorResponse) => {\n // Handle 401 Unauthorized errors\n if (error.status === 401) {\n return this.handle401Error(request, next);\n }\n \n // Handle 403 Forbidden errors\n if (error.status === 403) {\n console.warn('MedHasso Auth: Access forbidden (403)', error);\n }\n\n return throwError(() => error);\n })\n );\n }\n\n /**\n * Check if request URL should be excluded from authentication\n */\n private shouldExcludeRequest(request: HttpRequest<any>): boolean {\n const excludeUrls = this.config.interceptorConfig?.excludeUrls || [];\n return excludeUrls.some(url => this.matchesUrl(request.url, url));\n }\n\n /**\n * Check if request URL should be included for authentication\n * If includeUrls is not specified, all requests are included (unless excluded)\n */\n private shouldIncludeRequest(request: HttpRequest<any>): boolean {\n const includeUrls = this.config.interceptorConfig?.includeUrls;\n \n // If no includeUrls specified, include all requests\n if (!includeUrls || includeUrls.length === 0) {\n return true;\n }\n\n // If includeUrls specified, only include matching requests\n return includeUrls.some(url => this.matchesUrl(request.url, url));\n }\n\n /**\n * Check if request URL matches the pattern\n */\n private matchesUrl(requestUrl: string, pattern: string): boolean {\n // Support wildcards and exact matches\n if (pattern.includes('*')) {\n const regex = new RegExp(pattern.replace(/\\*/g, '.*'));\n return regex.test(requestUrl);\n }\n \n return requestUrl.includes(pattern);\n }\n\n /**\n * Add authorization header to request\n */\n private addAuthorizationHeader(request: HttpRequest<any>): HttpRequest<any> {\n const authHeader = this.tokenService.getAuthorizationHeader();\n \n if (!authHeader) {\n return request;\n }\n\n return request.clone({\n setHeaders: {\n Authorization: authHeader\n }\n });\n }\n\n /**\n * Handle 401 Unauthorized errors by attempting token refresh\n */\n private handle401Error(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n const tokenInfo = this.tokenService.getTokenInfo();\n \n // If no token or token is expired, redirect to SSO\n if (!tokenInfo || tokenInfo.isExpired) {\n this.redirectToSSO();\n return throwError(() => new Error('Authentication required'));\n }\n\n // If token exists but request failed, try to refresh\n return this.tokenService.refreshToken().pipe(\n switchMap(() => {\n // Retry the original request with new token\n const retryRequest = this.addAuthorizationHeader(request);\n return next.handle(retryRequest);\n }),\n catchError((refreshError) => {\n // If refresh fails, redirect to SSO\n console.error('MedHasso Auth: Token refresh failed', refreshError);\n this.redirectToSSO();\n return throwError(() => refreshError);\n })\n );\n }\n\n /**\n * Redirect to SSO for authentication\n */\n private redirectToSSO(): void {\n // Add a small delay to prevent multiple redirects\n setTimeout(() => {\n this.tokenService.redirectToSSO();\n }, 100);\n }\n}","import { Injectable, Inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\nimport { MedHassoConfig, MedHassoUser } from '../interfaces/medhasso-config.interface';\nimport { MEDHASSO_CONFIG } from '../tokens/medhasso-config.token';\nimport { TokenManagementService } from './token-management.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MedHassoAuthService {\n\n constructor(\n @Inject(MEDHASSO_CONFIG) private config: MedHassoConfig,\n private tokenService: TokenManagementService,\n private http: HttpClient\n ) {}\n\n /**\n * Get current authentication status\n */\n isAuthenticated(): boolean {\n return this.tokenService.isAuthenticated();\n }\n\n /**\n * Get current user information\n */\n getCurrentUser(): MedHassoUser | null {\n return this.tokenService.getCurrentUser();\n }\n\n /**\n * Get current user as observable\n */\n getCurrentUser$(): Observable<MedHassoUser | null> {\n return this.tokenService.user$;\n }\n\n /**\n * Check if user has specific role\n */\n hasRole(role: string): boolean {\n return this.tokenService.hasRole(role);\n }\n\n /**\n * Check if user has any of the specified roles\n */\n hasAnyRole(roles: string[]): boolean {\n return roles.some(role => this.tokenService.hasRole(role));\n }\n\n /**\n * Check if user has all of the specified roles\n */\n hasAllRoles(roles: string[]): boolean {\n return roles.every(role => this.tokenService.hasRole(role));\n }\n\n /**\n * Check if user is admin\n */\n isAdmin(): boolean {\n return this.tokenService.isAdmin();\n }\n\n /**\n * Login user (redirect to SSO)\n */\n login(returnUrl?: string): void {\n this.tokenService.redirectToSSO(returnUrl);\n }\n\n /**\n * Logout user\n */\n logout(): void {\n this.tokenService.logout();\n }\n\n /**\n * Refresh authentication token\n */\n refreshToken(): Observable<any> {\n return this.tokenService.refreshToken();\n }\n\n /**\n * Check access permissions for a simple key (if applicable)\n */\n checkAccess(simpleKey: string, backendUrl?: string): Observable<any> {\n const url = backendUrl || this.getBackendUrl();\n if (!url) {\n return of(null);\n }\n\n return this.http.get(`${url}/auth/guard?simple_key=${simpleKey}`)\n .pipe(\n catchError(error => {\n console.error('Access check failed:', error);\n return of(null);\n })\n );\n }\n\n /**\n * Check if user is admin via backend API (if applicable)\n */\n checkIsAdmin(backendUrl?: string): Observable<boolean> {\n const user = this.getCurrentUser();\n const url = backendUrl || this.getBackendUrl();\n \n if (!user?.upn || !url) {\n return of(false);\n }\n\n return this.http.get(`${url}/isAdmin?email=${user.upn}`)\n .pipe(\n map((response: any) => !!response),\n catchError(() => of(false))\n );\n }\n\n /**\n * Get backend URL from config (helper method)\n */\n private getBackendUrl(): string | null {\n // This would need to be configured or passed in\n // For now, return null as it's application-specific\n return null;\n }\n\n /**\n * Get token information\n */\n getTokenInfo() {\n return this.tokenService.getTokenInfo();\n }\n\n /**\n * Get token as observable\n */\n getToken$() {\n return this.tokenService.token$;\n }\n\n /**\n * Handle authentication callback\n */\n handleAuthCallback(params: { idToken?: string; refreshToken?: string }): boolean {\n return this.tokenService.handleAuthCallback(params);\n }\n\n /**\n * Get user email\n */\n getUserEmail(): string | null {\n return this.getCurrentUser()?.upn || null;\n }\n\n /**\n * Get user display name\n */\n getUserDisplayName(): string | null {\n return this.getCurrentUser()?.name || null;\n }\n\n /**\n * Get all user roles\n */\n getUserRoles(): string[] {\n return this.getCurrentUser()?.roles || [];\n }\n\n /**\n * Get authorization header value\n */\n getAuthorizationHeader(): string | null {\n return this.tokenService.getAuthorizationHeader();\n }\n}","import { NgModule, ModuleWithProviders, Provider } from '@angular/core';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { MedHassoConfig } from './interfaces/medhasso-config.interface';\nimport { MEDHASSO_CONFIG } from './tokens/medhasso-config.token';\nimport { MedHassoAuthInterceptor } from './interceptors/medhasso-auth.interceptor';\nimport { TokenManagementService } from './services/token-management.service';\nimport { MedHassoAuthService } from './services/medhasso-auth.service';\n\n@NgModule({\n declarations: [],\n imports: [],\n exports: []\n})\nexport class MedHassoAuthModule {\n \n /**\n * Configure the MedHasso authentication module with required settings\n */\n static forRoot(config: MedHassoConfig): ModuleWithProviders<MedHassoAuthModule> {\n return {\n ngModule: MedHassoAuthModule,\n providers: [\n {\n provide: MEDHASSO_CONFIG,\n useValue: this.mergeWithDefaults(config)\n },\n TokenManagementService,\n MedHassoAuthService,\n {\n provide: HTTP_INTERCEPTORS,\n useClass: MedHassoAuthInterceptor,\n multi: true\n }\n ]\n };\n }\n\n /**\n * Configure the MedHasso authentication module for feature modules\n */\n static forChild(): ModuleWithProviders<MedHassoAuthModule> {\n return {\n ngModule: MedHassoAuthModule,\n providers: []\n };\n }\n\n /**\n * Provide MedHasso authentication with standalone components\n */\n static forStandalone(config: MedHassoConfig): Provider[] {\n return [\n {\n provide: MEDHASSO_CONFIG,\n useValue: this.mergeWithDefaults(config)\n },\n TokenManagementService,\n MedHassoAuthService,\n {\n provide: HTTP_INTERCEPTORS,\n useClass: MedHassoAuthInterceptor,\n multi: true\n }\n ];\n }\n\n /**\n * Merge user configuration with sensible defaults\n */\n private static mergeWithDefaults(config: MedHassoConfig): MedHassoConfig {\n const defaultConfig: Partial<MedHassoConfig> = {\n tokenConfig: {\n storageType: 'localStorage',\n idTokenKey: 'idToken',\n refreshTokenKey: 'refreshToken',\n refreshBeforeExpiryMinutes: 5,\n autoRefresh: true,\n ...config.tokenConfig\n },\n interceptorConfig: {\n enabled: true,\n authHeaderPrefix: 'Bearer',\n excludeUrls: [],\n includeUrls: [],\n ...config.interceptorConfig\n },\n securityConfig: {\n httpsOnly: true,\n secureCookies: true,\n additionalCspSources: [],\n ...config.securityConfig\n }\n };\n\n return {\n ...config,\n ...defaultConfig,\n tokenConfig: {\n ...defaultConfig.tokenConfig,\n ...config.tokenConfig\n },\n interceptorConfig: {\n ...defaultConfig.interceptorConfig,\n ...config.interceptorConfig\n },\n securityConfig: {\n ...defaultConfig.securityConfig,\n ...config.securityConfig\n }\n };\n }\n}","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, CanActivateChild, Router, UrlTree } from '@angular/router';\nimport { Observable, of } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\nimport { TokenManagementService } from '../services/token-management.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MedHassoAuthGuard implements CanActivate, CanActivateChild {\n\n constructor(\n private tokenService: TokenManagementService,\n private router: Router\n ) {}\n\n canActivate(route: ActivatedRouteSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n return this.checkAuthentication(route);\n }\n\n canActivateChild(childRoute: ActivatedRouteSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n return this.checkAuthentication(childRoute);\n }\n\n private checkAuthentication(route: ActivatedRouteSnapshot): Observable<boolean | UrlTree> {\n // Check for authentication callback parameters\n if (this.handleAuthCallback(route)) {\n return of(true);\n }\n\n // Check if user is already authenticated\n if (this.tokenService.isAuthenticated()) {\n return this.refreshTokenIfNeeded().pipe(\n map(() => true),\n catchError(() => {\n this.tokenService.redirectToSSO();\n return of(false);\n })\n );\n }\n\n // Not authenticated, redirect to SSO\n this.tokenService.redirectToSSO();\n return of(false);\n }\n\n /**\n * Handle authentication callback from MedHasso SSO\n */\n private handleAuthCallback(route: ActivatedRouteSnapshot): boolean {\n const queryParams = route.queryParams;\n \n // Check for AIRO redirect flow\n if (queryParams['redirectapp'] === 'airo' && queryParams['idToken']) {\n return this.tokenService.handleAuthCallback({\n idToken: queryParams['idToken'],\n refreshToken: queryParams['refreshToken']\n });\n }\n\n // Check for standard authentication callback\n if (queryParams['idToken'] || queryParams['token']) {\n return this.tokenService.handleAuthCallback({\n idToken: queryParams['idToken'] || queryParams['token'],\n refreshToken: queryParams['refreshToken']\n });\n }\n\n return false;\n }\n\n /**\n * Refresh token if needed\n */\n private refreshTokenIfNeeded(): Observable<any> {\n const tokenInfo = this.tokenService.getTokenInfo();\n \n if (tokenInfo?.needsRefresh) {\n return this.tokenService.refreshToken();\n }\n\n return of(null);\n }\n}\n\n/**\n * Role-based authentication guard\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class MedHassoRoleGuard implements CanActivate, CanActivateChild {\n\n constructor(\n private tokenService: TokenManagementService,\n private router: Router\n ) {}\n\n canActivate(route: ActivatedRouteSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n return this.checkRole(route);\n }\n\n canActivateChild(childRoute: ActivatedRouteSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n return this.checkRole(childRoute);\n }\n\n private checkRole(route: ActivatedRouteSnapshot): boolean | UrlTree {\n const requiredRoles = route.data['roles'] as string[];\n const requiredRole = route.data['role'] as string;\n\n if (!this.tokenService.isAuthenticated()) {\n this.tokenService.redirectToSSO();\n return false;\n }\n\n // Check multiple roles (OR condition)\n if (requiredRoles && requiredRoles.length > 0) {\n const hasAnyRole = requiredRoles.some(role => this.tokenService.hasRole(role));\n if (!hasAnyRole) {\n return this.router.createUrlTree(['/unauthorized']);\n }\n }\n\n // Check single role\n if (requiredRole && !this.tokenService.hasRole(requiredRole)) {\n return this.router.createUrlTree(['/unauthorized']);\n }\n\n return true;\n }\n}\n\n/**\n * Admin-only authentication guard\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class MedHassoAdminGuard implements CanActivate, CanActivateChild {\n\n constructor(\n private tokenService: TokenManagementService,\n private router: Router\n ) {}\n\n canActivate(): boolean | UrlTree {\n return this.checkAdmin();\n }\n\n canActivateChild(): boolean | UrlTree {\n return this.checkAdmin();\n }\n\n private checkAdmin(): boolean | UrlTree {\n if (!this.tokenService.isAuthenticated()) {\n this.tokenService.redirectToSSO();\n return false;\n }\n\n if (!this.tokenService.isAdmin()) {\n return this.router.createUrlTree(['/unauthorized']);\n }\n\n return true;\n }\n}","/*\n * Public API Surface of medhasso-auth\n */\n\n// Module\nexport * from './lib/medhasso-auth.module';\n\n// Services\nexport * from './lib/services/token-management.service';\nexport * from './lib/services/medhasso-auth.service';\n\n// Guards\nexport * from './lib/guards/medhasso-auth.guard';\n\n// Interceptors\nexport * from './lib/interceptors/medhasso-auth.interceptor';\n\n// Interfaces\nexport * from './lib/interfaces/medhasso-config.interface';\n\n// Tokens\nexport * from './lib/tokens/medhasso-config.token';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.TokenManagementService","i2"],"mappings":";;;;;;;;MAGa,eAAe,GAAG,IAAI,cAAc,CAAiB,iBAAiB;;MCOtE,sBAAsB,CAAA;AAQjC,IAAA,IAAY,WAAW,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE;;AAGtC,IAAA,IAAY,WAAW,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,IAAI,cAAc;;AAGvD,IAAA,IAAY,UAAU,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,IAAI,SAAS;;AAGjD,IAAA,IAAY,eAAe,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,IAAI,cAAc;;AAG3D,IAAA,IAAY,0BAA0B,GAAA;AACpC,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,0BAA0B,IAAI,CAAC;;AAGzD,IAAA,IAAY,WAAW,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,KAAK,KAAK;;IAG/C,WACmC,CAAA,MAAsB,EAC/C,IAAgB,EAAA;QADS,IAAM,CAAA,MAAA,GAAN,MAAM;QAC/B,IAAI,CAAA,IAAA,GAAJ,IAAI;AAhCN,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAmB,IAAI,CAAC;AAC1D,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAsB,IAAI,CAAC;AAE7D,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AACzC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;QA8B5C,IAAI,CAAC,qBAAqB,EAAE;;AAG9B;;AAEG;IACK,qBAAqB,GAAA;AAC3B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE;QACnC,IAAI,KAAK,EAAE;YACT,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAC7C,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AACjC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAEvD,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;AAC5C,gBAAA,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC;;;;AAK7C;;AAEG;IACK,cAAc,GAAA;AACpB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,KAAK,cAAc,GAAG,YAAY,GAAG,cAAc;QACnF,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;;AAGzC;;AAEG;IACK,qBAAqB,GAAA;AAC3B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,KAAK,cAAc,GAAG,YAAY,GAAG,cAAc;QACnF,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC;;AAG9C;;AAEG;IACK,WAAW,CAAC,OAAe,EAAE,YAAqB,EAAA;AACxD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,KAAK,cAAc,GAAG,YAAY,GAAG,cAAc;QACnF,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC;QACzC,IAAI,YAAY,EAAE;YAChB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC;;;AAIvD;;AAEG;IACK,iBAAiB,GAAA;AACvB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,KAAK,cAAc,GAAG,YAAY,GAAG,cAAc;AACnF,QAAA,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;AACnC,QAAA,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC;;AAG1C;;AAEG;AACK,IAAA,eAAe,CAAC,KAAa,EAAA;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACrC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;AACrC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QACtB,MAAM,aAAa,GAAG,IAAI,CAAC,0BAA0B,GAAG,EAAE,GAAG,IAAI;QAEjE,OAAO;YACL,KAAK;YACL,OAAO;YACP,SAAS;YACT,SAAS,EAAE,GAAG,IAAI,SAAS;AAC3B,YAAA,YAAY,EAAE,GAAG,KAAK,SAAS,GAAG,aAAa;SAChD;;AAGH;;AAEG;AACK,IAAA,SAAS,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI;YACF,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AAC9B,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,gBAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;;AAE7C,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;AAChF,YAAA,OAAO,OAAO;;QACd,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC;AACjD,YAAA,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC;;;AAIxC;;AAEG;AACK,IAAA,oBAAoB,CAAC,KAAa,EAAA;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACrC,OAAO;AACL,YAAA,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,KAAK;YACjC,IAAI,EAAE,OAAO,CAAC,IAAI;AAClB,YAAA,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;AAC1B,YAAA,GAAG;SACJ;;AAGH;;AAEG;AACK,IAAA,uBAAuB,CAAC,SAAoB,EAAA;QAClD,IAAI,CAAC,yBAAyB,EAAE;QAEhC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,SAAS,CAAC,SAAS,EAAE;YAC5C;;QAGF,MAAM,aAAa,GAAG,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;AACtD,QAAA,MAAM,WAAW,GAAG,aAAa,IAAI,IAAI,CAAC,0BAA0B,GAAG,EAAE,GAAG,IAAI,CAAC;AAEjF,QAAA,IAAI,WAAW,GAAG,CAAC,EAAE;YACnB,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,MAAK;AAC5D,gBAAA,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,EAAE;AACjC,aAAC,CAAC;;aACG;;AAEL,YAAA,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,EAAE;;;AAInC;;AAEG;IACK,yBAAyB,GAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE;AACvC,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;;;AAIpC;;AAEG;IACH,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK;;AAGhC;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK;;AAG/B;;AAEG;IACH,eAAe,GAAA;AACb,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE;QACrC,OAAO,SAAS,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS;;AAGnD;;AAEG;AACH,IAAA,OAAO,CAAC,IAAY,EAAA;AAClB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE;QAClC,OAAO,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK;;AAG7C;;AAEG;IACH,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;;AAG/D;;AAEG;IACH,SAAS,CAAC,OAAe,EAAE,YAAqB,EAAA;AAC9C,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;AAE/C,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAE3B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC;;;AAI3C;;AAEG;IACH,YAAY,GAAA;AACV,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,EAAE;QAEjD,IAAI,CAAC,YAAY,EAAE;YACjB,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;;AAGlE,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAG,EAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAA,kBAAA,CAAoB,EAAE,EAAE,YAAY,EAAE;AAClF,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAa,KAAI;AACpB,YAAA,IAAI,QAAQ,CAAC,QAAQ,EAAE;gBACrB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,aAAa,CAAC;;AAE7D,SAAC,CAAC,EACF,UAAU,CAAC,KAAK,IAAG;AACjB,YAAA,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC;YAC7C,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;SAC/B,CAAC,CACH;;AAGL;;AAEG;IACH,MAAM,GAAA;QACJ,IAAI,CAAC,yBAAyB,EAAE;QAChC,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;;AAG7B;;AAEG;AACH,IAAA,aAAa,CAAC,SAAkB,EAAA;QAC9B,MAAM,UAAU,GAAG,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI;QACpD,MAAM,MAAM,GAAG,CAAG,EAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAA,KAAA,EAAQ,kBAAkB,CAAC,UAAU,CAAC,CAAA,iBAAA,EAAoB,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA,CAAE;AAC/I,QAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,MAAM;;AAG/B;;AAEG;AACH,IAAA,kBAAkB,CAAC,MAAmD,EAAA;AACpE,QAAA,IAAI,MAAM,CAAC,OAAO,EAAE;YAClB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,YAAY,CAAC;AACnD,YAAA,OAAO,IAAI;;AAEb,QAAA,OAAO,KAAK;;AAGd;;AAEG;IACH,sBAAsB,GAAA;AACpB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE;AACrC,QAAA,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,gBAAgB,IAAI,QAAQ;AAC1E,YAAA,OAAO,GAAG,MAAM,CAAA,CAAA,EAAI,SAAS,CAAC,KAAK,EAAE;;AAEvC,QAAA,OAAO,IAAI;;AAGb;;AAEG;IACH,WAAW,GAAA;QACT,IAAI,CAAC,yBAAyB,EAAE;;AAxSvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,kBAiCvB,eAAe,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAjCd,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFrB,MAAM,EAAA,CAAA,CAAA;;4FAEP,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;0BAkCI,MAAM;2BAAC,eAAe;;;MClCd,uBAAuB,CAAA;IAElC,WACmC,CAAA,MAAsB,EAC/C,YAAoC,EAAA;QADX,IAAM,CAAA,MAAA,GAAN,MAAM;QAC/B,IAAY,CAAA,YAAA,GAAZ,YAAY;;IAGtB,SAAS,CAAC,OAAyB,EAAE,IAAiB,EAAA;;QAEpD,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,OAAO,KAAK,KAAK,EAAE;AACpD,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;;;AAI7B,QAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE;AACtC,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;;;QAI7B,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE;AACvC,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;;;QAI7B,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;AAE5D,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CACtC,UAAU,CAAC,CAAC,KAAwB,KAAI;;AAEtC,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE;gBACxB,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC;;;AAI3C,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE;AACxB,gBAAA,OAAO,CAAC,IAAI,CAAC,uCAAuC,EAAE,KAAK,CAAC;;AAG9D,YAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;SAC/B,CAAC,CACH;;AAGH;;AAEG;AACK,IAAA,oBAAoB,CAAC,OAAyB,EAAA;QACpD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,WAAW,IAAI,EAAE;AACpE,QAAA,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;;AAGnE;;;AAGG;AACK,IAAA,oBAAoB,CAAC,OAAyB,EAAA;QACpD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,WAAW;;QAG9D,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5C,YAAA,OAAO,IAAI;;;AAIb,QAAA,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;;AAGnE;;AAEG;IACK,UAAU,CAAC,UAAkB,EAAE,OAAe,EAAA;;AAEpD,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACzB,YAAA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACtD,YAAA,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;;AAG/B,QAAA,OAAO,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC;;AAGrC;;AAEG;AACK,IAAA,sBAAsB,CAAC,OAAyB,EAAA;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE;QAE7D,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAO,OAAO;;QAGhB,OAAO,OAAO,CAAC,KAAK,CAAC;AACnB,YAAA,UAAU,EAAE;AACV,gBAAA,aAAa,EAAE;AAChB;AACF,SAAA,CAAC;;AAGJ;;AAEG;IACK,cAAc,CAAC,OAAyB,EAAE,IAAiB,EAAA;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;;AAGlD,QAAA,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,EAAE;YACrC,IAAI,CAAC,aAAa,EAAE;YACpB,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;;;AAI/D,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,IAAI,CAC1C,SAAS,CAAC,MAAK;;YAEb,MAAM,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;AACzD,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;AAClC,SAAC,CAAC,EACF,UAAU,CAAC,CAAC,YAAY,KAAI;;AAE1B,YAAA,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,YAAY,CAAC;YAClE,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,OAAO,UAAU,CAAC,MAAM,YAAY,CAAC;SACtC,CAAC,CACH;;AAGH;;AAEG;IACK,aAAa,GAAA;;QAEnB,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;SAClC,EAAE,GAAG,CAAC;;AApIE,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,kBAGxB,eAAe,EAAA,EAAA,EAAA,KAAA,EAAAA,sBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAHd,uBAAuB,EAAA,CAAA,CAAA;;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC;;0BAII,MAAM;2BAAC,eAAe;;;MCDd,mBAAmB,CAAA;AAE9B,IAAA,WAAA,CACmC,MAAsB,EAC/C,YAAoC,EACpC,IAAgB,EAAA;QAFS,IAAM,CAAA,MAAA,GAAN,MAAM;QAC/B,IAAY,CAAA,YAAA,GAAZ,YAAY;QACZ,IAAI,CAAA,IAAA,GAAJ,IAAI;;AAGd;;AAEG;IACH,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE;;AAG5C;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE;;AAG3C;;AAEG;IACH,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK;;AAGhC;;AAEG;AACH,IAAA,OAAO,CAAC,IAAY,EAAA;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC;;AAGxC;;AAEG;AACH,IAAA,UAAU,CAAC,KAAe,EAAA;AACxB,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;AAG5D;;AAEG;AACH,IAAA,WAAW,CAAC,KAAe,EAAA;AACzB,QAAA,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;AAG7D;;AAEG;IACH,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;;AAGpC;;AAEG;AACH,IAAA,KAAK,CAAC,SAAkB,EAAA;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC;;AAG5C;;AAEG;IACH,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;;AAG5B;;AAEG;IACH,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;;AAGzC;;AAEG;IACH,WAAW,CAAC,SAAiB,EAAE,UAAmB,EAAA;QAChD,MAAM,GAAG,GAAG,UAAU,IAAI,IAAI,CAAC,aAAa,EAAE;QAC9C,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;;QAGjB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAG,GAAG,CAAA,uBAAA,EAA0B,SAAS,CAAA,CAAE;AAC7D,aAAA,IAAI,CACH,UAAU,CAAC,KAAK,IAAG;AACjB,YAAA,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC;AAC5C,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;SAChB,CAAC,CACH;;AAGL;;AAEG;AACH,IAAA,YAAY,CAAC,UAAmB,EAAA;AAC9B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE;QAClC,MAAM,GAAG,GAAG,UAAU,IAAI,IAAI,CAAC,aAAa,EAAE;QAE9C,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC;;AAGlB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAG,EAAA,GAAG,CAAkB,eAAA,EAAA,IAAI,CAAC,GAAG,EAAE;aACpD,IAAI,CACH,GAAG,CAAC,CAAC,QAAa,KAAK,CAAC,CAAC,QAAQ,CAAC,EAClC,UAAU,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAC5B;;AAGL;;AAEG;IACK,aAAa,GAAA;;;AAGnB,QAAA,OAAO,IAAI;;AAGb;;AAEG;IACH,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;;AAGzC;;AAEG;IACH,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM;;AAGjC;;AAEG;AACH,IAAA,kBAAkB,CAAC,MAAmD,EAAA;QACpE,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,MAAM,CAAC;;AAGrD;;AAEG;IACH,YAAY,GAAA;QACV,OAAO,IAAI,CAAC,cAAc,EAAE,EAAE,GAAG,IAAI,IAAI;;AAG3C;;AAEG;IACH,kBAAkB,GAAA;QAChB,OAAO,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,IAAI,IAAI;;AAG5C;;AAEG;IACH,YAAY,GAAA;QACV,OAAO,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,IAAI,EAAE;;AAG3C;;AAEG;IACH,sBAAsB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE;;AAzKxC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,kBAGpB,eAAe,EAAA,EAAA,EAAA,KAAA,EAAAA,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAHd,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA;;4FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;0BAII,MAAM;2BAAC,eAAe;;;MCDd,kBAAkB,CAAA;AAE7B;;AAEG;IACH,OAAO,OAAO,CAAC,MAAsB,EAAA;QACnC,OAAO;AACL,YAAA,QAAQ,EAAE,kBAAkB;AAC5B,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,OAAO,EAAE,eAAe;AACxB,oBAAA,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM;AACxC,iBAAA;gBACD,sBAAsB;gBACtB,mBAAmB;AACnB,gBAAA;AACE,oBAAA,OAAO,EAAE,iBAAiB;AAC1B,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,KAAK,EAAE;AACR;AACF;SACF;;AAGH;;AAEG;AACH,IAAA,OAAO,QAAQ,GAAA;QACb,OAAO;AACL,YAAA,QAAQ,EAAE,kBAAkB;AAC5B,YAAA,SAAS,EAAE;SACZ;;AAGH;;AAEG;IACH,OAAO,aAAa,CAAC,MAAsB,EAAA;QACzC,OAAO;AACL,YAAA;AACE,gBAAA,OAAO,EAAE,eAAe;AACxB,gBAAA,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM;AACxC,aAAA;YACD,sBAAsB;YACtB,mBAAmB;AACnB,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,QAAQ,EAAE,uBAAuB;AACjC,gBAAA,KAAK,EAAE;AACR;SACF;;AAGH;;AAEG;IACK,OAAO,iBAAiB,CAAC,MAAsB,EAAA;AACrD,QAAA,MAAM,aAAa,GAA4B;AAC7C,YAAA,WAAW,EAAE;AACX,gBAAA,WAAW,EAAE,cAAc;AAC3B,gBAAA,UAAU,EAAE,SAAS;AACrB,gBAAA,eAAe,EAAE,cAAc;AAC/B,gBAAA,0BAA0B,EAAE,CAAC;AAC7B,gBAAA,WAAW,EAAE,IAAI;gBACjB,GAAG,MAAM,CAAC;AACX,aAAA;AACD,YAAA,iBAAiB,EAAE;AACjB,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,gBAAgB,EAAE,QAAQ;AAC1B,gBAAA,WAAW,EAAE,EAAE;AACf,gBAAA,WAAW,EAAE,EAAE;gBACf,GAAG,MAAM,CAAC;AACX,aAAA;AACD,YAAA,cAAc,EAAE;AACd,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,oBAAoB,EAAE,EAAE;gBACxB,GAAG,MAAM,CAAC;AACX;SACF;QAED,OAAO;AACL,YAAA,GAAG,MAAM;AACT,YAAA,GAAG,aAAa;AAChB,YAAA,WAAW,EAAE;gBACX,GAAG,aAAa,CAAC,WAAW;gBAC5B,GAAG,MAAM,CAAC;AACX,aAAA;AACD,YAAA,iBAAiB,EAAE;gBACjB,GAAG,aAAa,CAAC,iBAAiB;gBAClC,GAAG,MAAM,CAAC;AACX,aAAA;AACD,YAAA,cAAc,EAAE;gBACd,GAAG,aAAa,CAAC,cAAc;gBAC/B,GAAG,MAAM,CAAC;AACX;SACF;;+GAhGQ,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAAlB,kBAAkB,EAAA,CAAA,CAAA;gHAAlB,kBAAkB,EAAA,CAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,OAAO,EAAE;AACV,iBAAA;;;MCHY,iBAAiB,CAAA;IAE5B,WACU,CAAA,YAAoC,EACpC,MAAc,EAAA;QADd,IAAY,CAAA,YAAA,GAAZ,YAAY;QACZ,IAAM,CAAA,MAAA,GAAN,MAAM;;AAGhB,IAAA,WAAW,CAAC,KAA6B,EAAA;AACvC,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;;AAGxC,IAAA,gBAAgB,CAAC,UAAkC,EAAA;AACjD,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;;AAGrC,IAAA,mBAAmB,CAAC,KAA6B,EAAA;;AAEvD,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;AAClC,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;;;AAIjB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE;AACvC,YAAA,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC,IAAI,CACrC,GAAG,CAAC,MAAM,IAAI,CAAC,EACf,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;AACjC,gBAAA,OAAO,EAAE,CAAC,KAAK,CAAC;aACjB,CAAC,CACH;;;AAIH,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;AACjC,QAAA,OAAO,EAAE,CAAC,KAAK,CAAC;;AAGlB;;AAEG;AACK,IAAA,kBAAkB,CAAC,KAA6B,EAAA;AACtD,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW;;AAGrC,QAAA,IAAI,WAAW,CAAC,aAAa,CAAC,KAAK,MAAM,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE;AACnE,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC;AAC1C,gBAAA,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC;AAC/B,gBAAA,YAAY,EAAE,WAAW,CAAC,cAAc;AACzC,aAAA,CAAC;;;QAIJ,IAAI,WAAW,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE;AAClD,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC;gBAC1C,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC;AACvD,gBAAA,YAAY,EAAE,WAAW,CAAC,cAAc;AACzC,aAAA,CAAC;;AAGJ,QAAA,OAAO,KAAK;;AAGd;;AAEG;IACK,oBAAoB,GAAA;QAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AAElD,QAAA,IAAI,SAAS,EAAE,YAAY,EAAE;AAC3B,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;;AAGzC,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC;;+GAxEN,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA,CAAA;;4FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;AA6ED;;AAEG;MAIU,iBAAiB,CAAA;IAE5B,WACU,CAAA,YAAoC,EACpC,MAAc,EAAA;QADd,IAAY,CAAA,YAAA,GAAZ,YAAY;QACZ,IAAM,CAAA,MAAA,GAAN,MAAM;;AAGhB,IAAA,WAAW,CAAC,KAA6B,EAAA;AACvC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;;AAG9B,IAAA,gBAAgB,CAAC,UAAkC,EAAA;AACjD,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;;AAG3B,IAAA,SAAS,CAAC,KAA6B,EAAA;QAC7C,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAa;QACrD,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAW;QAEjD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE;AACxC,YAAA,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;AACjC,YAAA,OAAO,KAAK;;;QAId,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7C,YAAA,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9E,IAAI,CAAC,UAAU,EAAE;gBACf,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC,CAAC;;;;AAKvD,QAAA,IAAI,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;YAC5D,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC,CAAC;;AAGrD,QAAA,OAAO,IAAI;;+GArCF,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA,CAAA;;4FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;AA0CD;;AAEG;MAIU,kBAAkB,CAAA;IAE7B,WACU,CAAA,YAAoC,EACpC,MAAc,EAAA;QADd,IAAY,CAAA,YAAA,GAAZ,YAAY;QACZ,IAAM,CAAA,MAAA,GAAN,MAAM;;IAGhB,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE;;IAG1B,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE;;IAGlB,UAAU,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE;AACxC,YAAA,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;AACjC,YAAA,OAAO,KAAK;;QAGd,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE;YAChC,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC,CAAC;;AAGrD,QAAA,OAAO,IAAI;;+GAzBF,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA,CAAA;;4FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACzID;;AAEG;AAEH;;ACJA;;AAEG;;;;"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ActivatedRouteSnapshot, CanActivate, CanActivateChild, Router, UrlTree } from '@angular/router';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { TokenManagementService } from '../services/token-management.service';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class MedHassoAuthGuard implements CanActivate, CanActivateChild {
|
|
6
|
+
private tokenService;
|
|
7
|
+
private router;
|
|
8
|
+
constructor(tokenService: TokenManagementService, router: Router);
|
|
9
|
+
canActivate(route: ActivatedRouteSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree;
|
|
10
|
+
canActivateChild(childRoute: ActivatedRouteSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree;
|
|
11
|
+
private checkAuthentication;
|
|
12
|
+
/**
|
|
13
|
+
* Handle authentication callback from MedHasso SSO
|
|
14
|
+
*/
|
|
15
|
+
private handleAuthCallback;
|
|
16
|
+
/**
|
|
17
|
+
* Refresh token if needed
|
|
18
|
+
*/
|
|
19
|
+
private refreshTokenIfNeeded;
|
|
20
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<MedHassoAuthGuard, never>;
|
|
21
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<MedHassoAuthGuard>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Role-based authentication guard
|
|
25
|
+
*/
|
|
26
|
+
export declare class MedHassoRoleGuard implements CanActivate, CanActivateChild {
|
|
27
|
+
private tokenService;
|
|
28
|
+
private router;
|
|
29
|
+
constructor(tokenService: TokenManagementService, router: Router);
|
|
30
|
+
canActivate(route: ActivatedRouteSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree;
|
|
31
|
+
canActivateChild(childRoute: ActivatedRouteSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree;
|
|
32
|
+
private checkRole;
|
|
33
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<MedHassoRoleGuard, never>;
|
|
34
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<MedHassoRoleGuard>;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Admin-only authentication guard
|
|
38
|
+
*/
|
|
39
|
+
export declare class MedHassoAdminGuard implements CanActivate, CanActivateChild {
|
|
40
|
+
private tokenService;
|
|
41
|
+
private router;
|
|
42
|
+
constructor(tokenService: TokenManagementService, router: Router);
|
|
43
|
+
canActivate(): boolean | UrlTree;
|
|
44
|
+
canActivateChild(): boolean | UrlTree;
|
|
45
|
+
private checkAdmin;
|
|
46
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<MedHassoAdminGuard, never>;
|
|
47
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<MedHassoAdminGuard>;
|
|
48
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { MedHassoConfig } from '../interfaces/medhasso-config.interface';
|
|
4
|
+
import { TokenManagementService } from '../services/token-management.service';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class MedHassoAuthInterceptor implements HttpInterceptor {
|
|
7
|
+
private config;
|
|
8
|
+
private tokenService;
|
|
9
|
+
constructor(config: MedHassoConfig, tokenService: TokenManagementService);
|
|
10
|
+
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>;
|
|
11
|
+
/**
|
|
12
|
+
* Check if request URL should be excluded from authentication
|
|
13
|
+
*/
|
|
14
|
+
private shouldExcludeRequest;
|
|
15
|
+
/**
|
|
16
|
+
* Check if request URL should be included for authentication
|
|
17
|
+
* If includeUrls is not specified, all requests are included (unless excluded)
|
|
18
|
+
*/
|
|
19
|
+
private shouldIncludeRequest;
|
|
20
|
+
/**
|
|
21
|
+
* Check if request URL matches the pattern
|
|
22
|
+
*/
|
|
23
|
+
private matchesUrl;
|
|
24
|
+
/**
|
|
25
|
+
* Add authorization header to request
|
|
26
|
+
*/
|
|
27
|
+
private addAuthorizationHeader;
|
|
28
|
+
/**
|
|
29
|
+
* Handle 401 Unauthorized errors by attempting token refresh
|
|
30
|
+
*/
|
|
31
|
+
private handle401Error;
|
|
32
|
+
/**
|
|
33
|
+
* Redirect to SSO for authentication
|
|
34
|
+
*/
|
|
35
|
+
private redirectToSSO;
|
|
36
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<MedHassoAuthInterceptor, never>;
|
|
37
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<MedHassoAuthInterceptor>;
|
|
38
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
export interface MedHassoConfig {
|
|
2
|
+
/**
|
|
3
|
+
* MedHasso SSO URL for authentication
|
|
4
|
+
*/
|
|
5
|
+
ssoUrl: string;
|
|
6
|
+
/**
|
|
7
|
+
* MedHasso refresh service URL for token refresh
|
|
8
|
+
*/
|
|
9
|
+
refreshUrl: string;
|
|
10
|
+
/**
|
|
11
|
+
* Application name to be sent to MedHasso
|
|
12
|
+
*/
|
|
13
|
+
applicationName: string;
|
|
14
|
+
/**
|
|
15
|
+
* Token configuration options
|
|
16
|
+
*/
|
|
17
|
+
tokenConfig?: TokenConfig;
|
|
18
|
+
/**
|
|
19
|
+
* Interceptor configuration options
|
|
20
|
+
*/
|
|
21
|
+
interceptorConfig?: InterceptorConfig;
|
|
22
|
+
/**
|
|
23
|
+
* Security configuration options
|
|
24
|
+
*/
|
|
25
|
+
securityConfig?: SecurityConfig;
|
|
26
|
+
}
|
|
27
|
+
export interface TokenConfig {
|
|
28
|
+
/**
|
|
29
|
+
* Storage type for tokens (default: 'localStorage')
|
|
30
|
+
*/
|
|
31
|
+
storageType?: 'localStorage' | 'sessionStorage';
|
|
32
|
+
/**
|
|
33
|
+
* Key name for storing ID token (default: 'idToken')
|
|
34
|
+
*/
|
|
35
|
+
idTokenKey?: string;
|
|
36
|
+
/**
|
|
37
|
+
* Key name for storing refresh token (default: 'refreshToken')
|
|
38
|
+
*/
|
|
39
|
+
refreshTokenKey?: string;
|
|
40
|
+
/**
|
|
41
|
+
* Minutes before token expiry to refresh (default: 5)
|
|
42
|
+
*/
|
|
43
|
+
refreshBeforeExpiryMinutes?: number;
|
|
44
|
+
/**
|
|
45
|
+
* Enable automatic token refresh (default: true)
|
|
46
|
+
*/
|
|
47
|
+
autoRefresh?: boolean;
|
|
48
|
+
}
|
|
49
|
+
export interface InterceptorConfig {
|
|
50
|
+
/**
|
|
51
|
+
* URLs that should NOT include the authorization header
|
|
52
|
+
*/
|
|
53
|
+
excludeUrls?: string[];
|
|
54
|
+
/**
|
|
55
|
+
* URLs that should include the authorization header (if specified, only these URLs will get the token)
|
|
56
|
+
*/
|
|
57
|
+
includeUrls?: string[];
|
|
58
|
+
/**
|
|
59
|
+
* Authorization header format (default: 'Bearer')
|
|
60
|
+
*/
|
|
61
|
+
authHeaderPrefix?: string;
|
|
62
|
+
/**
|
|
63
|
+
* Enable interceptor (default: true)
|
|
64
|
+
*/
|
|
65
|
+
enabled?: boolean;
|
|
66
|
+
}
|
|
67
|
+
export interface SecurityConfig {
|
|
68
|
+
/**
|
|
69
|
+
* Enable HTTPS only mode (default: true in production)
|
|
70
|
+
*/
|
|
71
|
+
httpsOnly?: boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Additional CSP sources to include
|
|
74
|
+
*/
|
|
75
|
+
additionalCspSources?: string[];
|
|
76
|
+
/**
|
|
77
|
+
* Enable secure cookie settings (default: true)
|
|
78
|
+
*/
|
|
79
|
+
secureCookies?: boolean;
|
|
80
|
+
}
|
|
81
|
+
export interface MedHassoUser {
|
|
82
|
+
/**
|
|
83
|
+
* User principal name (email)
|
|
84
|
+
*/
|
|
85
|
+
upn: string;
|
|
86
|
+
/**
|
|
87
|
+
* Display name
|
|
88
|
+
*/
|
|
89
|
+
name?: string;
|
|
90
|
+
/**
|
|
91
|
+
* User roles
|
|
92
|
+
*/
|
|
93
|
+
roles?: string[];
|
|
94
|
+
/**
|
|
95
|
+
* Additional user claims
|
|
96
|
+
*/
|
|
97
|
+
[key: string]: any;
|
|
98
|
+
}
|
|
99
|
+
export interface TokenInfo {
|
|
100
|
+
/**
|
|
101
|
+
* JWT token string
|
|
102
|
+
*/
|
|
103
|
+
token: string;
|
|
104
|
+
/**
|
|
105
|
+
* Decoded token payload
|
|
106
|
+
*/
|
|
107
|
+
payload: any;
|
|
108
|
+
/**
|
|
109
|
+
* Token expiration timestamp
|
|
110
|
+
*/
|
|
111
|
+
expiresAt: number;
|
|
112
|
+
/**
|
|
113
|
+
* Whether token is expired
|
|
114
|
+
*/
|
|
115
|
+
isExpired: boolean;
|
|
116
|
+
/**
|
|
117
|
+
* Whether token will expire soon (within refresh window)
|
|
118
|
+
*/
|
|
119
|
+
needsRefresh: boolean;
|
|
120
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ModuleWithProviders, Provider } from '@angular/core';
|
|
2
|
+
import { MedHassoConfig } from './interfaces/medhasso-config.interface';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class MedHassoAuthModule {
|
|
5
|
+
/**
|
|
6
|
+
* Configure the MedHasso authentication module with required settings
|
|
7
|
+
*/
|
|
8
|
+
static forRoot(config: MedHassoConfig): ModuleWithProviders<MedHassoAuthModule>;
|
|
9
|
+
/**
|
|
10
|
+
* Configure the MedHasso authentication module for feature modules
|
|
11
|
+
*/
|
|
12
|
+
static forChild(): ModuleWithProviders<MedHassoAuthModule>;
|
|
13
|
+
/**
|
|
14
|
+
* Provide MedHasso authentication with standalone components
|
|
15
|
+
*/
|
|
16
|
+
static forStandalone(config: MedHassoConfig): Provider[];
|
|
17
|
+
/**
|
|
18
|
+
* Merge user configuration with sensible defaults
|
|
19
|
+
*/
|
|
20
|
+
private static mergeWithDefaults;
|
|
21
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<MedHassoAuthModule, never>;
|
|
22
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<MedHassoAuthModule, never, never, never>;
|
|
23
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<MedHassoAuthModule>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { HttpClient } from '@angular/common/http';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { MedHassoConfig, MedHassoUser } from '../interfaces/medhasso-config.interface';
|
|
4
|
+
import { TokenManagementService } from './token-management.service';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class MedHassoAuthService {
|
|
7
|
+
private config;
|
|
8
|
+
private tokenService;
|
|
9
|
+
private http;
|
|
10
|
+
constructor(config: MedHassoConfig, tokenService: TokenManagementService, http: HttpClient);
|
|
11
|
+
/**
|
|
12
|
+
* Get current authentication status
|
|
13
|
+
*/
|
|
14
|
+
isAuthenticated(): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Get current user information
|
|
17
|
+
*/
|
|
18
|
+
getCurrentUser(): MedHassoUser | null;
|
|
19
|
+
/**
|
|
20
|
+
* Get current user as observable
|
|
21
|
+
*/
|
|
22
|
+
getCurrentUser$(): Observable<MedHassoUser | null>;
|
|
23
|
+
/**
|
|
24
|
+
* Check if user has specific role
|
|
25
|
+
*/
|
|
26
|
+
hasRole(role: string): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Check if user has any of the specified roles
|
|
29
|
+
*/
|
|
30
|
+
hasAnyRole(roles: string[]): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Check if user has all of the specified roles
|
|
33
|
+
*/
|
|
34
|
+
hasAllRoles(roles: string[]): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Check if user is admin
|
|
37
|
+
*/
|
|
38
|
+
isAdmin(): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Login user (redirect to SSO)
|
|
41
|
+
*/
|
|
42
|
+
login(returnUrl?: string): void;
|
|
43
|
+
/**
|
|
44
|
+
* Logout user
|
|
45
|
+
*/
|
|
46
|
+
logout(): void;
|
|
47
|
+
/**
|
|
48
|
+
* Refresh authentication token
|
|
49
|
+
*/
|
|
50
|
+
refreshToken(): Observable<any>;
|
|
51
|
+
/**
|
|
52
|
+
* Check access permissions for a simple key (if applicable)
|
|
53
|
+
*/
|
|
54
|
+
checkAccess(simpleKey: string, backendUrl?: string): Observable<any>;
|
|
55
|
+
/**
|
|
56
|
+
* Check if user is admin via backend API (if applicable)
|
|
57
|
+
*/
|
|
58
|
+
checkIsAdmin(backendUrl?: string): Observable<boolean>;
|
|
59
|
+
/**
|
|
60
|
+
* Get backend URL from config (helper method)
|
|
61
|
+
*/
|
|
62
|
+
private getBackendUrl;
|
|
63
|
+
/**
|
|
64
|
+
* Get token information
|
|
65
|
+
*/
|
|
66
|
+
getTokenInfo(): import("../interfaces/medhasso-config.interface").TokenInfo | null;
|
|
67
|
+
/**
|
|
68
|
+
* Get token as observable
|
|
69
|
+
*/
|
|
70
|
+
getToken$(): Observable<import("../interfaces/medhasso-config.interface").TokenInfo | null>;
|
|
71
|
+
/**
|
|
72
|
+
* Handle authentication callback
|
|
73
|
+
*/
|
|
74
|
+
handleAuthCallback(params: {
|
|
75
|
+
idToken?: string;
|
|
76
|
+
refreshToken?: string;
|
|
77
|
+
}): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Get user email
|
|
80
|
+
*/
|
|
81
|
+
getUserEmail(): string | null;
|
|
82
|
+
/**
|
|
83
|
+
* Get user display name
|
|
84
|
+
*/
|
|
85
|
+
getUserDisplayName(): string | null;
|
|
86
|
+
/**
|
|
87
|
+
* Get all user roles
|
|
88
|
+
*/
|
|
89
|
+
getUserRoles(): string[];
|
|
90
|
+
/**
|
|
91
|
+
* Get authorization header value
|
|
92
|
+
*/
|
|
93
|
+
getAuthorizationHeader(): string | null;
|
|
94
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<MedHassoAuthService, never>;
|
|
95
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<MedHassoAuthService>;
|
|
96
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { HttpClient } from '@angular/common/http';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { MedHassoConfig, TokenInfo, MedHassoUser } from '../interfaces/medhasso-config.interface';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class TokenManagementService {
|
|
6
|
+
private config;
|
|
7
|
+
private http;
|
|
8
|
+
private refreshTokenInterval;
|
|
9
|
+
private tokenSubject;
|
|
10
|
+
private userSubject;
|
|
11
|
+
token$: Observable<TokenInfo | null>;
|
|
12
|
+
user$: Observable<MedHassoUser | null>;
|
|
13
|
+
private get tokenConfig();
|
|
14
|
+
private get storageType();
|
|
15
|
+
private get idTokenKey();
|
|
16
|
+
private get refreshTokenKey();
|
|
17
|
+
private get refreshBeforeExpiryMinutes();
|
|
18
|
+
private get autoRefresh();
|
|
19
|
+
constructor(config: MedHassoConfig, http: HttpClient);
|
|
20
|
+
/**
|
|
21
|
+
* Initialize token information from storage
|
|
22
|
+
*/
|
|
23
|
+
private initializeFromStorage;
|
|
24
|
+
/**
|
|
25
|
+
* Get stored token from configured storage
|
|
26
|
+
*/
|
|
27
|
+
private getStoredToken;
|
|
28
|
+
/**
|
|
29
|
+
* Get stored refresh token from configured storage
|
|
30
|
+
*/
|
|
31
|
+
private getStoredRefreshToken;
|
|
32
|
+
/**
|
|
33
|
+
* Store tokens in configured storage
|
|
34
|
+
*/
|
|
35
|
+
private storeTokens;
|
|
36
|
+
/**
|
|
37
|
+
* Clear stored tokens
|
|
38
|
+
*/
|
|
39
|
+
private clearStoredTokens;
|
|
40
|
+
/**
|
|
41
|
+
* Create token info object from JWT token
|
|
42
|
+
*/
|
|
43
|
+
private createTokenInfo;
|
|
44
|
+
/**
|
|
45
|
+
* Decode JWT token payload
|
|
46
|
+
*/
|
|
47
|
+
private decodeJwt;
|
|
48
|
+
/**
|
|
49
|
+
* Extract user information from JWT token
|
|
50
|
+
*/
|
|
51
|
+
private extractUserFromToken;
|
|
52
|
+
/**
|
|
53
|
+
* Set up automatic token refresh interval
|
|
54
|
+
*/
|
|
55
|
+
private setTokenRefreshInterval;
|
|
56
|
+
/**
|
|
57
|
+
* Clear token refresh interval
|
|
58
|
+
*/
|
|
59
|
+
private clearTokenRefreshInterval;
|
|
60
|
+
/**
|
|
61
|
+
* Get current token information
|
|
62
|
+
*/
|
|
63
|
+
getTokenInfo(): TokenInfo | null;
|
|
64
|
+
/**
|
|
65
|
+
* Get current user information
|
|
66
|
+
*/
|
|
67
|
+
getCurrentUser(): MedHassoUser | null;
|
|
68
|
+
/**
|
|
69
|
+
* Check if user is authenticated
|
|
70
|
+
*/
|
|
71
|
+
isAuthenticated(): boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Check if user has specific role
|
|
74
|
+
*/
|
|
75
|
+
hasRole(role: string): boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Check if user is admin
|
|
78
|
+
*/
|
|
79
|
+
isAdmin(): boolean;
|
|
80
|
+
/**
|
|
81
|
+
* Set tokens (typically called after successful authentication)
|
|
82
|
+
*/
|
|
83
|
+
setTokens(idToken: string, refreshToken?: string): void;
|
|
84
|
+
/**
|
|
85
|
+
* Refresh the current token
|
|
86
|
+
*/
|
|
87
|
+
refreshToken(): Observable<any>;
|
|
88
|
+
/**
|
|
89
|
+
* Logout user and clear all tokens
|
|
90
|
+
*/
|
|
91
|
+
logout(): void;
|
|
92
|
+
/**
|
|
93
|
+
* Redirect to MedHasso SSO for authentication
|
|
94
|
+
*/
|
|
95
|
+
redirectToSSO(returnUrl?: string): void;
|
|
96
|
+
/**
|
|
97
|
+
* Handle authentication callback (typically from SSO redirect)
|
|
98
|
+
*/
|
|
99
|
+
handleAuthCallback(params: {
|
|
100
|
+
idToken?: string;
|
|
101
|
+
refreshToken?: string;
|
|
102
|
+
}): boolean;
|
|
103
|
+
/**
|
|
104
|
+
* Get authorization header value
|
|
105
|
+
*/
|
|
106
|
+
getAuthorizationHeader(): string | null;
|
|
107
|
+
/**
|
|
108
|
+
* Cleanup on service destruction
|
|
109
|
+
*/
|
|
110
|
+
ngOnDestroy(): void;
|
|
111
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TokenManagementService, never>;
|
|
112
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<TokenManagementService>;
|
|
113
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@medha-analytics/medhasso-auth",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Angular authentication library for MedHasso SSO integration",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"angular",
|
|
7
|
+
"authentication",
|
|
8
|
+
"sso",
|
|
9
|
+
"medhasso",
|
|
10
|
+
"jwt",
|
|
11
|
+
"oauth"
|
|
12
|
+
],
|
|
13
|
+
"author": "Medha Analytics",
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "https://github.com/medha-analytics/medhasso-auth.git"
|
|
18
|
+
},
|
|
19
|
+
"homepage": "https://github.com/medha-analytics/medhasso-auth#readme",
|
|
20
|
+
"bugs": {
|
|
21
|
+
"url": "https://github.com/medha-analytics/medhasso-auth/issues"
|
|
22
|
+
},
|
|
23
|
+
"peerDependencies": {
|
|
24
|
+
"@angular/common": ">=14.0.0 <20.0.0",
|
|
25
|
+
"@angular/core": ">=14.0.0 <20.0.0",
|
|
26
|
+
"@angular/router": ">=14.0.0 <20.0.0",
|
|
27
|
+
"rxjs": ">=7.5.0 <8.0.0"
|
|
28
|
+
},
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"tslib": "^2.3.0"
|
|
31
|
+
},
|
|
32
|
+
"sideEffects": false,
|
|
33
|
+
"module": "fesm2022/medha-analytics-medhasso-auth.mjs",
|
|
34
|
+
"typings": "index.d.ts",
|
|
35
|
+
"exports": {
|
|
36
|
+
"./package.json": {
|
|
37
|
+
"default": "./package.json"
|
|
38
|
+
},
|
|
39
|
+
".": {
|
|
40
|
+
"types": "./index.d.ts",
|
|
41
|
+
"default": "./fesm2022/medha-analytics-medhasso-auth.mjs"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
package/public-api.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './lib/medhasso-auth.module';
|
|
2
|
+
export * from './lib/services/token-management.service';
|
|
3
|
+
export * from './lib/services/medhasso-auth.service';
|
|
4
|
+
export * from './lib/guards/medhasso-auth.guard';
|
|
5
|
+
export * from './lib/interceptors/medhasso-auth.interceptor';
|
|
6
|
+
export * from './lib/interfaces/medhasso-config.interface';
|
|
7
|
+
export * from './lib/tokens/medhasso-config.token';
|