http-request-manager 0.0.1 → 0.0.20

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.
Files changed (103) hide show
  1. package/README.md +262 -13
  2. package/esm2022/http-request-manager.mjs +5 -0
  3. package/esm2022/lib/interceptors/credentials.interceptor.mjs +14 -0
  4. package/esm2022/lib/interceptors/index.mjs +5 -0
  5. package/esm2022/lib/interceptors/models/error-settings.model.mjs +10 -0
  6. package/esm2022/lib/interceptors/request-error.interceptor.mjs +49 -0
  7. package/esm2022/lib/interceptors/request-header.interceptor.mjs +41 -0
  8. package/esm2022/lib/models/data-type.enum.mjs +7 -0
  9. package/esm2022/lib/models/database-storage.model.mjs +10 -0
  10. package/esm2022/lib/models/index.mjs +4 -0
  11. package/esm2022/lib/models/retry-options.model.mjs +10 -0
  12. package/esm2022/lib/services/index.mjs +6 -0
  13. package/esm2022/lib/services/local-storage-manager-service/index.mjs +3 -0
  14. package/esm2022/lib/services/local-storage-manager-service/local-storage-manager.service.mjs +275 -0
  15. package/esm2022/lib/services/local-storage-manager-service/models/global-store-options.model.mjs +13 -0
  16. package/esm2022/lib/services/local-storage-manager-service/models/index.mjs +7 -0
  17. package/esm2022/lib/services/local-storage-manager-service/models/setting-options.model.mjs +13 -0
  18. package/esm2022/lib/services/local-storage-manager-service/models/storage-data.model.mjs +10 -0
  19. package/esm2022/lib/services/local-storage-manager-service/models/storage-option-settings.model.mjs +13 -0
  20. package/esm2022/lib/services/local-storage-manager-service/models/storage-option.model.mjs +12 -0
  21. package/esm2022/lib/services/local-storage-manager-service/models/storage-type.enum.mjs +7 -0
  22. package/esm2022/lib/services/request-manager-services/http-manager.service.mjs +172 -0
  23. package/esm2022/lib/services/request-manager-services/index.mjs +5 -0
  24. package/esm2022/lib/services/request-manager-services/request.service.mjs +159 -0
  25. package/esm2022/lib/services/request-manager-services/rxjs-operators/countdown.mjs +9 -0
  26. package/esm2022/lib/services/request-manager-services/rxjs-operators/delay-retry.mjs +8 -0
  27. package/esm2022/lib/services/request-manager-services/rxjs-operators/index.mjs +5 -0
  28. package/esm2022/lib/services/request-manager-services/rxjs-operators/request-polling.mjs +14 -0
  29. package/esm2022/lib/services/request-manager-services/rxjs-operators/request-streaming.mjs +19 -0
  30. package/esm2022/lib/services/request-manager-state-service/http-manager-state.store.mjs +299 -0
  31. package/esm2022/lib/services/request-manager-state-service/index.mjs +3 -0
  32. package/esm2022/lib/services/request-manager-state-service/models/api-request.model.mjs +20 -0
  33. package/esm2022/lib/services/request-manager-state-service/models/index.mjs +3 -0
  34. package/esm2022/lib/services/request-manager-state-service/models/request-options.model.mjs +10 -0
  35. package/esm2022/lib/services/utils/app.service.mjs +20 -0
  36. package/esm2022/lib/services/utils/encryption/asymmetrical-encryption.service.mjs +186 -0
  37. package/esm2022/lib/services/utils/encryption/encryption-test.service.mjs +35 -0
  38. package/esm2022/lib/services/utils/encryption/index.mjs +4 -0
  39. package/esm2022/lib/services/utils/encryption/random.mjs +52 -0
  40. package/esm2022/lib/services/utils/encryption/symmetrical-encryption.service.mjs +77 -0
  41. package/esm2022/lib/services/utils/headers.service.mjs +21 -0
  42. package/esm2022/lib/services/utils/index.mjs +6 -0
  43. package/esm2022/lib/services/utils/path-query.service.mjs +53 -0
  44. package/esm2022/lib/services/utils/utils.service.mjs +134 -0
  45. package/esm2022/public-api.mjs +7 -0
  46. package/fesm2022/http-request-manager.mjs +1715 -0
  47. package/fesm2022/http-request-manager.mjs.map +1 -0
  48. package/http-request-manager-0.0.20.tgz +0 -0
  49. package/index.d.ts +5 -0
  50. package/lib/interceptors/credentials.interceptor.d.ts +8 -0
  51. package/lib/interceptors/index.d.ts +4 -0
  52. package/lib/interceptors/models/error-settings.model.d.ts +10 -0
  53. package/lib/interceptors/request-error.interceptor.d.ts +10 -0
  54. package/lib/interceptors/request-header.interceptor.d.ts +15 -0
  55. package/lib/models/data-type.enum.d.ts +5 -0
  56. package/lib/models/database-storage.model.d.ts +10 -0
  57. package/lib/models/index.d.ts +3 -0
  58. package/lib/models/retry-options.model.d.ts +10 -0
  59. package/lib/services/index.d.ts +4 -0
  60. package/lib/services/local-storage-manager-service/index.d.ts +2 -0
  61. package/lib/services/local-storage-manager-service/local-storage-manager.service.d.ts +81 -0
  62. package/lib/services/local-storage-manager-service/models/global-store-options.model.d.ts +15 -0
  63. package/lib/services/local-storage-manager-service/models/index.d.ts +6 -0
  64. package/lib/services/local-storage-manager-service/models/setting-options.model.d.ts +15 -0
  65. package/lib/services/local-storage-manager-service/models/storage-data.model.d.ts +10 -0
  66. package/lib/services/local-storage-manager-service/models/storage-option-settings.model.d.ts +15 -0
  67. package/lib/services/local-storage-manager-service/models/storage-option.model.d.ts +13 -0
  68. package/lib/services/local-storage-manager-service/models/storage-type.enum.d.ts +5 -0
  69. package/lib/services/request-manager-services/http-manager.service.d.ts +35 -0
  70. package/lib/services/request-manager-services/index.d.ts +3 -0
  71. package/lib/services/request-manager-services/request.service.d.ts +27 -0
  72. package/lib/services/request-manager-services/rxjs-operators/countdown.d.ts +2 -0
  73. package/lib/services/request-manager-services/rxjs-operators/delay-retry.d.ts +2 -0
  74. package/lib/services/request-manager-services/rxjs-operators/index.d.ts +4 -0
  75. package/lib/services/request-manager-services/rxjs-operators/request-polling.d.ts +7 -0
  76. package/lib/services/request-manager-services/rxjs-operators/request-streaming.d.ts +2 -0
  77. package/lib/services/request-manager-state-service/http-manager-state.store.d.ts +55 -0
  78. package/lib/services/request-manager-state-service/index.d.ts +2 -0
  79. package/lib/services/request-manager-state-service/models/api-request.model.d.ts +25 -0
  80. package/lib/services/request-manager-state-service/models/index.d.ts +2 -0
  81. package/lib/services/request-manager-state-service/models/request-options.model.d.ts +10 -0
  82. package/lib/services/utils/app.service.d.ts +8 -0
  83. package/lib/services/utils/encryption/asymmetrical-encryption.service.d.ts +17 -0
  84. package/lib/services/utils/encryption/encryption-test.service.d.ts +10 -0
  85. package/lib/services/utils/encryption/index.d.ts +3 -0
  86. package/lib/services/utils/encryption/random.d.ts +7 -0
  87. package/lib/services/utils/encryption/symmetrical-encryption.service.d.ts +14 -0
  88. package/lib/services/utils/headers.service.d.ts +10 -0
  89. package/lib/services/utils/index.d.ts +5 -0
  90. package/lib/services/utils/path-query.service.d.ts +11 -0
  91. package/lib/services/utils/utils.service.d.ts +24 -0
  92. package/package.json +24 -10
  93. package/public-api.d.ts +3 -0
  94. package/ng-package.json +0 -7
  95. package/src/lib/http-request-manager.component.spec.ts +0 -21
  96. package/src/lib/http-request-manager.component.ts +0 -15
  97. package/src/lib/http-request-manager.module.ts +0 -16
  98. package/src/lib/http-request-manager.service.spec.ts +0 -16
  99. package/src/lib/http-request-manager.service.ts +0 -9
  100. package/src/public-api.ts +0 -7
  101. package/tsconfig.lib.json +0 -14
  102. package/tsconfig.lib.prod.json +0 -10
  103. package/tsconfig.spec.json +0 -14
