@von-development-studio/angular-rest-service 18.2.0 → 20.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,9 +7,6 @@ class VonRestInterceptorService {
7
7
  consoleDebug = false;
8
8
  errorResponseUnknown = 'Unknown Error';
9
9
  errorResponseForbidden = 'Forbidden Error';
10
- urlWhoAmI = 'api/who-am-i';
11
- redirectOn403 = true;
12
- redirect403Url = ['403'];
13
10
  constructor(router) {
14
11
  this.router = router;
15
12
  }
@@ -18,10 +15,11 @@ class VonRestInterceptorService {
18
15
  .handle(request)
19
16
  .pipe(map(this.mapEvent), catchError(this.catchError));
20
17
  }
21
- postHttpRequest = () => { };
22
18
  mapEvent = (event) => {
23
19
  if (event instanceof HttpResponse) {
24
20
  if (event.status === 200 || event.status === 204) {
21
+ this.executeBeforePipesOnSuccess();
22
+ // TODO: Remove this call
25
23
  this.postHttpRequest();
26
24
  return event;
27
25
  }
@@ -56,15 +54,56 @@ class VonRestInterceptorService {
56
54
  ? errorResponse.error
57
55
  : this.errorResponseForbidden;
58
56
  }
57
+ this.execute403Redirect();
58
+ // TODO: Remove all this section.
59
59
  if (this.redirectOn403) {
60
60
  if (errorResponse.status === 403 ||
61
61
  (errorResponse.url && errorResponse.url.indexOf(this.urlWhoAmI) > -1)) {
62
62
  this.router.navigate(this.redirect403Url);
63
63
  }
64
64
  }
65
+ this.execute403Redirect();
66
+ this.executeBeforePipesOnError();
67
+ // TODO: Remove this call
65
68
  this.postHttpRequest();
66
69
  return throwError(error);
67
70
  };
71
+ /**
72
+ * Execute custom implementation before any other pipe from the subscription.
73
+ */
74
+ executeBeforePipesOnSuccess = () => { };
75
+ /**
76
+ * Execute custom implementation before any other pipe from the subscription.
77
+ */
78
+ executeBeforePipesOnError = () => { };
79
+ /**
80
+ * Execute custom implementation to redirect to 403 page based on a specific condition.
81
+ */
82
+ execute403Redirect = () => { };
83
+ // ****
84
+ // ****
85
+ // ****
86
+ // TODO: Remove all below this line
87
+ // ****
88
+ /**
89
+ * @deprecated Use the new custom method execute403Redirect() to trigger redirect to 403. This property is marked to be removed.
90
+ * TODO: Remove this property
91
+ */
92
+ urlWhoAmI = 'api/who-am-i';
93
+ /**
94
+ * @deprecated Use the new custom method execute403Redirect() to trigger redirect to 403. This property is marked to be removed.
95
+ * TODO: Remove this property
96
+ */
97
+ redirectOn403 = true;
98
+ /**
99
+ * @deprecated Use the new custom method execute403Redirect() to trigger redirect to 403. This property is marked to be removed.
100
+ * TODO: Remove this property
101
+ */
102
+ redirect403Url = ['403'];
103
+ /**
104
+ * @deprecated Use either executeBeforePipesOnSuccess() or executeBeforePipesOnError() base on your case. This method is marked to be removed.
105
+ */
106
+ postHttpRequest = () => { };
68
107
  }
69
108
 
70
109
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"von-development-studio-angular-rest-service.mjs","sources":["../../../projects/ng-rest-service/src/lib/von-rest-interceptor.service.ts","../../../projects/ng-rest-service/src/lib/von-rest.service.ts","../../../projects/ng-rest-service/src/von-development-studio-angular-rest-service.ts"],"sourcesContent":["import {\n HttpErrorResponse,\n HttpEvent,\n HttpHandler,\n HttpInterceptor,\n HttpRequest,\n HttpResponse,\n} from '@angular/common/http';\nimport { Router } from '@angular/router';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { VonErrorRestInterceptorModel } from './models/von-error-rest-interceptor.model';\n\nexport abstract class VonRestInterceptorService implements HttpInterceptor {\n protected consoleDebug = false;\n protected errorResponseUnknown = 'Unknown Error';\n protected errorResponseForbidden = 'Forbidden Error';\n protected urlWhoAmI = 'api/who-am-i';\n protected redirectOn403 = true;\n protected redirect403Url = ['403'];\n\n constructor(protected router: Router) {}\n\n intercept(\n request: HttpRequest<any>,\n next: HttpHandler\n ): Observable<HttpEvent<any>> {\n return next\n .handle(request)\n .pipe(map(this.mapEvent), catchError(this.catchError));\n }\n\n protected postHttpRequest = () => {};\n\n protected mapEvent = (event: HttpEvent<any>) => {\n if (event instanceof HttpResponse) {\n if (event.status === 200 || event.status === 204) {\n this.postHttpRequest();\n return event;\n }\n if (event.status !== 200) {\n const error: VonErrorRestInterceptorModel = {\n status: event.status,\n message: event.statusText,\n body: event.body,\n };\n if (this.consoleDebug) {\n console.error('[ErrorWS]: ', error);\n }\n throw error;\n }\n }\n return event;\n };\n\n protected catchError = (errorResponse: HttpErrorResponse) => {\n if (this.consoleDebug) {\n console.error('[Fatal]: ', errorResponse);\n }\n const error: VonErrorRestInterceptorModel = {\n status: errorResponse.status,\n message: '',\n body: errorResponse.error || {},\n };\n if (errorResponse.status === 0) {\n error.message = this.errorResponseUnknown;\n }\n if (errorResponse.status === 401) {\n error.message = errorResponse.error\n ? errorResponse.error\n : this.errorResponseForbidden;\n }\n if (this.redirectOn403) {\n if (\n errorResponse.status === 403 ||\n (errorResponse.url && errorResponse.url.indexOf(this.urlWhoAmI) > -1)\n ) {\n this.router.navigate(this.redirect403Url);\n }\n }\n this.postHttpRequest();\n return throwError(error);\n };\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\nimport { Observable } from 'rxjs';\nimport { map, share, take } from 'rxjs/operators';\nimport { HeaderParams } from './models/von-header-params.model';\nimport { VonHttpOptionsModel } from './models/von-http-options.model';\nimport {\n BaseParams,\n BodyParams,\n GenericParams,\n} from './models/von-rest-definition.model';\n\n/**\n * Rest service wrapper for API calls. This class needs to be extended in a `@Injectable({ providedIn: 'root' })` service.\n * Parameters needed:\n * @HttpClient\n * @DomSanitizer\n */\nexport abstract class VonRestService {\n constructor(protected http: HttpClient, protected sanitizer: DomSanitizer) {}\n\n /**\n * Allows to set the default headers\n * @param headerParams Check HeaderParams interface to verify allowed overrides\n * @returns\n * ```json\n * {\n * \"Content-Type\": \"application/json\",\n * \"Accept\": \"application/json\",\n * \"Access-Control-Allow-Origin\": \"*\"\n * }\n * ```\n */\n protected setHeaders = (headerParams?: HeaderParams): HttpHeaders => {\n return new HttpHeaders({\n 'Content-Type': headerParams?.contentType ?? 'application/json',\n Accept: headerParams?.accept ?? 'application/json',\n 'Access-Control-Allow-Origin': '*',\n });\n };\n\n protected setOptions = ({\n headerParams,\n queryParams: params,\n }: {\n headerParams?: HeaderParams;\n queryParams?: GenericParams;\n } = {}): VonHttpOptionsModel => {\n const options: VonHttpOptionsModel = {\n headers: this.setHeaders(headerParams),\n params,\n withCredentials: true,\n };\n if (headerParams?.responseType) {\n options.responseType = headerParams.responseType;\n }\n return options;\n };\n\n protected setOptionsForFile = ({\n headerParams,\n queryParams,\n }: {\n headerParams?: HeaderParams;\n queryParams?: GenericParams;\n } = {}): VonHttpOptionsModel => {\n const options: VonHttpOptionsModel = {\n ...this.setOptions({\n headerParams,\n queryParams,\n }),\n headers: new HttpHeaders({\n Accept: headerParams?.accept ?? 'application/json',\n 'Access-Control-Allow-Origin': '*',\n }),\n };\n if (headerParams?.responseType) {\n options.responseType = headerParams.responseType;\n }\n return options;\n };\n\n protected setUrlParams = (url: string, params?: GenericParams) => {\n if (params != null) {\n for (const p in params) {\n if (p != null) {\n url = url.replace(`{${p}}`, params[p]);\n }\n }\n }\n return url;\n };\n\n authenticate = (\n url: string,\n username: string,\n password: string\n ): Observable<any> => {\n const authorization = btoa(`${username}:${password}`);\n const headers = new HttpHeaders({\n authorization: `Basic ${authorization}`,\n });\n return this.http\n .get(url, {\n headers,\n withCredentials: true,\n })\n .pipe(take(1), share());\n };\n\n get = <R = any>({\n url,\n urlParams,\n queryParams: params,\n headerParams,\n header: oldHeaderParams,\n params: oldParams,\n }: BaseParams): Observable<R> => {\n url = this.setUrlParams(url, urlParams);\n return this.http.get<R>(\n url,\n this.setOptions({\n headerParams: {\n ...headerParams,\n ...oldHeaderParams,\n },\n queryParams: {\n ...params,\n ...oldParams,\n },\n })\n );\n };\n\n delete = <R = any>({\n url,\n urlParams,\n queryParams: params,\n headerParams,\n header: oldHeaderParams,\n params: oldParams,\n }: BaseParams): Observable<R> => {\n url = this.setUrlParams(url, urlParams);\n return this.http.delete<R>(\n url,\n this.setOptions({\n headerParams: {\n ...headerParams,\n ...oldHeaderParams,\n },\n queryParams: {\n ...params,\n ...oldParams,\n },\n })\n );\n };\n\n post = <R = any, B = GenericParams | FormData>({\n url,\n body,\n urlParams,\n queryParams: params,\n headerParams,\n header: oldHeaderParams,\n params: oldParams,\n }: BodyParams<B>): Observable<R> => {\n url = this.setUrlParams(url, urlParams);\n const optionsParams = {\n headerParams: {\n ...headerParams,\n ...oldHeaderParams,\n },\n queryParams: {\n ...params,\n ...oldParams,\n },\n };\n let options =\n body && body instanceof FormData\n ? this.setOptionsForFile(optionsParams)\n : this.setOptions(optionsParams);\n return this.http.post<R>(url, body, options);\n };\n\n put = <R = any, B = GenericParams | FormData>({\n url,\n body,\n urlParams,\n queryParams: params,\n headerParams,\n header: oldHeaderParams,\n params: oldParams,\n }: BodyParams<B>): Observable<R> => {\n url = this.setUrlParams(url, urlParams);\n const optionsParams = {\n headerParams: {\n ...headerParams,\n ...oldHeaderParams,\n },\n queryParams: {\n ...params,\n ...oldParams,\n },\n };\n let options =\n body && body instanceof FormData\n ? this.setOptionsForFile(optionsParams)\n : this.setOptions(optionsParams);\n return this.http.put<R>(url, body, options);\n };\n\n patch = <R = any, B = GenericParams | FormData>({\n url,\n body,\n urlParams,\n queryParams: params,\n headerParams,\n header: oldHeaderParams,\n params: oldParams,\n }: BodyParams<B>): Observable<R> => {\n url = this.setUrlParams(url, urlParams);\n const optionsParams = {\n headerParams: {\n ...headerParams,\n ...oldHeaderParams,\n },\n queryParams: {\n ...params,\n ...oldParams,\n },\n };\n let options =\n body && body instanceof FormData\n ? this.setOptionsForFile(optionsParams)\n : this.setOptions(optionsParams);\n return this.http.patch<R>(url, body, options);\n };\n\n file = ({\n url,\n urlParams,\n queryParams: params,\n headerParams,\n header: oldHeaderParams,\n params: oldParams,\n }: BaseParams): Observable<SafeResourceUrl> => {\n url = this.setUrlParams(url, urlParams);\n return this.http\n .get(url, {\n ...this.setOptionsForFile({\n headerParams: {\n ...headerParams,\n ...oldHeaderParams,\n },\n queryParams: {\n ...params,\n ...oldParams,\n },\n }),\n responseType: 'blob' as 'json',\n })\n .pipe(\n map((res: any) => {\n const fileBlob = new Blob([res], { type: params?.['contentType'] });\n const objUrl = URL.createObjectURL(fileBlob);\n const sanitized =\n this.sanitizer.bypassSecurityTrustResourceUrl(objUrl);\n return sanitized;\n })\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":"von-development-studio-angular-rest-service.mjs","sources":["../../../projects/ng-rest-service/src/lib/von-rest-interceptor.service.ts","../../../projects/ng-rest-service/src/lib/von-rest.service.ts","../../../projects/ng-rest-service/src/von-development-studio-angular-rest-service.ts"],"sourcesContent":["import {\n HttpErrorResponse,\n HttpEvent,\n HttpHandler,\n HttpInterceptor,\n HttpRequest,\n HttpResponse,\n} from '@angular/common/http';\nimport { Router } from '@angular/router';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { VonErrorRestInterceptorModel } from './models/von-error-rest-interceptor.model';\n\nexport abstract class VonRestInterceptorService implements HttpInterceptor {\n protected consoleDebug = false;\n protected errorResponseUnknown = 'Unknown Error';\n protected errorResponseForbidden = 'Forbidden Error';\n\n constructor(protected router: Router) {}\n\n intercept(\n request: HttpRequest<any>,\n next: HttpHandler\n ): Observable<HttpEvent<any>> {\n return next\n .handle(request)\n .pipe(map(this.mapEvent), catchError(this.catchError));\n }\n\n protected mapEvent = (event: HttpEvent<any>) => {\n if (event instanceof HttpResponse) {\n if (event.status === 200 || event.status === 204) {\n this.executeBeforePipesOnSuccess();\n // TODO: Remove this call\n this.postHttpRequest();\n return event;\n }\n if (event.status !== 200) {\n const error: VonErrorRestInterceptorModel = {\n status: event.status,\n message: event.statusText,\n body: event.body,\n };\n if (this.consoleDebug) {\n console.error('[ErrorWS]: ', error);\n }\n throw error;\n }\n }\n return event;\n };\n\n protected catchError = (errorResponse: HttpErrorResponse) => {\n if (this.consoleDebug) {\n console.error('[Fatal]: ', errorResponse);\n }\n const error: VonErrorRestInterceptorModel = {\n status: errorResponse.status,\n message: '',\n body: errorResponse.error || {},\n };\n if (errorResponse.status === 0) {\n error.message = this.errorResponseUnknown;\n }\n if (errorResponse.status === 401) {\n error.message = errorResponse.error\n ? errorResponse.error\n : this.errorResponseForbidden;\n }\n\n this.execute403Redirect();\n // TODO: Remove all this section.\n if (this.redirectOn403) {\n if (\n errorResponse.status === 403 ||\n (errorResponse.url && errorResponse.url.indexOf(this.urlWhoAmI) > -1)\n ) {\n this.router.navigate(this.redirect403Url);\n }\n }\n this.execute403Redirect();\n\n this.executeBeforePipesOnError();\n // TODO: Remove this call\n this.postHttpRequest();\n return throwError(error);\n };\n\n /**\n * Execute custom implementation before any other pipe from the subscription.\n */\n protected executeBeforePipesOnSuccess = () => {};\n\n /**\n * Execute custom implementation before any other pipe from the subscription.\n */\n protected executeBeforePipesOnError = () => {};\n\n /**\n * Execute custom implementation to redirect to 403 page based on a specific condition.\n */\n protected execute403Redirect = () => {};\n\n // ****\n // ****\n // ****\n // TODO: Remove all below this line\n // ****\n\n /**\n * @deprecated Use the new custom method execute403Redirect() to trigger redirect to 403. This property is marked to be removed.\n * TODO: Remove this property\n */\n protected urlWhoAmI = 'api/who-am-i';\n /**\n * @deprecated Use the new custom method execute403Redirect() to trigger redirect to 403. This property is marked to be removed.\n * TODO: Remove this property\n */\n protected redirectOn403 = true;\n /**\n * @deprecated Use the new custom method execute403Redirect() to trigger redirect to 403. This property is marked to be removed.\n * TODO: Remove this property\n */\n protected redirect403Url = ['403'];\n /**\n * @deprecated Use either executeBeforePipesOnSuccess() or executeBeforePipesOnError() base on your case. This method is marked to be removed.\n */\n protected postHttpRequest = () => {};\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\nimport { Observable } from 'rxjs';\nimport { map, share, take } from 'rxjs/operators';\nimport { HeaderParams } from './models/von-header-params.model';\nimport { VonHttpOptionsModel } from './models/von-http-options.model';\nimport {\n BaseParams,\n BodyParams,\n GenericParams,\n} from './models/von-rest-definition.model';\n\n/**\n * Rest service wrapper for API calls. This class needs to be extended in a `@Injectable({ providedIn: 'root' })` service.\n * Parameters needed:\n * @HttpClient\n * @DomSanitizer\n */\nexport abstract class VonRestService {\n constructor(protected http: HttpClient, protected sanitizer: DomSanitizer) {}\n\n /**\n * Allows to set the default headers\n * @param headerParams Check HeaderParams interface to verify allowed overrides\n * @returns\n * ```json\n * {\n * \"Content-Type\": \"application/json\",\n * \"Accept\": \"application/json\",\n * \"Access-Control-Allow-Origin\": \"*\"\n * }\n * ```\n */\n protected setHeaders = (headerParams?: HeaderParams): HttpHeaders => {\n return new HttpHeaders({\n 'Content-Type': headerParams?.contentType ?? 'application/json',\n Accept: headerParams?.accept ?? 'application/json',\n 'Access-Control-Allow-Origin': '*',\n });\n };\n\n protected setOptions = ({\n headerParams,\n queryParams: params,\n }: {\n headerParams?: HeaderParams;\n queryParams?: GenericParams;\n } = {}): VonHttpOptionsModel => {\n const options: VonHttpOptionsModel = {\n headers: this.setHeaders(headerParams),\n params,\n withCredentials: true,\n };\n if (headerParams?.responseType) {\n options.responseType = headerParams.responseType;\n }\n return options;\n };\n\n protected setOptionsForFile = ({\n headerParams,\n queryParams,\n }: {\n headerParams?: HeaderParams;\n queryParams?: GenericParams;\n } = {}): VonHttpOptionsModel => {\n const options: VonHttpOptionsModel = {\n ...this.setOptions({\n headerParams,\n queryParams,\n }),\n headers: new HttpHeaders({\n Accept: headerParams?.accept ?? 'application/json',\n 'Access-Control-Allow-Origin': '*',\n }),\n };\n if (headerParams?.responseType) {\n options.responseType = headerParams.responseType;\n }\n return options;\n };\n\n protected setUrlParams = (url: string, params?: GenericParams) => {\n if (params != null) {\n for (const p in params) {\n if (p != null) {\n url = url.replace(`{${p}}`, params[p]);\n }\n }\n }\n return url;\n };\n\n protected authenticate = (\n url: string,\n username: string,\n password: string\n ): Observable<any> => {\n const authorization = btoa(`${username}:${password}`);\n const headers = new HttpHeaders({\n authorization: `Basic ${authorization}`,\n });\n return this.http\n .get(url, {\n headers,\n withCredentials: true,\n })\n .pipe(take(1), share());\n };\n\n protected get = <R = any>({\n url,\n urlParams,\n queryParams: params,\n headerParams,\n header: oldHeaderParams,\n params: oldParams,\n }: BaseParams): Observable<R> => {\n url = this.setUrlParams(url, urlParams);\n return this.http.get<R>(\n url,\n this.setOptions({\n headerParams: {\n ...headerParams,\n ...oldHeaderParams,\n },\n queryParams: {\n ...params,\n ...oldParams,\n },\n })\n );\n };\n\n protected delete = <R = any>({\n url,\n urlParams,\n queryParams: params,\n headerParams,\n header: oldHeaderParams,\n params: oldParams,\n }: BaseParams): Observable<R> => {\n url = this.setUrlParams(url, urlParams);\n return this.http.delete<R>(\n url,\n this.setOptions({\n headerParams: {\n ...headerParams,\n ...oldHeaderParams,\n },\n queryParams: {\n ...params,\n ...oldParams,\n },\n })\n );\n };\n\n protected post = <R = any, B = GenericParams | FormData>({\n url,\n body,\n urlParams,\n queryParams: params,\n headerParams,\n header: oldHeaderParams,\n params: oldParams,\n }: BodyParams<B>): Observable<R> => {\n url = this.setUrlParams(url, urlParams);\n const optionsParams = {\n headerParams: {\n ...headerParams,\n ...oldHeaderParams,\n },\n queryParams: {\n ...params,\n ...oldParams,\n },\n };\n let options =\n body && body instanceof FormData\n ? this.setOptionsForFile(optionsParams)\n : this.setOptions(optionsParams);\n return this.http.post<R>(url, body, options);\n };\n\n protected put = <R = any, B = GenericParams | FormData>({\n url,\n body,\n urlParams,\n queryParams: params,\n headerParams,\n header: oldHeaderParams,\n params: oldParams,\n }: BodyParams<B>): Observable<R> => {\n url = this.setUrlParams(url, urlParams);\n const optionsParams = {\n headerParams: {\n ...headerParams,\n ...oldHeaderParams,\n },\n queryParams: {\n ...params,\n ...oldParams,\n },\n };\n let options =\n body && body instanceof FormData\n ? this.setOptionsForFile(optionsParams)\n : this.setOptions(optionsParams);\n return this.http.put<R>(url, body, options);\n };\n\n protected patch = <R = any, B = GenericParams | FormData>({\n url,\n body,\n urlParams,\n queryParams: params,\n headerParams,\n header: oldHeaderParams,\n params: oldParams,\n }: BodyParams<B>): Observable<R> => {\n url = this.setUrlParams(url, urlParams);\n const optionsParams = {\n headerParams: {\n ...headerParams,\n ...oldHeaderParams,\n },\n queryParams: {\n ...params,\n ...oldParams,\n },\n };\n let options =\n body && body instanceof FormData\n ? this.setOptionsForFile(optionsParams)\n : this.setOptions(optionsParams);\n return this.http.patch<R>(url, body, options);\n };\n\n protected file = ({\n url,\n urlParams,\n queryParams: params,\n headerParams,\n header: oldHeaderParams,\n params: oldParams,\n }: BaseParams): Observable<SafeResourceUrl> => {\n url = this.setUrlParams(url, urlParams);\n return this.http\n .get(url, {\n ...this.setOptionsForFile({\n headerParams: {\n ...headerParams,\n ...oldHeaderParams,\n },\n queryParams: {\n ...params,\n ...oldParams,\n },\n }),\n responseType: 'blob' as 'json',\n })\n .pipe(\n map((res: any) => {\n const fileBlob = new Blob([res], { type: params?.['contentType'] });\n const objUrl = URL.createObjectURL(fileBlob);\n const sanitized =\n this.sanitizer.bypassSecurityTrustResourceUrl(objUrl);\n return sanitized;\n })\n );\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1,5 +1,149 @@
1
+ import { HttpHeaders, HttpParams, HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpErrorResponse, HttpClient } from '@angular/common/http';
2
+ import { Router } from '@angular/router';
3
+ import { Observable } from 'rxjs';
4
+ import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';
5
+
6
+ interface VonErrorRestInterceptorModel {
7
+ status: number;
8
+ message: string;
9
+ body?: any;
10
+ }
11
+
12
+ type HeaderParams = {
13
+ contentType?: string;
14
+ accept?: string;
15
+ responseType?: 'json';
16
+ };
17
+
18
+ interface VonHttpOptionsModel {
19
+ headers?: HttpHeaders | {
20
+ [header: string]: string | string[];
21
+ };
22
+ observe?: 'body';
23
+ params?: HttpParams | {
24
+ [param: string]: string | string[];
25
+ };
26
+ reportProgress?: boolean;
27
+ responseType?: 'json';
28
+ withCredentials?: boolean;
29
+ }
30
+
1
31
  /**
2
- * Generated bundle index. Do not edit.
32
+ * @deprecated Define this model in the solution
3
33
  */
4
- /// <amd-module name="@von-development-studio/angular-rest-service" />
5
- export * from './public-api';
34
+ interface VonPageResponseModel<T> {
35
+ content: T[];
36
+ last: boolean;
37
+ totalPages: number;
38
+ totalElements: number;
39
+ size: number;
40
+ numberOfElements: number;
41
+ number: number;
42
+ }
43
+
44
+ interface GenericParams {
45
+ [key: string]: any;
46
+ }
47
+ interface BaseParams {
48
+ url: string;
49
+ urlParams?: GenericParams;
50
+ queryParams?: GenericParams;
51
+ headerParams?: HeaderParams;
52
+ /**
53
+ * @deprecated Use headerParams instead
54
+ */
55
+ header?: HeaderParams;
56
+ /**
57
+ * @deprecated Use queryParams instead
58
+ */
59
+ params?: GenericParams;
60
+ }
61
+ type BodyParams<B = GenericParams | FormData> = BaseParams & {
62
+ body?: B;
63
+ };
64
+
65
+ declare abstract class VonRestInterceptorService implements HttpInterceptor {
66
+ protected router: Router;
67
+ protected consoleDebug: boolean;
68
+ protected errorResponseUnknown: string;
69
+ protected errorResponseForbidden: string;
70
+ constructor(router: Router);
71
+ intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>;
72
+ protected mapEvent: (event: HttpEvent<any>) => HttpEvent<any>;
73
+ protected catchError: (errorResponse: HttpErrorResponse) => Observable<never>;
74
+ /**
75
+ * Execute custom implementation before any other pipe from the subscription.
76
+ */
77
+ protected executeBeforePipesOnSuccess: () => void;
78
+ /**
79
+ * Execute custom implementation before any other pipe from the subscription.
80
+ */
81
+ protected executeBeforePipesOnError: () => void;
82
+ /**
83
+ * Execute custom implementation to redirect to 403 page based on a specific condition.
84
+ */
85
+ protected execute403Redirect: () => void;
86
+ /**
87
+ * @deprecated Use the new custom method execute403Redirect() to trigger redirect to 403. This property is marked to be removed.
88
+ * TODO: Remove this property
89
+ */
90
+ protected urlWhoAmI: string;
91
+ /**
92
+ * @deprecated Use the new custom method execute403Redirect() to trigger redirect to 403. This property is marked to be removed.
93
+ * TODO: Remove this property
94
+ */
95
+ protected redirectOn403: boolean;
96
+ /**
97
+ * @deprecated Use the new custom method execute403Redirect() to trigger redirect to 403. This property is marked to be removed.
98
+ * TODO: Remove this property
99
+ */
100
+ protected redirect403Url: string[];
101
+ /**
102
+ * @deprecated Use either executeBeforePipesOnSuccess() or executeBeforePipesOnError() base on your case. This method is marked to be removed.
103
+ */
104
+ protected postHttpRequest: () => void;
105
+ }
106
+
107
+ /**
108
+ * Rest service wrapper for API calls. This class needs to be extended in a `@Injectable({ providedIn: 'root' })` service.
109
+ * Parameters needed:
110
+ * @HttpClient
111
+ * @DomSanitizer
112
+ */
113
+ declare abstract class VonRestService {
114
+ protected http: HttpClient;
115
+ protected sanitizer: DomSanitizer;
116
+ constructor(http: HttpClient, sanitizer: DomSanitizer);
117
+ /**
118
+ * Allows to set the default headers
119
+ * @param headerParams Check HeaderParams interface to verify allowed overrides
120
+ * @returns
121
+ * ```json
122
+ * {
123
+ * "Content-Type": "application/json",
124
+ * "Accept": "application/json",
125
+ * "Access-Control-Allow-Origin": "*"
126
+ * }
127
+ * ```
128
+ */
129
+ protected setHeaders: (headerParams?: HeaderParams) => HttpHeaders;
130
+ protected setOptions: ({ headerParams, queryParams: params, }?: {
131
+ headerParams?: HeaderParams;
132
+ queryParams?: GenericParams;
133
+ }) => VonHttpOptionsModel;
134
+ protected setOptionsForFile: ({ headerParams, queryParams, }?: {
135
+ headerParams?: HeaderParams;
136
+ queryParams?: GenericParams;
137
+ }) => VonHttpOptionsModel;
138
+ protected setUrlParams: (url: string, params?: GenericParams) => string;
139
+ protected authenticate: (url: string, username: string, password: string) => Observable<any>;
140
+ protected get: <R = any>({ url, urlParams, queryParams: params, headerParams, header: oldHeaderParams, params: oldParams, }: BaseParams) => Observable<R>;
141
+ protected delete: <R = any>({ url, urlParams, queryParams: params, headerParams, header: oldHeaderParams, params: oldParams, }: BaseParams) => Observable<R>;
142
+ protected post: <R = any, B = GenericParams | FormData>({ url, body, urlParams, queryParams: params, headerParams, header: oldHeaderParams, params: oldParams, }: BodyParams<B>) => Observable<R>;
143
+ protected put: <R = any, B = GenericParams | FormData>({ url, body, urlParams, queryParams: params, headerParams, header: oldHeaderParams, params: oldParams, }: BodyParams<B>) => Observable<R>;
144
+ protected patch: <R = any, B = GenericParams | FormData>({ url, body, urlParams, queryParams: params, headerParams, header: oldHeaderParams, params: oldParams, }: BodyParams<B>) => Observable<R>;
145
+ protected file: ({ url, urlParams, queryParams: params, headerParams, header: oldHeaderParams, params: oldParams, }: BaseParams) => Observable<SafeResourceUrl>;
146
+ }
147
+
148
+ export { VonRestInterceptorService, VonRestService };
149
+ export type { BaseParams, BodyParams, GenericParams, HeaderParams, VonErrorRestInterceptorModel, VonHttpOptionsModel, VonPageResponseModel };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@von-development-studio/angular-rest-service",
3
- "version": "18.2.0",
3
+ "version": "20.3.0",
4
4
  "description": "Angular Rest Service wrapper.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -8,17 +8,17 @@
8
8
  },
9
9
  "keywords": [
10
10
  "angular",
11
- "angular 18",
11
+ "angular 20",
12
12
  "rest client"
13
13
  ],
14
14
  "author": "Luis García Castro",
15
15
  "license": "MIT",
16
16
  "peerDependencies": {
17
- "@angular/common": "^18.2.0",
18
- "@angular/core": "^18.2.0"
17
+ "@angular/common": "^20.3.0",
18
+ "@angular/core": "^20.3.0"
19
19
  },
20
20
  "dependencies": {
21
- "tslib": "^2.3.0"
21
+ "tslib": "^2.4.0"
22
22
  },
23
23
  "sideEffects": false,
24
24
  "module": "fesm2022/von-development-studio-angular-rest-service.mjs",
@@ -29,8 +29,6 @@
29
29
  },
30
30
  ".": {
31
31
  "types": "./index.d.ts",
32
- "esm2022": "./esm2022/von-development-studio-angular-rest-service.mjs",
33
- "esm": "./esm2022/von-development-studio-angular-rest-service.mjs",
34
32
  "default": "./fesm2022/von-development-studio-angular-rest-service.mjs"
35
33
  }
36
34
  }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm9uLWVycm9yLXJlc3QtaW50ZXJjZXB0b3IubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1yZXN0LXNlcnZpY2Uvc3JjL2xpYi9tb2RlbHMvdm9uLWVycm9yLXJlc3QtaW50ZXJjZXB0b3IubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgVm9uRXJyb3JSZXN0SW50ZXJjZXB0b3JNb2RlbCB7XG4gIHN0YXR1czogbnVtYmVyO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGJvZHk/OiBhbnk7XG59XG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm9uLWhlYWRlci1wYXJhbXMubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1yZXN0LXNlcnZpY2Uvc3JjL2xpYi9tb2RlbHMvdm9uLWhlYWRlci1wYXJhbXMubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEhlYWRlclBhcmFtcyA9IHtcclxuICBjb250ZW50VHlwZT86IHN0cmluZztcclxuICBhY2NlcHQ/OiBzdHJpbmc7XHJcbiAgcmVzcG9uc2VUeXBlPzogJ2pzb24nO1xyXG59O1xyXG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm9uLWh0dHAtb3B0aW9ucy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXJlc3Qtc2VydmljZS9zcmMvbGliL21vZGVscy92b24taHR0cC1vcHRpb25zLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuZXhwb3J0IGludGVyZmFjZSBWb25IdHRwT3B0aW9uc01vZGVsIHtcbiAgaGVhZGVycz86IEh0dHBIZWFkZXJzIHwge1xuICAgIFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICB9O1xuICBvYnNlcnZlPzogJ2JvZHknO1xuICBwYXJhbXM/OiBIdHRwUGFyYW1zIHwge1xuICAgIFtwYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gIH07XG4gIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcbiAgcmVzcG9uc2VUeXBlPzogJ2pzb24nO1xuICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xufVxuIl19
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm9uLXBhZ2UtcmVzcG9uc2UubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1yZXN0LXNlcnZpY2Uvc3JjL2xpYi9tb2RlbHMvdm9uLXBhZ2UtcmVzcG9uc2UubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGRlcHJlY2F0ZWQgRGVmaW5lIHRoaXMgbW9kZWwgaW4gdGhlIHNvbHV0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVm9uUGFnZVJlc3BvbnNlTW9kZWw8VD4ge1xuICBjb250ZW50OiBUW107XG4gIGxhc3Q6IGJvb2xlYW47XG4gIHRvdGFsUGFnZXM6IG51bWJlcjtcbiAgdG90YWxFbGVtZW50czogbnVtYmVyO1xuICBzaXplOiBudW1iZXI7XG4gIG51bWJlck9mRWxlbWVudHM6IG51bWJlcjtcbiAgbnVtYmVyOiBudW1iZXI7XG59XG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm9uLXJlc3QtZGVmaW5pdGlvbi5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXJlc3Qtc2VydmljZS9zcmMvbGliL21vZGVscy92b24tcmVzdC1kZWZpbml0aW9uLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIZWFkZXJQYXJhbXMgfSBmcm9tICcuL3Zvbi1oZWFkZXItcGFyYW1zLm1vZGVsJztcblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmljUGFyYW1zIHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VQYXJhbXMge1xuICB1cmw6IHN0cmluZztcbiAgdXJsUGFyYW1zPzogR2VuZXJpY1BhcmFtcztcbiAgcXVlcnlQYXJhbXM/OiBHZW5lcmljUGFyYW1zO1xuICBoZWFkZXJQYXJhbXM/OiBIZWFkZXJQYXJhbXM7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBoZWFkZXJQYXJhbXMgaW5zdGVhZFxuICAgKi9cbiAgaGVhZGVyPzogSGVhZGVyUGFyYW1zO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHF1ZXJ5UGFyYW1zIGluc3RlYWRcbiAgICovXG4gIHBhcmFtcz86IEdlbmVyaWNQYXJhbXM7XG59XG5cbmV4cG9ydCB0eXBlIEJvZHlQYXJhbXM8QiA9IEdlbmVyaWNQYXJhbXMgfCBGb3JtRGF0YT4gPSBCYXNlUGFyYW1zICYge1xuICBib2R5PzogQjtcbn07XG4iXX0=
@@ -1,68 +0,0 @@
1
- import { HttpResponse, } from '@angular/common/http';
2
- import { throwError } from 'rxjs';
3
- import { catchError, map } from 'rxjs/operators';
4
- export class VonRestInterceptorService {
5
- router;
6
- consoleDebug = false;
7
- errorResponseUnknown = 'Unknown Error';
8
- errorResponseForbidden = 'Forbidden Error';
9
- urlWhoAmI = 'api/who-am-i';
10
- redirectOn403 = true;
11
- redirect403Url = ['403'];
12
- constructor(router) {
13
- this.router = router;
14
- }
15
- intercept(request, next) {
16
- return next
17
- .handle(request)
18
- .pipe(map(this.mapEvent), catchError(this.catchError));
19
- }
20
- postHttpRequest = () => { };
21
- mapEvent = (event) => {
22
- if (event instanceof HttpResponse) {
23
- if (event.status === 200 || event.status === 204) {
24
- this.postHttpRequest();
25
- return event;
26
- }
27
- if (event.status !== 200) {
28
- const error = {
29
- status: event.status,
30
- message: event.statusText,
31
- body: event.body,
32
- };
33
- if (this.consoleDebug) {
34
- console.error('[ErrorWS]: ', error);
35
- }
36
- throw error;
37
- }
38
- }
39
- return event;
40
- };
41
- catchError = (errorResponse) => {
42
- if (this.consoleDebug) {
43
- console.error('[Fatal]: ', errorResponse);
44
- }
45
- const error = {
46
- status: errorResponse.status,
47
- message: '',
48
- body: errorResponse.error || {},
49
- };
50
- if (errorResponse.status === 0) {
51
- error.message = this.errorResponseUnknown;
52
- }
53
- if (errorResponse.status === 401) {
54
- error.message = errorResponse.error
55
- ? errorResponse.error
56
- : this.errorResponseForbidden;
57
- }
58
- if (this.redirectOn403) {
59
- if (errorResponse.status === 403 ||
60
- (errorResponse.url && errorResponse.url.indexOf(this.urlWhoAmI) > -1)) {
61
- this.router.navigate(this.redirect403Url);
62
- }
63
- }
64
- this.postHttpRequest();
65
- return throwError(error);
66
- };
67
- }
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm9uLXJlc3QtaW50ZXJjZXB0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXJlc3Qtc2VydmljZS9zcmMvbGliL3Zvbi1yZXN0LWludGVyY2VwdG9yLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQU1MLFlBQVksR0FDYixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdqRCxNQUFNLE9BQWdCLHlCQUF5QjtJQVF2QjtJQVBaLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDckIsb0JBQW9CLEdBQUcsZUFBZSxDQUFDO0lBQ3ZDLHNCQUFzQixHQUFHLGlCQUFpQixDQUFDO0lBQzNDLFNBQVMsR0FBRyxjQUFjLENBQUM7SUFDM0IsYUFBYSxHQUFHLElBQUksQ0FBQztJQUNyQixjQUFjLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVuQyxZQUFzQixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUFHLENBQUM7SUFFeEMsU0FBUyxDQUNQLE9BQXlCLEVBQ3pCLElBQWlCO1FBRWpCLE9BQU8sSUFBSTthQUNSLE1BQU0sQ0FBQyxPQUFPLENBQUM7YUFDZixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVTLGVBQWUsR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFFM0IsUUFBUSxHQUFHLENBQUMsS0FBcUIsRUFBRSxFQUFFO1FBQzdDLElBQUksS0FBSyxZQUFZLFlBQVksRUFBRSxDQUFDO1lBQ2xDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDakQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN2QixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sS0FBSyxHQUFpQztvQkFDMUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO29CQUNwQixPQUFPLEVBQUUsS0FBSyxDQUFDLFVBQVU7b0JBQ3pCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtpQkFDakIsQ0FBQztnQkFDRixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDdEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3RDLENBQUM7Z0JBQ0QsTUFBTSxLQUFLLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0lBRVEsVUFBVSxHQUFHLENBQUMsYUFBZ0MsRUFBRSxFQUFFO1FBQzFELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFDRCxNQUFNLEtBQUssR0FBaUM7WUFDMUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxNQUFNO1lBQzVCLE9BQU8sRUFBRSxFQUFFO1lBQ1gsSUFBSSxFQUFFLGFBQWEsQ0FBQyxLQUFLLElBQUksRUFBRTtTQUNoQyxDQUFDO1FBQ0YsSUFBSSxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9CLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1FBQzVDLENBQUM7UUFDRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDakMsS0FBSyxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUMsS0FBSztnQkFDakMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLO2dCQUNyQixDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1FBQ2xDLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixJQUNFLGFBQWEsQ0FBQyxNQUFNLEtBQUssR0FBRztnQkFDNUIsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNyRSxDQUFDO2dCQUNELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM1QyxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEh0dHBFcnJvclJlc3BvbnNlLFxuICBIdHRwRXZlbnQsXG4gIEh0dHBIYW5kbGVyLFxuICBIdHRwSW50ZXJjZXB0b3IsXG4gIEh0dHBSZXF1ZXN0LFxuICBIdHRwUmVzcG9uc2UsXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBWb25FcnJvclJlc3RJbnRlcmNlcHRvck1vZGVsIH0gZnJvbSAnLi9tb2RlbHMvdm9uLWVycm9yLXJlc3QtaW50ZXJjZXB0b3IubW9kZWwnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVm9uUmVzdEludGVyY2VwdG9yU2VydmljZSBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG4gIHByb3RlY3RlZCBjb25zb2xlRGVidWcgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGVycm9yUmVzcG9uc2VVbmtub3duID0gJ1Vua25vd24gRXJyb3InO1xuICBwcm90ZWN0ZWQgZXJyb3JSZXNwb25zZUZvcmJpZGRlbiA9ICdGb3JiaWRkZW4gRXJyb3InO1xuICBwcm90ZWN0ZWQgdXJsV2hvQW1JID0gJ2FwaS93aG8tYW0taSc7XG4gIHByb3RlY3RlZCByZWRpcmVjdE9uNDAzID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIHJlZGlyZWN0NDAzVXJsID0gWyc0MDMnXTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIpIHt9XG5cbiAgaW50ZXJjZXB0KFxuICAgIHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sXG4gICAgbmV4dDogSHR0cEhhbmRsZXJcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xuICAgIHJldHVybiBuZXh0XG4gICAgICAuaGFuZGxlKHJlcXVlc3QpXG4gICAgICAucGlwZShtYXAodGhpcy5tYXBFdmVudCksIGNhdGNoRXJyb3IodGhpcy5jYXRjaEVycm9yKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcG9zdEh0dHBSZXF1ZXN0ID0gKCkgPT4ge307XG5cbiAgcHJvdGVjdGVkIG1hcEV2ZW50ID0gKGV2ZW50OiBIdHRwRXZlbnQ8YW55PikgPT4ge1xuICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkge1xuICAgICAgaWYgKGV2ZW50LnN0YXR1cyA9PT0gMjAwIHx8IGV2ZW50LnN0YXR1cyA9PT0gMjA0KSB7XG4gICAgICAgIHRoaXMucG9zdEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICBjb25zdCBlcnJvcjogVm9uRXJyb3JSZXN0SW50ZXJjZXB0b3JNb2RlbCA9IHtcbiAgICAgICAgICBzdGF0dXM6IGV2ZW50LnN0YXR1cyxcbiAgICAgICAgICBtZXNzYWdlOiBldmVudC5zdGF0dXNUZXh0LFxuICAgICAgICAgIGJvZHk6IGV2ZW50LmJvZHksXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLmNvbnNvbGVEZWJ1Zykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tFcnJvcldTXTogJywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXZlbnQ7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGNhdGNoRXJyb3IgPSAoZXJyb3JSZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICBpZiAodGhpcy5jb25zb2xlRGVidWcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tGYXRhbF06ICcsIGVycm9yUmVzcG9uc2UpO1xuICAgIH1cbiAgICBjb25zdCBlcnJvcjogVm9uRXJyb3JSZXN0SW50ZXJjZXB0b3JNb2RlbCA9IHtcbiAgICAgIHN0YXR1czogZXJyb3JSZXNwb25zZS5zdGF0dXMsXG4gICAgICBtZXNzYWdlOiAnJyxcbiAgICAgIGJvZHk6IGVycm9yUmVzcG9uc2UuZXJyb3IgfHwge30sXG4gICAgfTtcbiAgICBpZiAoZXJyb3JSZXNwb25zZS5zdGF0dXMgPT09IDApIHtcbiAgICAgIGVycm9yLm1lc3NhZ2UgPSB0aGlzLmVycm9yUmVzcG9uc2VVbmtub3duO1xuICAgIH1cbiAgICBpZiAoZXJyb3JSZXNwb25zZS5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgZXJyb3IubWVzc2FnZSA9IGVycm9yUmVzcG9uc2UuZXJyb3JcbiAgICAgICAgPyBlcnJvclJlc3BvbnNlLmVycm9yXG4gICAgICAgIDogdGhpcy5lcnJvclJlc3BvbnNlRm9yYmlkZGVuO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZWRpcmVjdE9uNDAzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGVycm9yUmVzcG9uc2Uuc3RhdHVzID09PSA0MDMgfHxcbiAgICAgICAgKGVycm9yUmVzcG9uc2UudXJsICYmIGVycm9yUmVzcG9uc2UudXJsLmluZGV4T2YodGhpcy51cmxXaG9BbUkpID4gLTEpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUodGhpcy5yZWRpcmVjdDQwM1VybCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucG9zdEh0dHBSZXF1ZXN0KCk7XG4gICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICB9O1xufVxuIl19
@@ -1,185 +0,0 @@
1
- import { HttpHeaders } from '@angular/common/http';
2
- import { map, share, take } from 'rxjs/operators';
3
- /**
4
- * Rest service wrapper for API calls. This class needs to be extended in a `@Injectable({ providedIn: 'root' })` service.
5
- * Parameters needed:
6
- * @HttpClient
7
- * @DomSanitizer
8
- */
9
- export class VonRestService {
10
- http;
11
- sanitizer;
12
- constructor(http, sanitizer) {
13
- this.http = http;
14
- this.sanitizer = sanitizer;
15
- }
16
- /**
17
- * Allows to set the default headers
18
- * @param headerParams Check HeaderParams interface to verify allowed overrides
19
- * @returns
20
- * ```json
21
- * {
22
- * "Content-Type": "application/json",
23
- * "Accept": "application/json",
24
- * "Access-Control-Allow-Origin": "*"
25
- * }
26
- * ```
27
- */
28
- setHeaders = (headerParams) => {
29
- return new HttpHeaders({
30
- 'Content-Type': headerParams?.contentType ?? 'application/json',
31
- Accept: headerParams?.accept ?? 'application/json',
32
- 'Access-Control-Allow-Origin': '*',
33
- });
34
- };
35
- setOptions = ({ headerParams, queryParams: params, } = {}) => {
36
- const options = {
37
- headers: this.setHeaders(headerParams),
38
- params,
39
- withCredentials: true,
40
- };
41
- if (headerParams?.responseType) {
42
- options.responseType = headerParams.responseType;
43
- }
44
- return options;
45
- };
46
- setOptionsForFile = ({ headerParams, queryParams, } = {}) => {
47
- const options = {
48
- ...this.setOptions({
49
- headerParams,
50
- queryParams,
51
- }),
52
- headers: new HttpHeaders({
53
- Accept: headerParams?.accept ?? 'application/json',
54
- 'Access-Control-Allow-Origin': '*',
55
- }),
56
- };
57
- if (headerParams?.responseType) {
58
- options.responseType = headerParams.responseType;
59
- }
60
- return options;
61
- };
62
- setUrlParams = (url, params) => {
63
- if (params != null) {
64
- for (const p in params) {
65
- if (p != null) {
66
- url = url.replace(`{${p}}`, params[p]);
67
- }
68
- }
69
- }
70
- return url;
71
- };
72
- authenticate = (url, username, password) => {
73
- const authorization = btoa(`${username}:${password}`);
74
- const headers = new HttpHeaders({
75
- authorization: `Basic ${authorization}`,
76
- });
77
- return this.http
78
- .get(url, {
79
- headers,
80
- withCredentials: true,
81
- })
82
- .pipe(take(1), share());
83
- };
84
- get = ({ url, urlParams, queryParams: params, headerParams, header: oldHeaderParams, params: oldParams, }) => {
85
- url = this.setUrlParams(url, urlParams);
86
- return this.http.get(url, this.setOptions({
87
- headerParams: {
88
- ...headerParams,
89
- ...oldHeaderParams,
90
- },
91
- queryParams: {
92
- ...params,
93
- ...oldParams,
94
- },
95
- }));
96
- };
97
- delete = ({ url, urlParams, queryParams: params, headerParams, header: oldHeaderParams, params: oldParams, }) => {
98
- url = this.setUrlParams(url, urlParams);
99
- return this.http.delete(url, this.setOptions({
100
- headerParams: {
101
- ...headerParams,
102
- ...oldHeaderParams,
103
- },
104
- queryParams: {
105
- ...params,
106
- ...oldParams,
107
- },
108
- }));
109
- };
110
- post = ({ url, body, urlParams, queryParams: params, headerParams, header: oldHeaderParams, params: oldParams, }) => {
111
- url = this.setUrlParams(url, urlParams);
112
- const optionsParams = {
113
- headerParams: {
114
- ...headerParams,
115
- ...oldHeaderParams,
116
- },
117
- queryParams: {
118
- ...params,
119
- ...oldParams,
120
- },
121
- };
122
- let options = body && body instanceof FormData
123
- ? this.setOptionsForFile(optionsParams)
124
- : this.setOptions(optionsParams);
125
- return this.http.post(url, body, options);
126
- };
127
- put = ({ url, body, urlParams, queryParams: params, headerParams, header: oldHeaderParams, params: oldParams, }) => {
128
- url = this.setUrlParams(url, urlParams);
129
- const optionsParams = {
130
- headerParams: {
131
- ...headerParams,
132
- ...oldHeaderParams,
133
- },
134
- queryParams: {
135
- ...params,
136
- ...oldParams,
137
- },
138
- };
139
- let options = body && body instanceof FormData
140
- ? this.setOptionsForFile(optionsParams)
141
- : this.setOptions(optionsParams);
142
- return this.http.put(url, body, options);
143
- };
144
- patch = ({ url, body, urlParams, queryParams: params, headerParams, header: oldHeaderParams, params: oldParams, }) => {
145
- url = this.setUrlParams(url, urlParams);
146
- const optionsParams = {
147
- headerParams: {
148
- ...headerParams,
149
- ...oldHeaderParams,
150
- },
151
- queryParams: {
152
- ...params,
153
- ...oldParams,
154
- },
155
- };
156
- let options = body && body instanceof FormData
157
- ? this.setOptionsForFile(optionsParams)
158
- : this.setOptions(optionsParams);
159
- return this.http.patch(url, body, options);
160
- };
161
- file = ({ url, urlParams, queryParams: params, headerParams, header: oldHeaderParams, params: oldParams, }) => {
162
- url = this.setUrlParams(url, urlParams);
163
- return this.http
164
- .get(url, {
165
- ...this.setOptionsForFile({
166
- headerParams: {
167
- ...headerParams,
168
- ...oldHeaderParams,
169
- },
170
- queryParams: {
171
- ...params,
172
- ...oldParams,
173
- },
174
- }),
175
- responseType: 'blob',
176
- })
177
- .pipe(map((res) => {
178
- const fileBlob = new Blob([res], { type: params?.['contentType'] });
179
- const objUrl = URL.createObjectURL(fileBlob);
180
- const sanitized = this.sanitizer.bypassSecurityTrustResourceUrl(objUrl);
181
- return sanitized;
182
- }));
183
- };
184
- }
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm9uLXJlc3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXJlc3Qtc2VydmljZS9zcmMvbGliL3Zvbi1yZXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRy9ELE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBU2xEOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFnQixjQUFjO0lBQ1o7SUFBNEI7SUFBbEQsWUFBc0IsSUFBZ0IsRUFBWSxTQUF1QjtRQUFuRCxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQVksY0FBUyxHQUFULFNBQVMsQ0FBYztJQUFHLENBQUM7SUFFN0U7Ozs7Ozs7Ozs7O09BV0c7SUFDTyxVQUFVLEdBQUcsQ0FBQyxZQUEyQixFQUFlLEVBQUU7UUFDbEUsT0FBTyxJQUFJLFdBQVcsQ0FBQztZQUNyQixjQUFjLEVBQUUsWUFBWSxFQUFFLFdBQVcsSUFBSSxrQkFBa0I7WUFDL0QsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLElBQUksa0JBQWtCO1lBQ2xELDZCQUE2QixFQUFFLEdBQUc7U0FDbkMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBRVEsVUFBVSxHQUFHLENBQUMsRUFDdEIsWUFBWSxFQUNaLFdBQVcsRUFBRSxNQUFNLE1BSWpCLEVBQUUsRUFBdUIsRUFBRTtRQUM3QixNQUFNLE9BQU8sR0FBd0I7WUFDbkMsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO1lBQ3RDLE1BQU07WUFDTixlQUFlLEVBQUUsSUFBSTtTQUN0QixDQUFDO1FBQ0YsSUFBSSxZQUFZLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDL0IsT0FBTyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDO1FBQ25ELENBQUM7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QUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoRCxDQUFDLENBQUM7SUFFRixJQUFJLEdBQUcsQ0FBQyxFQUNOLEdBQUcsRUFDSCxTQUFTLEVBQ1QsV0FBVyxFQUFFLE1BQU0sRUFDbkIsWUFBWSxFQUNaLE1BQU0sRUFBRSxlQUFlLEVBQ3ZCLE1BQU0sRUFBRSxTQUFTLEdBQ04sRUFBK0IsRUFBRTtRQUM1QyxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDeEMsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztnQkFDeEIsWUFBWSxFQUFFO29CQUNaLEdBQUcsWUFBWTtvQkFDZixHQUFHLGVBQWU7aUJBQ25CO2dCQUNELFdBQVcsRUFBRTtvQkFDWCxHQUFHLE1BQU07b0JBQ1QsR0FBRyxTQUFTO2lCQUNiO2FBQ0YsQ0FBQztZQUNGLFlBQVksRUFBRSxNQUFnQjtTQUMvQixDQUFDO2FBQ0QsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsTUFBTSxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDcEUsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3QyxNQUFNLFNBQVMsR0FDYixJQUFJLENBQUMsU0FBUyxDQUFDLDhCQUE4QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlUmVzb3VyY2VVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc2hhcmUsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBIZWFkZXJQYXJhbXMgfSBmcm9tICcuL21vZGVscy92b24taGVhZGVyLXBhcmFtcy5tb2RlbCc7XG5pbXBvcnQgeyBWb25IdHRwT3B0aW9uc01vZGVsIH0gZnJvbSAnLi9tb2RlbHMvdm9uLWh0dHAtb3B0aW9ucy5tb2RlbCc7XG5pbXBvcnQge1xuICBCYXNlUGFyYW1zLFxuICBCb2R5UGFyYW1zLFxuICBHZW5lcmljUGFyYW1zLFxufSBmcm9tICcuL21vZGVscy92b24tcmVzdC1kZWZpbml0aW9uLm1vZGVsJztcblxuLyoqXG4gKiBSZXN0IHNlcnZpY2Ugd3JhcHBlciBmb3IgQVBJIGNhbGxzLiBUaGlzIGNsYXNzIG5lZWRzIHRvIGJlIGV4dGVuZGVkIGluIGEgYEBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pYCBzZXJ2aWNlLlxuICogUGFyYW1ldGVycyBuZWVkZWQ6XG4gKiBASHR0cENsaWVudFxuICogQERvbVNhbml0aXplclxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVm9uUmVzdFNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCwgcHJvdGVjdGVkIHNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7fVxuXG4gIC8qKlxuICAgKiBBbGxvd3MgdG8gc2V0IHRoZSBkZWZhdWx0IGhlYWRlcnNcbiAgICogQHBhcmFtIGhlYWRlclBhcmFtcyBDaGVjayBIZWFkZXJQYXJhbXMgaW50ZXJmYWNlIHRvIHZlcmlmeSBhbGxvd2VkIG92ZXJyaWRlc1xuICAgKiBAcmV0dXJuc1xuICAgKiBgYGBqc29uXG4gICAqIHtcbiAgICogICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICogICBcIkFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICogICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpblwiOiBcIipcIlxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgcHJvdGVjdGVkIHNldEhlYWRlcnMgPSAoaGVhZGVyUGFyYW1zPzogSGVhZGVyUGFyYW1zKTogSHR0cEhlYWRlcnMgPT4ge1xuICAgIHJldHVybiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6IGhlYWRlclBhcmFtcz8uY29udGVudFR5cGUgPz8gJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgQWNjZXB0OiBoZWFkZXJQYXJhbXM/LmFjY2VwdCA/PyAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJzogJyonLFxuICAgIH0pO1xuICB9O1xuXG4gIHByb3RlY3RlZCBzZXRPcHRpb25zID0gKHtcbiAgICBoZWFkZXJQYXJhbXMsXG4gICAgcXVlcnlQYXJhbXM6IHBhcmFtcyxcbiAgfToge1xuICAgIGhlYWRlclBhcmFtcz86IEhlYWRlclBhcmFtcztcbiAgICBxdWVyeVBhcmFtcz86IEdlbmVyaWNQYXJhbXM7XG4gIH0gPSB7fSk6IFZvbkh0dHBPcHRpb25zTW9kZWwgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnM6IFZvbkh0dHBPcHRpb25zTW9kZWwgPSB7XG4gICAgICBoZWFkZXJzOiB0aGlzLnNldEhlYWRlcnMoaGVhZGVyUGFyYW1zKSxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9O1xuICAgIGlmIChoZWFkZXJQYXJhbXM/LnJlc3BvbnNlVHlwZSkge1xuICAgICAgb3B0aW9ucy5yZXNwb25zZVR5cGUgPSBoZWFkZXJQYXJhbXMucmVzcG9uc2VUeXBlO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfTtcblxuICBwcm90ZWN0ZWQgc2V0T3B0aW9uc0ZvckZpbGUgPSAoe1xuICAgIGhlYWRlclBhcmFtcyxcbiAgICBxdWVyeVBhcmFtcyxcbiAgfToge1xuICAgIGhlYWRlclBhcmFtcz86IEhlYWRlclBhcmFtcztcbiAgICBxdWVyeVBhcmFtcz86IEdlbmVyaWNQYXJhbXM7XG4gIH0gPSB7fSk6IFZvbkh0dHBPcHRpb25zTW9kZWwgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnM6IFZvbkh0dHBPcHRpb25zTW9kZWwgPSB7XG4gICAgICAuLi50aGlzLnNldE9wdGlvbnMoe1xuICAgICAgICBoZWFkZXJQYXJhbXMsXG4gICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgfSksXG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICBBY2NlcHQ6IGhlYWRlclBhcmFtcz8uYWNjZXB0ID8/ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbic6ICcqJyxcbiAgICAgIH0pLFxuICAgIH07XG4gICAgaWYgKGhlYWRlclBhcmFtcz8ucmVzcG9uc2VUeXBlKSB7XG4gICAgICBvcHRpb25zLnJlc3BvbnNlVHlwZSA9IGhlYWRlclBhcmFtcy5yZXNwb25zZVR5cGU7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zO1xuICB9O1xuXG4gIHByb3RlY3RlZCBzZXRVcmxQYXJhbXMgPSAodXJsOiBzdHJpbmcsIHBhcmFtcz86IEdlbmVyaWNQYXJhbXMpID0+IHtcbiAgICBpZiAocGFyYW1zICE9IG51bGwpIHtcbiAgICAgIGZvciAoY29uc3QgcCBpbiBwYXJhbXMpIHtcbiAgICAgICAgaWYgKHAgIT0gbnVsbCkge1xuICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKGB7JHtwfX1gLCBwYXJhbXNbcF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1cmw7XG4gIH07XG5cbiAgYXV0aGVudGljYXRlID0gKFxuICAgIHVybDogc3RyaW5nLFxuICAgIHVzZXJuYW1lOiBzdHJpbmcsXG4gICAgcGFzc3dvcmQ6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xuICAgIGNvbnN0IGF1dGhvcml6YXRpb24gPSBidG9hKGAke3VzZXJuYW1lfToke3Bhc3N3b3JkfWApO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7YXV0aG9yaXphdGlvbn1gLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQodXJsLCB7XG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgIH0pXG4gICAgICAucGlwZSh0YWtlKDEpLCBzaGFyZSgpKTtcbiAgfTtcblxuICBnZXQgPSA8UiA9IGFueT4oe1xuICAgIHVybCxcbiAgICB1cmxQYXJhbXMsXG4gICAgcXVlcnlQYXJhbXM6IHBhcmFtcyxcbiAgICBoZWFkZXJQYXJhbXMsXG4gICAgaGVhZGVyOiBvbGRIZWFkZXJQYXJhbXMsXG4gICAgcGFyYW1zOiBvbGRQYXJhbXMsXG4gIH06IEJhc2VQYXJhbXMpOiBPYnNlcnZhYmxlPFI+ID0+IHtcbiAgICB1cmwgPSB0aGlzLnNldFVybFBhcmFtcyh1cmwsIHVybFBhcmFtcyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8Uj4oXG4gICAgICB1cmwsXG4gICAgICB0aGlzLnNldE9wdGlvbnMoe1xuICAgICAgICBoZWFkZXJQYXJhbXM6IHtcbiAgICAgICAgICAuLi5oZWFkZXJQYXJhbXMsXG4gICAgICAgICAgLi4ub2xkSGVhZGVyUGFyYW1zLFxuICAgICAgICB9LFxuICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICAuLi5vbGRQYXJhbXMsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG4gIH07XG5cbiAgZGVsZXRlID0gPFIgPSBhbnk+KHtcbiAgICB1cmwsXG4gICAgdXJsUGFyYW1zLFxuICAgIHF1ZXJ5UGFyYW1zOiBwYXJhbXMsXG4gICAgaGVhZGVyUGFyYW1zLFxuICAgIGhlYWRlcjogb2xkSGVhZGVyUGFyYW1zLFxuICAgIHBhcmFtczogb2xkUGFyYW1zLFxuICB9OiBCYXNlUGFyYW1zKTogT2JzZXJ2YWJsZTxSPiA9PiB7XG4gICAgdXJsID0gdGhpcy5zZXRVcmxQYXJhbXModXJsLCB1cmxQYXJhbXMpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPFI+KFxuICAgICAgdXJsLFxuICAgICAgdGhpcy5zZXRPcHRpb25zKHtcbiAgICAgICAgaGVhZGVyUGFyYW1zOiB7XG4gICAgICAgICAgLi4uaGVhZGVyUGFyYW1zLFxuICAgICAgICAgIC4uLm9sZEhlYWRlclBhcmFtcyxcbiAgICAgICAgfSxcbiAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgLi4ub2xkUGFyYW1zLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApO1xuICB9O1xuXG4gIHBvc3QgPSA8UiA9IGFueSwgQiA9IEdlbmVyaWNQYXJhbXMgfCBGb3JtRGF0YT4oe1xuICAgIHVybCxcbiAgICBib2R5LFxuICAgIHVybFBhcmFtcyxcbiAgICBxdWVyeVBhcmFtczogcGFyYW1zLFxuICAgIGhlYWRlclBhcmFtcyxcbiAgICBoZWFkZXI6IG9sZEhlYWRlclBhcmFtcyxcbiAgICBwYXJhbXM6IG9sZFBhcmFtcyxcbiAgfTogQm9keVBhcmFtczxCPik6IE9ic2VydmFibGU8Uj4gPT4ge1xuICAgIHVybCA9IHRoaXMuc2V0VXJsUGFyYW1zKHVybCwgdXJsUGFyYW1zKTtcbiAgICBjb25zdCBvcHRpb25zUGFyYW1zID0ge1xuICAgICAgaGVhZGVyUGFyYW1zOiB7XG4gICAgICAgIC4uLmhlYWRlclBhcmFtcyxcbiAgICAgICAgLi4ub2xkSGVhZGVyUGFyYW1zLFxuICAgICAgfSxcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgLi4ub2xkUGFyYW1zLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGxldCBvcHRpb25zID1cbiAgICAgIGJvZHkgJiYgYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhXG4gICAgICAgID8gdGhpcy5zZXRPcHRpb25zRm9yRmlsZShvcHRpb25zUGFyYW1zKVxuICAgICAgICA6IHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zUGFyYW1zKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8Uj4odXJsLCBib2R5LCBvcHRpb25zKTtcbiAgfTtcblxuICBwdXQgPSA8UiA9IGFueSwgQiA9IEdlbmVyaWNQYXJhbXMgfCBGb3JtRGF0YT4oe1xuICAgIHVybCxcbiAgICBib2R5LFxuICAgIHVybFBhcmFtcyxcbiAgICBxdWVyeVBhcmFtczogcGFyYW1zLFxuICAgIGhlYWRlclBhcmFtcyxcbiAgICBoZWFkZXI6IG9sZEhlYWRlclBhcmFtcyxcbiAgICBwYXJhbXM6IG9sZFBhcmFtcyxcbiAgfTogQm9keVBhcmFtczxCPik6IE9ic2VydmFibGU8Uj4gPT4ge1xuICAgIHVybCA9IHRoaXMuc2V0VXJsUGFyYW1zKHVybCwgdXJsUGFyYW1zKTtcbiAgICBjb25zdCBvcHRpb25zUGFyYW1zID0ge1xuICAgICAgaGVhZGVyUGFyYW1zOiB7XG4gICAgICAgIC4uLmhlYWRlclBhcmFtcyxcbiAgICAgICAgLi4ub2xkSGVhZGVyUGFyYW1zLFxuICAgICAgfSxcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgLi4ub2xkUGFyYW1zLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGxldCBvcHRpb25zID1cbiAgICAgIGJvZHkgJiYgYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhXG4gICAgICAgID8gdGhpcy5zZXRPcHRpb25zRm9yRmlsZShvcHRpb25zUGFyYW1zKVxuICAgICAgICA6IHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zUGFyYW1zKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxSPih1cmwsIGJvZHksIG9wdGlvbnMpO1xuICB9O1xuXG4gIHBhdGNoID0gPFIgPSBhbnksIEIgPSBHZW5lcmljUGFyYW1zIHwgRm9ybURhdGE+KHtcbiAgICB1cmwsXG4gICAgYm9keSxcbiAgICB1cmxQYXJhbXMsXG4gICAgcXVlcnlQYXJhbXM6IHBhcmFtcyxcbiAgICBoZWFkZXJQYXJhbXMsXG4gICAgaGVhZGVyOiBvbGRIZWFkZXJQYXJhbXMsXG4gICAgcGFyYW1zOiBvbGRQYXJhbXMsXG4gIH06IEJvZHlQYXJhbXM8Qj4pOiBPYnNlcnZhYmxlPFI+ID0+IHtcbiAgICB1cmwgPSB0aGlzLnNldFVybFBhcmFtcyh1cmwsIHVybFBhcmFtcyk7XG4gICAgY29uc3Qgb3B0aW9uc1BhcmFtcyA9IHtcbiAgICAgIGhlYWRlclBhcmFtczoge1xuICAgICAgICAuLi5oZWFkZXJQYXJhbXMsXG4gICAgICAgIC4uLm9sZEhlYWRlclBhcmFtcyxcbiAgICAgIH0sXG4gICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgIC4uLm9sZFBhcmFtcyxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBsZXQgb3B0aW9ucyA9XG4gICAgICBib2R5ICYmIGJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YVxuICAgICAgICA/IHRoaXMuc2V0T3B0aW9uc0ZvckZpbGUob3B0aW9uc1BhcmFtcylcbiAgICAgICAgOiB0aGlzLnNldE9wdGlvbnMob3B0aW9uc1BhcmFtcyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wYXRjaDxSPih1cmwsIGJvZHksIG9wdGlvbnMpO1xuICB9O1xuXG4gIGZpbGUgPSAoe1xuICAgIHVybCxcbiAgICB1cmxQYXJhbXMsXG4gICAgcXVlcnlQYXJhbXM6IHBhcmFtcyxcbiAgICBoZWFkZXJQYXJhbXMsXG4gICAgaGVhZGVyOiBvbGRIZWFkZXJQYXJhbXMsXG4gICAgcGFyYW1zOiBvbGRQYXJhbXMsXG4gIH06IEJhc2VQYXJhbXMpOiBPYnNlcnZhYmxlPFNhZmVSZXNvdXJjZVVybD4gPT4ge1xuICAgIHVybCA9IHRoaXMuc2V0VXJsUGFyYW1zKHVybCwgdXJsUGFyYW1zKTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KHVybCwge1xuICAgICAgICAuLi50aGlzLnNldE9wdGlvbnNGb3JGaWxlKHtcbiAgICAgICAgICBoZWFkZXJQYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmhlYWRlclBhcmFtcyxcbiAgICAgICAgICAgIC4uLm9sZEhlYWRlclBhcmFtcyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgICAuLi5vbGRQYXJhbXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InIGFzICdqc29uJyxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpbGVCbG9iID0gbmV3IEJsb2IoW3Jlc10sIHsgdHlwZTogcGFyYW1zPy5bJ2NvbnRlbnRUeXBlJ10gfSk7XG4gICAgICAgICAgY29uc3Qgb2JqVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlQmxvYik7XG4gICAgICAgICAgY29uc3Qgc2FuaXRpemVkID1cbiAgICAgICAgICAgIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybChvYmpVcmwpO1xuICAgICAgICAgIHJldHVybiBzYW5pdGl6ZWQ7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9O1xufVxuIl19
@@ -1,7 +0,0 @@
1
- export * from './lib/models/von-error-rest-interceptor.model';
2
- export * from './lib/models/von-header-params.model';
3
- export * from './lib/models/von-page-response.model';
4
- export * from './lib/models/von-rest-definition.model';
5
- export * from './lib/von-rest-interceptor.service';
6
- export * from './lib/von-rest.service';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25nLXJlc3Qtc2VydmljZS9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLCtDQUErQyxDQUFDO0FBQzlELGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy92b24tZXJyb3ItcmVzdC1pbnRlcmNlcHRvci5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy92b24taGVhZGVyLXBhcmFtcy5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy92b24tcGFnZS1yZXNwb25zZS5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy92b24tcmVzdC1kZWZpbml0aW9uLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdm9uLXJlc3QtaW50ZXJjZXB0b3Iuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Zvbi1yZXN0LnNlcnZpY2UnO1xyXG4iXX0=
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm9uLWRldmVsb3BtZW50LXN0dWRpby1hbmd1bGFyLXJlc3Qtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25nLXJlc3Qtc2VydmljZS9zcmMvdm9uLWRldmVsb3BtZW50LXN0dWRpby1hbmd1bGFyLXJlc3Qtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
@@ -1,5 +0,0 @@
1
- export interface VonErrorRestInterceptorModel {
2
- status: number;
3
- message: string;
4
- body?: any;
5
- }
@@ -1,5 +0,0 @@
1
- export type HeaderParams = {
2
- contentType?: string;
3
- accept?: string;
4
- responseType?: 'json';
5
- };
@@ -1,13 +0,0 @@
1
- import { HttpHeaders, HttpParams } from '@angular/common/http';
2
- export interface VonHttpOptionsModel {
3
- headers?: HttpHeaders | {
4
- [header: string]: string | string[];
5
- };
6
- observe?: 'body';
7
- params?: HttpParams | {
8
- [param: string]: string | string[];
9
- };
10
- reportProgress?: boolean;
11
- responseType?: 'json';
12
- withCredentials?: boolean;
13
- }
@@ -1,12 +0,0 @@
1
- /**
2
- * @deprecated Define this model in the solution
3
- */
4
- export interface VonPageResponseModel<T> {
5
- content: T[];
6
- last: boolean;
7
- totalPages: number;
8
- totalElements: number;
9
- size: number;
10
- numberOfElements: number;
11
- number: number;
12
- }
@@ -1,21 +0,0 @@
1
- import { HeaderParams } from './von-header-params.model';
2
- export interface GenericParams {
3
- [key: string]: any;
4
- }
5
- export interface BaseParams {
6
- url: string;
7
- urlParams?: GenericParams;
8
- queryParams?: GenericParams;
9
- headerParams?: HeaderParams;
10
- /**
11
- * @deprecated Use headerParams instead
12
- */
13
- header?: HeaderParams;
14
- /**
15
- * @deprecated Use queryParams instead
16
- */
17
- params?: GenericParams;
18
- }
19
- export type BodyParams<B = GenericParams | FormData> = BaseParams & {
20
- body?: B;
21
- };
@@ -1,17 +0,0 @@
1
- import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
2
- import { Router } from '@angular/router';
3
- import { Observable } from 'rxjs';
4
- export declare abstract class VonRestInterceptorService implements HttpInterceptor {
5
- protected router: Router;
6
- protected consoleDebug: boolean;
7
- protected errorResponseUnknown: string;
8
- protected errorResponseForbidden: string;
9
- protected urlWhoAmI: string;
10
- protected redirectOn403: boolean;
11
- protected redirect403Url: string[];
12
- constructor(router: Router);
13
- intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>;
14
- protected postHttpRequest: () => void;
15
- protected mapEvent: (event: HttpEvent<any>) => HttpEvent<any>;
16
- protected catchError: (errorResponse: HttpErrorResponse) => Observable<never>;
17
- }
@@ -1,46 +0,0 @@
1
- import { HttpClient, HttpHeaders } from '@angular/common/http';
2
- import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';
3
- import { Observable } from 'rxjs';
4
- import { HeaderParams } from './models/von-header-params.model';
5
- import { VonHttpOptionsModel } from './models/von-http-options.model';
6
- import { BaseParams, BodyParams, GenericParams } from './models/von-rest-definition.model';
7
- /**
8
- * Rest service wrapper for API calls. This class needs to be extended in a `@Injectable({ providedIn: 'root' })` service.
9
- * Parameters needed:
10
- * @HttpClient
11
- * @DomSanitizer
12
- */
13
- export declare abstract class VonRestService {
14
- protected http: HttpClient;
15
- protected sanitizer: DomSanitizer;
16
- constructor(http: HttpClient, sanitizer: DomSanitizer);
17
- /**
18
- * Allows to set the default headers
19
- * @param headerParams Check HeaderParams interface to verify allowed overrides
20
- * @returns
21
- * ```json
22
- * {
23
- * "Content-Type": "application/json",
24
- * "Accept": "application/json",
25
- * "Access-Control-Allow-Origin": "*"
26
- * }
27
- * ```
28
- */
29
- protected setHeaders: (headerParams?: HeaderParams) => HttpHeaders;
30
- protected setOptions: ({ headerParams, queryParams: params, }?: {
31
- headerParams?: HeaderParams;
32
- queryParams?: GenericParams;
33
- }) => VonHttpOptionsModel;
34
- protected setOptionsForFile: ({ headerParams, queryParams, }?: {
35
- headerParams?: HeaderParams;
36
- queryParams?: GenericParams;
37
- }) => VonHttpOptionsModel;
38
- protected setUrlParams: (url: string, params?: GenericParams) => string;
39
- authenticate: (url: string, username: string, password: string) => Observable<any>;
40
- get: <R = any>({ url, urlParams, queryParams: params, headerParams, header: oldHeaderParams, params: oldParams, }: BaseParams) => Observable<R>;
41
- delete: <R = any>({ url, urlParams, queryParams: params, headerParams, header: oldHeaderParams, params: oldParams, }: BaseParams) => Observable<R>;
42
- post: <R = any, B = GenericParams | FormData>({ url, body, urlParams, queryParams: params, headerParams, header: oldHeaderParams, params: oldParams, }: BodyParams<B>) => Observable<R>;
43
- put: <R = any, B = GenericParams | FormData>({ url, body, urlParams, queryParams: params, headerParams, header: oldHeaderParams, params: oldParams, }: BodyParams<B>) => Observable<R>;
44
- patch: <R = any, B = GenericParams | FormData>({ url, body, urlParams, queryParams: params, headerParams, header: oldHeaderParams, params: oldParams, }: BodyParams<B>) => Observable<R>;
45
- file: ({ url, urlParams, queryParams: params, headerParams, header: oldHeaderParams, params: oldParams, }: BaseParams) => Observable<SafeResourceUrl>;
46
- }
package/public-api.d.ts DELETED
@@ -1,6 +0,0 @@
1
- export * from './lib/models/von-error-rest-interceptor.model';
2
- export * from './lib/models/von-header-params.model';
3
- export * from './lib/models/von-page-response.model';
4
- export * from './lib/models/von-rest-definition.model';
5
- export * from './lib/von-rest-interceptor.service';
6
- export * from './lib/von-rest.service';