@ng-vagabond-lab/ng-dsv 0.2.37 → 0.2.38

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.
@@ -190,11 +190,10 @@ class AuthGoogleService {
190
190
  });
191
191
  }
192
192
  initGoogleAuth(googleButtonid = crypto.randomUUID()) {
193
- if (!this.authService.isPlatformBrowser()) {
193
+ if (this.googleIds().get(googleButtonid) || !this.authService.isPlatformBrowser()) {
194
194
  return;
195
195
  }
196
196
  const element = document.getElementById(googleButtonid);
197
- console.log('dsqdlskqdjlkqs', element);
198
197
  if (element) {
199
198
  this.googleIds.update((ids) => {
200
199
  ids.set(googleButtonid, true);
@@ -1 +1 @@
1
- {"version":3,"file":"ng-vagabond-lab-ng-dsv-module-auth.mjs","sources":["../../../projects/ng-dsv/module/auth/component/auth.component.ts","../../../projects/ng-dsv/module/auth/component/auth.component.html","../../../projects/ng-dsv/module/auth/guard/auth.guard.ts","../../../projects/ng-dsv/module/auth/interceptor/auth.interceptor.ts","../../../projects/ng-dsv/module/auth/service/auth.service.ts","../../../projects/ng-dsv/module/auth/service/auth-google.service.ts","../../../projects/ng-dsv/module/auth/utils/auth.utils.ts","../../../projects/ng-dsv/module/auth/ng-vagabond-lab-ng-dsv-module-auth.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, effect, inject, output } from '@angular/core';\nimport { ID } from '@ng-vagabond-lab/ng-dsv/api';\nimport { DsvModalAlertComponent, DsvModalButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/modal';\nimport { RouterInternalPipe } from '@ng-vagabond-lab/ng-dsv/router';\nimport { AuthGoogleService, AuthService } from '../public-api';\n\n@Component({\n selector: 'dsv-auth',\n imports: [CommonModule, DsvModalButtonComponent, DsvModalAlertComponent, RouterInternalPipe],\n templateUrl: './auth.component.html',\n styleUrls: ['./auth.component.scss'],\n})\nexport class AuthComponent {\n readonly authService = inject(AuthService);\n readonly authGoogleService = inject(AuthGoogleService);\n\n readonly callbackInitMember = output<ID>();\n readonly callbackLogout = output<void>();\n\n constructor() {\n effect(() => {\n if (this.authService.isRefreshTokenLoaded()) {\n this.authGoogleService.initGoogleAuth('google-signin-button');\n }\n });\n effect(() => {\n if (this.authService.userConnected() === null) {\n this.authGoogleService.loginWithGoogle();\n } else {\n this.callbackInitMember.emit(this.authService.userConnected()?.id);\n }\n });\n }\n\n logout(): void {\n this.authService.logout();\n this.callbackLogout.emit();\n }\n}\n","<button\n id=\"google-signin-button\"\n [class.hidden]=\"!authService.isRefreshTokenLoaded() || authService.userConnected() !== null\"\n></button>\n\n@if (authService.userConnected()) {\n <ng-content />\n <a href=\"/profil\" dsvLink>\n <img [src]=\"authService.userConnected()?.avatar\" alt=\"Profile\" referrerpolicy=\"no-referrer\" />\n </a>\n <dsv-modal-button modalName=\"logout\" color=\"secondary\" variant=\"outlined\" icon=\"ri-logout-box-line\" />\n <dsv-modal-alert\n id=\"logout\"\n titleText=\"Déconnexion\"\n text=\"Voulez-vous vraiment vous déconnecter ?\"\n button=\"Oui\"\n buttonClose=\"Non\"\n (callback)=\"logout()\"\n ></dsv-modal-alert>\n}\n","import { inject } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { CanActivateFn } from '@angular/router';\nimport { RouterService } from '@ng-vagabond-lab/ng-dsv/router';\nimport { filter, map, take } from 'rxjs';\nimport { AuthService } from '../public-api';\n\nexport const authGuard = (role: string): CanActivateFn => {\n return () => {\n const authService = inject(AuthService);\n const router = inject(RouterService).router;\n\n if (!authService.isPlatformBrowser()) {\n return true;\n }\n\n const requiredRole = role.toUpperCase();\n\n return toObservable(authService.isRefreshTokenLoaded).pipe(\n filter((loaded) => loaded),\n take(1),\n map(() => {\n if (authService.hasRole(requiredRole)) {\n return true;\n }\n return router.createUrlTree(['/access-denied']);\n }),\n );\n };\n};\n","import { HttpClient, HttpErrorResponse, HttpEvent, HttpHandlerFn, HttpRequest } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { ToastService } from '@ng-vagabond-lab/ng-dsv/ds/toast';\nimport { BehaviorSubject, catchError, filter, Observable, switchMap, take, throwError } from 'rxjs';\nimport { AuthService } from '../public-api';\n\nlet isRefreshing = false;\nconst refreshSubject$ = new BehaviorSubject<string | null>(null);\n\nexport const authInterceptor = (\n req: HttpRequest<unknown>,\n next: HttpHandlerFn,\n): Observable<HttpEvent<unknown>> => {\n const httpClient = inject(HttpClient);\n const authService = inject(AuthService);\n const toastService = inject(ToastService);\n\n return next(getToken(req, authService)).pipe(\n catchError((error) => {\n if (\n error instanceof HttpErrorResponse &&\n !req.url.includes('auth/') &&\n req.url.includes(authService.apiService.baseUrl()) &&\n error.status === 401\n ) {\n return handle401Error(httpClient, authService, req, next);\n }\n\n let errorMessage = error.error?.debugMessage ?? error.error?.message ?? error.message;\n\n if (\n errorMessage === 'fetch failed' ||\n errorMessage === 'Failed to fetch' ||\n errorMessage.endsWith(': 500 Internal Server Error')\n ) {\n errorMessage = 'Api indisponible';\n }\n if (errorMessage === 'NO_REFRESH_TOKEN') {\n authService.logout(false);\n } else {\n toastService.showToast({ type: 'error', text: errorMessage, closeAll: true });\n }\n\n return throwError(() => error);\n }),\n );\n};\n\nconst getToken = <T>(req: HttpRequest<T>, authService: AuthService) => {\n const jwt = authService.userToken();\n if (!req.url.includes('/auth/') && req.url.includes(authService.apiService.baseUrl()) && jwt) {\n return req.clone({ headers: req.headers.set('Authorization', `Bearer ${jwt}`) });\n }\n return req;\n};\n\nconst handle401Error = <T>(\n httpClient: HttpClient,\n authService: AuthService,\n request: HttpRequest<T>,\n next: HttpHandlerFn,\n) => {\n if (isRefreshing) {\n return refreshSubject$.pipe(\n filter((token) => token !== null),\n take(1),\n switchMap(() => next(getToken(request, authService))),\n );\n }\n\n isRefreshing = true;\n refreshSubject$.next(null);\n\n return httpClient\n .post(authService.apiService.baseUrl() + '/auth/refresh-token', {}, { withCredentials: true })\n .pipe(\n switchMap((response) => {\n authService.initUser(response);\n isRefreshing = false;\n refreshSubject$.next(authService.userToken());\n return next(getToken(request, authService));\n }),\n catchError((error) => {\n isRefreshing = false;\n refreshSubject$.next(null);\n authService.logout(false);\n return throwError(() => error);\n }),\n );\n};\n","import { computed, Injectable, signal } from '@angular/core';\nimport { JSONValue } from '@ng-vagabond-lab/ng-dsv/api';\nimport { BaseApiService } from '@ng-vagabond-lab/ng-dsv/base/service';\nimport { UserDto, UserSigninDto } from '../dto/auth.dto';\nimport { hasRole } from '../public-api';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthService extends BaseApiService {\n readonly userConnected = signal<UserDto | null>(null);\n readonly userToken = signal<string>('');\n readonly isRefreshTokenLoaded = signal<boolean>(false);\n\n readonly isAdmin = computed<boolean>(() => this.hasRole('ADMIN'));\n\n initUser(user: UserSigninDto | null = null): void {\n this.userConnected.set(user?.user ?? null);\n this.userToken.set(user?.jwt ?? '');\n this.isRefreshTokenLoaded.set(true);\n }\n\n googleLogin(credential: string): void {\n this.apiService.post<JSONValue, UserSigninDto>(\n '/auth/google-identity-connect',\n {\n googleToken: credential,\n },\n (data) => {\n this.initUser(data);\n this.apiService.toastService.showToast({\n type: 'success',\n text: 'Connexion réussie',\n });\n },\n true,\n );\n }\n\n refreshToken(): void {\n this.apiService.post<UserSigninDto>(\n '/auth/refresh-token',\n {},\n (data) => this.initUser(data),\n true,\n () => this.initUser(),\n );\n }\n\n logout(showToast: boolean = true): void {\n this.apiService.post<UserSigninDto>(\n '/auth/logout',\n {},\n () => {\n this.initUser();\n if (showToast) {\n this.apiService.toastService.showToast({\n type: 'success',\n text: 'Déconnexion réussie',\n });\n }\n },\n true,\n );\n }\n\n hasRole(role: string): boolean {\n const user = this.userConnected() ?? null;\n return !!user && hasRole(role, user.profiles);\n }\n\n canFetch(ssr: boolean = true): boolean {\n return (\n (ssr && !this.isPlatformBrowser()) || (this.isPlatformBrowser() && this.isRefreshTokenLoaded())\n );\n }\n}\n","import { effect, inject, Injectable, signal } from '@angular/core';\nimport { EnvironmentService } from '@ng-vagabond-lab/ng-dsv/environment';\nimport { AuthService } from './auth.service';\n\ndeclare const google: any;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthGoogleService {\n readonly authService = inject(AuthService);\n readonly environmentService = inject(EnvironmentService);\n\n readonly googleIds = signal<Map<string, boolean>>(new Map());\n\n readonly init = signal<boolean>(false);\n\n constructor() {\n effect(() => {\n if (!this.init() && this.authService.isPlatformBrowser() && this.environmentService.config()) {\n this.init.set(true);\n google.accounts.id.initialize({\n client_id: this.environmentService.config()?.GOOGLE_CLIENT_ID,\n callback: this.handleCredentialResponse.bind(this),\n });\n }\n });\n }\n\n initGoogleAuth(googleButtonid: string = crypto.randomUUID()): void {\n if (!this.authService.isPlatformBrowser()) {\n return;\n }\n const element = document.getElementById(googleButtonid);\n console.log('dsqdlskqdjlkqs', element);\n if (element) {\n this.googleIds.update((ids) => {\n ids.set(googleButtonid, true);\n return ids;\n });\n google.accounts.id.renderButton(document.getElementById(googleButtonid)!, {\n theme: 'outline',\n size: 'medium',\n type: 'icon',\n });\n }\n }\n\n handleCredentialResponse(response: { credential: string }): void {\n this.authService.googleLogin(response.credential);\n }\n\n loginWithGoogle(): void {\n if (\n this.authService.isRefreshTokenLoaded() &&\n this.authService.userConnected() === null &&\n this.authService.isPlatformBrowser()\n ) {\n google.accounts.id.prompt();\n }\n }\n}\n","import { ApiDto } from '@ng-vagabond-lab/ng-dsv/api';\n\nexport const hasRole = (roles: string, userRoles?: ApiDto[]): boolean => {\n const roleSplit = roles.split(',');\n let find = false;\n roleSplit.forEach((role) => {\n if (\n userRoles?.find(\n (userRole) =>\n userRole['roles' as keyof ApiDto]?.toString().includes(role) ||\n userRole['name' as keyof ApiDto] === role,\n )\n ) {\n find = true;\n }\n });\n return find;\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;MAaa,aAAa,CAAA;AACb,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAE7C,kBAAkB,GAAG,MAAM,EAAM;IACjC,cAAc,GAAG,MAAM,EAAQ;AAExC,IAAA,WAAA,GAAA;QACI,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE,EAAE;AACzC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,sBAAsB,CAAC;YACjE;AACJ,QAAA,CAAC,CAAC;QACF,MAAM,CAAC,MAAK;YACR,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;AAC3C,gBAAA,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE;YAC5C;iBAAO;AACH,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,EAAE,CAAC;YACtE;AACJ,QAAA,CAAC,CAAC;IACN;IAEA,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AACzB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;IAC9B;uGAzBS,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECb1B,6uBAoBA,EAAA,MAAA,EAAA,CAAA,yLAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDXc,YAAY,+BAAE,uBAAuB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,YAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIlF,aAAa,EAAA,UAAA,EAAA,CAAA;kBANzB,SAAS;+BACI,UAAU,EAAA,OAAA,EACX,CAAC,YAAY,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,kBAAkB,CAAC,EAAA,QAAA,EAAA,6uBAAA,EAAA,MAAA,EAAA,CAAA,yLAAA,CAAA,EAAA;;;AEFzF,MAAM,SAAS,GAAG,CAAC,IAAY,KAAmB;AACrD,IAAA,OAAO,MAAK;AACR,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM;AAE3C,QAAA,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE,EAAE;AAClC,YAAA,OAAO,IAAI;QACf;AAEA,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE;QAEvC,OAAO,YAAY,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,IAAI,CACtD,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,EAC1B,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,MAAK;AACL,YAAA,IAAI,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AACnC,gBAAA,OAAO,IAAI;YACf;YACA,OAAO,MAAM,CAAC,aAAa,CAAC,CAAC,gBAAgB,CAAC,CAAC;QACnD,CAAC,CAAC,CACL;AACL,IAAA,CAAC;AACL;;ACvBA,IAAI,YAAY,GAAG,KAAK;AACxB,MAAM,eAAe,GAAG,IAAI,eAAe,CAAgB,IAAI,CAAC;MAEnD,eAAe,GAAG,CAC3B,GAAyB,EACzB,IAAmB,KACa;AAChC,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AACrC,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACvC,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AAEzC,IAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CACxC,UAAU,CAAC,CAAC,KAAK,KAAI;QACjB,IACI,KAAK,YAAY,iBAAiB;AAClC,YAAA,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC1B,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;AAClD,YAAA,KAAK,CAAC,MAAM,KAAK,GAAG,EACtB;YACE,OAAO,cAAc,CAAC,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC;QAC7D;AAEA,QAAA,IAAI,YAAY,GAAG,KAAK,CAAC,KAAK,EAAE,YAAY,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO;QAErF,IACI,YAAY,KAAK,cAAc;AAC/B,YAAA,YAAY,KAAK,iBAAiB;AAClC,YAAA,YAAY,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EACtD;YACE,YAAY,GAAG,kBAAkB;QACrC;AACA,QAAA,IAAI,YAAY,KAAK,kBAAkB,EAAE;AACrC,YAAA,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;QAC7B;aAAO;AACH,YAAA,YAAY,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACjF;AAEA,QAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;IAClC,CAAC,CAAC,CACL;AACL;AAEA,MAAM,QAAQ,GAAG,CAAI,GAAmB,EAAE,WAAwB,KAAI;AAClE,IAAA,MAAM,GAAG,GAAG,WAAW,CAAC,SAAS,EAAE;IACnC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,IAAI,GAAG,EAAE;QAC1F,OAAO,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAA,OAAA,EAAU,GAAG,CAAA,CAAE,CAAC,EAAE,CAAC;IACpF;AACA,IAAA,OAAO,GAAG;AACd,CAAC;AAED,MAAM,cAAc,GAAG,CACnB,UAAsB,EACtB,WAAwB,EACxB,OAAuB,EACvB,IAAmB,KACnB;IACA,IAAI,YAAY,EAAE;AACd,QAAA,OAAO,eAAe,CAAC,IAAI,CACvB,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,IAAI,CAAC,EACjC,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CACxD;IACL;IAEA,YAAY,GAAG,IAAI;AACnB,IAAA,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;AAE1B,IAAA,OAAO;AACF,SAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,qBAAqB,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE;AAC5F,SAAA,IAAI,CACD,SAAS,CAAC,CAAC,QAAQ,KAAI;AACnB,QAAA,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC9B,YAAY,GAAG,KAAK;QACpB,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AAC/C,IAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;QACjB,YAAY,GAAG,KAAK;AACpB,QAAA,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B,QAAA,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;AACzB,QAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;IAClC,CAAC,CAAC,CACL;AACT,CAAC;;AChFK,MAAO,WAAY,SAAQ,cAAc,CAAA;IAClC,aAAa,GAAG,MAAM,CAAiB,IAAI;sFAAC;IAC5C,SAAS,GAAG,MAAM,CAAS,EAAE;kFAAC;IAC9B,oBAAoB,GAAG,MAAM,CAAU,KAAK;6FAAC;IAE7C,OAAO,GAAG,QAAQ,CAAU,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;gFAAC;IAEjE,QAAQ,CAAC,OAA6B,IAAI,EAAA;QACtC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC;QAC1C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;IACvC;AAEA,IAAA,WAAW,CAAC,UAAkB,EAAA;AAC1B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAChB,+BAA+B,EAC/B;AACI,YAAA,WAAW,EAAE,UAAU;SAC1B,EACD,CAAC,IAAI,KAAI;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC;AACnC,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,IAAI,EAAE,oBAAoB;AAC7B,aAAA,CAAC;QACN,CAAC,EACD,IAAI,CACP;IACL;IAEA,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAChB,qBAAqB,EACrB,EAAE,EACF,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC7B,IAAI,EACJ,MAAM,IAAI,CAAC,QAAQ,EAAE,CACxB;IACL;IAEA,MAAM,CAAC,YAAqB,IAAI,EAAA;QAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAChB,cAAc,EACd,EAAE,EACF,MAAK;YACD,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,SAAS,EAAE;AACX,gBAAA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC;AACnC,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,IAAI,EAAE,sBAAsB;AAC/B,iBAAA,CAAC;YACN;QACJ,CAAC,EACD,IAAI,CACP;IACL;AAEA,IAAA,OAAO,CAAC,IAAY,EAAA;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI;AACzC,QAAA,OAAO,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC;IACjD;IAEA,QAAQ,CAAC,MAAe,IAAI,EAAA;QACxB,QACI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,IAAI,CAAC,iBAAiB,EAAE,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAEvG;uGAlES,WAAW,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAX,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFR,MAAM,EAAA,CAAA;;2FAET,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;;MCCY,iBAAiB,CAAA;AACjB,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAE/C,IAAA,SAAS,GAAG,MAAM,CAAuB,IAAI,GAAG,EAAE;kFAAC;IAEnD,IAAI,GAAG,MAAM,CAAU,KAAK;6EAAC;AAEtC,IAAA,WAAA,GAAA;QACI,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE;AAC1F,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACnB,gBAAA,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU,CAAC;oBAC1B,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,gBAAgB;oBAC7D,QAAQ,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;AACrD,iBAAA,CAAC;YACN;AACJ,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,cAAc,CAAC,cAAA,GAAyB,MAAM,CAAC,UAAU,EAAE,EAAA;QACvD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE,EAAE;YACvC;QACJ;QACA,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC;AACvD,QAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,OAAO,CAAC;QACtC,IAAI,OAAO,EAAE;YACT,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;AAC1B,gBAAA,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC;AAC7B,gBAAA,OAAO,GAAG;AACd,YAAA,CAAC,CAAC;AACF,YAAA,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAE,EAAE;AACtE,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,IAAI,EAAE,MAAM;AACf,aAAA,CAAC;QACN;IACJ;AAEA,IAAA,wBAAwB,CAAC,QAAgC,EAAA;QACrD,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC;IACrD;IAEA,eAAe,GAAA;AACX,QAAA,IACI,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE;AACvC,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,KAAK,IAAI;AACzC,YAAA,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE,EACtC;AACE,YAAA,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE;QAC/B;IACJ;uGAnDS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFd,MAAM,EAAA,CAAA;;2FAET,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;;MCNY,OAAO,GAAG,CAAC,KAAa,EAAE,SAAoB,KAAa;IACpE,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;IAClC,IAAI,IAAI,GAAG,KAAK;AAChB,IAAA,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;QACvB,IACI,SAAS,EAAE,IAAI,CACX,CAAC,QAAQ,KACL,QAAQ,CAAC,OAAuB,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC5D,YAAA,QAAQ,CAAC,MAAsB,CAAC,KAAK,IAAI,CAChD,EACH;YACE,IAAI,GAAG,IAAI;QACf;AACJ,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,IAAI;AACf;;ACjBA;;AAEG;;;;"}
1
+ {"version":3,"file":"ng-vagabond-lab-ng-dsv-module-auth.mjs","sources":["../../../projects/ng-dsv/module/auth/component/auth.component.ts","../../../projects/ng-dsv/module/auth/component/auth.component.html","../../../projects/ng-dsv/module/auth/guard/auth.guard.ts","../../../projects/ng-dsv/module/auth/interceptor/auth.interceptor.ts","../../../projects/ng-dsv/module/auth/service/auth.service.ts","../../../projects/ng-dsv/module/auth/service/auth-google.service.ts","../../../projects/ng-dsv/module/auth/utils/auth.utils.ts","../../../projects/ng-dsv/module/auth/ng-vagabond-lab-ng-dsv-module-auth.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, effect, inject, output } from '@angular/core';\nimport { ID } from '@ng-vagabond-lab/ng-dsv/api';\nimport { DsvModalAlertComponent, DsvModalButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/modal';\nimport { RouterInternalPipe } from '@ng-vagabond-lab/ng-dsv/router';\nimport { AuthGoogleService, AuthService } from '../public-api';\n\n@Component({\n selector: 'dsv-auth',\n imports: [CommonModule, DsvModalButtonComponent, DsvModalAlertComponent, RouterInternalPipe],\n templateUrl: './auth.component.html',\n styleUrls: ['./auth.component.scss'],\n})\nexport class AuthComponent {\n readonly authService = inject(AuthService);\n readonly authGoogleService = inject(AuthGoogleService);\n\n readonly callbackInitMember = output<ID>();\n readonly callbackLogout = output<void>();\n\n constructor() {\n effect(() => {\n if (this.authService.isRefreshTokenLoaded()) {\n this.authGoogleService.initGoogleAuth('google-signin-button');\n }\n });\n effect(() => {\n if (this.authService.userConnected() === null) {\n this.authGoogleService.loginWithGoogle();\n } else {\n this.callbackInitMember.emit(this.authService.userConnected()?.id);\n }\n });\n }\n\n logout(): void {\n this.authService.logout();\n this.callbackLogout.emit();\n }\n}\n","<button\n id=\"google-signin-button\"\n [class.hidden]=\"!authService.isRefreshTokenLoaded() || authService.userConnected() !== null\"\n></button>\n\n@if (authService.userConnected()) {\n <ng-content />\n <a href=\"/profil\" dsvLink>\n <img [src]=\"authService.userConnected()?.avatar\" alt=\"Profile\" referrerpolicy=\"no-referrer\" />\n </a>\n <dsv-modal-button modalName=\"logout\" color=\"secondary\" variant=\"outlined\" icon=\"ri-logout-box-line\" />\n <dsv-modal-alert\n id=\"logout\"\n titleText=\"Déconnexion\"\n text=\"Voulez-vous vraiment vous déconnecter ?\"\n button=\"Oui\"\n buttonClose=\"Non\"\n (callback)=\"logout()\"\n ></dsv-modal-alert>\n}\n","import { inject } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { CanActivateFn } from '@angular/router';\nimport { RouterService } from '@ng-vagabond-lab/ng-dsv/router';\nimport { filter, map, take } from 'rxjs';\nimport { AuthService } from '../public-api';\n\nexport const authGuard = (role: string): CanActivateFn => {\n return () => {\n const authService = inject(AuthService);\n const router = inject(RouterService).router;\n\n if (!authService.isPlatformBrowser()) {\n return true;\n }\n\n const requiredRole = role.toUpperCase();\n\n return toObservable(authService.isRefreshTokenLoaded).pipe(\n filter((loaded) => loaded),\n take(1),\n map(() => {\n if (authService.hasRole(requiredRole)) {\n return true;\n }\n return router.createUrlTree(['/access-denied']);\n }),\n );\n };\n};\n","import { HttpClient, HttpErrorResponse, HttpEvent, HttpHandlerFn, HttpRequest } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { ToastService } from '@ng-vagabond-lab/ng-dsv/ds/toast';\nimport { BehaviorSubject, catchError, filter, Observable, switchMap, take, throwError } from 'rxjs';\nimport { AuthService } from '../public-api';\n\nlet isRefreshing = false;\nconst refreshSubject$ = new BehaviorSubject<string | null>(null);\n\nexport const authInterceptor = (\n req: HttpRequest<unknown>,\n next: HttpHandlerFn,\n): Observable<HttpEvent<unknown>> => {\n const httpClient = inject(HttpClient);\n const authService = inject(AuthService);\n const toastService = inject(ToastService);\n\n return next(getToken(req, authService)).pipe(\n catchError((error) => {\n if (\n error instanceof HttpErrorResponse &&\n !req.url.includes('auth/') &&\n req.url.includes(authService.apiService.baseUrl()) &&\n error.status === 401\n ) {\n return handle401Error(httpClient, authService, req, next);\n }\n\n let errorMessage = error.error?.debugMessage ?? error.error?.message ?? error.message;\n\n if (\n errorMessage === 'fetch failed' ||\n errorMessage === 'Failed to fetch' ||\n errorMessage.endsWith(': 500 Internal Server Error')\n ) {\n errorMessage = 'Api indisponible';\n }\n if (errorMessage === 'NO_REFRESH_TOKEN') {\n authService.logout(false);\n } else {\n toastService.showToast({ type: 'error', text: errorMessage, closeAll: true });\n }\n\n return throwError(() => error);\n }),\n );\n};\n\nconst getToken = <T>(req: HttpRequest<T>, authService: AuthService) => {\n const jwt = authService.userToken();\n if (!req.url.includes('/auth/') && req.url.includes(authService.apiService.baseUrl()) && jwt) {\n return req.clone({ headers: req.headers.set('Authorization', `Bearer ${jwt}`) });\n }\n return req;\n};\n\nconst handle401Error = <T>(\n httpClient: HttpClient,\n authService: AuthService,\n request: HttpRequest<T>,\n next: HttpHandlerFn,\n) => {\n if (isRefreshing) {\n return refreshSubject$.pipe(\n filter((token) => token !== null),\n take(1),\n switchMap(() => next(getToken(request, authService))),\n );\n }\n\n isRefreshing = true;\n refreshSubject$.next(null);\n\n return httpClient\n .post(authService.apiService.baseUrl() + '/auth/refresh-token', {}, { withCredentials: true })\n .pipe(\n switchMap((response) => {\n authService.initUser(response);\n isRefreshing = false;\n refreshSubject$.next(authService.userToken());\n return next(getToken(request, authService));\n }),\n catchError((error) => {\n isRefreshing = false;\n refreshSubject$.next(null);\n authService.logout(false);\n return throwError(() => error);\n }),\n );\n};\n","import { computed, Injectable, signal } from '@angular/core';\nimport { JSONValue } from '@ng-vagabond-lab/ng-dsv/api';\nimport { BaseApiService } from '@ng-vagabond-lab/ng-dsv/base/service';\nimport { UserDto, UserSigninDto } from '../dto/auth.dto';\nimport { hasRole } from '../public-api';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthService extends BaseApiService {\n readonly userConnected = signal<UserDto | null>(null);\n readonly userToken = signal<string>('');\n readonly isRefreshTokenLoaded = signal<boolean>(false);\n\n readonly isAdmin = computed<boolean>(() => this.hasRole('ADMIN'));\n\n initUser(user: UserSigninDto | null = null): void {\n this.userConnected.set(user?.user ?? null);\n this.userToken.set(user?.jwt ?? '');\n this.isRefreshTokenLoaded.set(true);\n }\n\n googleLogin(credential: string): void {\n this.apiService.post<JSONValue, UserSigninDto>(\n '/auth/google-identity-connect',\n {\n googleToken: credential,\n },\n (data) => {\n this.initUser(data);\n this.apiService.toastService.showToast({\n type: 'success',\n text: 'Connexion réussie',\n });\n },\n true,\n );\n }\n\n refreshToken(): void {\n this.apiService.post<UserSigninDto>(\n '/auth/refresh-token',\n {},\n (data) => this.initUser(data),\n true,\n () => this.initUser(),\n );\n }\n\n logout(showToast: boolean = true): void {\n this.apiService.post<UserSigninDto>(\n '/auth/logout',\n {},\n () => {\n this.initUser();\n if (showToast) {\n this.apiService.toastService.showToast({\n type: 'success',\n text: 'Déconnexion réussie',\n });\n }\n },\n true,\n );\n }\n\n hasRole(role: string): boolean {\n const user = this.userConnected() ?? null;\n return !!user && hasRole(role, user.profiles);\n }\n\n canFetch(ssr: boolean = true): boolean {\n return (\n (ssr && !this.isPlatformBrowser()) || (this.isPlatformBrowser() && this.isRefreshTokenLoaded())\n );\n }\n}\n","import { effect, inject, Injectable, signal } from '@angular/core';\nimport { EnvironmentService } from '@ng-vagabond-lab/ng-dsv/environment';\nimport { AuthService } from './auth.service';\n\ndeclare const google: any;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthGoogleService {\n readonly authService = inject(AuthService);\n readonly environmentService = inject(EnvironmentService);\n\n readonly googleIds = signal<Map<string, boolean>>(new Map());\n\n readonly init = signal<boolean>(false);\n\n constructor() {\n effect(() => {\n if (!this.init() && this.authService.isPlatformBrowser() && this.environmentService.config()) {\n this.init.set(true);\n google.accounts.id.initialize({\n client_id: this.environmentService.config()?.GOOGLE_CLIENT_ID,\n callback: this.handleCredentialResponse.bind(this),\n });\n }\n });\n }\n\n initGoogleAuth(googleButtonid: string = crypto.randomUUID()): void {\n if (this.googleIds().get(googleButtonid) || !this.authService.isPlatformBrowser()) {\n return;\n }\n const element = document.getElementById(googleButtonid);\n if (element) {\n this.googleIds.update((ids) => {\n ids.set(googleButtonid, true);\n return ids;\n });\n google.accounts.id.renderButton(document.getElementById(googleButtonid)!, {\n theme: 'outline',\n size: 'medium',\n type: 'icon',\n });\n }\n }\n\n handleCredentialResponse(response: { credential: string }): void {\n this.authService.googleLogin(response.credential);\n }\n\n loginWithGoogle(): void {\n if (\n this.authService.isRefreshTokenLoaded() &&\n this.authService.userConnected() === null &&\n this.authService.isPlatformBrowser()\n ) {\n google.accounts.id.prompt();\n }\n }\n}\n","import { ApiDto } from '@ng-vagabond-lab/ng-dsv/api';\n\nexport const hasRole = (roles: string, userRoles?: ApiDto[]): boolean => {\n const roleSplit = roles.split(',');\n let find = false;\n roleSplit.forEach((role) => {\n if (\n userRoles?.find(\n (userRole) =>\n userRole['roles' as keyof ApiDto]?.toString().includes(role) ||\n userRole['name' as keyof ApiDto] === role,\n )\n ) {\n find = true;\n }\n });\n return find;\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ng-vagabond-lab/ng-dsv",
3
- "version": "0.2.37",
3
+ "version": "0.2.38",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.0.0",
6
6
  "@angular/core": "^20.0.0"