@@ -0,0 +1,299 @@
1
+ import { inject, Inject, Injectable, InjectionToken } from '@angular/core';
2
+ import { ComponentStore } from '@ngrx/component-store';
3
+ import { BehaviorSubject, EMPTY, of, Subject } from 'rxjs';
4
+ import { tap, switchMap, concatMap, scan, expand, takeUntil } from 'rxjs/operators';
5
+ import { DatabaseStorage } from '../../models/database-storage.model';
6
+ import { HTTPManagerService, DataType } from '../request-manager-services';
7
+ import { ApiRequest, RequestOptions } from './models';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "./models";
10
+ const API_OPTS = new InjectionToken('API_OPTS');
11
+ const defaultState = {
12
+ data: [],
13
+ dataObject: null,
14
+ };
15
+ export class HTTPManagerStateService extends ComponentStore {
16
+ constructor(apiOptions, dataType, database) {
17
+ super(defaultState);
18
+ this.apiOptions = apiOptions;
19
+ this.dataType = dataType;
20
+ this.database = database;
21
+ this.httpManagerService = inject(HTTPManagerService);
22
+ this.error$ = this.httpManagerService.error$;
23
+ this.isPending$ = this.httpManagerService.isPending$;
24
+ // PAGINATION
25
+ this.page = new BehaviorSubject(0);
26
+ this.page$ = this.page.asObservable();
27
+ this.totalPages = new BehaviorSubject(0);
28
+ this.totalPages$ = this.totalPages.asObservable();
29
+ this.percentage = new BehaviorSubject(0);
30
+ this.percentage$ = this.percentage.asObservable();
31
+ // ----------
32
+ this.hasDatabase = false;
33
+ this.streamedResponse = [];
34
+ // --------------------------------------------------------------------------------------------------
35
+ // SELECTORS
36
+ this.data$ = this.select(({ data, dataObject }) => {
37
+ const isArray = (this.dataType === DataType.ARRAY) ? true : false;
38
+ return (isArray) ? data : dataObject;
39
+ });
40
+ this.selectRecord$ = (id) => this.select(this.data$, (data) => {
41
+ if (this.dataType === DataType.ARRAY && Array.isArray(data)) {
42
+ return data.find(item => item.id === id);
43
+ }
44
+ else {
45
+ return data.id === id ? data : null;
46
+ }
47
+ });
48
+ // --------------------------------------------------------------------------------------------------
49
+ // UPDATERS
50
+ this.resetData$ = this.updater((state) => {
51
+ return { ...state, data: [], dataObject: null };
52
+ });
53
+ this.setData$ = this.updater((state, data) => {
54
+ if (!data)
55
+ return state;
56
+ if (this.dataType === DataType.ARRAY) {
57
+ const dataArray = Array.isArray(data) ? data : [data];
58
+ const stateDataSample = (state.data.length > 0) ? Object.keys(state.data[0]) : [];
59
+ const newDataSample = (dataArray.length > 0) ? Object.keys(dataArray[0]) : [];
60
+ const isSame = (state.data.length === 0) ? false : stateDataSample.every((value, index) => value === newDataSample[index]);
61
+ const updatedData = (!isSame && dataArray.length !== 0) ? this.updateArrayState([], dataArray) : this.updateArrayState(state.data, dataArray);
62
+ return { ...state, data: updatedData, dataObject: null };
63
+ }
64
+ else {
65
+ const dataObject = this.isEmpty(data) ? null : data;
66
+ return { ...state, data: [], dataObject: dataObject };
67
+ }
68
+ });
69
+ this.addData$ = this.updater((state, data) => {
70
+ if (this.dataType === DataType.ARRAY) {
71
+ const newState = [...state.data, data];
72
+ return { ...state, ...{ data: newState } };
73
+ }
74
+ else {
75
+ return { ...state, ...{ dataObject: data } };
76
+ }
77
+ });
78
+ this.deleteData$ = this.updater((state, data) => {
79
+ if (this.dataType === DataType.ARRAY) {
80
+ const newState = state.data.filter(item => item.id !== data.id);
81
+ return { ...state, ...{ data: newState } };
82
+ }
83
+ else {
84
+ return { ...state, ...{ dataObject: null } };
85
+ }
86
+ });
87
+ this.updateData$ = this.updater((state, data) => {
88
+ if (this.dataType === DataType.ARRAY) {
89
+ const objIndex = state.data.findIndex(item => item.id === data.id);
90
+ if (objIndex > -1) {
91
+ const newState = [...state.data];
92
+ newState[objIndex] = data;
93
+ return { ...state, ...{ data: newState } };
94
+ }
95
+ return state;
96
+ }
97
+ else {
98
+ return { ...state, ...{ dataObject: data } };
99
+ }
100
+ });
101
+ // --------------------------------------------------------------------------------------------------
102
+ // EFFECTS
103
+ this.clearRecords = this.effect(data => data.pipe(tap(() => {
104
+ if (this.dataType === DataType.ARRAY) {
105
+ this.setData$([]);
106
+ }
107
+ else {
108
+ this.setData$({});
109
+ }
110
+ })));
111
+ this.refreshData = this.effect(data => data.pipe(tap(() => {
112
+ // this.apiService.flushDatabase(this.otherOptions.database?.table)
113
+ this.fetchRecords();
114
+ })));
115
+ // --------------------------------------------------------------------------------------------------
116
+ // CRUD OPERATIONS
117
+ // FETCH RECORDS
118
+ this.fetchRecords = (options) => this.effect(() => of(RequestOptions.adapt(options)).pipe(switchMap(() => {
119
+ this.streamedResponse = [];
120
+ const requestOptions = this.updateRequestOptions(options?.headers);
121
+ return this.httpManagerService.getRequest(requestOptions, options?.path)
122
+ .pipe(tap((data) => {
123
+ data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data;
124
+ this.setData$(data);
125
+ }));
126
+ })));
127
+ // CREATE RECORD
128
+ this.createRecord = (data, options) => this.effect(() => of(data).pipe(switchMap((data) => {
129
+ this.streamedResponse = [];
130
+ const requestOptions = this.updateRequestOptions(options?.headers);
131
+ return this.httpManagerService.postRequest(data, requestOptions, options?.path)
132
+ .pipe(tap((data) => {
133
+ data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data;
134
+ this.addData$(data);
135
+ }));
136
+ })));
137
+ // UPDATE RECORD
138
+ this.updateRecord = (data, options) => this.effect(() => of(data).pipe(concatMap((data) => {
139
+ this.streamedResponse = [];
140
+ const requestOptions = this.updateRequestOptions(options?.headers);
141
+ return this.httpManagerService.putRequest(data, requestOptions, options?.path)
142
+ .pipe(tap((data) => {
143
+ data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data;
144
+ this.updateData$(data);
145
+ }));
146
+ })));
147
+ // DELETE RECORD
148
+ this.deleteRecord = (options) => this.effect(() => of(options).pipe(concatMap((data) => {
149
+ this.streamedResponse = [];
150
+ const requestOptions = this.updateRequestOptions(options?.headers);
151
+ return this.httpManagerService.deleteRequest(requestOptions, options?.path)
152
+ .pipe(tap((data) => {
153
+ data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data;
154
+ this.deleteData$(data);
155
+ }));
156
+ })));
157
+ // --------------------------------------------------------------------------------------------------
158
+ // FETCH STREAM
159
+ this.createStream = (data, options) => this.effect(() => of(data).pipe(tap(() => this.httpManagerService.isPending.next(true)), switchMap((data) => {
160
+ const requestOptions = this.updateRequestOptions(options?.headers);
161
+ return this.httpManagerService.postRequest(data, requestOptions, options?.path)
162
+ .pipe(tap((res) => {
163
+ if (res.length > 0)
164
+ this.setData$(res);
165
+ this.streamedResponse = res;
166
+ }), scan((acc, res) => {
167
+ const previous = acc.current;
168
+ const current = res;
169
+ return { previous, current };
170
+ }, { previous: null, current: null }), tap(({ previous, current }) => {
171
+ if (previous && JSON.stringify(previous) === JSON.stringify(current)) {
172
+ this.httpManagerService.isPending.next(false);
173
+ this.setData$([]);
174
+ }
175
+ else {
176
+ this.httpManagerService.isPending.next(true);
177
+ }
178
+ }));
179
+ })));
180
+ this.fetchStream = (options) => this.effect(() => of(options).pipe(tap(() => this.httpManagerService.isPending.next(true)), switchMap((options) => {
181
+ const requestOptions = this.updateRequestOptions(options?.headers);
182
+ return this.httpManagerService.getRequest(requestOptions, options?.path)
183
+ .pipe(tap((res) => {
184
+ if (res.length > 0)
185
+ this.setData$(res);
186
+ this.streamedResponse = res;
187
+ }), scan((acc, res) => {
188
+ const previous = acc.current;
189
+ const current = res;
190
+ return { previous, current };
191
+ }, { previous: null, current: null }), tap(({ previous, current }) => {
192
+ if (previous && JSON.stringify(previous) === JSON.stringify(current)) {
193
+ this.httpManagerService.isPending.next(false);
194
+ this.setData$([]);
195
+ }
196
+ else {
197
+ this.httpManagerService.isPending.next(true);
198
+ }
199
+ }));
200
+ })));
201
+ // FETCH PAGINATION
202
+ this.fetchPaginationCancel$ = new Subject();
203
+ this.fetchPaginationRecords = (size = 10, options) => this.effect(() => {
204
+ this.fetchPaginationCancel$.next();
205
+ return of(RequestOptions.adapt(options)).pipe(switchMap(() => {
206
+ this.resetData$();
207
+ const requestOptions = this.updateRequestOptions(options?.headers);
208
+ const updatedPath = [...(options?.path ?? []), { size, page: 1 }];
209
+ const firstRequestObservable = this.httpManagerService.getRequest(requestOptions, updatedPath).pipe(takeUntil(this.fetchPaginationCancel$), tap(() => this.httpManagerService.isPending.next(true)), tap((data) => {
210
+ data = !data ? (this.dataType === DataType.ARRAY ? [] : {}) : data;
211
+ this.setData$(data.results);
212
+ }));
213
+ return firstRequestObservable.pipe(takeUntil(this.fetchPaginationCancel$), expand((data) => {
214
+ this.httpManagerService.isPending.next(true);
215
+ const totalPages = data?.totalPages || 1;
216
+ const currentPage = data?.page || 1;
217
+ if (currentPage < totalPages) {
218
+ const nextPage = currentPage + 1;
219
+ const updatedPathWithNextPage = [...(options?.path ?? []), { size, page: nextPage }];
220
+ const nextRequestObservable = this.httpManagerService.getRequest(requestOptions, updatedPathWithNextPage).pipe(takeUntil(this.fetchPaginationCancel$), tap(() => this.httpManagerService.isPending.next(true)), tap((nextData) => {
221
+ nextData = !nextData ? (this.dataType === DataType.ARRAY ? [] : {}) : nextData;
222
+ this.setData$(nextData.results);
223
+ }));
224
+ return nextRequestObservable;
225
+ }
226
+ return EMPTY;
227
+ }), takeUntil(this.fetchPaginationCancel$), tap(() => this.httpManagerService.isPending.next(false)));
228
+ }));
229
+ });
230
+ this.setApiRequestOptions(apiOptions, dataType, database);
231
+ }
232
+ setApiRequestOptions(apiOptions, dataType, database) {
233
+ this.apiOptions = ApiRequest.adapt(apiOptions);
234
+ this.dataType = (dataType) ? dataType : DataType.ARRAY;
235
+ this.hasDatabase = this.database?.table === "" ? false : true;
236
+ this.database = (this.hasDatabase) ? DatabaseStorage.adapt(database) : undefined;
237
+ }
238
+ get apiRequestOptions() {
239
+ return this.apiOptions;
240
+ }
241
+ initStorage() {
242
+ // if(this.otherOptions.database) {
243
+ // console.log('Has Database Option:', this.otherOptions.database.table)
244
+ // const schema = (this.otherOptions.adapters?.incoming) ? Object.keys(this.otherOptions.adapters.incoming({})).join() : '++id'
245
+ // this.apiService.initDB(this.otherOptions.database.expiresIn, this.otherOptions.database.table, schema)
246
+ // }
247
+ }
248
+ initializeState(data) {
249
+ this.setData$(data);
250
+ }
251
+ updateArrayState(currentData, newData) {
252
+ const filterCurrentData = () => {
253
+ const ids = this.streamedResponse.map((obj) => obj.id);
254
+ return currentData.filter(obj => (obj.id) ? ids.includes(obj.id) : obj);
255
+ };
256
+ const filteredCurrentData = (this.httpManagerService.isPending.value) ? currentData : filterCurrentData();
257
+ const updatedData = filteredCurrentData.map(item => {
258
+ const newItem = newData.find(newItem => {
259
+ const hasId = (newItem?.id && item?.id) ? true : false;
260
+ return (hasId) ? newItem.id === item.id : JSON.stringify(newItem) === JSON.stringify(item);
261
+ });
262
+ return (newItem) ? { ...item, ...newItem } : item;
263
+ });
264
+ const addedData = newData.filter(newItem => {
265
+ return !filteredCurrentData.some(item => {
266
+ const hasId = (newItem?.id && item?.id) ? true : false;
267
+ return (hasId) ? item.id === newItem.id : JSON.stringify(newItem) === JSON.stringify(item);
268
+ });
269
+ });
270
+ return [...updatedData, ...addedData];
271
+ }
272
+ // --------------------------------------------------------------------------------------------------
273
+ // MISC
274
+ isEmpty(obj) {
275
+ return Object.keys(obj).length === 0;
276
+ }
277
+ updateRequestOptions(headers) {
278
+ const options = ApiRequest.adapt({ ...this.apiOptions });
279
+ options.headers = (headers)
280
+ ? { ...options.headers, ...headers }
281
+ : { ...options.headers };
282
+ return options;
283
+ }
284
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HTTPManagerStateService, deps: [{ token: API_OPTS }, { token: "dataType" }, { token: "database" }], target: i0.ɵɵFactoryTarget.Injectable }); }
285
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HTTPManagerStateService }); }
286
+ }
287
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HTTPManagerStateService, decorators: [{
288
+ type: Injectable
289
+ }], ctorParameters: function () { return [{ type: i1.ApiRequest, decorators: [{
290
+ type: Inject,
291
+ args: [API_OPTS]
292
+ }] }, { type: undefined, decorators: [{
293
+ type: Inject,
294
+ args: ["dataType"]
295
+ }] }, { type: undefined, decorators: [{
296
+ type: Inject,
297
+ args: ["database"]
298
+ }] }]; } });
299
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1tYW5hZ2VyLXN0YXRlLnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9yZXF1ZXN0LW1hbmFnZXItc3RhdGUtc2VydmljZS9odHRwLW1hbmFnZXItc3RhdGUuc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMxRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFFdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUN0RSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBTyxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN4RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUE7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxNQUFNLDZCQUE2QixDQUFBO0FBQzFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFBOzs7QUFHckQsTUFBTSxRQUFRLEdBQUcsSUFBSSxjQUFjLENBQWEsVUFBVSxDQUFDLENBQUE7QUFPM0QsTUFBTSxZQUFZLEdBQTZCO0lBQzdDLElBQUksRUFBRSxFQUFFO0lBQ1IsVUFBVSxFQUFFLElBQUk7Q0FDakIsQ0FBQTtBQUdELE1BQU0sT0FBTyx1QkFBa0QsU0FBUSxjQUFzQztJQXNCM0csWUFDNEIsVUFBc0IsRUFDcEIsUUFBOEIsRUFDOUIsUUFBc0M7UUFFbEUsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBSk8sZUFBVSxHQUFW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LFVBQVU7bUhBekJULHVCQUF1Qjs7NEZBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVTs7MEJBd0JOLE1BQU07MkJBQUMsUUFBUTs7MEJBQ2YsTUFBTTsyQkFBQyxVQUFVOzswQkFDakIsTUFBTTsyQkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IENvbXBvbmVudFN0b3JlIH0gZnJvbSAnQG5ncngvY29tcG9uZW50LXN0b3JlJ1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIEVNUFRZLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyB0YXAsIHN3aXRjaE1hcCwgY29uY2F0TWFwLCBzY2FuLCBleHBhbmQsIG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5pbXBvcnQgeyBEYXRhYmFzZVN0b3JhZ2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvZGF0YWJhc2Utc3RvcmFnZS5tb2RlbCdcbmltcG9ydCB7IEhUVFBNYW5hZ2VyU2VydmljZSwgRGF0YVR5cGUgfSBmcm9tICcuLi9yZXF1ZXN0LW1hbmFnZXItc2VydmljZXMnXG5pbXBvcnQgeyBBcGlSZXF1ZXN0LCBSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vbW9kZWxzJ1xuXG5cbmNvbnN0IEFQSV9PUFRTID0gbmV3IEluamVjdGlvblRva2VuPEFwaVJlcXVlc3Q+KCdBUElfT1BUUycpXG5cbmV4cG9ydCBpbnRlcmZhY2UgQVBJU3RhdGVNYW5hZ2VyRGF0YTxUPiB7XG4gIGRhdGE6IFRbXVxuICBkYXRhT2JqZWN0OiBUIHwgbnVsbFxufVxuXG5jb25zdCBkZWZhdWx0U3RhdGU6IEFQSVN0YXRlTWFuYWdlckRhdGE8YW55PiA9IHtcbiAgZGF0YTogW10sXG4gIGRhdGFPYmplY3Q6IG51bGwsXG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBIVFRQTWFuYWdlclN0YXRlU2VydmljZTxUIGV4dGVuZHMgeyBpZDogbnVtYmVyIH0+IGV4dGVuZHMgQ29tcG9uZW50U3RvcmU8QVBJU3RhdGVNYW5hZ2VyRGF0YTxUPj4ge1xuXG4gIGh0dHBNYW5hZ2VyU2VydmljZSA9IGluamVjdChIVFRQTWFuYWdlclNlcnZpY2UpXG5cbiAgZXJyb3IkID0gdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuZXJyb3IkXG4gIGlzUGVuZGluZyQgPSB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5pc1BlbmRpbmckXG5cbiAgLy8gUEFHSU5BVElPTlxuICBwcml2YXRlIHBhZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMClcbiAgcGFnZSQgPSB0aGlzLnBhZ2UuYXNPYnNlcnZhYmxlKClcblxuICBwcml2YXRlIHRvdGFsUGFnZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMClcbiAgdG90YWxQYWdlcyQgPSB0aGlzLnRvdGFsUGFnZXMuYXNPYnNlcnZhYmxlKClcblxuICBwcml2YXRlIHBlcmNlbnRhZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMClcbiAgcGVyY2VudGFnZSQgPSB0aGlzLnBlcmNlbnRhZ2UuYXNPYnNlcnZhYmxlKClcbiAgLy8gLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgaGFzRGF0YWJhc2UgPSBmYWxzZVxuXG4gIHN0cmVhbWVkUmVzcG9uc2UgPSBbXVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoQVBJX09QVFMpIHByaXZhdGUgYXBpT3B0aW9uczogQXBpUmVxdWVzdCxcbiAgICBASW5qZWN0KFwiZGF0YVR5cGVcIikgcHJpdmF0ZSBkYXRhVHlwZTogRGF0YVR5cGUgfCB1bmRlZmluZWQsXG4gICAgQEluamVjdChcImRhdGFiYXNlXCIpIHByaXZhdGUgZGF0YWJhc2U/OiBEYXRhYmFzZVN0b3JhZ2UgfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgc3VwZXIoZGVmYXVsdFN0YXRlKVxuXG4gICAgdGhpcy5zZXRBcGlSZXF1ZXN0T3B0aW9ucyhhcGlPcHRpb25zLCBkYXRhVHlwZSwgZGF0YWJhc2UpXG4gIH1cblxuICBzZXRBcGlSZXF1ZXN0T3B0aW9ucyhhcGlPcHRpb25zOiBBcGlSZXF1ZXN0LCBkYXRhVHlwZT86IERhdGFUeXBlLCBkYXRhYmFzZT86IERhdGFiYXNlU3RvcmFnZSkge1xuXG4gICAgdGhpcy5hcGlPcHRpb25zID0gQXBpUmVxdWVzdC5hZGFwdChhcGlPcHRpb25zKVxuICAgIHRoaXMuZGF0YVR5cGUgPSAoZGF0YVR5cGUpID8gZGF0YVR5cGUgOiBEYXRhVHlwZS5BUlJBWVxuXG4gICAgdGhpcy5oYXNEYXRhYmFzZSA9IHRoaXMuZGF0YWJhc2U/LnRhYmxlID09PSBcIlwiID8gZmFsc2UgOiB0cnVlXG4gICAgdGhpcy5kYXRhYmFzZSA9ICh0aGlzLmhhc0RhdGFiYXNlKSA/IERhdGFiYXNlU3RvcmFnZS5hZGFwdChkYXRhYmFzZSkgOiB1bmRlZmluZWRcblxuICB9XG5cbiAgZ2V0IGFwaVJlcXVlc3RPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmFwaU9wdGlvbnNcbiAgfVxuXG4gIGluaXRTdG9yYWdlKCkge1xuICAgIC8vIGlmKHRoaXMub3RoZXJPcHRpb25zLmRhdGFiYXNlKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZygnSGFzIERhdGFiYXNlIE9wdGlvbjonLCB0aGlzLm90aGVyT3B0aW9ucy5kYXRhYmFzZS50YWJsZSlcbiAgICAgIC8vIGNvbnN0IHNjaGVtYSA9ICh0aGlzLm90aGVyT3B0aW9ucy5hZGFwdGVycz8uaW5jb21pbmcpID8gT2JqZWN0LmtleXModGhpcy5vdGhlck9wdGlvbnMuYWRhcHRlcnMuaW5jb21pbmcoe30pKS5qb2luKCkgOiAnKytpZCdcbiAgICAgIC8vIHRoaXMuYXBpU2VydmljZS5pbml0REIodGhpcy5vdGhlck9wdGlvbnMuZGF0YWJhc2UuZXhwaXJlc0luLCB0aGlzLm90aGVyT3B0aW9ucy5kYXRhYmFzZS50YWJsZSwgc2NoZW1hKVxuICAgIC8vIH1cbiAgfVxuXG4gIGluaXRpYWxpemVTdGF0ZShkYXRhOiBhbnkpIHtcbiAgICB0aGlzLnNldERhdGEkKGRhdGEpXG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBTRUxFQ1RPUlNcblxuICByZWFkb25seSBkYXRhJCA9IHRoaXMuc2VsZWN0KCh7IGRhdGEsIGRhdGFPYmplY3QgfSkgPT4ge1xuICAgIGNvbnN0IGlzQXJyYXkgPSggdGhpcy5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuQVJSQVkpID8gdHJ1ZSA6IGZhbHNlXG4gICAgcmV0dXJuIChpc0FycmF5KSA/IGRhdGEgOiBkYXRhT2JqZWN0XG4gIH0pXG5cbiAgcmVhZG9ubHkgc2VsZWN0UmVjb3JkJCA9IChpZDogbnVtYmVyKSA9PiB0aGlzLnNlbGVjdChcbiAgICB0aGlzLmRhdGEkLFxuICAgIChkYXRhKSA9PiB7XG4gICAgICBpZiAodGhpcy5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuQVJSQVkgJiYgQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICByZXR1cm4gZGF0YS5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gaWQpIGFzIFQgfCBudWxsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKGRhdGEgYXMgVCkuaWQgPT09IGlkID8gZGF0YSA6IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIClcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFVQREFURVJTXG5cbiAgcHJpdmF0ZSByZWFkb25seSByZXNldERhdGEkID0gdGhpcy51cGRhdGVyKChzdGF0ZTogQVBJU3RhdGVNYW5hZ2VyRGF0YTxUPikgPT4ge1xuICAgIHJldHVybiB7IC4uLnN0YXRlLCBkYXRhOiBbXSwgZGF0YU9iamVjdDogbnVsbCB9XG4gIH0pXG5cbiAgcHJpdmF0ZSByZWFkb25seSBzZXREYXRhJCA9IHRoaXMudXBkYXRlcigoc3RhdGU6IEFQSVN0YXRlTWFuYWdlckRhdGE8VD4sIGRhdGE6IFQgfCBUW10gfCBhbnkpID0+IHtcblxuICAgIGlmICghZGF0YSkgcmV0dXJuIHN0YXRlXG5cbiAgICBpZiAodGhpcy5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuQVJSQVkpIHtcblxuICAgICAgY29uc3QgZGF0YUFycmF5ID0gQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBbZGF0YV1cblxuICAgICAgY29uc3Qgc3RhdGVEYXRhU2FtcGxlID0gKHN0YXRlLmRhdGEubGVuZ3RoID4gMCkgPyBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhWzBdKSA6IFtdXG4gICAgICBjb25zdCBuZXdEYXRhU2FtcGxlID0gKGRhdGFBcnJheS5sZW5ndGggPiAwKSA/IE9iamVjdC5rZXlzKGRhdGFBcnJheVswXSkgOiBbXVxuXG4gICAgICBjb25zdCBpc1NhbWUgPSAoc3RhdGUuZGF0YS5sZW5ndGggPT09IDApID8gZmFsc2UgOiBzdGF0ZURhdGFTYW1wbGUuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT4gdmFsdWUgPT09IG5ld0RhdGFTYW1wbGVbaW5kZXhdKVxuICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSAoIWlzU2FtZSAmJiBkYXRhQXJyYXkubGVuZ3RoICE9PSAwKSA/IHRoaXMudXBkYXRlQXJyYXlTdGF0ZShbXSwgZGF0YUFycmF5KSA6IHRoaXMudXBkYXRlQXJyYXlTdGF0ZShzdGF0ZS5kYXRhLCBkYXRhQXJyYXkpXG5cbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBkYXRhOiB1cGRhdGVkRGF0YSwgZGF0YU9iamVjdDogbnVsbCB9IGFzIEFQSVN0YXRlTWFuYWdlckRhdGE8VD5cblxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkYXRhT2JqZWN0ID0gdGhpcy5pc0VtcHR5KGRhdGEpID8gbnVsbCA6IGRhdGFcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBkYXRhOiBbXSwgZGF0YU9iamVjdDogZGF0YU9iamVjdCB9IGFzIEFQSVN0YXRlTWFuYWdlckRhdGE8VD5cbiAgICB9XG5cbiAgfSlcblxuICBwcml2YXRlIHVwZGF0ZUFycmF5U3RhdGUoY3VycmVudERhdGE6IGFueVtdLCBuZXdEYXRhOiBhbnlbXSk6IGFueVtdIHtcblxuICAgIGNvbnN0IGZpbHRlckN1cnJlbnREYXRhID0gKCkgPT4ge1xuICAgICAgY29uc3QgaWRzID0gdGhpcy5zdHJlYW1lZFJlc3BvbnNlLm1hcCgob2JqOiBhbnkpID0+IG9iai5pZClcbiAgICAgIHJldHVybiBjdXJyZW50RGF0YS5maWx0ZXIob2JqID0+IChvYmouaWQpID8gaWRzLmluY2x1ZGVzKG9iai5pZCkgOiBvYmopXG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyZWRDdXJyZW50RGF0YSA9ICh0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5pc1BlbmRpbmcudmFsdWUpID8gY3VycmVudERhdGEgOiBmaWx0ZXJDdXJyZW50RGF0YSgpXG5cbiAgICBjb25zdCB1cGRhdGVkRGF0YSA9IGZpbHRlcmVkQ3VycmVudERhdGEubWFwKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBuZXdJdGVtID0gbmV3RGF0YS5maW5kKG5ld0l0ZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IGhhc0lkID0gKG5ld0l0ZW0/LmlkICYmIGl0ZW0/LmlkKSA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgIHJldHVybiAoaGFzSWQpID8gbmV3SXRlbS5pZCA9PT0gaXRlbS5pZCA6IEpTT04uc3RyaW5naWZ5KG5ld0l0ZW0pID09PSBKU09OLnN0cmluZ2lmeShpdGVtKVxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gKG5ld0l0ZW0pID8geyAuLi5pdGVtLCAuLi5uZXdJdGVtIH0gOiBpdGVtXG4gICAgfSlcblxuICAgIGNvbnN0IGFkZGVkRGF0YSA9IG5ld0RhdGEuZmlsdGVyKG5ld0l0ZW0gPT4ge1xuICAgICAgcmV0dXJuICFmaWx0ZXJlZEN1cnJlbnREYXRhLnNvbWUoaXRlbSA9PiB7XG4gICAgICAgICAgY29uc3QgaGFzSWQgPSAobmV3SXRlbT8uaWQgJiYgaXRlbT8uaWQpID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgcmV0dXJuIChoYXNJZCkgPyBpdGVtLmlkID09PSBuZXdJdGVtLmlkIDogSlNPTi5zdHJpbmdpZnkobmV3SXRlbSkgPT09IEpTT04uc3RyaW5naWZ5KGl0ZW0pXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICByZXR1cm4gWy4uLnVwZGF0ZWREYXRhLCAuLi5hZGRlZERhdGFdXG5cbn1cblxuICBwcml2YXRlIHJlYWRvbmx5IGFkZERhdGEkID0gdGhpcy51cGRhdGVyKChzdGF0ZTogQVBJU3RhdGVNYW5hZ2VyRGF0YTxUPiwgZGF0YTogVCkgPT4ge1xuXG4gICAgaWYgKHRoaXMuZGF0YVR5cGUgPT09IERhdGFUeXBlLkFSUkFZKSB7XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IFsuLi5zdGF0ZS5kYXRhLCBkYXRhXVxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIC4uLnsgZGF0YTogbmV3U3RhdGUgfSB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCAuLi57IGRhdGFPYmplY3Q6IGRhdGEgfSB9XG4gICAgfVxuXG4gIH0pXG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZWxldGVEYXRhJCA9IHRoaXMudXBkYXRlcigoc3RhdGU6IEFQSVN0YXRlTWFuYWdlckRhdGE8VD4sIGRhdGE6IFQgJiB7IGlkOiBudW1iZXIgfSkgPT4ge1xuICAgIGlmICh0aGlzLmRhdGFUeXBlID09PSBEYXRhVHlwZS5BUlJBWSkge1xuICAgIGNvbnN0IG5ld1N0YXRlID0gc3RhdGUuZGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtLmlkICE9PSBkYXRhLmlkKVxuICAgIHJldHVybiB7IC4uLnN0YXRlLCAuLi57IGRhdGE6IG5ld1N0YXRlIH0gfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgLi4ueyBkYXRhT2JqZWN0OiBudWxsIH0gfVxuICAgIH1cbiAgfSlcblxuICBwcml2YXRlIHJlYWRvbmx5IHVwZGF0ZURhdGEkID0gdGhpcy51cGRhdGVyKChzdGF0ZTogQVBJU3RhdGVNYW5hZ2VyRGF0YTxUPiwgZGF0YTogVCkgPT4ge1xuXG4gICAgaWYgKHRoaXMuZGF0YVR5cGUgPT09IERhdGFUeXBlLkFSUkFZKSB7XG5cbiAgICAgIGNvbnN0IG9iakluZGV4ID0gc3RhdGUuZGF0YS5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBkYXRhLmlkKVxuXG4gICAgICBpZiAob2JqSW5kZXggPiAtMSkge1xuICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IFsuLi5zdGF0ZS5kYXRhXVxuICAgICAgICBuZXdTdGF0ZVtvYmpJbmRleF0gPSBkYXRhXG4gICAgICAgIHJldHVybiB7IC4uLnN0YXRlLCAuLi57IGRhdGE6IG5ld1N0YXRlIH0gfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhdGVcblxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgLi4ueyBkYXRhT2JqZWN0OiBkYXRhIH0gfVxuICAgIH1cblxuICB9KVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEVGRkVDVFNcblxuICByZWFkb25seSBjbGVhclJlY29yZHMgPSB0aGlzLmVmZmVjdChkYXRhID0+XG4gICAgZGF0YS5waXBlKFxuICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVR5cGUgPT09IERhdGFUeXBlLkFSUkFZKSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhJChbXSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldERhdGEkKHt9KVxuICAgICAgICB9XG4gICAgICB9KVxuICApKVxuXG4gIHJlYWRvbmx5IHJlZnJlc2hEYXRhID0gdGhpcy5lZmZlY3QoZGF0YSA9PlxuICAgIGRhdGEucGlwZShcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIC8vIHRoaXMuYXBpU2VydmljZS5mbHVzaERhdGFiYXNlKHRoaXMub3RoZXJPcHRpb25zLmRhdGFiYXNlPy50YWJsZSlcbiAgICAgICAgdGhpcy5mZXRjaFJlY29yZHMoKVxuICAgICAgfSlcbiAgKSlcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBDUlVEIE9QRVJBVElPTlNcblxuICAvLyBGRVRDSCBSRUNPUkRTXG4gIHJlYWRvbmx5IGZldGNoUmVjb3JkcyA9IChvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpID0+XG4gICAgdGhpcy5lZmZlY3Q8YW55PigoKSA9PlxuICAgIG9mKFJlcXVlc3RPcHRpb25zLmFkYXB0KG9wdGlvbnMpKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcblxuICAgICAgICB0aGlzLnN0cmVhbWVkUmVzcG9uc2UgPSBbXVxuICAgICAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHRoaXMudXBkYXRlUmVxdWVzdE9wdGlvbnMob3B0aW9ucz8uaGVhZGVycylcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuZ2V0UmVxdWVzdChyZXF1ZXN0T3B0aW9ucywgb3B0aW9ucz8ucGF0aClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGRhdGEgPSAoIWRhdGEpID8gKHRoaXMuZGF0YVR5cGUgPT09IERhdGFUeXBlLkFSUkFZKSA/IFtdIDoge30gOiBkYXRhXG4gICAgICAgICAgICB0aGlzLnNldERhdGEkKGRhdGEpXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuXG4gICAgICB9KVxuICAgIClcbiAgKVxuXG4gIC8vIENSRUFURSBSRUNPUkRcbiAgcmVhZG9ubHkgY3JlYXRlUmVjb3JkID0gKGRhdGE6IGFueXxudWxsLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpID0+XG4gICAgdGhpcy5lZmZlY3Q8YW55PigoKSA9PlxuICAgICAgb2YoZGF0YSkucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChkYXRhOiBhbnkpID0+IHtcblxuICAgICAgICB0aGlzLnN0cmVhbWVkUmVzcG9uc2UgPSBbXVxuICAgICAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHRoaXMudXBkYXRlUmVxdWVzdE9wdGlvbnMob3B0aW9ucz8uaGVhZGVycylcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwTWFuYWdlclNlcnZpY2UucG9zdFJlcXVlc3QoZGF0YSwgcmVxdWVzdE9wdGlvbnMsIG9wdGlvbnM/LnBhdGgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICBkYXRhID0gKCFkYXRhKSA/ICh0aGlzLmRhdGFUeXBlID09PSBEYXRhVHlwZS5BUlJBWSkgPyBbXSA6IHt9IDogZGF0YVxuICAgICAgICAgICAgdGhpcy5hZGREYXRhJChkYXRhKVxuICAgICAgICAgIH0pLFxuICAgICAgICApXG5cbiAgICAgIH0pXG4gICAgKVxuICApXG5cbiAgLy8gVVBEQVRFIFJFQ09SRFxuICByZWFkb25seSB1cGRhdGVSZWNvcmQgPSAoZGF0YTogYW55fG51bGwsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucykgPT5cbiAgICB0aGlzLmVmZmVjdDxhbnk+KCgpID0+XG4gICAgb2YoZGF0YSkucGlwZShcbiAgICAgIGNvbmNhdE1hcCgoZGF0YTogYW55KSA9PiB7XG5cbiAgICAgICAgdGhpcy5zdHJlYW1lZFJlc3BvbnNlID0gW11cbiAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB0aGlzLnVwZGF0ZVJlcXVlc3RPcHRpb25zKG9wdGlvbnM/LmhlYWRlcnMpXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLnB1dFJlcXVlc3QoZGF0YSwgcmVxdWVzdE9wdGlvbnMsIG9wdGlvbnM/LnBhdGgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICBkYXRhID0gKCFkYXRhKSA/ICh0aGlzLmRhdGFUeXBlID09PSBEYXRhVHlwZS5BUlJBWSkgPyBbXSA6IHt9IDogZGF0YVxuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhJChkYXRhKVxuICAgICAgICAgIH0pLFxuICAgICAgICApXG5cbiAgICAgIH0pXG4gICAgKVxuICApXG5cbiAgLy8gREVMRVRFIFJFQ09SRFxuICByZWFkb25seSBkZWxldGVSZWNvcmQgPSAob3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKSA9PlxuICAgIHRoaXMuZWZmZWN0PGFueT4oKCkgPT5cbiAgICBvZihvcHRpb25zKS5waXBlKFxuICAgICAgY29uY2F0TWFwKChkYXRhOiBhbnkpID0+IHtcblxuICAgICAgICB0aGlzLnN0cmVhbWVkUmVzcG9uc2UgPSBbXVxuICAgICAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHRoaXMudXBkYXRlUmVxdWVzdE9wdGlvbnMob3B0aW9ucz8uaGVhZGVycylcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuZGVsZXRlUmVxdWVzdChyZXF1ZXN0T3B0aW9ucywgb3B0aW9ucz8ucGF0aClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGRhdGEgPSAoIWRhdGEpID8gKHRoaXMuZGF0YVR5cGUgPT09IERhdGFUeXBlLkFSUkFZKSA/IFtdIDoge30gOiBkYXRhXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZURhdGEkKGRhdGEpXG4gICAgICAgICAgfSksXG4gICAgICAgIClcblxuICAgICAgfSlcbiAgICApXG4gIClcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBGRVRDSCBTVFJFQU1cblxuICByZWFkb25seSBjcmVhdGVTdHJlYW0gPSAoZGF0YTogYW55fG51bGwsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucykgPT5cbiAgICB0aGlzLmVmZmVjdDxhbnk+KCgpID0+XG4gICAgb2YoZGF0YSkucGlwZShcbiAgICAgIHRhcCgoKSA9PiB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5pc1BlbmRpbmcubmV4dCh0cnVlKSksXG4gICAgICBzd2l0Y2hNYXAoKGRhdGE6IGFueSkgPT4ge1xuXG4gICAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gdGhpcy51cGRhdGVSZXF1ZXN0T3B0aW9ucyhvcHRpb25zPy5oZWFkZXJzKVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5wb3N0UmVxdWVzdChkYXRhLCByZXF1ZXN0T3B0aW9ucywgb3B0aW9ucz8ucGF0aClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYocmVzLmxlbmd0aCA+IDApIHRoaXMuc2V0RGF0YSQocmVzKVxuICAgICAgICAgICAgdGhpcy5zdHJlYW1lZFJlc3BvbnNlID0gcmVzXG4gICAgICAgICAgfSksXG4gICAgICAgICAgc2NhbigoYWNjLCByZXM6IGFueSkgPT4ge1xuXG4gICAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IGFjYy5jdXJyZW50XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gcmVzXG4gICAgICAgICAgICByZXR1cm4geyBwcmV2aW91cywgY3VycmVudCB9XG5cbiAgICAgICAgICB9LCB7IHByZXZpb3VzOiBudWxsLCBjdXJyZW50OiBudWxsIH0pLFxuICAgICAgICAgIHRhcCgoeyBwcmV2aW91cywgY3VycmVudCB9KSA9PiB7XG5cbiAgICAgICAgICAgIGlmKHByZXZpb3VzICYmIEpTT04uc3RyaW5naWZ5KHByZXZpb3VzKSA9PT0gSlNPTi5zdHJpbmdpZnkoY3VycmVudCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuaXNQZW5kaW5nLm5leHQoZmFsc2UpXG4gICAgICAgICAgICAgIHRoaXMuc2V0RGF0YSQoW10pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5pc1BlbmRpbmcubmV4dCh0cnVlKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuXG4gICAgICB9KVxuICAgIClcblxuICApXG5cbiAgcmVhZG9ubHkgZmV0Y2hTdHJlYW0gPSAob3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKSA9PlxuICAgIHRoaXMuZWZmZWN0PGFueT4oKCkgPT5cbiAgICBvZihvcHRpb25zKS5waXBlKFxuICAgICAgdGFwKCgpID0+IHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLmlzUGVuZGluZy5uZXh0KHRydWUpKSxcbiAgICAgIHN3aXRjaE1hcCgob3B0aW9uczogYW55KSA9PiB7XG5cbiAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB0aGlzLnVwZGF0ZVJlcXVlc3RPcHRpb25zKG9wdGlvbnM/LmhlYWRlcnMpXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLmdldFJlcXVlc3QocmVxdWVzdE9wdGlvbnMsIG9wdGlvbnM/LnBhdGgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmKHJlcy5sZW5ndGggPiAwKSB0aGlzLnNldERhdGEkKHJlcylcbiAgICAgICAgICAgIHRoaXMuc3RyZWFtZWRSZXNwb25zZSA9IHJlc1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHNjYW4oKGFjYywgcmVzOiBhbnkpID0+IHtcblxuICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSBhY2MuY3VycmVudFxuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IHJlc1xuICAgICAgICAgICAgcmV0dXJuIHsgcHJldmlvdXMsIGN1cnJlbnQgfVxuXG4gICAgICAgICAgfSwgeyBwcmV2aW91czogbnVsbCwgY3VycmVudDogbnVsbCB9KSxcbiAgICAgICAgICB0YXAoKHsgcHJldmlvdXMsIGN1cnJlbnQgfSkgPT4ge1xuXG4gICAgICAgICAgICBpZihwcmV2aW91cyAmJiBKU09OLnN0cmluZ2lmeShwcmV2aW91cykgPT09IEpTT04uc3RyaW5naWZ5KGN1cnJlbnQpKSB7XG4gICAgICAgICAgICAgIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLmlzUGVuZGluZy5uZXh0KGZhbHNlKVxuICAgICAgICAgICAgICB0aGlzLnNldERhdGEkKFtdKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuaXNQZW5kaW5nLm5leHQodHJ1ZSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0pXG4gICAgICAgIClcblxuICAgICAgfSksXG4gICAgKVxuICApXG5cbiAgLy8gRkVUQ0ggUEFHSU5BVElPTlxuXG4gIHByaXZhdGUgZmV0Y2hQYWdpbmF0aW9uQ2FuY2VsJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcmVhZG9ubHkgZmV0Y2hQYWdpbmF0aW9uUmVjb3JkcyA9IChzaXplID0gMTAsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucykgPT5cbiAgICB0aGlzLmVmZmVjdDxhbnk+KCgpID0+IHtcblxuICAgICAgdGhpcy5mZXRjaFBhZ2luYXRpb25DYW5jZWwkLm5leHQoKTtcblxuICAgICAgcmV0dXJuIG9mKFJlcXVlc3RPcHRpb25zLmFkYXB0KG9wdGlvbnMpKS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMucmVzZXREYXRhJCgpO1xuXG4gICAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB0aGlzLnVwZGF0ZVJlcXVlc3RPcHRpb25zKG9wdGlvbnM/LmhlYWRlcnMpO1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRQYXRoID0gWy4uLihvcHRpb25zPy5wYXRoID8/IFtdKSwgeyBzaXplLCBwYWdlOiAxIH1dO1xuXG4gICAgICAgICAgY29uc3QgZmlyc3RSZXF1ZXN0T2JzZXJ2YWJsZSA9IHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLmdldFJlcXVlc3QocmVxdWVzdE9wdGlvbnMsIHVwZGF0ZWRQYXRoKS5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZmV0Y2hQYWdpbmF0aW9uQ2FuY2VsJCksXG4gICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuaXNQZW5kaW5nLm5leHQodHJ1ZSkpLFxuICAgICAgICAgICAgdGFwKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgZGF0YSA9ICFkYXRhID8gKHRoaXMuZGF0YVR5cGUgPT09IERhdGFUeXBlLkFSUkFZID8gW10gOiB7fSkgOiBkYXRhO1xuICAgICAgICAgICAgICB0aGlzLnNldERhdGEkKGRhdGEucmVzdWx0cyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4gZmlyc3RSZXF1ZXN0T2JzZXJ2YWJsZS5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZmV0Y2hQYWdpbmF0aW9uQ2FuY2VsJCksXG4gICAgICAgICAgICBleHBhbmQoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5pc1BlbmRpbmcubmV4dCh0cnVlKTtcblxuICAgICAgICAgICAgICBjb25zdCB0b3RhbFBhZ2VzID0gZGF0YT8udG90YWxQYWdlcyB8fCAxO1xuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50UGFnZSA9IGRhdGE/LnBhZ2UgfHwgMTtcblxuICAgICAgICAgICAgICBpZiAoY3VycmVudFBhZ2UgPCB0b3RhbFBhZ2VzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFBhZ2UgPSBjdXJyZW50UGFnZSArIDE7XG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFBhdGhXaXRoTmV4dFBhZ2UgPSBbLi4uKG9wdGlvbnM/LnBhdGggPz8gW10pLCB7IHNpemUsIHBhZ2U6IG5leHRQYWdlIH1dO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFJlcXVlc3RPYnNlcnZhYmxlID0gdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuZ2V0UmVxdWVzdChyZXF1ZXN0T3B0aW9ucywgdXBkYXRlZFBhdGhXaXRoTmV4dFBhZ2UpLnBpcGUoXG4gICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5mZXRjaFBhZ2luYXRpb25DYW5jZWwkKSxcbiAgICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5pc1BlbmRpbmcubmV4dCh0cnVlKSksXG4gICAgICAgICAgICAgICAgICB0YXAoKG5leHREYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dERhdGEgPSAhbmV4dERhdGEgPyAodGhpcy5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuQVJSQVkgPyBbXSA6IHt9KSA6IG5leHREYXRhO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERhdGEkKG5leHREYXRhLnJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0UmVxdWVzdE9ic2VydmFibGU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmZldGNoUGFnaW5hdGlvbkNhbmNlbCQpLFxuICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLmlzUGVuZGluZy5uZXh0KGZhbHNlKSlcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KTtcblxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIE1JU0NcblxuICBwcml2YXRlIGlzRW1wdHkob2JqOiBhbnkpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDBcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUmVxdWVzdE9wdGlvbnMoaGVhZGVycz86IGFueSk6IEFwaVJlcXVlc3Qge1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IEFwaVJlcXVlc3QuYWRhcHQoeyAuLi50aGlzLmFwaU9wdGlvbnMgfSlcblxuICAgIG9wdGlvbnMuaGVhZGVycyA9IChoZWFkZXJzKVxuICAgICAgICAgID8geyAuLi5vcHRpb25zLmhlYWRlcnMsIC4uLmhlYWRlcnMgfVxuICAgICAgICAgIDogeyAuLi5vcHRpb25zLmhlYWRlcnMgfVxuXG4gICAgcmV0dXJuIG9wdGlvbnNcbiAgfVxuXG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ export * from "./http-manager-state.store";
2
+ export * from "./models/index";
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL3JlcXVlc3QtbWFuYWdlci1zdGF0ZS1zZXJ2aWNlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNEJBQTRCLENBQUM7QUFFM0MsY0FBYyxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2h0dHAtbWFuYWdlci1zdGF0ZS5zdG9yZVwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi9tb2RlbHMvaW5kZXhcIjtcbiJdfQ==
@@ -0,0 +1,20 @@
1
+ import { RetryOptions } from "../../request-manager-services";
2
+ export class ApiRequest {
3
+ constructor(server = '', path = [], headers = {}, adapter, mapper, polling, retry = RetryOptions.adapt(), stream = false, displayError = false) {
4
+ this.server = server;
5
+ this.path = path;
6
+ this.headers = headers;
7
+ this.adapter = adapter;
8
+ this.mapper = mapper;
9
+ this.polling = polling;
10
+ this.retry = retry;
11
+ this.stream = stream;
12
+ this.displayError = displayError;
13
+ }
14
+ static adapt(item) {
15
+ const server = Array.isArray(item?.server) ? item.server.join('/') : item?.server || '';
16
+ const retryOptions = item?.retry ? RetryOptions.adapt(item.retry) : RetryOptions.adapt();
17
+ return new ApiRequest(server, item?.path, (item?.headers) ? item.headers : {}, item?.adapter, item?.mapper, item?.polling ? Math.floor(item.polling) : 0, retryOptions, item?.stream, item?.displayError);
18
+ }
19
+ }
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLXJlcXVlc3QubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL3JlcXVlc3QtbWFuYWdlci1zdGF0ZS1zZXJ2aWNlL21vZGVscy9hcGktcmVxdWVzdC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUE7QUFjN0QsTUFBTSxPQUFPLFVBQVU7SUFFckIsWUFDUyxTQUFTLEVBQUUsRUFDWCxPQUFjLEVBQUUsRUFDaEIsVUFBVSxFQUFFLEVBQ1osT0FBYSxFQUNiLE1BQVksRUFDWixPQUFnQixFQUNoQixRQUFRLFlBQVksQ0FBQyxLQUFLLEVBQUUsRUFDNUIsU0FBUyxLQUFLLEVBQ2QsZUFBZSxLQUFLO1FBUnBCLFdBQU0sR0FBTixNQUFNLENBQUs7UUFDWCxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFlBQU8sR0FBUCxPQUFPLENBQUs7UUFDWixZQUFPLEdBQVAsT0FBTyxDQUFNO1FBQ2IsV0FBTSxHQUFOLE1BQU0sQ0FBTTtRQUNaLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIsVUFBSyxHQUFMLEtBQUssQ0FBdUI7UUFDNUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGlCQUFZLEdBQVosWUFBWSxDQUFRO0lBQzFCLENBQUM7SUFFSixNQUFNLENBQUMsS0FBSyxDQUFDLElBQVU7UUFFckIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUN4RixNQUFNLFlBQVksR0FBRyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRXpGLE9BQU8sSUFBSSxVQUFVLENBQ25CLE1BQU0sRUFDTixJQUFJLEVBQUUsSUFBSSxFQUNWLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQ25DLElBQUksRUFBRSxPQUFPLEVBQ2IsSUFBSSxFQUFFLE1BQU0sRUFDWixJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUM1QyxZQUFZLEVBQ1osSUFBSSxFQUFFLE1BQU0sRUFDWixJQUFJLEVBQUUsWUFBWSxDQUNuQixDQUFBO0lBRUgsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmV0cnlPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3JlcXVlc3QtbWFuYWdlci1zZXJ2aWNlc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpUmVxdWVzdEludGVyZmFjZSB7XG4gIHNlcnZlcjogc3RyaW5nXG4gIHBhdGg6IGFueVtdXG4gIGhlYWRlcnM6IGFueVxuICBhZGFwdGVyPzogYW55XG4gIG1hcHBlcj86IGFueVxuICBwb2xsaW5nPzogbnVtYmVyIC8vIHNlY29uZHMgKHVuZGVmaW5lZCB8IDAgPSBub25lKVxuICByZXRyeTogUmV0cnlPcHRpb25zXG4gIHN0cmVhbT86IGJvb2xlYW5cbiAgZGlzcGxheUVycm9yOiBib29sZWFuXG59XG5cbmV4cG9ydCBjbGFzcyBBcGlSZXF1ZXN0IGltcGxlbWVudHMgQXBpUmVxdWVzdEludGVyZmFjZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHNlcnZlciA9ICcnLFxuICAgIHB1YmxpYyBwYXRoOiBhbnlbXSA9IFtdLFxuICAgIHB1YmxpYyBoZWFkZXJzID0ge30sXG4gICAgcHVibGljIGFkYXB0ZXI/OiBhbnksXG4gICAgcHVibGljIG1hcHBlcj86IGFueSxcbiAgICBwdWJsaWMgcG9sbGluZz86IG51bWJlcixcbiAgICBwdWJsaWMgcmV0cnkgPSBSZXRyeU9wdGlvbnMuYWRhcHQoKSxcbiAgICBwdWJsaWMgc3RyZWFtID0gZmFsc2UsXG4gICAgcHVibGljIGRpc3BsYXlFcnJvciA9IGZhbHNlLFxuICApIHt9XG5cbiAgc3RhdGljIGFkYXB0KGl0ZW0/OiBhbnkpOiBBcGlSZXF1ZXN0IHtcblxuICAgIGNvbnN0IHNlcnZlciA9IEFycmF5LmlzQXJyYXkoaXRlbT8uc2VydmVyKSA/IGl0ZW0uc2VydmVyLmpvaW4oJy8nKSA6IGl0ZW0/LnNlcnZlciB8fCAnJztcbiAgICBjb25zdCByZXRyeU9wdGlvbnMgPSBpdGVtPy5yZXRyeSA/IFJldHJ5T3B0aW9ucy5hZGFwdChpdGVtLnJldHJ5KSA6IFJldHJ5T3B0aW9ucy5hZGFwdCgpO1xuXG4gICAgcmV0dXJuIG5ldyBBcGlSZXF1ZXN0KFxuICAgICAgc2VydmVyLFxuICAgICAgaXRlbT8ucGF0aCxcbiAgICAgIChpdGVtPy5oZWFkZXJzKSA/IGl0ZW0uaGVhZGVycyA6IHt9LFxuICAgICAgaXRlbT8uYWRhcHRlcixcbiAgICAgIGl0ZW0/Lm1hcHBlcixcbiAgICAgIGl0ZW0/LnBvbGxpbmcgPyBNYXRoLmZsb29yKGl0ZW0ucG9sbGluZykgOiAwLFxuICAgICAgcmV0cnlPcHRpb25zLFxuICAgICAgaXRlbT8uc3RyZWFtLFxuICAgICAgaXRlbT8uZGlzcGxheUVycm9yLFxuICAgIClcblxuICB9XG5cbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ export * from "./api-request.model";
2
+ export * from "./request-options.model";
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL3JlcXVlc3QtbWFuYWdlci1zdGF0ZS1zZXJ2aWNlL21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMseUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9hcGktcmVxdWVzdC5tb2RlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmVxdWVzdC1vcHRpb25zLm1vZGVsXCI7XG5cbiJdfQ==
@@ -0,0 +1,10 @@
1
+ export class RequestOptions {
2
+ constructor(path = [], headers = {}) {
3
+ this.path = path;
4
+ this.headers = headers;
5
+ }
6
+ static adapt(item) {
7
+ return new RequestOptions(item?.path, item?.headers);
8
+ }
9
+ }
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1vcHRpb25zLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9yZXF1ZXN0LW1hbmFnZXItc3RhdGUtc2VydmljZS9tb2RlbHMvcmVxdWVzdC1vcHRpb25zLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE1BQU0sT0FBTyxjQUFjO0lBRXpCLFlBQ1MsT0FBYyxFQUFFLEVBQ2hCLFVBQVUsRUFBRTtRQURaLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsWUFBTyxHQUFQLE9BQU8sQ0FBSztJQUNsQixDQUFDO0lBRUosTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFVO1FBRXJCLE9BQU8sSUFBSSxjQUFjLENBQ3ZCLElBQUksRUFBRSxJQUFJLEVBQ1YsSUFBSSxFQUFFLE9BQU8sQ0FDZCxDQUFBO0lBRUgsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0T3B0aW9uc0ludGVyZmFjZSB7XG4gICAgcGF0aDogYW55W10sXG4gICAgaGVhZGVyczogYW55LFxufVxuXG5leHBvcnQgY2xhc3MgUmVxdWVzdE9wdGlvbnMgaW1wbGVtZW50cyBSZXF1ZXN0T3B0aW9uc0ludGVyZmFjZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHBhdGg6IGFueVtdID0gW10sXG4gICAgcHVibGljIGhlYWRlcnMgPSB7fSxcbiAgKSB7fVxuXG4gIHN0YXRpYyBhZGFwdChpdGVtPzogYW55KTogUmVxdWVzdE9wdGlvbnMge1xuXG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0T3B0aW9ucyhcbiAgICAgIGl0ZW0/LnBhdGgsXG4gICAgICBpdGVtPy5oZWFkZXJzLFxuICAgIClcblxuICB9XG5cbn1cbiJdfQ==
@@ -0,0 +1,20 @@
1
+ import { APP_ID, Inject, Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class AppService {
4
+ constructor(id) {
5
+ this.id = id;
6
+ this.appID = this.id;
7
+ }
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppService, deps: [{ token: APP_ID }], target: i0.ɵɵFactoryTarget.Injectable }); }
9
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppService, providedIn: 'root' }); }
10
+ }
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppService, decorators: [{
12
+ type: Injectable,
13
+ args: [{
14
+ providedIn: 'root'
15
+ }]
16
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
17
+ type: Inject,
18
+ args: [APP_ID]
19
+ }] }]; } });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL3V0aWxzL2FwcC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLM0QsTUFBTSxPQUFPLFVBQVU7SUFJckIsWUFBb0MsRUFBVTtRQUFWLE9BQUUsR0FBRixFQUFFLENBQVE7UUFDNUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFBO0lBQ3RCLENBQUM7K0dBTlUsVUFBVSxrQkFJRCxNQUFNO21IQUpmLFVBQVUsY0FGVCxNQUFNOzs0RkFFUCxVQUFVO2tCQUh0QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBS2MsTUFBTTsyQkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBQX0lELCBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQXBwU2VydmljZSB7XG5cbiAgYXBwSUQ6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoQVBQX0lEKSBwcml2YXRlIGlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmFwcElEID0gdGhpcy5pZFxuICB9XG5cbn1cbiJdfQ==