{"version":3,"file":"tapsellorg-angular-material-library-sso.mjs","sources":["../../projects/pegah-library/sso/sso-logic/constants.ts","../../projects/pegah-library/sso/sso-logic/config.ts","../../projects/pegah-library/sso/sso-logic/sso.utils.ts","../../projects/pegah-library/sso/sso-logic/sso-storage.service.ts","../../projects/pegah-library/sso/sso-logic/sso.service.ts","../../projects/pegah-library/sso/services-shortcut/constants.ts","../../projects/pegah-library/sso/authorized-link/authorized-link.directive.ts","../../projects/pegah-library/sso/services-shortcut/services-shortcut.component.ts","../../projects/pegah-library/sso/services-shortcut/services-shortcut.component.html","../../projects/pegah-library/sso/authorized-link/authorized-link.pipe.ts","../../projects/pegah-library/sso/authorized-link/authorized-link.module.ts","../../projects/pegah-library/sso/services-shortcut/services-shortcut.module.ts","../../projects/pegah-library/sso/sso-logic/sso-redirect.service.ts","../../projects/pegah-library/sso/auth-guard/authorized.guard.ts","../../projects/pegah-library/sso/user-menu/user-menu.component.ts","../../projects/pegah-library/sso/user-menu/user-menu.component.html","../../projects/pegah-library/sso/user-menu/user-menu.module.ts","../../projects/pegah-library/sso/interceptors/token.interceptor.ts","../../projects/pegah-library/sso/login-as-user/login-as-user.directive.ts","../../projects/pegah-library/sso/login-as-user/login-as-user.module.ts","../../projects/pegah-library/sso/tapsellorg-angular-material-library-sso.ts"],"sourcesContent":["import { PghSsoAuthDataRefreshTokenRequestModel, PghSsoConfig } from './models';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { PghSsoImpersonateData } from '../login-as-user/login-as-user.model';\n\nexport const PGH_REFRESH_TOKEN_REQUEST = (\n  http: HttpClient,\n  refreshToken: string,\n  config: PghSsoConfig,\n) => {\n  const refreshTokenUrl = `${config.ssoApiBaseUrl}/sso/flow/refresh_token`;\n  const payload = new HttpParams().set('refreshToken', refreshToken);\n  return http.post<PghSsoAuthDataRefreshTokenRequestModel>(refreshTokenUrl, payload);\n};\n\nexport const PGH_GET_UUID_REQUEST = (\n  http: HttpClient,\n  authData: PghSsoImpersonateData,\n  config: PghSsoConfig,\n) => {\n  const payload = new HttpParams()\n    .set('refresh_token', authData.refresh_token)\n    .set('access_token', authData.access_token);\n\n  const getUUidUrl = `${config.ssoApiBaseUrl}/sso/token2uuid`;\n  return http.post<string>(getUUidUrl, payload, {\n    withCredentials: true,\n  });\n};\n\nexport const PGH_GET_TOKEN_REQUEST = (http: HttpClient, uuid: string, config: PghSsoConfig) => {\n  const getUUidUrl = `${config.ssoApiBaseUrl}/sso/uuid2token/${uuid}`;\n  return http.get<PghSsoImpersonateData>(getUUidUrl);\n};\n\nexport const PGH_TRUSTED_DOMAINS = [\n  'https://web.tapsell.com',\n  'https://app.tapsell.com',\n  'https://admin-web.tapsell.com',\n  'https://admin-app.tapsell.com',\n  'https://gravity.pegah.tech',\n];\n\nexport const PGH_EXPIRE_TOKEN_AFTER_LOGOUT = (\n  http: HttpClient,\n  authData: PghSsoImpersonateData,\n  config: PghSsoConfig,\n) => {\n  const payload = new HttpParams()\n    .set('refresh_token', authData.refresh_token)\n    .set('access_token', authData.access_token);\n\n  const getUUidUrl = `${config.ssoApiBaseUrl}/sso/logout`;\n  return http.post<string>(getUUidUrl, payload, {\n    withCredentials: true,\n  });\n};\n","import { inject, InjectionToken } from '@angular/core';\nimport { PghSsoConfig } from './models';\nimport {\n  PGH_EXPIRE_TOKEN_AFTER_LOGOUT,\n  PGH_GET_TOKEN_REQUEST,\n  PGH_GET_UUID_REQUEST,\n  PGH_REFRESH_TOKEN_REQUEST,\n  PGH_TRUSTED_DOMAINS,\n} from './constants';\nimport { HttpClient } from '@angular/common/http';\n\nexport const PGH_SSO_CONFIG = new InjectionToken<Partial<PghSsoConfig>>('sso-config', {\n  providedIn: 'root',\n  factory: () => ({}),\n});\n\n/**\n * PGH_SSO_CONFIG is a partial version of PGH_SSO_ENRICHED_CONFIG so that it'll merge it with the default values\n */\nexport const PGH_SSO_ENRICHED_CONFIG = new InjectionToken<PghSsoConfig>('sso-enriched-config', {\n  providedIn: 'root',\n  factory: () => {\n    const httpClient = inject(HttpClient);\n    const ssoConfig = inject(PGH_SSO_CONFIG);\n    const result: PghSsoConfig = {\n      ssoPanelUrl: 'https://sso-panel.pegah.tech',\n      ssoApiBaseUrl: 'https://sso-api.pegah.tech',\n      restrictedUrls: ['https://unified-api.pegah.tech'],\n      impersonateApiUrl: 'https://sso-api.pegah.tech/impersonate/login',\n      sharedIframeUrl: 'https://auth-client.tapsell.ir',\n      isInsideSsoPanel: false,\n      changePasswordRoute: '/change-password',\n      profileRoute: '/profile',\n      trustedDomains: PGH_TRUSTED_DOMAINS,\n      isDevMode: false,\n      redirectToSsoAfterLogout: true,\n      pghCookieStoreDomain: 'tapsell.ir',\n      pghRedirectUrlParam: 'redirect',\n      refreshTokenRequest: refreshToken =>\n        PGH_REFRESH_TOKEN_REQUEST(httpClient, refreshToken, result),\n      getUUidRequest: authData => PGH_GET_UUID_REQUEST(httpClient, authData, result),\n      getTokenRequest: uuid => PGH_GET_TOKEN_REQUEST(httpClient, uuid, result),\n      expireTokenAfterLogout: authData =>\n        PGH_EXPIRE_TOKEN_AFTER_LOGOUT(httpClient, authData, result),\n      accessTokenExpiredError: err => err === 'webApi.unAuthorized.ExpiredAccessToken',\n      refreshTokenExpiredError: err => err === 'iam.unAuthorized.ExpiredAccessToken',\n      ...ssoConfig,\n    };\n    return result;\n  },\n});\n","import {\n  PghErrorResponse,\n  PghSsoAuthData,\n  PghSsoIframeAuthData,\n  PghSsoIframeLogout,\n  PghSsoIframeMessage,\n  PghTokenPayload,\n} from './models';\n\n// @dynamic\nexport class PghSsoUtils {\n  static readonly AUTH_DATA_REQUIRED_KEYS: (keyof PghSsoAuthData)[] = [\n    'accessToken',\n    'refreshToken',\n  ];\n  static readonly AUTH_DATA_KEYS: (keyof PghSsoAuthData)[] = ['accessToken', 'refreshToken'];\n  static readonly UUID_PARAM = 'uuid';\n\n  static validateAuthData(data: Partial<PghSsoAuthData>): data is PghSsoAuthData {\n    return (\n      this.AUTH_DATA_REQUIRED_KEYS.reduce<boolean>((res, key) => res && !!data[key], true) &&\n      data.accessToken?.split('.').length === 3\n    );\n  }\n\n  static isTokenMessage(data: PghSsoIframeMessage): data is PghSsoIframeAuthData {\n    return data.type === 'sso:auth';\n  }\n  static isLogoutMessage(data: PghSsoIframeMessage): data is PghSsoIframeLogout {\n    return data.type === 'sso:logout';\n  }\n\n  static decodeJwtToken(accessToken: string): PghTokenPayload {\n    const base64Url = accessToken.split('.')[1];\n    const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n    const jsonPayload = decodeURIComponent(\n      atob(base64)\n        .split('')\n        .map(c => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))\n        .join(''),\n    );\n\n    return JSON.parse(jsonPayload);\n  }\n\n  static parseError(error: unknown): PghErrorResponse {\n    if (typeof error === 'string') {\n      try {\n        return JSON.parse(error) as PghErrorResponse;\n      } catch {\n        throw new Error('Invalid JSON error response');\n      }\n    }\n    if (typeof error === 'object' && error !== null) {\n      return error as PghErrorResponse;\n    }\n    throw new Error('Unsupported error format');\n  }\n}\n","import { Inject, Injectable, OnDestroy } from '@angular/core';\nimport Cookies from 'js-cookie';\nimport { PghStorageFactory } from '@tapsellorg/angular-material-library/src/lib/common';\nimport { PghSsoConfig, PghSsoIframeMessage } from './models';\nimport { interval, Subject, timer } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { PGH_SSO_ENRICHED_CONFIG } from './config';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class PghSsoStorageService implements OnDestroy {\n  private localStorageFactory = PghStorageFactory.localStorageFactory();\n  private sharedIframe!: HTMLIFrameElement; // in initSharedIframe\n  iframeIncomingMessages$ = new Subject<PghSsoIframeMessage>();\n  isIframeLoaded = false;\n\n  constructor(@Inject(PGH_SSO_ENRICHED_CONFIG) private readonly ssoConfig: PghSsoConfig) {\n    this.setupIframeEventListeners();\n    this.initSharedIframe();\n    this.sharedIframe.addEventListener('load', () => (this.isIframeLoaded = true));\n  }\n\n  getDataFromStorage(key: string) {\n    // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n    return this.localStorageFactory.getItem(key) || Cookies.get(key);\n  }\n\n  setDataInStorage(key: string, value: string | undefined) {\n    if (!value) return;\n    if (this.getDataFromStorage(key) === value) return;\n\n    this.storeCookieSecureCrossSite(key, value);\n    this.storeInLocalStorage(key, value);\n  }\n\n  deleteDataFromStorage(key: string) {\n    this.deleteCookie(key);\n    this.deleteFromLocalStorage(key);\n  }\n\n  private storeCookieSecureCrossSite(key: string, value: string) {\n    Cookies.set(key, value, {\n      domain: this.ssoConfig.pghCookieStoreDomain,\n      path: '/',\n      sameSite: 'None',\n      secure: true,\n      expires: new Date(9999, 0),\n    });\n  }\n  private deleteCookie(key: string) {\n    Cookies.remove(key, {\n      domain: this.ssoConfig.pghCookieStoreDomain,\n      path: '/',\n      sameSite: 'None',\n      secure: true,\n    });\n  }\n\n  private storeInLocalStorage(key: string, value: string) {\n    this.localStorageFactory.setItem(key, value);\n  }\n  private deleteFromLocalStorage(key: string) {\n    this.localStorageFactory.removeItem(key);\n  }\n\n  private readonly IFRAME_ID = 'tapsell-sso-shared';\n\n  private initSharedIframe() {\n    this.sharedIframe = document.getElementById(this.IFRAME_ID) as HTMLIFrameElement;\n    if (this.sharedIframe) {\n      this.isIframeLoaded = true;\n      return;\n    }\n\n    this.sharedIframe = document.createElement('iframe');\n    this.sharedIframe.src = this.ssoConfig.sharedIframeUrl;\n    this.sharedIframe.style.setProperty('display', 'none');\n    this.sharedIframe.id = this.IFRAME_ID;\n    this.sharedIframe.height = '0';\n    this.sharedIframe.name = this.IFRAME_ID;\n    this.sharedIframe.setAttribute('role', 'none');\n    document.body.appendChild(this.sharedIframe);\n  }\n\n  postMessageToIframe(data: PghSsoIframeMessage) {\n    if (!this.isIframeLoaded) {\n      const _interval$ = interval(50)\n        .pipe(takeUntil(timer(1000)))\n        .subscribe(() => {\n          if (this.isIframeLoaded) {\n            this.postMessageToIframe(data);\n            _interval$.unsubscribe();\n          }\n        });\n      return;\n    }\n    this.sharedIframe.contentWindow?.postMessage({ tapsell: data }, '*'); // todo targetOrigin\n  }\n\n  private setupIframeEventListeners() {\n    window.addEventListener('message', this.iframeMessageListener);\n  }\n\n  private iframeMessageListener = ({ data, origin, source }: MessageEvent) => {\n    if (origin !== this.ssoConfig.sharedIframeUrl || source !== this.sharedIframe.contentWindow)\n      return;\n    // console.log('#ee data, origin, source', data, origin, source);\n    this.iframeIncomingMessages$.next(data.tapsell);\n  };\n\n  ngOnDestroy() {\n    window.removeEventListener('message', this.iframeMessageListener);\n  }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport {\n  ObjectUtils,\n  UrlUtils,\n  withDestroy,\n} from '@tapsellorg/angular-material-library/src/lib/common';\nimport { BehaviorSubject, concatMap, interval, last, of, race, takeWhile, timer } from 'rxjs';\nimport { filter, map, switchMap, takeUntil } from 'rxjs/operators';\nimport { PGH_SSO_ENRICHED_CONFIG } from './config';\nimport {\n  PghSsoAuthData,\n  PghSsoAuthEnrichedData,\n  PghSsoConfig,\n  PghSsoIframeAuthData,\n  PghSsoIframeLogout,\n} from './models';\nimport { PghSsoStorageService } from './sso-storage.service';\nimport { PghSsoUtils } from './sso.utils';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class PghSsoService extends withDestroy<any>() {\n  private _authData$ = new BehaviorSubject<PghSsoAuthData | undefined>(undefined);\n  authData$ = this._authData$.pipe(\n    map<PghSsoAuthData | undefined, PghSsoAuthEnrichedData | undefined>(authData => {\n      if (!authData || !PghSsoUtils.validateAuthData(authData)) return;\n      const {\n        userAccountData,\n        adminAccountData,\n        sub: email,\n      } = PghSsoUtils.decodeJwtToken(authData.accessToken);\n      return {\n        ...authData,\n        userId: userAccountData?.userId,\n        email,\n        impersonatedByAdmin: !!adminAccountData?.impersonated,\n      };\n    }),\n  );\n\n  isLoggedIn$ = race(\n    this.authData$.pipe(filter(d => !!d)),\n    interval(100).pipe(\n      takeWhile(() => !this.ssoStorageService.isIframeLoaded, true),\n      takeUntil(timer(1000)),\n      last(),\n    ),\n  ).pipe(switchMap(_ => this.authData$.pipe(map(d => !!d))));\n\n  authData?: PghSsoAuthEnrichedData;\n  lastAuthStorePriority = 0;\n\n  constructor(\n    @Inject(PGH_SSO_ENRICHED_CONFIG) private readonly ssoConfig: PghSsoConfig,\n    private ssoStorageService: PghSsoStorageService,\n    private router: Router,\n  ) {\n    super();\n    this.setupIframeEventListeners();\n    this.retrieveTokenFromStorage();\n    this.retrieveTokenFromUrl();\n\n    this.authData$.pipe(takeUntil(this._destroyed$)).subscribe(data => {\n      this.authData = data;\n    });\n  }\n\n  private retrieveTokenFromStorage() {\n    const partialAuthData: Partial<PghSsoAuthData> = {\n      accessToken: this.ssoStorageService.getDataFromStorage('accessToken'),\n      refreshToken: this.ssoStorageService.getDataFromStorage('refreshToken'),\n    };\n\n    if (PghSsoUtils.validateAuthData(partialAuthData)) {\n      this._authData$.next(partialAuthData as PghSsoAuthData);\n    }\n  }\n\n  private retrieveTokenFromUrl() {\n    const params: Partial<PghSsoAuthData> = {};\n    new URLSearchParams(location.search).forEach((value, key) => {\n      params[key as keyof PghSsoAuthData] = value;\n    });\n    if (!PghSsoUtils.validateAuthData(params)) return;\n\n    this.storeAuthData(params, 1);\n    UrlUtils.removeQueryParams(this.router, PghSsoUtils.AUTH_DATA_KEYS);\n  }\n\n  private setupIframeEventListeners() {\n    let priority = 1;\n    this.ssoStorageService.iframeIncomingMessages$\n      .pipe(\n        takeUntil(this._destroyed$),\n        concatMap((value, index) => {\n          priority = index === 0 ? 0 : 1; // first emit has less priority\n          return of(value);\n        }),\n      )\n      .subscribe(data => {\n        // console.log('#ee iframe message', data);\n        if (PghSsoUtils.isTokenMessage(data)) {\n          if (!data.value) return;\n          if (!PghSsoUtils.validateAuthData(data.value)) return;\n\n          this.storeAuthData(data.value, priority);\n        } else if (PghSsoUtils.isLogoutMessage(data)) {\n          // Check for UUID in the URL\n          const uuid = new URLSearchParams(location.search).get(PghSsoUtils.UUID_PARAM);\n          if (!uuid) {\n            this.logout(priority);\n          }\n        }\n      });\n  }\n\n  storeAuthData(data: PghSsoAuthData, priority: number = 1) {\n    // console.log('#ee store auth data', data, priority, this.lastAuthStorePriority);\n    if (!PghSsoUtils.validateAuthData(data)) return;\n\n    if (priority < this.lastAuthStorePriority) return;\n    this.lastAuthStorePriority = priority;\n\n    if (this.authData && ObjectUtils.isEqualObject(data, this.authData)) return;\n    this._authData$.next(data);\n\n    // console.log('#ee data', data);\n    this.ssoStorageService.postMessageToIframe({\n      type: 'sso:auth',\n      value: data,\n    } as PghSsoIframeAuthData);\n\n    PghSsoUtils.AUTH_DATA_KEYS.forEach(key => {\n      this.ssoStorageService.setDataInStorage(key, data[key]);\n    });\n  }\n\n  logout(priority: number = 1) {\n    // console.log('#ee logout', priority, this.lastAuthStorePriority);\n    if (priority < this.lastAuthStorePriority) return;\n    this.lastAuthStorePriority = priority;\n\n    if (!this.authData) return;\n    this.ssoConfig\n      .expireTokenAfterLogout({\n        access_token: this.authData.accessToken,\n        refresh_token: this.authData.refreshToken,\n      })\n      .pipe(\n        switchMap(() => {\n          this._authData$.next(undefined);\n          this.ssoStorageService.postMessageToIframe({\n            type: 'sso:logout',\n            value: {},\n          } as PghSsoIframeLogout);\n\n          PghSsoUtils.AUTH_DATA_KEYS.forEach(key => {\n            this.ssoStorageService.deleteDataFromStorage(key);\n          });\n\n          if (this.ssoConfig.redirectToSsoAfterLogout) {\n            this.redirectToLoginPageInSso();\n          }\n          return of(null);\n        }),\n      )\n      .subscribe();\n  }\n\n  redirectToLoginPageInSso() {\n    if (this.ssoConfig.isInsideSsoPanel) {\n      this.router.navigate(['/login']);\n    } else {\n      location.href = `${this.ssoConfig.ssoPanelUrl}?${\n        this.ssoConfig.pghRedirectUrlParam\n      }=${encodeURIComponent(location.href)}`;\n    }\n  }\n}\n","import { PghServiceShortcut } from './models';\n\nexport const PGH_SERVICES_SHORTCUTS_DEFAULT: PghServiceShortcut[] = [\n  {\n    link: 'https://sso-panel.pegah.tech',\n    name: 'SSO',\n    desc: 'مدیریت حساب',\n    logo: 'https://cdn.tapture.ir/tapsell/web/front/web-logo/tapsell-new/icons/circle/colored/color/Icon+50px.svg',\n    quickLinks: [\n      {\n        link: 'https://sso-panel.pegah.tech/profile',\n        name: 'پروفایل و حساب',\n        exposeTokenInUrl: false,\n      },\n      {\n        link: 'https://sso-panel.pegah.tech/financial-management',\n        name: 'مدیریت مالی',\n        exposeTokenInUrl: false,\n      },\n      {\n        link: 'https://sso-panel.pegah.tech/financial-management',\n        name: 'افزایش اعتبار',\n        exposeTokenInUrl: false,\n      },\n    ],\n    exposeTokenInUrl: false,\n  },\n  {\n    link: 'https://dashboard.tapsell.ir',\n    name: 'تپسل',\n    desc: 'پلتفرم تبلیغات موبایل',\n    logo: 'https://cdn.tapture.ir/tapsell/web/front/web-logo/tapsell-new/icons/circle/colored/blue/Icon+50px.svg',\n    nightLogo:\n      'https://cdn.tapture.ir/tapsell/web/front/web-logo/tapsell-new/icons/circle/colored/blue/Icon+50px.svg',\n    quickLinks: [\n      { link: 'https://dashboard.tapsell.ir/campaigns', name: 'کمپین‌ها', exposeTokenInUrl: false },\n      { link: 'https://dashboard.tapsell.ir/apps', name: 'اپلیکیشن‌ها', exposeTokenInUrl: false },\n      { link: 'https://college.tapsell.ir/', name: 'کالج', exposeTokenInUrl: false },\n    ],\n    exposeTokenInUrl: false,\n  },\n  {\n    link: 'https://panel.mediaad.org',\n    name: 'مدیااد',\n    desc: 'پلتفرم تبلیغات وب',\n    logo: 'https://cdn.tapture.ir/tapsell/web/front/web-logo/tapsell-new/icons/circle/colored/green/Icon+50px.svg',\n    nightLogo:\n      'https://cdn.tapture.ir/tapsell/web/front/web-logo/tapsell-new/icons/circle/colored/green/Icon+50px.svg',\n    quickLinks: [\n      { link: 'https://panel.mediaad.org/campaigns', name: 'کمپین‌ها', exposeTokenInUrl: false },\n    ],\n    exposeTokenInUrl: false,\n  },\n];\n","import { Directive, ElementRef, HostListener, Inject, input } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { PghSsoService } from '../sso-logic/sso.service';\nimport { PGH_SSO_ENRICHED_CONFIG } from '../sso-logic/config';\nimport { PghSsoConfig } from '../sso-logic/models';\nimport { PghSsoUtils } from '../sso-logic/sso.utils';\nimport { UrlUtils } from '@tapsellorg/angular-material-library/src/lib/common';\n\n@Directive({\n  selector: 'a[pghAuthorizedLink]',\n  standalone: false,\n})\nexport class PghAuthorizedLinkDirective {\n  exposeTokenInUrl = input<boolean>(true);\n\n  constructor(\n    private router: Router,\n    private ssoService: PghSsoService,\n    private elementRef: ElementRef<HTMLAnchorElement>,\n    @Inject(PGH_SSO_ENRICHED_CONFIG) private readonly ssoConfig: PghSsoConfig,\n  ) {}\n\n  @HostListener('click', ['$event']) onClick(event: Event) {\n    event.preventDefault();\n\n    const linkElement = this.elementRef.nativeElement;\n    const href = linkElement.getAttribute('href');\n    const target = linkElement.getAttribute('target') ?? '_self';\n\n    if (!href || !this.ssoService.authData) return;\n\n    const { accessToken, refreshToken } = this.ssoService.authData;\n    const isInternal = linkElement.hostname === window.location.hostname;\n    const mappedTokenData = {\n      access_token: accessToken,\n      refresh_token: refreshToken,\n    };\n\n    if (isInternal) {\n      const url = UrlUtils.removeOrigin(href);\n      this.router.navigateByUrl(url).then();\n      return;\n    }\n    (this.exposeTokenInUrl()\n      ? of(UrlUtils.mergeParamsToUrl(href, { accessToken, refreshToken }))\n      : this.ssoConfig\n          .getUUidRequest(mappedTokenData)\n          .pipe(map(uuid => UrlUtils.mergeParamsToUrl(href, { [PghSsoUtils.UUID_PARAM]: uuid })))\n    ).subscribe({\n      next: newUrl => window.open(newUrl, target),\n      error: () => {\n        console.error('Failed to fetch UUID for authorized link.');\n      },\n    });\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  input,\n  OnChanges,\n  OnInit,\n  signal,\n  SimpleChanges,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { PghServiceShortcut } from './models';\nimport {\n  PghIndicatorColor,\n  PghIndicatorPersistData,\n} from '@tapsellorg/angular-material-library/src/lib/indicator';\nimport { PGH_SERVICES_SHORTCUTS_DEFAULT } from './constants';\nimport { PghDarkModeService } from '@tapsellorg/angular-material-library/src/lib/common';\n\n@Component({\n  selector: 'pgh-services-shortcut',\n  templateUrl: './services-shortcut.component.html',\n  styleUrls: ['./services-shortcut.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: false,\n})\nexport class PghServicesShortcutComponent implements OnInit, OnChanges {\n  hideIndicator = input<boolean>(false);\n  indicatorColor = input<PghIndicatorColor | undefined>('primary');\n  servicesShortcuts = input<PghServiceShortcut[]>(PGH_SERVICES_SHORTCUTS_DEFAULT);\n  isAdmin = input<boolean>(false);\n\n  constructor(private darkModeService: PghDarkModeService) {}\n\n  services = signal<(PghServiceShortcut & { isCurrentService: boolean })[]>([]);\n\n  indicatorPersistData = signal<PghIndicatorPersistData>({\n    persistId: 'services-shortcut',\n    persistDays: 7,\n  });\n\n  ngOnInit() {\n    this.setServicesShortcuts();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.servicesShortcuts) {\n      this.setServicesShortcuts();\n    }\n  }\n\n  setServicesShortcuts() {\n    this.services.set(\n      this.servicesShortcuts().map(service => ({\n        ...service,\n        isCurrentService: service.link.includes(location.hostname),\n      })),\n    );\n  }\n\n  get isDarkModeEnabled() {\n    return this.darkModeService.isDarkModeEnabled;\n  }\n}\n","<pgh-overlay\n  [origin]=\"servicesMenuOriginRef\"\n  #servicesMenuRef\n  [panelClasses]=\"['pgh-services-shortcut-menu']\"\n>\n  <ng-template #pghOverlayContent>\n    <a\n      *ngFor=\"let s of services()\"\n      pghAuthorizedLink\n      [href]=\"s.link\"\n      [exposeTokenInUrl]=\"s.exposeTokenInUrl\"\n      target=\"_blank\"\n      class=\"pgh-service-shortcut-item text-gray\"\n      [class.is-active]=\"s.isCurrentService\"\n      matRipple\n    >\n      <div class=\"pgh-service-item-img\">\n        <img\n          class=\"max-width-100\"\n          [src]=\"isDarkModeEnabled ? (s.nightLogo ? s.nightLogo : s.logo) : s.logo\"\n          [alt]=\"s.name\"\n        />\n      </div>\n      <div class=\"pgh-service-item-name d-flex align-items-center\">\n        <h2 class=\"mb-0 font-weight-bold text-gray-700\">{{ s.name }}</h2>\n        <ng-container *ngIf=\"s.desc\">\n          <span class=\"mx-2\">-</span>\n          <span class=\"text-gray\">{{ s.desc }}</span>\n        </ng-container>\n      </div>\n      <div class=\"pgh-service-item-quick-links d-flex\">\n        <a\n          *ngFor=\"let q of s.quickLinks\"\n          pghAuthorizedLink\n          [href]=\"q.link\"\n          target=\"_blank\"\n          [exposeTokenInUrl]=\"s.exposeTokenInUrl\"\n        >\n          <pgh-status-label\n            [showIcon]=\"false\"\n            [label]=\"q.name\"\n            labelSize=\"mini\"\n            type=\"gray\"\n          ></pgh-status-label>\n        </a>\n      </div>\n    </a>\n  </ng-template>\n</pgh-overlay>\n\n<button\n  mat-button\n  cdkOverlayOrigin\n  #servicesMenuOriginRef=\"cdkOverlayOrigin\"\n  (click)=\"servicesMenuRef.open()\"\n>\n  <mat-icon\n    svgIcon=\"apps\"\n    pghIndicator\n    [pghIndicatorHidden]=\"hideIndicator()\"\n    [pghIndicatorColor]=\"indicatorColor()\"\n    [pghIndicatorPersistData]=\"indicatorPersistData()\"\n    [pghIndicatorPosition]=\"'top start'\"\n  ></mat-icon>\n  <ng-container *ngIf=\"isAdmin(); else userServices\">\n    <span *ifMedia=\"'sm'\">{{ 'SSO_ADMIN_SERVICES_SHORTCUT_TITLE' | translate }}</span>\n  </ng-container>\n  <ng-template #userServices>\n    <span *ifMedia=\"'sm'\">{{ 'SSO_SERVICES_SHORTCUT_TITLE' | translate }}</span>\n  </ng-template>\n</button>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { PghSsoService } from '../sso-logic/sso.service';\nimport { UrlUtils } from '@tapsellorg/angular-material-library/src/lib/common';\n\n@Pipe({\n  name: 'pghAuthorizedLink',\n  standalone: false,\n})\nexport class PghAuthorizedLinkPipe implements PipeTransform {\n  constructor(private ssoService: PghSsoService) {}\n  transform(link: string | undefined | null): unknown {\n    if (!link) return link;\n    if (!this.ssoService.authData) return link;\n\n    return UrlUtils.mergeParamsToUrl(link, this.ssoService.authData as any);\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PghAuthorizedLinkDirective } from './authorized-link.directive';\nimport { PghAuthorizedLinkPipe } from './authorized-link.pipe';\n\n@NgModule({\n  declarations: [PghAuthorizedLinkDirective, PghAuthorizedLinkPipe],\n  imports: [CommonModule],\n  exports: [PghAuthorizedLinkDirective],\n})\nexport class PghSsoAuthorizedLinkModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PghServicesShortcutComponent } from './services-shortcut.component';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { PghOverlayModule } from '@tapsellorg/angular-material-library/src/lib/overlay';\nimport { PghStatusLabelModule } from '@tapsellorg/angular-material-library/src/lib/status-label';\nimport { MatRippleModule } from '@angular/material/core';\nimport { PghSsoAuthorizedLinkModule } from '../authorized-link/authorized-link.module';\nimport { PghIndicatorModule } from '@tapsellorg/angular-material-library/src/lib/indicator';\nimport { PghMediaModule } from '@tapsellorg/angular-material-library/media';\nimport { TranslateModule } from '@tapsellorg/angular-material-library/src/lib/translate';\n\n@NgModule({\n  declarations: [PghServicesShortcutComponent],\n  imports: [\n    CommonModule,\n    MatIconModule,\n    MatButtonModule,\n    PghOverlayModule,\n    PghStatusLabelModule,\n    MatRippleModule,\n    PghSsoAuthorizedLinkModule,\n    PghIndicatorModule,\n    PghMediaModule,\n    TranslateModule,\n  ],\n  exports: [PghServicesShortcutComponent],\n})\nexport class PghServicesShortcutModule {}\n","import { Inject, Injectable } from '@angular/core';\nimport { ActivatedRoute, Router, UrlTree } from '@angular/router';\nimport { UrlUtils, withDestroy } from '@tapsellorg/angular-material-library/src/lib/common';\nimport { takeUntil } from 'rxjs/operators';\nimport { PghSsoService } from './sso.service';\nimport { PghLoginQueryParams, PghSsoConfig } from './models';\nimport { PGH_SSO_ENRICHED_CONFIG } from './config';\nimport { PghSsoUtils } from './sso.utils';\nimport { PghSsoImpersonateData } from '../login-as-user/login-as-user.model';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class PghSsoRedirectService extends withDestroy() {\n  redirectUrl?: string;\n\n  constructor(\n    private activatedRoute: ActivatedRoute,\n    private router: Router,\n    private pghSsoService: PghSsoService,\n    @Inject(PGH_SSO_ENRICHED_CONFIG) private readonly ssoConfig: PghSsoConfig,\n  ) {\n    super();\n\n    this.setupRedirectUrlRetriever();\n  }\n\n  private setupRedirectUrlRetriever() {\n    const params: Partial<PghLoginQueryParams> = {};\n    new URLSearchParams(location.search).forEach((value, key) => {\n      params[key as keyof PghLoginQueryParams] = value;\n    });\n    this.retrieveRedirectUrl(params);\n    this.activatedRoute.queryParams.pipe(takeUntil(this._destroyed$)).subscribe(queryParams => {\n      this.retrieveRedirectUrl(queryParams as PghLoginQueryParams);\n    });\n  }\n\n  retrieveRedirectUrl(queryParams: PghLoginQueryParams) {\n    const { redirect } = queryParams;\n    if (!redirect) return;\n\n    try {\n      const redirectUrl = new URL(redirect.trim());\n      const trustedOrigins = this.ssoConfig.trustedDomains.map(url => new URL(url).origin);\n      const { isDevMode } = this.ssoConfig;\n      const isLocalhost =\n        isDevMode && ['localhost', '127.0.0.1', '::1'].includes(redirectUrl.hostname);\n      const isTrusted = isLocalhost || trustedOrigins.includes(redirectUrl.origin);\n\n      if (!isTrusted) return;\n\n      this.redirectUrl = redirectUrl.href;\n      return this.redirectUrl;\n    } catch (error) {\n      // If the redirect URL is invalid or malformed, silently ignore\n      return;\n    }\n  }\n\n  retrieveUuidAndNavigate(tokenData: PghSsoImpersonateData) {\n    this.ssoConfig.getUUidRequest(tokenData).subscribe({\n      next: uuid => {\n        const uuidParam = { [PghSsoUtils.UUID_PARAM]: uuid };\n        location.href = UrlUtils.mergeParamsToUrl(this.redirectUrl!, uuidParam);\n      },\n      error: error => {\n        console.error('UUID retrieval failed', error);\n      },\n    });\n  }\n\n  /**\n   * @param useParseUrl: used for guards\n   */\n  navigateToRetrievedRedirectUrl(useParseUrl: true): UrlTree;\n  navigateToRetrievedRedirectUrl(useParseUrl: false): void;\n  navigateToRetrievedRedirectUrl(): void;\n  navigateToRetrievedRedirectUrl(useParseUrl = false) {\n    const routerNavigateFunction = (route: string) =>\n      useParseUrl ? this.router.parseUrl(route) : this.router.navigateByUrl(route);\n\n    if (!this.redirectUrl) {\n      return routerNavigateFunction('/');\n    }\n\n    const redirectUrlParsed = new URL(this.redirectUrl);\n\n    if (redirectUrlParsed.origin === location.origin) {\n      return routerNavigateFunction(redirectUrlParsed.pathname);\n    }\n\n    if (!this.pghSsoService.authData) {\n      location.href = this.redirectUrl;\n      return false;\n    }\n\n    const tokenData: PghSsoImpersonateData = {\n      access_token: this.pghSsoService.authData.accessToken,\n      refresh_token: this.pghSsoService.authData.refreshToken,\n    };\n\n    this.retrieveUuidAndNavigate(tokenData);\n    return false;\n  }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router, RouterStateSnapshot } from '@angular/router';\nimport { Observable, of } from 'rxjs';\nimport { PghSsoService } from '../sso-logic/sso.service';\nimport { catchError, map, switchMap, take } from 'rxjs/operators';\nimport { PghLoginQueryParams, PghSsoConfig } from '../sso-logic/models';\nimport { PGH_SSO_ENRICHED_CONFIG } from '../sso-logic/config';\nimport { PghSsoImpersonateData } from '../login-as-user/login-as-user.model';\nimport { PghSsoUtils } from '../sso-logic/sso.utils';\nimport { UrlUtils } from '@tapsellorg/angular-material-library/src/lib/common';\nimport { PghSsoRedirectService } from '../sso-logic/sso-redirect.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class PghSsoAuthorizedGuard {\n  constructor(\n    private ssoService: PghSsoService,\n    private pghSsoRedirectService: PghSsoRedirectService,\n    private router: Router,\n    @Inject(PGH_SSO_ENRICHED_CONFIG) private readonly ssoConfig: PghSsoConfig,\n  ) {}\n  canActivate(\n    route: ActivatedRouteSnapshot,\n    _state: RouterStateSnapshot,\n  ): Observable<boolean> | boolean {\n    if (this.ssoConfig.isInsideSsoPanel) {\n      this.pghSsoRedirectService.retrieveRedirectUrl(route.queryParams as PghLoginQueryParams);\n    }\n    const uuid = route.queryParamMap.get(PghSsoUtils.UUID_PARAM);\n    return uuid ? this.authenticateWithUuid(uuid) : this.verifyLoginStatus();\n  }\n\n  private authenticateWithUuid(uuid: string): Observable<boolean> {\n    return this.ssoConfig.getTokenRequest(uuid).pipe(\n      switchMap(authData => this.handleAuthData(authData)),\n      catchError(() => this.redirectToLogin()),\n    );\n  }\n\n  private handleAuthData(authData: PghSsoImpersonateData): Observable<boolean> {\n    if (!authData?.access_token) return this.redirectToLogin();\n    this.ssoService.storeAuthData({\n      accessToken: authData.access_token,\n      refreshToken: authData.refresh_token,\n    });\n    UrlUtils.removeQueryParams(this.router, [PghSsoUtils.UUID_PARAM]);\n    return this.verifyLoginStatus();\n  }\n\n  private verifyLoginStatus(): Observable<boolean> {\n    return this.ssoService.isLoggedIn$.pipe(\n      take(1),\n      map(authData => {\n        if (authData) {\n          return true;\n        }\n\n        this.ssoService.redirectToLoginPageInSso();\n        return false;\n      }),\n    );\n  }\n\n  private redirectToLogin(): Observable<boolean> {\n    this.ssoService.redirectToLoginPageInSso();\n    return of(false);\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Inject,\n  input,\n  OnInit,\n  output,\n  signal,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { Router } from '@angular/router';\nimport { PghSsoConfig } from '../sso-logic/models';\nimport { PghSsoService } from '../sso-logic/sso.service';\nimport { takeUntil } from 'rxjs/operators';\nimport { PGH_SSO_ENRICHED_CONFIG } from '../sso-logic/config';\nimport {\n  withDestroy,\n  PghDarkModeService,\n} from '@tapsellorg/angular-material-library/src/lib/common';\nimport { Subject } from 'rxjs';\n\n@Component({\n  selector: 'pgh-user-menu',\n  templateUrl: './user-menu.component.html',\n  styleUrls: ['./user-menu.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: false,\n})\nexport class PghUserMenuComponent extends withDestroy() implements OnInit {\n  userEmail = signal(this.ssoService.authData?.email);\n  isAvatarNotLoaded = signal<boolean>(false);\n  userName = input<string | undefined>(undefined);\n  handleLogout = input<boolean | undefined>(true);\n  logout = output();\n  _destroyed$ = new Subject();\n\n  constructor(\n    @Inject(PGH_SSO_ENRICHED_CONFIG) public readonly ssoConfig: PghSsoConfig,\n    private ssoService: PghSsoService,\n    private router: Router,\n    private cdr: ChangeDetectorRef,\n    private darkModeService: PghDarkModeService,\n  ) {\n    super();\n  }\n\n  ngOnInit() {\n    this.ssoService.authData$.pipe(takeUntil(this._destroyed$)).subscribe(data => {\n      this.userEmail.set(data?.email);\n      this.isAvatarNotLoaded.set(false);\n      this.cdr.detectChanges();\n    });\n  }\n\n  onLogout() {\n    this.logout.emit();\n    if (!this.handleLogout()) return;\n    this.ssoService.logout();\n  }\n\n  toggleDarkMode() {\n    this.darkModeService.toggleDarkMode();\n  }\n  get isDarkModeEnabled() {\n    return this.darkModeService.isDarkModeEnabled;\n  }\n}\n","<button class=\"py-2\" mat-button [matMenuTriggerFor]=\"menuRef\" [class.px-0]=\"!userName()\">\n  <img\n    *ngIf=\"userEmail()\"\n    [src]=\"userEmail() | pghGravatar : 80\"\n    class=\"border-radius-circle\"\n    [width]=\"userName() ? 30 : 40\"\n    [height]=\"userName() ? 30 : 40\"\n    alt=\"\"\n    (error)=\"isAvatarNotLoaded.set(true)\"\n  />\n  <mat-icon\n    *ngIf=\"!userEmail() || isAvatarNotLoaded()\"\n    svgIcon=\"account_circle\"\n    class=\"square-40 text-gray\"\n  ></mat-icon>\n  <ng-template [ngIf]=\"userName()\">\n    <span *ifMedia=\"'sm'\" class=\"ms-2\">{{ userName() }}</span>\n  </ng-template>\n</button>\n\n<mat-menu #menuRef=\"matMenu\">\n  <a\n    [href]=\"ssoConfig.ssoPanelUrl + ssoConfig.profileRoute\"\n    pghAuthorizedLink\n    [exposeTokenInUrl]=\"false\"\n    mat-menu-item\n    class=\"text-black\"\n    target=\"_blank\"\n  >\n    <mat-icon svgIcon=\"account_circle\"></mat-icon>\n    <span *ifMedia=\"'sm'\">{{ 'SSO_USER_MENU_USER_PROFILE' | translate }}</span>\n    <span *ifMedia=\"'max-xs'\">\n      {{ userName() ? userName() : ('SSO_USER_MENU_USER_PROFILE' | translate) }}\n    </span>\n  </a>\n\n  <button mat-menu-item (click)=\"toggleDarkMode()\">\n    <mat-icon [svgIcon]=\"isDarkModeEnabled ? 'light_mode' : 'dark_mode'\"></mat-icon>\n    <span>\n      {{ (isDarkModeEnabled ? 'SSO_USER_MENU_LIGHT_MODE' : 'SSO_USER_MENU_DARK_MODE') | translate }}\n    </span>\n  </button>\n\n  <a\n    [href]=\"ssoConfig.ssoPanelUrl + ssoConfig.changePasswordRoute\"\n    pghAuthorizedLink\n    [exposeTokenInUrl]=\"false\"\n    mat-menu-item\n    class=\"text-black\"\n    target=\"_blank\"\n  >\n    <mat-icon svgIcon=\"lock\"></mat-icon>\n    <span>{{ 'SSO_USER_MENU_CHANGE_PASSWORD' | translate }}</span>\n  </a>\n\n  <button mat-menu-item (click)=\"onLogout()\">\n    <mat-icon svgIcon=\"logout\"></mat-icon>\n    <span>{{ 'SSO_USER_MENU_LOGOUT' | translate }}</span>\n  </button>\n</mat-menu>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PghUserMenuComponent } from './user-menu.component';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PghSsoAuthorizedLinkModule } from '../authorized-link/authorized-link.module';\nimport { RouterModule } from '@angular/router';\nimport { MatButtonModule } from '@angular/material/button';\nimport { TranslateModule } from '@tapsellorg/angular-material-library/src/lib/translate';\nimport { PghMediaModule } from '@tapsellorg/angular-material-library/media';\nimport { PghGravatarModule } from '@tapsellorg/angular-material-library/src/lib/gravatar';\n\n@NgModule({\n  declarations: [PghUserMenuComponent],\n  imports: [\n    CommonModule,\n    PghGravatarModule,\n    MatMenuModule,\n    MatIconModule,\n    PghSsoAuthorizedLinkModule,\n    RouterModule,\n    MatButtonModule,\n    TranslateModule,\n    PghMediaModule,\n  ],\n  exports: [PghUserMenuComponent],\n})\nexport class PghUserMenuModule {}\n","import { inject, Injectable } from '@angular/core';\nimport {\n  HttpRequest,\n  HttpHandler,\n  HttpEvent,\n  HttpInterceptor,\n  HttpErrorResponse,\n} from '@angular/common/http';\nimport { catchError, EMPTY, Observable, Subject, switchMap, take, throwError } from 'rxjs';\nimport { PghSsoService } from '../sso-logic/sso.service';\nimport { PGH_SSO_ENRICHED_CONFIG } from '../sso-logic/config';\nimport { PghSsoUtils } from '../sso-logic/sso.utils';\nimport { tap } from 'rxjs/operators';\n\n@Injectable()\nexport class PghTokenInterceptor implements HttpInterceptor {\n  private pghSsoService = inject(PghSsoService);\n  private pghSsoConfig = inject(PGH_SSO_ENRICHED_CONFIG);\n  private refreshToken$ = new Subject<void>();\n  private isRefreshInProgress = false;\n\n  intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n    return this.handleRequestWithToken(next, request);\n  }\n\n  private handleRequestWithToken(\n    next: HttpHandler,\n    request: HttpRequest<unknown>,\n  ): Observable<HttpEvent<unknown>> {\n    const requestWithToken = this.addAuthorizationHeader(request);\n\n    return next\n      .handle(requestWithToken)\n      .pipe(catchError((error: HttpErrorResponse) => this.handleError(error, next, request)));\n  }\n\n  private handleError(\n    error: HttpErrorResponse,\n    next: HttpHandler,\n    request: HttpRequest<unknown>,\n  ): Observable<HttpEvent<unknown>> {\n    const formattedError = this.formatError(error);\n\n    if (!this.isAccessTokenExpired(formattedError)) {\n      console.error('Error encountered:', error);\n      return throwError(() => error);\n    }\n\n    if (this.isRefreshInProgress) {\n      return this.handleRefreshInProgress(next, request);\n    }\n\n    return this.refreshAccessToken(next, request);\n  }\n\n  private handleRefreshInProgress(\n    next: HttpHandler,\n    request: HttpRequest<unknown>,\n  ): Observable<HttpEvent<unknown>> {\n    return this.refreshToken$.pipe(\n      take(1),\n      switchMap(() => next.handle(this.addAuthorizationHeader(request))),\n    );\n  }\n\n  private refreshAccessToken(\n    next: HttpHandler,\n    request: HttpRequest<unknown>,\n  ): Observable<HttpEvent<unknown>> {\n    const refreshToken = this.pghSsoService.authData?.refreshToken;\n    this.isRefreshInProgress = true;\n    if (!refreshToken) return this.handleRefreshError();\n\n    return this.pghSsoConfig.refreshTokenRequest(refreshToken).pipe(\n      catchError((err: HttpErrorResponse) => {\n        console.error('Refresh token failed:', err);\n        return this.handleRefreshError(err);\n      }),\n      tap({\n        next: res => {\n          this.updateAuthData(res.access_token, res.refresh_token);\n          this.isRefreshInProgress = false;\n          this.refreshToken$.next();\n        },\n        error: err => {\n          console.error('Error during token refresh:', err);\n          throw err;\n        },\n      }),\n      switchMap(() => next.handle(this.addAuthorizationHeader(request))),\n    );\n  }\n\n  private handleRefreshError(error?: HttpErrorResponse): Observable<never> {\n    console.error('Refresh token error:', error);\n    this.isRefreshInProgress = false;\n    this.pghSsoService.logout();\n\n    if (!error) return EMPTY;\n\n    const formattedError = this.formatError(error);\n    return this.isRefreshTokenExpired(formattedError) ? EMPTY : throwError(() => error);\n  }\n\n  private updateAuthData(accessToken: string, refreshToken: string): void {\n    this.pghSsoService.storeAuthData({ accessToken, refreshToken });\n  }\n\n  private addAuthorizationHeader(request: HttpRequest<unknown>): HttpRequest<unknown> {\n    const isRestrictedUrl = this.pghSsoConfig.restrictedUrls.some(url =>\n      request.url.startsWith(url),\n    );\n\n    if (!isRestrictedUrl) {\n      return request;\n    }\n\n    const accessToken = this.pghSsoService.authData?.accessToken;\n    return request.clone({\n      // eslint-disable-next-line @typescript-eslint/naming-convention\n      setHeaders: { Authorization: `Bearer ${accessToken}` },\n    });\n  }\n\n  private formatError(error: HttpErrorResponse): string {\n    try {\n      const responseError = PghSsoUtils.parseError(error?.error);\n      const { error: err, errors, code } = responseError;\n\n      if (errors?.internalError?.length) {\n        return errors?.internalError[0]?.code ?? 'Unknown Error Code';\n      }\n\n      return err?.code ?? err?.message_fa ?? err ?? code ?? 'Unknown Error';\n    } catch {\n      return 'Unknown Error';\n    }\n  }\n\n  private isAccessTokenExpired(error: string): boolean {\n    return this.pghSsoConfig.accessTokenExpiredError(error);\n  }\n\n  private isRefreshTokenExpired(error: string): boolean {\n    return this.pghSsoConfig.refreshTokenExpiredError(error);\n  }\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Directive, HostListener, Inject, input } from '@angular/core';\nimport { PghSsoImpersonateData } from './login-as-user.model';\nimport { UrlUtils } from '@tapsellorg/angular-material-library/src/lib/common';\nimport { PGH_SSO_ENRICHED_CONFIG } from '../sso-logic/config';\nimport { PghSsoConfig } from '../sso-logic/models';\nimport { Observable, of } from 'rxjs';\nimport { PghSsoService } from '../sso-logic/sso.service';\nimport { switchMap, tap } from 'rxjs/operators';\nimport { PghSsoUtils } from '../sso-logic/sso.utils';\n\n@Directive({\n  selector: '[pghLoginAsUser]',\n  standalone: false,\n})\nexport class PghLoginAsUserDirective {\n  url = input<string | undefined>(undefined);\n  userEmail = input<string | undefined>(undefined);\n  exposeTokenInUrl = input<boolean>(true);\n\n  constructor(\n    private http: HttpClient,\n    @Inject(PGH_SSO_ENRICHED_CONFIG) private readonly ssoConfig: PghSsoConfig,\n    private pghSsoService: PghSsoService,\n  ) {}\n\n  @HostListener('click') onClick() {\n    if (!this.userEmail()) {\n      throw new Error('PghLoginAsUserDirective: userEmail is not specified');\n    }\n    if (!this.url()) {\n      throw new Error('PghLoginAsUserDirective: url is not specified');\n    }\n\n    const newTab = this.openLoadingTab();\n\n    this.impersonateUser()\n      ?.pipe(\n        switchMap((tokenData: PghSsoImpersonateData) =>\n          this.exposeTokenInUrl()\n            ? of(\n                this.directNavigation(newTab, {\n                  accessToken: tokenData.access_token,\n                  refreshToken: tokenData.refresh_token,\n                }),\n              )\n            : this.ssoConfig\n                .getUUidRequest(tokenData)\n                .pipe(\n                  tap(uuid => this.directNavigation(newTab, { [PghSsoUtils.UUID_PARAM]: uuid })),\n                ),\n        ),\n      )\n      .subscribe({\n        error: err => {\n          if (err) {\n            newTab?.close();\n          }\n        },\n      });\n  }\n\n  private impersonateUser(): Observable<PghSsoImpersonateData> | undefined {\n    let headers;\n    if (this.pghSsoService.authData) {\n      headers = new HttpHeaders().set(\n        'Authorization',\n        `Bearer ${this.pghSsoService.authData.accessToken}`,\n      );\n    }\n    if (!this.userEmail) return;\n    return this.http.get<PghSsoImpersonateData>(\n      `${this.ssoConfig.impersonateApiUrl}?username=${encodeURIComponent(this.userEmail()!)}`,\n      {\n        withCredentials: true,\n        headers,\n      },\n    );\n  }\n\n  private openLoadingTab(): Window | null {\n    const newTab = window.open('', '_blank');\n    if (newTab) {\n      newTab.document.write(\n        '<h2 style=\"text-align:center; margin-top:2rem\"><p>...در حال انتقال به صفحهٔ مورد نظر</p></h2>',\n      );\n    }\n    return newTab;\n  }\n\n  private directNavigation(newTab: Window | null, params: Record<string, string>) {\n    if (newTab) {\n      newTab.location = UrlUtils.mergeParamsToUrl(this.url()!, params);\n      newTab.focus();\n    }\n    return newTab;\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PghLoginAsUserDirective } from './login-as-user.directive';\n\n@NgModule({\n  declarations: [PghLoginAsUserDirective],\n  imports: [CommonModule],\n  exports: [PghLoginAsUserDirective],\n})\nexport class PghLoginAsUserModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PghSsoStorageService","i2","i1","i9.PghAuthorizedLinkDirective","i1.PghSsoService","i3","i4","i5","i6","i7.PghAuthorizedLinkDirective","i8","i9","i10","i11","catchError","take","switchMap","i2.PghSsoService"],"mappings":"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"}