@ng-vagabond-lab/ng-dsv 0.1.88 → 0.1.91

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.
@@ -1,47 +1,10 @@
1
- import { HttpClient, HttpErrorResponse, httpResource } from '@angular/common/http';
1
+ import { httpResource, HttpClient } from '@angular/common/http';
2
2
  import * as i0 from '@angular/core';
3
- import { inject, signal, Injectable } from '@angular/core';
3
+ import { signal, Injectable, inject } from '@angular/core';
4
4
  import { ToastService } from '@ng-vagabond-lab/ng-dsv/ds/toast';
5
- import { catchError, throwError, switchMap } from 'rxjs';
6
5
  import { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';
7
6
  import { Store } from '@ng-vagabond-lab/ng-dsv/storage';
8
7
 
9
- const authInterceptor = (req, next) => {
10
- const httpClient = inject(HttpClient);
11
- const apiService = inject(ApiService);
12
- const toastService = inject(ToastService);
13
- return next(getToken(req, apiService)).pipe(catchError((error) => {
14
- if (error instanceof HttpErrorResponse &&
15
- !req.url.includes('auth/') &&
16
- req.url.includes(apiService.baseUrl) &&
17
- error.status === 401) {
18
- return handle401Error(httpClient, apiService, req, next);
19
- }
20
- console.error(error);
21
- toastService.showToast({
22
- type: 'error',
23
- text: error.error.debugMessage ?? error.error.message ?? error.message,
24
- });
25
- return throwError(() => error);
26
- }));
27
- };
28
- const getToken = (req, apiService) => {
29
- const jwt = apiService.userToken();
30
- if (!req.url.includes('/auth/') && req.url.includes(apiService.baseUrl) && jwt) {
31
- const headers = req.headers.set('Authorization', `Bearer ${jwt}`);
32
- return req.clone({
33
- headers,
34
- });
35
- }
36
- return req;
37
- };
38
- const handle401Error = (httpClient, apiService, request, next) => {
39
- return httpClient.post(apiService.baseUrl + '/auth/refresh-token', {}, { withCredentials: true }).pipe(switchMap((response) => {
40
- apiService.initUser(response);
41
- return next(getToken(request, apiService));
42
- }));
43
- };
44
-
45
8
  class ApiResourceService {
46
9
  url = signal(undefined, ...(ngDevMode ? [{ debugName: "url" }] : /* istanbul ignore next */ []));
47
10
  resource = httpResource(() => ({
@@ -77,17 +40,11 @@ class ApiService {
77
40
  httpClient = inject(HttpClient);
78
41
  toastService = inject(ToastService);
79
42
  platformService = inject(PlatformService);
80
- userConnected = signal(null, ...(ngDevMode ? [{ debugName: "userConnected" }] : /* istanbul ignore next */ []));
81
- userToken = signal('', ...(ngDevMode ? [{ debugName: "userToken" }] : /* istanbul ignore next */ []));
82
43
  load = signal(false, ...(ngDevMode ? [{ debugName: "load" }] : /* istanbul ignore next */ []));
83
44
  baseUrl = '';
84
45
  setBaseUrl(url) {
85
46
  this.baseUrl = url;
86
47
  }
87
- initUser(user = null) {
88
- this.userConnected.set(user);
89
- this.userToken.set(user?.['jwt'] ?? '');
90
- }
91
48
  get(url, callback) {
92
49
  this.doSubscribe(url, this.httpClient.get(this.baseUrl + url), callback);
93
50
  }
@@ -211,5 +168,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
211
168
  * Generated bundle index. Do not edit.
212
169
  */
213
170
 
214
- export { ApiResourceService, ApiService, BaseSearchService, authInterceptor };
171
+ export { ApiResourceService, ApiService, BaseSearchService };
215
172
  //# sourceMappingURL=ng-vagabond-lab-ng-dsv-api.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ng-vagabond-lab-ng-dsv-api.mjs","sources":["../../../projects/ng-dsv/api/interceptor/api.interceptor.ts","../../../projects/ng-dsv/api/service/api.resource.service.ts","../../../projects/ng-dsv/api/service/api.service.ts","../../../projects/ng-dsv/api/service/search/base.search.service.ts","../../../projects/ng-dsv/api/ng-vagabond-lab-ng-dsv-api.ts"],"sourcesContent":["import { HttpClient, HttpErrorResponse, HttpHandlerFn, HttpRequest } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { ToastService } from '@ng-vagabond-lab/ng-dsv/ds/toast';\nimport { catchError, switchMap, throwError } from 'rxjs';\nimport { ApiService } from '../public-api';\n\nexport const authInterceptor = (req: HttpRequest<unknown>, next: HttpHandlerFn) => {\n const httpClient = inject(HttpClient);\n const apiService = inject(ApiService);\n const toastService = inject(ToastService);\n\n return next(getToken(req, apiService)).pipe(\n catchError((error) => {\n if (\n error instanceof HttpErrorResponse &&\n !req.url.includes('auth/') &&\n req.url.includes(apiService.baseUrl) &&\n error.status === 401\n ) {\n return handle401Error(httpClient, apiService, req, next);\n }\n\n console.error(error);\n\n toastService.showToast({\n type: 'error',\n text: error.error.debugMessage ?? error.error.message ?? error.message,\n });\n\n return throwError(() => error);\n }),\n );\n};\n\nconst getToken = <T>(req: HttpRequest<T>, apiService: ApiService) => {\n const jwt = apiService.userToken();\n if (!req.url.includes('/auth/') && req.url.includes(apiService.baseUrl) && jwt) {\n const headers = req.headers.set('Authorization', `Bearer ${jwt}`);\n\n return req.clone({\n headers,\n });\n }\n return req;\n};\n\nconst handle401Error = <T>(\n httpClient: HttpClient,\n apiService: ApiService,\n request: HttpRequest<T>,\n next: HttpHandlerFn,\n) => {\n return httpClient.post(apiService.baseUrl + '/auth/refresh-token', {}, { withCredentials: true }).pipe(\n switchMap((response) => {\n apiService.initUser(response);\n\n return next(getToken(request, apiService));\n }),\n );\n};\n","import { httpResource } from '@angular/common/http';\nimport { Injectable, ResourceRef, signal } from '@angular/core';\nimport { OrderState } from '../public-api';\n\nexport interface ApiFindBy {\n endPoint?: string;\n fields?: string;\n values?: string;\n first?: number;\n max?: number;\n order?: OrderState;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ApiResourceService<T> {\n url = signal<string | undefined>(undefined);\n\n resource: ResourceRef<T | undefined> = httpResource(() => ({\n url: `${this.url()}`,\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n params: {},\n reportProgress: true,\n transferCache: true,\n keepalive: true,\n mode: 'same-origin',\n redirect: 'error',\n priority: 'high',\n cache: 'force-cache',\n credentials: 'include',\n referrer: 'no-referrer',\n integrity: 'sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GhEXAMPLEKEY=',\n }));\n\n constructor() {}\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable, signal } from '@angular/core';\nimport { ToastService } from '@ng-vagabond-lab/ng-dsv/ds/toast';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\nimport { Observable } from 'rxjs';\nimport { ApiDto, ID, JSONObject, OrderState } from '../dto/api.dto';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ApiService {\n readonly httpClient = inject(HttpClient);\n readonly toastService = inject(ToastService);\n readonly platformService = inject(PlatformService);\n\n userConnected = signal<JSONObject | null>(null);\n userToken = signal<string>('');\n\n load = signal<boolean>(false);\n baseUrl: string = '';\n\n setBaseUrl(url: string) {\n this.baseUrl = url;\n }\n\n initUser(user: JSONObject | null = null) {\n this.userConnected.set(user);\n this.userToken.set(user?.['jwt' as keyof JSONObject] ?? '');\n }\n\n get<T>(url: string, callback: (data: T) => void) {\n this.doSubscribe(url, this.httpClient.get<T>(this.baseUrl + url), callback);\n }\n\n post<T>(url: string, data: T, callback: (data: T) => void, withCredentials: boolean = false) {\n this.doSubscribe(\n url,\n this.httpClient.post<T>(this.baseUrl + url, data, { withCredentials }),\n callback,\n );\n }\n\n put<T>(url: string, data: T, callback: (data: T) => void) {\n this.doSubscribe(url, this.httpClient.put<T>(this.baseUrl + url, data), callback);\n }\n\n delete<T>(url: string, callback: (data: T) => void) {\n this.doSubscribe(url, this.httpClient.delete<T>(this.baseUrl + url), callback);\n }\n\n findById<T>(endPoint: string, id: ID, callback: (data: T) => void) {\n this.get<T>(endPoint + '/' + id, callback);\n }\n\n findBy<T>(\n endPoint: string,\n fields: string,\n values: string,\n first: number,\n max: number,\n order: OrderState,\n callback: (data: T) => void,\n ) {\n const orderType: string = order.orderAsc ? '' : 'Desc';\n const orderConst: string = order.order ? '>>' + order.order + orderType : '';\n const fieldsComplete = fields + orderConst;\n this.get<T>(\n endPoint +\n '?fields=' +\n encodeURI(fieldsComplete) +\n '&values=' +\n encodeURI(values) +\n '&first=' +\n first +\n '&max=' +\n max,\n (data: T) => {\n callback(data);\n },\n );\n }\n\n countBy(endPoint: string, fields: string, values: string, callback: (data: { count: number }) => void) {\n return this.get<{ count: number }>(\n endPoint + '?fields=' + encodeURI(fields) + '&values=' + values,\n (data: { count: number }) => {\n callback(data);\n },\n );\n }\n\n createOrUpdate<T extends ApiDto>(endPoint: string, data: T, callback: (data: T) => void) {\n if (data.id !== null && data.id !== undefined && data.id !== '' && Number(data.id) > 0) {\n this.put<T>('/' + endPoint + '/', data, (dateReturn: T) => {\n this.toastService.showToast({ text: 'UPDATE_OK', type: 'success' });\n callback(dateReturn);\n });\n } else {\n this.post<T>('/' + endPoint + '/', data, (dateReturn: T) => {\n this.toastService.showToast({ text: 'CREATION_OK', type: 'success' });\n callback(dateReturn);\n });\n }\n }\n\n doSubscribe<T>(url: string, observable: Observable<T>, callback: (data: T) => void) {\n this.load.set(true);\n observable.subscribe({\n next: (res) => {\n this.load.set(false);\n this.info(url, res as JSONObject);\n callback(res);\n },\n error: (error: JSONObject) => {\n this.load.set(false);\n this.error(url, error);\n },\n });\n }\n\n info(url: string, data: JSONObject) {\n if (this.platformService.isPlatformBrowser()) {\n console.log(url, data);\n }\n }\n\n error(url: string, error: JSONObject) {\n if (this.platformService.isPlatformBrowser()) {\n console.error(url, error);\n }\n }\n}\n","import { inject, Injectable, signal } from '@angular/core';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\nimport { Store } from '@ng-vagabond-lab/ng-dsv/storage';\nimport { PageableDto } from '../../public-api';\nimport { ApiService } from '../api.service';\n\n@Injectable({ providedIn: 'root' })\nexport abstract class BaseSearchService<T> {\n readonly apiService = inject(ApiService);\n readonly platformService = inject(PlatformService);\n\n datas = new Store<T>();\n\n page = signal<number>(1);\n isLoading = signal<boolean>(false);\n stopLoad = signal<boolean>(false);\n search = signal<string>('');\n\n doLoad(\n url: string,\n search: string = '',\n page: number = 1,\n nbPage: number = 20,\n field: string = 'content',\n ) {\n const params = '?page=' + page + '&nbPage=' + nbPage + '&query=' + search;\n\n this.search.set(search);\n if (page === 1) {\n this.stopLoad.set(false);\n }\n if (this.stopLoad()) {\n return;\n }\n this.isLoading.set(true);\n this.apiService.get<PageableDto<T>>(url + params, (data) => {\n this.page.set(page + nbPage);\n this.datas.updateForPage(page, data[field as keyof PageableDto<T>] as T[]);\n if ((data[field as keyof PageableDto<T>] as T[])?.length === 0) {\n this.stopLoad.set(true);\n }\n this.isLoading.set(false);\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-vagabond-lab-ng-dsv-api.mjs","sources":["../../../projects/ng-dsv/api/service/api.resource.service.ts","../../../projects/ng-dsv/api/service/api.service.ts","../../../projects/ng-dsv/api/service/search/base.search.service.ts","../../../projects/ng-dsv/api/ng-vagabond-lab-ng-dsv-api.ts"],"sourcesContent":["import { httpResource } from '@angular/common/http';\nimport { Injectable, ResourceRef, signal } from '@angular/core';\nimport { OrderState } from '../public-api';\n\nexport interface ApiFindBy {\n endPoint?: string;\n fields?: string;\n values?: string;\n first?: number;\n max?: number;\n order?: OrderState;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ApiResourceService<T> {\n url = signal<string | undefined>(undefined);\n\n resource: ResourceRef<T | undefined> = httpResource(() => ({\n url: `${this.url()}`,\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n params: {},\n reportProgress: true,\n transferCache: true,\n keepalive: true,\n mode: 'same-origin',\n redirect: 'error',\n priority: 'high',\n cache: 'force-cache',\n credentials: 'include',\n referrer: 'no-referrer',\n integrity: 'sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GhEXAMPLEKEY=',\n }));\n\n constructor() {}\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable, signal } from '@angular/core';\nimport { ToastService } from '@ng-vagabond-lab/ng-dsv/ds/toast';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\nimport { Observable } from 'rxjs';\nimport { ApiDto, ID, JSONObject, OrderState } from '../dto/api.dto';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ApiService {\n readonly httpClient = inject(HttpClient);\n readonly toastService = inject(ToastService);\n readonly platformService = inject(PlatformService);\n\n load = signal<boolean>(false);\n baseUrl: string = '';\n\n setBaseUrl(url: string) {\n this.baseUrl = url;\n }\n\n get<T>(url: string, callback: (data: T) => void) {\n this.doSubscribe(url, this.httpClient.get<T>(this.baseUrl + url), callback);\n }\n\n post<T>(url: string, data: T, callback: (data: T) => void, withCredentials: boolean = false) {\n this.doSubscribe(\n url,\n this.httpClient.post<T>(this.baseUrl + url, data, { withCredentials }),\n callback,\n );\n }\n\n put<T>(url: string, data: T, callback: (data: T) => void) {\n this.doSubscribe(url, this.httpClient.put<T>(this.baseUrl + url, data), callback);\n }\n\n delete<T>(url: string, callback: (data: T) => void) {\n this.doSubscribe(url, this.httpClient.delete<T>(this.baseUrl + url), callback);\n }\n\n findById<T>(endPoint: string, id: ID, callback: (data: T) => void) {\n this.get<T>(endPoint + '/' + id, callback);\n }\n\n findBy<T>(\n endPoint: string,\n fields: string,\n values: string,\n first: number,\n max: number,\n order: OrderState,\n callback: (data: T) => void,\n ) {\n const orderType: string = order.orderAsc ? '' : 'Desc';\n const orderConst: string = order.order ? '>>' + order.order + orderType : '';\n const fieldsComplete = fields + orderConst;\n this.get<T>(\n endPoint +\n '?fields=' +\n encodeURI(fieldsComplete) +\n '&values=' +\n encodeURI(values) +\n '&first=' +\n first +\n '&max=' +\n max,\n (data: T) => {\n callback(data);\n },\n );\n }\n\n countBy(endPoint: string, fields: string, values: string, callback: (data: { count: number }) => void) {\n return this.get<{ count: number }>(\n endPoint + '?fields=' + encodeURI(fields) + '&values=' + values,\n (data: { count: number }) => {\n callback(data);\n },\n );\n }\n\n createOrUpdate<T extends ApiDto>(endPoint: string, data: T, callback: (data: T) => void) {\n if (data.id !== null && data.id !== undefined && data.id !== '' && Number(data.id) > 0) {\n this.put<T>('/' + endPoint + '/', data, (dateReturn: T) => {\n this.toastService.showToast({ text: 'UPDATE_OK', type: 'success' });\n callback(dateReturn);\n });\n } else {\n this.post<T>('/' + endPoint + '/', data, (dateReturn: T) => {\n this.toastService.showToast({ text: 'CREATION_OK', type: 'success' });\n callback(dateReturn);\n });\n }\n }\n\n doSubscribe<T>(url: string, observable: Observable<T>, callback: (data: T) => void) {\n this.load.set(true);\n observable.subscribe({\n next: (res) => {\n this.load.set(false);\n this.info(url, res as JSONObject);\n callback(res);\n },\n error: (error: JSONObject) => {\n this.load.set(false);\n this.error(url, error);\n },\n });\n }\n\n info(url: string, data: JSONObject) {\n if (this.platformService.isPlatformBrowser()) {\n console.log(url, data);\n }\n }\n\n error(url: string, error: JSONObject) {\n if (this.platformService.isPlatformBrowser()) {\n console.error(url, error);\n }\n }\n}\n","import { inject, Injectable, signal } from '@angular/core';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\nimport { Store } from '@ng-vagabond-lab/ng-dsv/storage';\nimport { PageableDto } from '../../public-api';\nimport { ApiService } from '../api.service';\n\n@Injectable({ providedIn: 'root' })\nexport abstract class BaseSearchService<T> {\n readonly apiService = inject(ApiService);\n readonly platformService = inject(PlatformService);\n\n datas = new Store<T>();\n\n page = signal<number>(1);\n isLoading = signal<boolean>(false);\n stopLoad = signal<boolean>(false);\n search = signal<string>('');\n\n doLoad(\n url: string,\n search: string = '',\n page: number = 1,\n nbPage: number = 20,\n field: string = 'content',\n ) {\n const params = '?page=' + page + '&nbPage=' + nbPage + '&query=' + search;\n\n this.search.set(search);\n if (page === 1) {\n this.stopLoad.set(false);\n }\n if (this.stopLoad()) {\n return;\n }\n this.isLoading.set(true);\n this.apiService.get<PageableDto<T>>(url + params, (data) => {\n this.page.set(page + nbPage);\n this.datas.updateForPage(page, data[field as keyof PageableDto<T>] as T[]);\n if ((data[field as keyof PageableDto<T>] as T[])?.length === 0) {\n this.stopLoad.set(true);\n }\n this.isLoading.set(false);\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -6,6 +6,9 @@ import { EnvironmentService } from '@ng-vagabond-lab/ng-dsv/environment';
6
6
  import { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';
7
7
  import { ApiService } from '@ng-vagabond-lab/ng-dsv/api';
8
8
  import { Router } from '@angular/router';
9
+ import { HttpClient, HttpErrorResponse } from '@angular/common/http';
10
+ import { ToastService } from '@ng-vagabond-lab/ng-dsv/ds/toast';
11
+ import { catchError, throwError, switchMap } from 'rxjs';
9
12
 
10
13
  class AuthComponent {
11
14
  authService = inject(AuthService);
@@ -15,16 +18,15 @@ class AuthComponent {
15
18
  callbackInitMember = output();
16
19
  callbackLogout = output();
17
20
  constructor() {
18
- // effect(() => {
19
- // if (this.environmentService.env() && this.platformService.isPlatformBrowser()) {
20
- // this.authGoogleService.initGoogleAuth();
21
- // //this.authService.loginFromCache();
22
- // }
23
- // });
21
+ effect(() => {
22
+ if (this.environmentService.env() && this.platformService.isPlatformBrowser()) {
23
+ this.authGoogleService.initGoogleAuth();
24
+ this.authService.refreshToken();
25
+ }
26
+ });
24
27
  effect(() => {
25
28
  if (this.environmentService.env() && this.platformService.isPlatformBrowser()) {
26
29
  if (this.authService.userConnected() === null) {
27
- this.authGoogleService.initGoogleAuth();
28
30
  this.authGoogleService.loginWithGoogle();
29
31
  }
30
32
  else {
@@ -65,31 +67,74 @@ const authGuard = (route) => {
65
67
  return false;
66
68
  };
67
69
 
70
+ const authInterceptor = (req, next) => {
71
+ const httpClient = inject(HttpClient);
72
+ const authService = inject(AuthService);
73
+ const toastService = inject(ToastService);
74
+ return next(getToken(req, authService)).pipe(catchError((error) => {
75
+ if (error instanceof HttpErrorResponse &&
76
+ !req.url.includes('auth/') &&
77
+ req.url.includes(authService.apiService.baseUrl) &&
78
+ error.status === 401) {
79
+ return handle401Error(httpClient, authService, req, next);
80
+ }
81
+ console.error(error);
82
+ toastService.showToast({
83
+ type: 'error',
84
+ text: error.error.debugMessage ?? error.error.message ?? error.message,
85
+ });
86
+ return throwError(() => error);
87
+ }));
88
+ };
89
+ const getToken = (req, authService) => {
90
+ const jwt = authService.userToken();
91
+ if (!req.url.includes('/auth/') && req.url.includes(authService.apiService.baseUrl) && jwt) {
92
+ const headers = req.headers.set('Authorization', `Bearer ${jwt}`);
93
+ return req.clone({
94
+ headers,
95
+ });
96
+ }
97
+ return req;
98
+ };
99
+ const handle401Error = (httpClient, authService, request, next) => {
100
+ return httpClient
101
+ .post(authService.apiService.baseUrl + '/auth/refresh-token', {}, { withCredentials: true })
102
+ .pipe(switchMap((response) => {
103
+ authService.initUser(response);
104
+ return next(getToken(request, authService));
105
+ }));
106
+ };
107
+
68
108
  class AuthService {
69
109
  apiService = inject(ApiService);
70
110
  userConnected = signal(null, ...(ngDevMode ? [{ debugName: "userConnected" }] : /* istanbul ignore next */ []));
71
- constructor() {
72
- effect(() => {
73
- this.userConnected.set(this.apiService.userConnected());
74
- });
111
+ userToken = signal('', ...(ngDevMode ? [{ debugName: "userToken" }] : /* istanbul ignore next */ []));
112
+ initUser(user = null) {
113
+ this.userConnected.set(user);
114
+ this.userToken.set(user?.['jwt'] ?? '');
75
115
  }
76
116
  googleLogin(credential) {
77
117
  this.apiService.post('auth/google-identity-connect', {
78
118
  googleToken: credential,
79
119
  }, (data) => {
80
- this.apiService.initUser(data);
120
+ this.initUser(data);
81
121
  this.apiService.toastService.showToast({
82
122
  type: 'success',
83
123
  text: 'Connexion réussie',
84
124
  });
85
125
  }, true);
86
126
  }
127
+ refreshToken() {
128
+ this.apiService.post('auth/refresh-token', {}, (data) => this.initUser(data), true);
129
+ }
87
130
  logout() {
88
- this.apiService.initUser();
89
- this.apiService.toastService.showToast({
90
- type: 'success',
91
- text: 'Déconnexion réussie',
92
- });
131
+ this.apiService.post('auth/logout', {}, () => {
132
+ this.initUser();
133
+ this.apiService.toastService.showToast({
134
+ type: 'success',
135
+ text: 'Déconnexion réussie',
136
+ });
137
+ }, true);
93
138
  }
94
139
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AuthService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
95
140
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AuthService, providedIn: 'root' });
@@ -99,7 +144,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
99
144
  args: [{
100
145
  providedIn: 'root',
101
146
  }]
102
- }], ctorParameters: () => [] });
147
+ }] });
103
148
 
104
149
  class AuthGoogleService {
105
150
  authService = inject(AuthService);
@@ -147,5 +192,5 @@ const hasRole = (roles, userRoles) => {
147
192
  * Generated bundle index. Do not edit.
148
193
  */
149
194
 
150
- export { AuthComponent, AuthGoogleService, AuthService, authGuard, hasRole };
195
+ export { AuthComponent, AuthGoogleService, AuthService, authGuard, authInterceptor, hasRole };
151
196
  //# sourceMappingURL=ng-vagabond-lab-ng-dsv-modules-auth.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ng-vagabond-lab-ng-dsv-modules-auth.mjs","sources":["../../../projects/ng-dsv/modules/auth/component/auth.component.ts","../../../projects/ng-dsv/modules/auth/component/auth.component.html","../../../projects/ng-dsv/modules/auth/guard/auth.guard.ts","../../../projects/ng-dsv/modules/auth/service/auth.service.ts","../../../projects/ng-dsv/modules/auth/service/auth.google.service.ts","../../../projects/ng-dsv/modules/auth/utils/auth.utils.ts","../../../projects/ng-dsv/modules/auth/ng-vagabond-lab-ng-dsv-modules-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 { ModalAlertComponent, ModalButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/modal';\nimport { EnvironmentService } from '@ng-vagabond-lab/ng-dsv/environment';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\nimport { AuthGoogleService, AuthService } from '../public-api';\n\n@Component({\n selector: 'dsv-auth',\n imports: [CommonModule, ModalButtonComponent, ModalAlertComponent],\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 readonly environmentService = inject(EnvironmentService);\n readonly platformService = inject(PlatformService);\n\n callbackInitMember = output<ID>();\n callbackLogout = output<void>();\n\n constructor() {\n // effect(() => {\n // if (this.environmentService.env() && this.platformService.isPlatformBrowser()) {\n // this.authGoogleService.initGoogleAuth();\n // //this.authService.loginFromCache();\n // }\n // });\n effect(() => {\n if (this.environmentService.env() && this.platformService.isPlatformBrowser()) {\n if (this.authService.userConnected() === null) {\n this.authGoogleService.initGoogleAuth();\n this.authGoogleService.loginWithGoogle();\n } else {\n this.callbackInitMember.emit(this.authService.userConnected()?.user?.id);\n }\n }\n });\n }\n\n logout() {\n this.authService.logout();\n this.callbackLogout.emit();\n }\n}\n","<div class=\"auth-button\">\n <button\n id=\"google-signin-button\"\n [class.hidden]=\"authService.userConnected() !== null\"\n ></button>\n</div>\n\n@if (authService.userConnected()) {\n <div class=\"profile\">\n <img\n [src]=\"authService.userConnected()?.user?.avatar\"\n alt=\"profile\"\n />\n <dsv-modal-button\n id=\"logout\"\n icon=\"ri-logout-box-line\"\n />\n </div>\n <dsv-modal-alert\n id=\"logout\"\n title=\"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 { ActivatedRouteSnapshot, CanActivateFn, Router } from '@angular/router';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\nimport { AuthService, hasRole } from '../public-api';\n\nexport const authGuard: CanActivateFn = (route: ActivatedRouteSnapshot) => {\n const platformService = inject(PlatformService);\n\n if (!platformService.isPlatformBrowser()) {\n return true;\n }\n\n const authService = inject(AuthService);\n const router = inject(Router);\n\n const requiredRole = route.data['role'];\n\n if (!requiredRole) {\n console.warn('No role specified in route data.');\n return false;\n }\n\n const profiles = authService.userConnected()?.user?.profiles;\n if (hasRole(requiredRole, profiles)) {\n return true;\n }\n\n router.navigate(['/']);\n return false;\n};\n","import { effect, inject, Injectable, signal } from '@angular/core';\nimport { ApiService, JSONObject } from '@ng-vagabond-lab/ng-dsv/api';\nimport { UserConnectedDto } from '../dto/user.dto';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthService {\n apiService = inject(ApiService);\n\n userConnected = signal<UserConnectedDto | null>(null);\n\n constructor() {\n effect(() => {\n this.userConnected.set(this.apiService.userConnected() as UserConnectedDto);\n });\n }\n\n googleLogin(credential: string) {\n this.apiService.post<UserConnectedDto>(\n 'auth/google-identity-connect',\n {\n googleToken: credential,\n },\n (data) => {\n this.apiService.initUser(data as JSONObject);\n this.apiService.toastService.showToast({\n type: 'success',\n text: 'Connexion réussie',\n });\n },\n true,\n );\n }\n\n logout() {\n this.apiService.initUser();\n this.apiService.toastService.showToast({\n type: 'success',\n text: 'Déconnexion réussie',\n });\n }\n}\n","import { inject, Injectable } 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 private readonly authService = inject(AuthService);\n private readonly environmentService = inject(EnvironmentService);\n\n initGoogleAuth(googleButtonid: string = 'google-signin-button') {\n google.accounts.id.initialize({\n client_id: this.environmentService.env()?.GOOGLE_CLIENT_ID,\n callback: this.handleCredentialResponse.bind(this),\n });\n google.accounts.id.renderButton(document.getElementById(googleButtonid)!, {\n theme: 'outline',\n size: 'medium',\n type: 'icon',\n });\n }\n\n handleCredentialResponse(response: { credential: string }) {\n this.authService.googleLogin(response.credential);\n }\n\n loginWithGoogle() {\n google.accounts.id.prompt();\n }\n}\n","import { ApiDto } from '@ng-vagabond-lab/ng-dsv/api';\n\nexport const hasRole = (roles: string, userRoles?: ApiDto[]) => {\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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"}
1
+ {"version":3,"file":"ng-vagabond-lab-ng-dsv-modules-auth.mjs","sources":["../../../projects/ng-dsv/modules/auth/component/auth.component.ts","../../../projects/ng-dsv/modules/auth/component/auth.component.html","../../../projects/ng-dsv/modules/auth/guard/auth.guard.ts","../../../projects/ng-dsv/modules/auth/interceptor/auth.interceptor.ts","../../../projects/ng-dsv/modules/auth/service/auth.service.ts","../../../projects/ng-dsv/modules/auth/service/auth.google.service.ts","../../../projects/ng-dsv/modules/auth/utils/auth.utils.ts","../../../projects/ng-dsv/modules/auth/ng-vagabond-lab-ng-dsv-modules-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 { ModalAlertComponent, ModalButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/modal';\nimport { EnvironmentService } from '@ng-vagabond-lab/ng-dsv/environment';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\nimport { AuthGoogleService, AuthService } from '../public-api';\n\n@Component({\n selector: 'dsv-auth',\n imports: [CommonModule, ModalButtonComponent, ModalAlertComponent],\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 readonly environmentService = inject(EnvironmentService);\n readonly platformService = inject(PlatformService);\n\n callbackInitMember = output<ID>();\n callbackLogout = output<void>();\n\n constructor() {\n effect(() => {\n if (this.environmentService.env() && this.platformService.isPlatformBrowser()) {\n this.authGoogleService.initGoogleAuth();\n this.authService.refreshToken();\n }\n });\n effect(() => {\n if (this.environmentService.env() && this.platformService.isPlatformBrowser()) {\n if (this.authService.userConnected() === null) {\n this.authGoogleService.loginWithGoogle();\n } else {\n this.callbackInitMember.emit(this.authService.userConnected()?.user?.id);\n }\n }\n });\n }\n\n logout() {\n this.authService.logout();\n this.callbackLogout.emit();\n }\n}\n","<div class=\"auth-button\">\n <button\n id=\"google-signin-button\"\n [class.hidden]=\"authService.userConnected() !== null\"\n ></button>\n</div>\n\n@if (authService.userConnected()) {\n <div class=\"profile\">\n <img\n [src]=\"authService.userConnected()?.user?.avatar\"\n alt=\"profile\"\n />\n <dsv-modal-button\n id=\"logout\"\n icon=\"ri-logout-box-line\"\n />\n </div>\n <dsv-modal-alert\n id=\"logout\"\n title=\"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 { ActivatedRouteSnapshot, CanActivateFn, Router } from '@angular/router';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\nimport { AuthService, hasRole } from '../public-api';\n\nexport const authGuard: CanActivateFn = (route: ActivatedRouteSnapshot) => {\n const platformService = inject(PlatformService);\n\n if (!platformService.isPlatformBrowser()) {\n return true;\n }\n\n const authService = inject(AuthService);\n const router = inject(Router);\n\n const requiredRole = route.data['role'];\n\n if (!requiredRole) {\n console.warn('No role specified in route data.');\n return false;\n }\n\n const profiles = authService.userConnected()?.user?.profiles;\n if (hasRole(requiredRole, profiles)) {\n return true;\n }\n\n router.navigate(['/']);\n return false;\n};\n","import { HttpClient, HttpErrorResponse, HttpHandlerFn, HttpRequest } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { ToastService } from '@ng-vagabond-lab/ng-dsv/ds/toast';\nimport { catchError, switchMap, throwError } from 'rxjs';\nimport { AuthService } from '../public-api';\n\nexport const authInterceptor = (req: HttpRequest<unknown>, next: HttpHandlerFn) => {\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 console.error(error);\n\n toastService.showToast({\n type: 'error',\n text: error.error.debugMessage ?? error.error.message ?? error.message,\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 const headers = req.headers.set('Authorization', `Bearer ${jwt}`);\n\n return req.clone({\n headers,\n });\n }\n return req;\n};\n\nconst handle401Error = <T>(\n httpClient: HttpClient,\n authService: AuthService,\n request: HttpRequest<T>,\n next: HttpHandlerFn,\n) => {\n return httpClient\n .post(authService.apiService.baseUrl + '/auth/refresh-token', {}, { withCredentials: true })\n .pipe(\n switchMap((response) => {\n authService.initUser(response);\n return next(getToken(request, authService));\n }),\n );\n};\n","import { inject, Injectable, signal } from '@angular/core';\nimport { ApiService, JSONObject } from '@ng-vagabond-lab/ng-dsv/api';\nimport { UserConnectedDto } from '../dto/user.dto';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthService {\n apiService = inject(ApiService);\n\n userConnected = signal<UserConnectedDto | null>(null);\n userToken = signal<string>('');\n\n initUser(user: UserConnectedDto | null = null) {\n this.userConnected.set(user);\n this.userToken.set(user?.['jwt' as keyof JSONObject] ?? '');\n }\n\n googleLogin(credential: string) {\n this.apiService.post<UserConnectedDto>(\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() {\n this.apiService.post<UserConnectedDto>('auth/refresh-token', {}, (data) => this.initUser(data), true);\n }\n\n logout() {\n this.apiService.post<UserConnectedDto>(\n 'auth/logout',\n {},\n () => {\n this.initUser();\n this.apiService.toastService.showToast({\n type: 'success',\n text: 'Déconnexion réussie',\n });\n },\n true,\n );\n }\n}\n","import { inject, Injectable } 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 private readonly authService = inject(AuthService);\n private readonly environmentService = inject(EnvironmentService);\n\n initGoogleAuth(googleButtonid: string = 'google-signin-button') {\n google.accounts.id.initialize({\n client_id: this.environmentService.env()?.GOOGLE_CLIENT_ID,\n callback: this.handleCredentialResponse.bind(this),\n });\n google.accounts.id.renderButton(document.getElementById(googleButtonid)!, {\n theme: 'outline',\n size: 'medium',\n type: 'icon',\n });\n }\n\n handleCredentialResponse(response: { credential: string }) {\n this.authService.googleLogin(response.credential);\n }\n\n loginWithGoogle() {\n google.accounts.id.prompt();\n }\n}\n","import { ApiDto } from '@ng-vagabond-lab/ng-dsv/api';\n\nexport const hasRole = (roles: string, userRoles?: ApiDto[]) => {\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.1.88",
3
+ "version": "0.1.91",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.0.0",
6
6
  "@angular/core": "^20.0.0"
@@ -1,11 +1,9 @@
1
- import * as rxjs from 'rxjs';
2
- import { Observable } from 'rxjs';
3
- import * as _angular_common_http from '@angular/common/http';
4
- import { HttpRequest, HttpHandlerFn, HttpClient } from '@angular/common/http';
5
1
  import * as _angular_core from '@angular/core';
6
2
  import { ResourceRef } from '@angular/core';
3
+ import { HttpClient } from '@angular/common/http';
7
4
  import { ToastService } from '@ng-vagabond-lab/ng-dsv/ds/toast';
8
5
  import { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';
6
+ import { Observable } from 'rxjs';
9
7
  import { Store } from '@ng-vagabond-lab/ng-dsv/storage';
10
8
 
11
9
  type ID = string | number | undefined | null;
@@ -68,8 +66,6 @@ interface PageableDto<T> {
68
66
  empty?: boolean;
69
67
  }
70
68
 
71
- declare const authInterceptor: (req: HttpRequest<unknown>, next: HttpHandlerFn) => rxjs.Observable<_angular_common_http.HttpEvent<unknown>>;
72
-
73
69
  interface ApiFindBy {
74
70
  endPoint?: string;
75
71
  fields?: string;
@@ -90,12 +86,9 @@ declare class ApiService {
90
86
  readonly httpClient: HttpClient;
91
87
  readonly toastService: ToastService;
92
88
  readonly platformService: PlatformService;
93
- userConnected: _angular_core.WritableSignal<JSONObject | null>;
94
- userToken: _angular_core.WritableSignal<string>;
95
89
  load: _angular_core.WritableSignal<boolean>;
96
90
  baseUrl: string;
97
91
  setBaseUrl(url: string): void;
98
- initUser(user?: JSONObject | null): void;
99
92
  get<T>(url: string, callback: (data: T) => void): void;
100
93
  post<T>(url: string, data: T, callback: (data: T) => void, withCredentials?: boolean): void;
101
94
  put<T>(url: string, data: T, callback: (data: T) => void): void;
@@ -126,5 +119,5 @@ declare abstract class BaseSearchService<T> {
126
119
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<BaseSearchService<any>>;
127
120
  }
128
121
 
129
- export { ApiResourceService, ApiService, BaseSearchService, authInterceptor };
122
+ export { ApiResourceService, ApiService, BaseSearchService };
130
123
  export type { ApiDto, ApiFindBy, BaseUserConnectedDto, ID, JSON, JSONObject, JSONValue, OrderState, PageableDto, Primitif, Target };
@@ -3,6 +3,9 @@ import { ID, BaseUserConnectedDto, ApiDto, ApiService } from '@ng-vagabond-lab/n
3
3
  import { EnvironmentService } from '@ng-vagabond-lab/ng-dsv/environment';
4
4
  import { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';
5
5
  import { CanActivateFn } from '@angular/router';
6
+ import * as rxjs from 'rxjs';
7
+ import * as _angular_common_http from '@angular/common/http';
8
+ import { HttpRequest, HttpHandlerFn } from '@angular/common/http';
6
9
 
7
10
  declare class AuthComponent {
8
11
  readonly authService: AuthService;
@@ -28,7 +31,6 @@ interface UserDto extends ApiDto {
28
31
  interface UserConnectedDto extends BaseUserConnectedDto {
29
32
  googleToken?: string;
30
33
  jwt?: string;
31
- jwtRefresh?: string;
32
34
  user?: UserDto;
33
35
  }
34
36
  interface GoogleRequest {
@@ -37,6 +39,8 @@ interface GoogleRequest {
37
39
 
38
40
  declare const authGuard: CanActivateFn;
39
41
 
42
+ declare const authInterceptor: (req: HttpRequest<unknown>, next: HttpHandlerFn) => rxjs.Observable<_angular_common_http.HttpEvent<unknown>>;
43
+
40
44
  declare class AuthGoogleService {
41
45
  private readonly authService;
42
46
  private readonly environmentService;
@@ -52,8 +56,10 @@ declare class AuthGoogleService {
52
56
  declare class AuthService {
53
57
  apiService: ApiService;
54
58
  userConnected: i0.WritableSignal<UserConnectedDto | null>;
55
- constructor();
59
+ userToken: i0.WritableSignal<string>;
60
+ initUser(user?: UserConnectedDto | null): void;
56
61
  googleLogin(credential: string): void;
62
+ refreshToken(): void;
57
63
  logout(): void;
58
64
  static ɵfac: i0.ɵɵFactoryDeclaration<AuthService, never>;
59
65
  static ɵprov: i0.ɵɵInjectableDeclaration<AuthService>;
@@ -61,5 +67,5 @@ declare class AuthService {
61
67
 
62
68
  declare const hasRole: (roles: string, userRoles?: ApiDto[]) => boolean;
63
69
 
64
- export { AuthComponent, AuthGoogleService, AuthService, authGuard, hasRole };
70
+ export { AuthComponent, AuthGoogleService, AuthService, authGuard, authInterceptor, hasRole };
65
71
  export type { GoogleRequest, UserConnectedDto, UserDto };