http-request-manager 18.0.13 → 18.2.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.
Files changed (34) hide show
  1. package/esm2022/lib/http-request-manager.module.mjs +47 -7
  2. package/esm2022/lib/http-request-services-demo/http-request-services-demo.component.mjs +10 -6
  3. package/esm2022/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.mjs +184 -0
  4. package/esm2022/lib/http-request-services-demo/request-signals-manager-demo/models/sample-ai-prompt.mjs +9 -0
  5. package/esm2022/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-info.mjs +12 -0
  6. package/esm2022/lib/http-request-services-demo/request-signals-manager-demo/models/sample-mapper-client-info.mjs +14 -0
  7. package/esm2022/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.mjs +336 -0
  8. package/esm2022/lib/services/local-storage-manager-service/index.mjs +3 -2
  9. package/esm2022/lib/services/local-storage-manager-service/local-storage-signals-manager.service.mjs +277 -0
  10. package/esm2022/lib/services/local-storage-manager-service/models/setting-options.model.mjs +6 -2
  11. package/esm2022/lib/services/request-manager-services/http-manager-signals.service.mjs +199 -0
  12. package/esm2022/lib/services/request-manager-services/index.mjs +2 -1
  13. package/esm2022/lib/services/request-manager-services/request-signals.service.mjs +170 -0
  14. package/esm2022/lib/services/request-manager-services/rxjs-operators/request-polling.mjs +26 -7
  15. package/esm2022/lib/services/utils/object-merger.service.mjs +26 -6
  16. package/fesm2022/http-request-manager.mjs +2053 -842
  17. package/fesm2022/http-request-manager.mjs.map +1 -1
  18. package/http-request-manager-18.2.0.tgz +0 -0
  19. package/lib/http-request-manager.module.d.ts +24 -22
  20. package/lib/http-request-services-demo/http-request-services-demo.component.d.ts +8 -0
  21. package/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.d.ts +55 -0
  22. package/lib/http-request-services-demo/request-signals-manager-demo/models/sample-ai-prompt.d.ts +8 -0
  23. package/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-info.d.ts +14 -0
  24. package/lib/http-request-services-demo/request-signals-manager-demo/models/sample-mapper-client-info.d.ts +14 -0
  25. package/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.d.ts +106 -0
  26. package/lib/services/local-storage-manager-service/index.d.ts +2 -1
  27. package/lib/services/local-storage-manager-service/local-storage-signals-manager.service.d.ts +64 -0
  28. package/lib/services/request-manager-services/http-manager-signals.service.d.ts +38 -0
  29. package/lib/services/request-manager-services/index.d.ts +1 -0
  30. package/lib/services/request-manager-services/request-signals.service.d.ts +26 -0
  31. package/lib/services/request-manager-services/rxjs-operators/request-polling.d.ts +2 -7
  32. package/lib/services/utils/object-merger.service.d.ts +2 -0
  33. package/package.json +1 -1
  34. package/http-request-manager-18.0.13.tgz +0 -0
@@ -0,0 +1,277 @@
1
+ import { Inject, Injectable, Optional, signal, computed, effect, inject } from '@angular/core';
2
+ import { UtilsService } from '../utils/utils.service';
3
+ import { SymmetricalEncryptionService } from '../utils/encryption/symmetrical-encryption.service';
4
+ import { StorageOption, StorageType } from './models';
5
+ import { SettingOptions } from './models/setting-options.model';
6
+ import { EncryptionTestService } from '../utils/encryption/encryption-test.service';
7
+ import { AppService } from '../utils/app.service';
8
+ import { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';
9
+ import { ObjectMergerService } from '../utils/object-merger.service';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "../request-manager-services";
12
+ const initialState = {
13
+ localStores: [],
14
+ sessionStores: [],
15
+ settings: [],
16
+ };
17
+ export class LocalStorageSignalsManagerService {
18
+ constructor(configOptions) {
19
+ this.configOptions = configOptions;
20
+ this.state = signal(initialState);
21
+ this.storageName = 'storage';
22
+ this.storageSettingsName = 'global-storage';
23
+ this.defaultOptions = SettingOptions.adapt();
24
+ this.stateRetrieved = false;
25
+ this.encrypted = false;
26
+ this.app = inject(AppService);
27
+ this.utils = inject(UtilsService);
28
+ this.objectMergerService = inject(ObjectMergerService);
29
+ this.encryption = inject(SymmetricalEncryptionService);
30
+ this.encryptionTest = inject(EncryptionTestService);
31
+ // --- SELECTORS ---
32
+ this.stores = computed(() => this.state().settings);
33
+ this.storeExists = (store) => computed(() => !!this.state().settings.find(item => item.name === store));
34
+ this.store = (store) => computed(() => {
35
+ const data = this.state();
36
+ const foundStore = data.settings.find(item => item.name === store);
37
+ if (!foundStore)
38
+ return null;
39
+ const options = SettingOptions.adapt(foundStore.options);
40
+ const found = options.storage === StorageType.GLOBAL
41
+ ? data.localStores.find(item => item.id === foundStore.id)
42
+ : data.sessionStores.find(item => item.id === foundStore.id);
43
+ if (!found) {
44
+ this.deleteStore({ name: store });
45
+ return null;
46
+ }
47
+ if (!this.app?.appID) {
48
+ console.warn('No App ID found - AppId not Provided');
49
+ return null;
50
+ }
51
+ const storageData = options.encrypted
52
+ ? this.encryption.decrypt(found.data, this.app.appID)
53
+ : found.data;
54
+ return this.isString(storageData) ? JSON.parse(storageData) : storageData;
55
+ });
56
+ this.settings = computed(() => this.state().settings);
57
+ this.setting = (store) => computed(() => this.state().settings.find(item => item.name === store) ?? null);
58
+ this.storageName = configOptions?.LocalStorageOptions?.storageName || this.storageName;
59
+ this.storageSettingsName = configOptions?.LocalStorageOptions?.storageSettingsName || this.storageSettingsName;
60
+ this.defaultOptions = configOptions?.LocalStorageOptions?.options || this.defaultOptions;
61
+ this.retrieveState();
62
+ // Auto-persist when state changes
63
+ effect(() => {
64
+ if (this.stateRetrieved) {
65
+ this.persistState(this.state());
66
+ }
67
+ });
68
+ // Expiration timer every 3s
69
+ setInterval(() => {
70
+ const state = this.state();
71
+ const expired = this.expired(state);
72
+ if (expired.length > 0) {
73
+ const ids = expired.map(i => i.id);
74
+ const updated = {
75
+ ...state,
76
+ localStores: state.localStores.filter(i => !ids.includes(i.id)),
77
+ sessionStores: state.sessionStores.filter(i => !ids.includes(i.id)),
78
+ settings: state.settings.filter(i => !ids.includes(i.id)),
79
+ };
80
+ this.state.set(updated);
81
+ this.persistState(updated);
82
+ }
83
+ }, 3000);
84
+ }
85
+ // --- STATE MUTATORS ---
86
+ setStore(store) {
87
+ this.state.update(state => {
88
+ const settings = StorageOption.adapt(store);
89
+ settings.options = this.objectMergerService.mergeStorageOptions(settings.options);
90
+ store.name = this.validStoreName(store.name);
91
+ const str = this.encryptionTest.isEncrypted(store.data) ? store.data : JSON.stringify(store.data);
92
+ const dataStr = this.isObjectOrArray(str) && store.options.encrypted
93
+ ? this.encryption.encrypt(str, this.app.appID)
94
+ : store.data;
95
+ const localData = dataStr && settings.options?.storage === StorageType.GLOBAL
96
+ ? [{ data: dataStr, id: settings.id }]
97
+ : [];
98
+ const sessionData = dataStr && settings.options?.storage === StorageType.SESSION
99
+ ? [{ data: dataStr, id: settings.id }]
100
+ : [];
101
+ return {
102
+ ...state,
103
+ localStores: [...state.localStores, ...localData],
104
+ sessionStores: [...state.sessionStores, ...sessionData],
105
+ settings: [...state.settings, settings],
106
+ };
107
+ });
108
+ }
109
+ createStore(store) {
110
+ this.state.update(state => {
111
+ const settings = StorageOption.adapt(store);
112
+ settings.options = this.objectMergerService.mergeStorageOptions(settings.options);
113
+ if (state.settings.some(item => item.name === store.name)) {
114
+ return state;
115
+ }
116
+ if (!this.isObjectOrArray(store.data)) {
117
+ console.warn('Data must be an Object or Array');
118
+ return state;
119
+ }
120
+ const dataStr = store.options.encrypted ? this.encryption.encrypt(store.data, this.app.appID) : store.data;
121
+ const localData = settings.options?.storage === StorageType.GLOBAL ? [{ data: dataStr, id: settings.id }] : [];
122
+ const sessionData = settings.options?.storage === StorageType.SESSION ? [{ data: dataStr, id: settings.id }] : [];
123
+ return {
124
+ ...state,
125
+ localStores: [...state.localStores, ...localData],
126
+ sessionStores: [...state.sessionStores, ...sessionData],
127
+ settings: [...state.settings, settings],
128
+ };
129
+ });
130
+ }
131
+ updateStore(store) {
132
+ this.state.update(state => {
133
+ const settings = state.settings.find(item => item.name === store.name);
134
+ if (!settings)
135
+ return state;
136
+ const dataStr = settings.options?.encrypted
137
+ ? this.encryption.encrypt(store.data, this.app.appID)
138
+ : store.data;
139
+ const localData = settings.options?.storage === StorageType.GLOBAL ? [{ data: dataStr, id: settings.id }] : [];
140
+ const sessionData = settings.options?.storage === StorageType.SESSION ? [{ data: dataStr, id: settings.id }] : [];
141
+ return {
142
+ ...state,
143
+ localStores: [...state.localStores.filter(i => i.id !== settings.id), ...localData],
144
+ sessionStores: [...state.sessionStores.filter(i => i.id !== settings.id), ...sessionData],
145
+ };
146
+ });
147
+ }
148
+ deleteStore(store) {
149
+ this.state.update(state => {
150
+ const id = state.settings.find(item => item.name === store.name)?.id;
151
+ if (!id)
152
+ return state;
153
+ return {
154
+ ...state,
155
+ localStores: state.localStores.filter(i => i.id !== id),
156
+ sessionStores: state.sessionStores.filter(i => i.id !== id),
157
+ settings: state.settings.filter(i => i.id !== id),
158
+ };
159
+ });
160
+ }
161
+ resetStore() {
162
+ const cleared = { localStores: [], sessionStores: [], settings: [] };
163
+ this.state.set(cleared);
164
+ this.persistState(cleared);
165
+ }
166
+ // --- HELPERS ---
167
+ persistState(state) {
168
+ localStorage.setItem(this.storageName, JSON.stringify(state.localStores));
169
+ sessionStorage.setItem(this.storageName, JSON.stringify(state.sessionStores));
170
+ const settingsStr = this.encryption.encrypt(state.settings, this.app.appID);
171
+ localStorage.setItem(this.storageSettingsName, settingsStr || '');
172
+ }
173
+ expired(state) {
174
+ return state.settings.filter(s => (s.options?.expires || 0) > 0 && this.utils.hasExpired(s.options?.expires));
175
+ }
176
+ retrieveState() {
177
+ const str = localStorage.getItem(this.storageSettingsName);
178
+ const localStr = localStorage.getItem(this.storageName);
179
+ const sessionStr = sessionStorage.getItem(this.storageName);
180
+ const localData = localStr ? JSON.parse(localStr) : [];
181
+ const sessionData = sessionStr ? JSON.parse(sessionStr) : [];
182
+ const decryptedStr = str ? this.encryption.decrypt(str, this.app.appID) : null;
183
+ const settings = decryptedStr ? JSON.parse(decryptedStr) : [];
184
+ settings.forEach(store => {
185
+ // normalize options so we compare numbers and compute expires correctly
186
+ const options = SettingOptions.adapt(store.options);
187
+ // if persisted data included expiresIn but not numeric expires, compute it now
188
+ if ((!options.expires || options.expires === 0) && options.expiresIn) {
189
+ try {
190
+ const computed = this.utils.expires(options.expiresIn);
191
+ options.expires = computed || 0;
192
+ }
193
+ catch {
194
+ options.expires = 0;
195
+ }
196
+ }
197
+ const expired = (options.expires || 0) > 0 && this.utils.hasExpired(options.expires || 0);
198
+ if (!expired) {
199
+ const hasStorage = this.hasGlobalStorage(options.storage, store.id || '');
200
+ if (!hasStorage) {
201
+ this.createStore({ id: store.id, name: store.name, data: [], options });
202
+ }
203
+ else {
204
+ const storeData = (options.storage === StorageType.GLOBAL)
205
+ ? localData.find(item => item.id === store.id)
206
+ : sessionData.find(item => item.id === store.id);
207
+ this.setStore({ id: store.id || '', name: store.name, data: storeData?.data, options });
208
+ }
209
+ }
210
+ });
211
+ this.stateRetrieved = true;
212
+ // Ensure all stored settings have numeric expires computed and persisted
213
+ try {
214
+ const current = this.state();
215
+ let changed = false;
216
+ const normalizedSettings = current.settings.map(s => {
217
+ const opts = SettingOptions.adapt(s.options);
218
+ if ((!opts.expires || opts.expires === 0) && opts.expiresIn) {
219
+ const computed = this.utils.expires(opts.expiresIn) || 0;
220
+ if (computed && computed !== opts.expires) {
221
+ opts.expires = computed;
222
+ changed = true;
223
+ }
224
+ }
225
+ return { ...s, options: opts };
226
+ });
227
+ if (changed) {
228
+ const updated = { ...current, settings: normalizedSettings };
229
+ this.state.set(updated);
230
+ this.persistState(updated);
231
+ }
232
+ }
233
+ catch (e) {
234
+ // swallow normalization errors to avoid breaking init
235
+ }
236
+ }
237
+ hasGlobalStorage(type = StorageType.GLOBAL, id) {
238
+ const strData = [];
239
+ if (type === StorageType.GLOBAL) {
240
+ const str = localStorage.getItem(this.storageName);
241
+ strData.push(...(str ? JSON.parse(str) : []));
242
+ }
243
+ else {
244
+ const str = sessionStorage.getItem(this.storageName);
245
+ strData.push(...(str ? JSON.parse(str) : []));
246
+ }
247
+ const found = strData.find(store => store.id === id);
248
+ return !!found;
249
+ }
250
+ isObjectOrArray(obj) {
251
+ try {
252
+ const parsed = typeof obj === 'object' ? obj : JSON.parse(obj);
253
+ return typeof parsed === 'object' && parsed !== null;
254
+ }
255
+ catch {
256
+ return false;
257
+ }
258
+ }
259
+ isString(obj) {
260
+ return Object.prototype.toString.call(obj) === '[object String]';
261
+ }
262
+ validStoreName(str) {
263
+ return str.toLowerCase().replace(/\s+/g, '_').replace(/[^ -~]/g, '');
264
+ }
265
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LocalStorageSignalsManagerService, deps: [{ token: CONFIG_SETTINGS_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
266
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LocalStorageSignalsManagerService, providedIn: 'root' }); }
267
+ }
268
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LocalStorageSignalsManagerService, decorators: [{
269
+ type: Injectable,
270
+ args: [{ providedIn: 'root' }]
271
+ }], ctorParameters: () => [{ type: i1.ConfigOptions, decorators: [{
272
+ type: Optional
273
+ }, {
274
+ type: Inject,
275
+ args: [CONFIG_SETTINGS_TOKEN]
276
+ }] }] });
277
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS1zaWduYWxzLW1hbmFnZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2h0dHAtcmVxdWVzdC1tYW5hZ2VyL3NyYy9saWIvc2VydmljZXMvbG9jYWwtc3RvcmFnZS1tYW5hZ2VyLXNlcnZpY2UvbG9jYWwtc3RvcmFnZS1zaWduYWxzLW1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQWtCLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFbEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWhFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7O0FBUXJFLE1BQU0sWUFBWSxHQUFVO0lBQzFCLFdBQVcsRUFBRSxFQUFFO0lBQ2YsYUFBYSxFQUFFLEVBQUU7SUFDakIsUUFBUSxFQUFFLEVBQUU7Q0FDYixDQUFDO0FBR0YsTUFBTSxPQUFPLGlDQUFpQztJQTBENUMsWUFBK0QsYUFBNkI7UUFBN0Isa0JBQWEsR0FBYixhQUFhLENBQWdCO1FBeERwRixVQUFLLEdBQTBCLE1BQU0s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aUM7a0JBRDdDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkEyRG5CLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCwgV3JpdGFibGVTaWduYWwsIHNpZ25hbCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFV0aWxzU2VydmljZSB9IGZyb20gJy4uL3V0aWxzL3V0aWxzLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3ltbWV0cmljYWxFbmNyeXB0aW9uU2VydmljZSB9IGZyb20gJy4uL3V0aWxzL2VuY3J5cHRpb24vc3ltbWV0cmljYWwtZW5jcnlwdGlvbi5zZXJ2aWNlJztcblxuaW1wb3J0IHsgU3RvcmFnZU9wdGlvbiwgU3RvcmFnZVR5cGUgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBTZXR0aW5nT3B0aW9ucyB9IGZyb20gJy4vbW9kZWxzL3NldHRpbmctb3B0aW9ucy5tb2RlbCc7XG5pbXBvcnQgeyBTdG9yYWdlRGF0YSB9IGZyb20gJy4vbW9kZWxzL3N0b3JhZ2UtZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBFbmNyeXB0aW9uVGVzdFNlcnZpY2UgfSBmcm9tICcuLi91dGlscy9lbmNyeXB0aW9uL2VuY3J5cHRpb24tdGVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcFNlcnZpY2UgfSBmcm9tICcuLi91dGlscy9hcHAuc2VydmljZSc7XG5pbXBvcnQgeyBDT05GSUdfU0VUVElOR1NfVE9LRU4gfSBmcm9tICcuLi8uLi9tb2RlbHMvY29uZmlnLXRva2VuLm1vZGVsJztcbmltcG9ydCB7IENvbmZpZ09wdGlvbnMgfSBmcm9tICcuLi9yZXF1ZXN0LW1hbmFnZXItc2VydmljZXMnO1xuaW1wb3J0IHsgT2JqZWN0TWVyZ2VyU2VydmljZSB9IGZyb20gJy4uL3V0aWxzL29iamVjdC1tZXJnZXIuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdGUge1xuICBsb2NhbFN0b3JlczogU3RvcmFnZURhdGFbXTtcbiAgc2Vzc2lvblN0b3JlczogU3RvcmFnZURhdGFbXTtcbiAgc2V0dGluZ3M6IFN0b3JhZ2VPcHRpb25bXTtcbn1cblxuY29uc3QgaW5pdGlhbFN0YXRlOiBTdGF0ZSA9IHtcbiAgbG9jYWxTdG9yZXM6IFtdLFxuICBzZXNzaW9uU3RvcmVzOiBbXSxcbiAgc2V0dGluZ3M6IFtdLFxufTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBMb2NhbFN0b3JhZ2VTaWduYWxzTWFuYWdlclNlcnZpY2Uge1xuXG4gIHByaXZhdGUgc3RhdGU6IFdyaXRhYmxlU2lnbmFsPFN0YXRlPiA9IHNpZ25hbChpbml0aWFsU3RhdGUpO1xuXG4gIHN0b3JhZ2VOYW1lID0gJ3N0b3JhZ2UnO1xuICBzdG9yYWdlU2V0dGluZ3NOYW1lID0gJ2dsb2JhbC1zdG9yYWdlJztcbiAgZGVmYXVsdE9wdGlvbnMgPSBTZXR0aW5nT3B0aW9ucy5hZGFwdCgpO1xuXG4gIHN0YXRlUmV0cmlldmVkID0gZmFsc2U7XG4gIGVuY3J5cHRlZCA9IGZhbHNlO1xuXG4gIGFwcCA9IGluamVjdChBcHBTZXJ2aWNlKTtcbiAgdXRpbHMgPSBpbmplY3QoVXRpbHNTZXJ2aWNlKTtcbiAgb2JqZWN0TWVyZ2VyU2VydmljZSA9IGluamVjdChPYmplY3RNZXJnZXJTZXJ2aWNlKTtcbiAgZW5jcnlwdGlvbiA9IGluamVjdChTeW1tZXRyaWNhbEVuY3J5cHRpb25TZXJ2aWNlKTtcbiAgZW5jcnlwdGlvblRlc3QgPSBpbmplY3QoRW5jcnlwdGlvblRlc3RTZXJ2aWNlKTtcblxuICAvLyAtLS0gU0VMRUNUT1JTIC0tLVxuXG4gIHJlYWRvbmx5IHN0b3JlcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhdGUoKS5zZXR0aW5ncyk7XG5cbiAgcmVhZG9ubHkgc3RvcmVFeGlzdHMgPSAoc3RvcmU6IHN0cmluZykgPT5cbiAgICBjb21wdXRlZCgoKSA9PiAhIXRoaXMuc3RhdGUoKS5zZXR0aW5ncy5maW5kKGl0ZW0gPT4gaXRlbS5uYW1lID09PSBzdG9yZSkpO1xuXG4gIHJlYWRvbmx5IHN0b3JlID0gKHN0b3JlOiBzdHJpbmcpID0+XG4gICAgY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuc3RhdGUoKTtcbiAgICAgIGNvbnN0IGZvdW5kU3RvcmUgPSBkYXRhLnNldHRpbmdzLmZpbmQoaXRlbSA9PiBpdGVtLm5hbWUgPT09IHN0b3JlKTtcbiAgICAgIGlmICghZm91bmRTdG9yZSkgcmV0dXJuIG51bGw7XG5cbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBTZXR0aW5nT3B0aW9ucy5hZGFwdChmb3VuZFN0b3JlLm9wdGlvbnMpO1xuICAgICAgY29uc3QgZm91bmQgPVxuICAgICAgICBvcHRpb25zLnN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLkdMT0JBTFxuICAgICAgICAgID8gZGF0YS5sb2NhbFN0b3Jlcy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZm91bmRTdG9yZS5pZClcbiAgICAgICAgICA6IGRhdGEuc2Vzc2lvblN0b3Jlcy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZm91bmRTdG9yZS5pZCk7XG5cbiAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgdGhpcy5kZWxldGVTdG9yZSh7IG5hbWU6IHN0b3JlIH0pO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLmFwcD8uYXBwSUQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdObyBBcHAgSUQgZm91bmQgLSBBcHBJZCBub3QgUHJvdmlkZWQnKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0b3JhZ2VEYXRhID0gb3B0aW9ucy5lbmNyeXB0ZWRcbiAgICAgICAgPyB0aGlzLmVuY3J5cHRpb24uZGVjcnlwdChmb3VuZC5kYXRhLCB0aGlzLmFwcC5hcHBJRClcbiAgICAgICAgOiBmb3VuZC5kYXRhO1xuXG4gICAgICByZXR1cm4gdGhpcy5pc1N0cmluZyhzdG9yYWdlRGF0YSkgPyBKU09OLnBhcnNlKHN0b3JhZ2VEYXRhKSA6IHN0b3JhZ2VEYXRhO1xuICAgIH0pO1xuXG4gIHJlYWRvbmx5IHNldHRpbmdzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zdGF0ZSgpLnNldHRpbmdzKTtcblxuICByZWFkb25seSBzZXR0aW5nID0gKHN0b3JlOiBzdHJpbmcpID0+XG4gICAgY29tcHV0ZWQoKCkgPT4gdGhpcy5zdGF0ZSgpLnNldHRpbmdzLmZpbmQoaXRlbSA9PiBpdGVtLm5hbWUgPT09IHN0b3JlKSA/PyBudWxsKTtcblxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KENPTkZJR19TRVRUSU5HU19UT0tFTikgcHJpdmF0ZSBjb25maWdPcHRpb25zPzogQ29uZmlnT3B0aW9ucykge1xuICAgIHRoaXMuc3RvcmFnZU5hbWUgPSBjb25maWdPcHRpb25zPy5Mb2NhbFN0b3JhZ2VPcHRpb25zPy5zdG9yYWdlTmFtZSB8fCB0aGlzLnN0b3JhZ2VOYW1lO1xuICAgIHRoaXMuc3RvcmFnZVNldHRpbmdzTmFtZSA9IGNvbmZpZ09wdGlvbnM/LkxvY2FsU3RvcmFnZU9wdGlvbnM/LnN0b3JhZ2VTZXR0aW5nc05hbWUgfHwgdGhpcy5zdG9yYWdlU2V0dGluZ3NOYW1lO1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSBjb25maWdPcHRpb25zPy5Mb2NhbFN0b3JhZ2VPcHRpb25zPy5vcHRpb25zIHx8IHRoaXMuZGVmYXVsdE9wdGlvbnM7XG5cbiAgICB0aGlzLnJldHJpZXZlU3RhdGUoKTtcbiAgICAvLyBBdXRvLXBlcnNpc3Qgd2hlbiBzdGF0ZSBjaGFuZ2VzXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnN0YXRlUmV0cmlldmVkKSB7XG4gICAgICAgIHRoaXMucGVyc2lzdFN0YXRlKHRoaXMuc3RhdGUoKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBFeHBpcmF0aW9uIHRpbWVyIGV2ZXJ5IDNzXG4gICAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlKCk7XG4gICAgICBjb25zdCBleHBpcmVkID0gdGhpcy5leHBpcmVkKHN0YXRlKTtcbiAgICAgIGlmIChleHBpcmVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgaWRzID0gZXhwaXJlZC5tYXAoaSA9PiBpLmlkKTtcbiAgICAgICAgY29uc3QgdXBkYXRlZDogU3RhdGUgPSB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgbG9jYWxTdG9yZXM6IHN0YXRlLmxvY2FsU3RvcmVzLmZpbHRlcihpID0+ICFpZHMuaW5jbHVkZXMoaS5pZCkpLFxuICAgICAgICAgIHNlc3Npb25TdG9yZXM6IHN0YXRlLnNlc3Npb25TdG9yZXMuZmlsdGVyKGkgPT4gIWlkcy5pbmNsdWRlcyhpLmlkKSksXG4gICAgICAgICAgc2V0dGluZ3M6IHN0YXRlLnNldHRpbmdzLmZpbHRlcihpID0+ICFpZHMuaW5jbHVkZXMoaS5pZCkpLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnN0YXRlLnNldCh1cGRhdGVkKTtcbiAgICAgICAgdGhpcy5wZXJzaXN0U3RhdGUodXBkYXRlZCk7XG4gICAgICB9XG4gICAgfSwgMzAwMCk7XG4gIH1cblxuICAvLyAtLS0gU1RBVEUgTVVUQVRPUlMgLS0tXG5cbiAgc2V0U3RvcmUoc3RvcmU6IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBkYXRhOiBhbnk7IG9wdGlvbnM6IFNldHRpbmdPcHRpb25zIH0pIHtcbiAgICB0aGlzLnN0YXRlLnVwZGF0ZShzdGF0ZSA9PiB7XG4gICAgICBjb25zdCBzZXR0aW5ncyA9IFN0b3JhZ2VPcHRpb24uYWRhcHQoc3RvcmUpO1xuICAgICAgc2V0dGluZ3Mub3B0aW9ucyA9IHRoaXMub2JqZWN0TWVyZ2VyU2VydmljZS5tZXJnZVN0b3JhZ2VPcHRpb25zKHNldHRpbmdzLm9wdGlvbnMpO1xuICAgICAgc3RvcmUubmFtZSA9IHRoaXMudmFsaWRTdG9yZU5hbWUoc3RvcmUubmFtZSk7XG5cbiAgICAgIGNvbnN0IHN0ciA9IHRoaXMuZW5jcnlwdGlvblRlc3QuaXNFbmNyeXB0ZWQoc3RvcmUuZGF0YSkgPyBzdG9yZS5kYXRhIDogSlNPTi5zdHJpbmdpZnkoc3RvcmUuZGF0YSk7XG4gICAgICBjb25zdCBkYXRhU3RyID1cbiAgICAgICAgdGhpcy5pc09iamVjdE9yQXJyYXkoc3RyKSAmJiBzdG9yZS5vcHRpb25zLmVuY3J5cHRlZFxuICAgICAgICAgID8gdGhpcy5lbmNyeXB0aW9uLmVuY3J5cHQoc3RyLCB0aGlzLmFwcC5hcHBJRClcbiAgICAgICAgICA6IHN0b3JlLmRhdGE7XG5cbiAgICAgIGNvbnN0IGxvY2FsRGF0YSA9XG4gICAgICAgIGRhdGFTdHIgJiYgc2V0dGluZ3Mub3B0aW9ucz8uc3RvcmFnZSA9PT0gU3RvcmFnZVR5cGUuR0xPQkFMXG4gICAgICAgICAgPyBbeyBkYXRhOiBkYXRhU3RyLCBpZDogc2V0dGluZ3MuaWQgfV1cbiAgICAgICAgICA6IFtdO1xuICAgICAgY29uc3Qgc2Vzc2lvbkRhdGEgPVxuICAgICAgICBkYXRhU3RyICYmIHNldHRpbmdzLm9wdGlvbnM/LnN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLlNFU1NJT05cbiAgICAgICAgICA/IFt7IGRhdGE6IGRhdGFTdHIsIGlkOiBzZXR0aW5ncy5pZCB9XVxuICAgICAgICAgIDogW107XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBsb2NhbFN0b3JlczogWy4uLnN0YXRlLmxvY2FsU3RvcmVzLCAuLi5sb2NhbERhdGFdLFxuICAgICAgICBzZXNzaW9uU3RvcmVzOiBbLi4uc3RhdGUuc2Vzc2lvblN0b3JlcywgLi4uc2Vzc2lvbkRhdGFdLFxuICAgICAgICBzZXR0aW5nczogWy4uLnN0YXRlLnNldHRpbmdzLCBzZXR0aW5nc10sXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlU3RvcmUoc3RvcmU6IHsgaWQ/OiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgZGF0YTogYW55OyBvcHRpb25zOiBTZXR0aW5nT3B0aW9ucyB9KSB7XG4gICAgdGhpcy5zdGF0ZS51cGRhdGUoc3RhdGUgPT4ge1xuICAgICAgY29uc3Qgc2V0dGluZ3MgPSBTdG9yYWdlT3B0aW9uLmFkYXB0KHN0b3JlKTtcbiAgICAgIHNldHRpbmdzLm9wdGlvbnMgPSB0aGlzLm9iamVjdE1lcmdlclNlcnZpY2UubWVyZ2VTdG9yYWdlT3B0aW9ucyhzZXR0aW5ncy5vcHRpb25zKTtcblxuICAgICAgaWYgKHN0YXRlLnNldHRpbmdzLnNvbWUoaXRlbSA9PiBpdGVtLm5hbWUgPT09IHN0b3JlLm5hbWUpKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLmlzT2JqZWN0T3JBcnJheShzdG9yZS5kYXRhKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0RhdGEgbXVzdCBiZSBhbiBPYmplY3Qgb3IgQXJyYXknKTtcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhU3RyID1cbiAgICAgICAgc3RvcmUub3B0aW9ucy5lbmNyeXB0ZWQgPyB0aGlzLmVuY3J5cHRpb24uZW5jcnlwdChzdG9yZS5kYXRhLCB0aGlzLmFwcC5hcHBJRCkgOiBzdG9yZS5kYXRhO1xuXG4gICAgICBjb25zdCBsb2NhbERhdGEgPVxuICAgICAgICBzZXR0aW5ncy5vcHRpb25zPy5zdG9yYWdlID09PSBTdG9yYWdlVHlwZS5HTE9CQUwgPyBbeyBkYXRhOiBkYXRhU3RyLCBpZDogc2V0dGluZ3MuaWQgfV0gOiBbXTtcbiAgICAgIGNvbnN0IHNlc3Npb25EYXRhID1cbiAgICAgICAgc2V0dGluZ3Mub3B0aW9ucz8uc3RvcmFnZSA9PT0gU3RvcmFnZVR5cGUuU0VTU0lPTiA/IFt7IGRhdGE6IGRhdGFTdHIsIGlkOiBzZXR0aW5ncy5pZCB9XSA6IFtdO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbG9jYWxTdG9yZXM6IFsuLi5zdGF0ZS5sb2NhbFN0b3JlcywgLi4ubG9jYWxEYXRhXSxcbiAgICAgICAgc2Vzc2lvblN0b3JlczogWy4uLnN0YXRlLnNlc3Npb25TdG9yZXMsIC4uLnNlc3Npb25EYXRhXSxcbiAgICAgICAgc2V0dGluZ3M6IFsuLi5zdGF0ZS5zZXR0aW5ncywgc2V0dGluZ3NdLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZVN0b3JlKHN0b3JlOiB7IG5hbWU6IHN0cmluZzsgZGF0YTogYW55IH0pIHtcbiAgICB0aGlzLnN0YXRlLnVwZGF0ZShzdGF0ZSA9PiB7XG4gICAgICBjb25zdCBzZXR0aW5ncyA9IHN0YXRlLnNldHRpbmdzLmZpbmQoaXRlbSA9PiBpdGVtLm5hbWUgPT09IHN0b3JlLm5hbWUpO1xuICAgICAgaWYgKCFzZXR0aW5ncykgcmV0dXJuIHN0YXRlO1xuXG4gICAgICBjb25zdCBkYXRhU3RyID1cbiAgICAgICAgc2V0dGluZ3Mub3B0aW9ucz8uZW5jcnlwdGVkXG4gICAgICAgICAgPyB0aGlzLmVuY3J5cHRpb24uZW5jcnlwdChzdG9yZS5kYXRhLCB0aGlzLmFwcC5hcHBJRClcbiAgICAgICAgICA6IHN0b3JlLmRhdGE7XG5cbiAgICAgIGNvbnN0IGxvY2FsRGF0YSA9XG4gICAgICAgIHNldHRpbmdzLm9wdGlvbnM/LnN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLkdMT0JBTCA/IFt7IGRhdGE6IGRhdGFTdHIsIGlkOiBzZXR0aW5ncy5pZCB9XSA6IFtdO1xuICAgICAgY29uc3Qgc2Vzc2lvbkRhdGEgPVxuICAgICAgICBzZXR0aW5ncy5vcHRpb25zPy5zdG9yYWdlID09PSBTdG9yYWdlVHlwZS5TRVNTSU9OID8gW3sgZGF0YTogZGF0YVN0ciwgaWQ6IHNldHRpbmdzLmlkIH1dIDogW107XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBsb2NhbFN0b3JlczogWy4uLnN0YXRlLmxvY2FsU3RvcmVzLmZpbHRlcihpID0+IGkuaWQgIT09IHNldHRpbmdzLmlkKSwgLi4ubG9jYWxEYXRhXSxcbiAgICAgICAgc2Vzc2lvblN0b3JlczogWy4uLnN0YXRlLnNlc3Npb25TdG9yZXMuZmlsdGVyKGkgPT4gaS5pZCAhPT0gc2V0dGluZ3MuaWQpLCAuLi5zZXNzaW9uRGF0YV0sXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlU3RvcmUoc3RvcmU6IHsgbmFtZTogc3RyaW5nIH0pIHtcbiAgICB0aGlzLnN0YXRlLnVwZGF0ZShzdGF0ZSA9PiB7XG4gICAgICBjb25zdCBpZCA9IHN0YXRlLnNldHRpbmdzLmZpbmQoaXRlbSA9PiBpdGVtLm5hbWUgPT09IHN0b3JlLm5hbWUpPy5pZDtcbiAgICAgIGlmICghaWQpIHJldHVybiBzdGF0ZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBsb2NhbFN0b3Jlczogc3RhdGUubG9jYWxTdG9yZXMuZmlsdGVyKGkgPT4gaS5pZCAhPT0gaWQpLFxuICAgICAgICBzZXNzaW9uU3RvcmVzOiBzdGF0ZS5zZXNzaW9uU3RvcmVzLmZpbHRlcihpID0+IGkuaWQgIT09IGlkKSxcbiAgICAgICAgc2V0dGluZ3M6IHN0YXRlLnNldHRpbmdzLmZpbHRlcihpID0+IGkuaWQgIT09IGlkKSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICByZXNldFN0b3JlKCkge1xuICAgIGNvbnN0IGNsZWFyZWQ6IFN0YXRlID0geyBsb2NhbFN0b3JlczogW10sIHNlc3Npb25TdG9yZXM6IFtdLCBzZXR0aW5nczogW10gfTtcbiAgICB0aGlzLnN0YXRlLnNldChjbGVhcmVkKTtcbiAgICB0aGlzLnBlcnNpc3RTdGF0ZShjbGVhcmVkKTtcbiAgfVxuXG4gIC8vIC0tLSBIRUxQRVJTIC0tLVxuXG4gIHByaXZhdGUgcGVyc2lzdFN0YXRlKHN0YXRlOiBTdGF0ZSkge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZU5hbWUsIEpTT04uc3RyaW5naWZ5KHN0YXRlLmxvY2FsU3RvcmVzKSk7XG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VOYW1lLCBKU09OLnN0cmluZ2lmeShzdGF0ZS5zZXNzaW9uU3RvcmVzKSk7XG4gICAgY29uc3Qgc2V0dGluZ3NTdHIgPSB0aGlzLmVuY3J5cHRpb24uZW5jcnlwdChzdGF0ZS5zZXR0aW5ncywgdGhpcy5hcHAuYXBwSUQpO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZVNldHRpbmdzTmFtZSwgc2V0dGluZ3NTdHIgfHwgJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBleHBpcmVkKHN0YXRlOiBTdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZS5zZXR0aW5ncy5maWx0ZXIoXG4gICAgICBzID0+IChzLm9wdGlvbnM/LmV4cGlyZXMgfHwgMCkgPiAwICYmIHRoaXMudXRpbHMuaGFzRXhwaXJlZChzLm9wdGlvbnM/LmV4cGlyZXMhKVxuICAgICk7XG4gIH1cblxuICByZXRyaWV2ZVN0YXRlKCkge1xuXG4gICAgY29uc3Qgc3RyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlU2V0dGluZ3NOYW1lKTtcblxuICAgIGNvbnN0IGxvY2FsU3RyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlTmFtZSk7XG4gICAgY29uc3Qgc2Vzc2lvblN0ciA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlTmFtZSk7XG5cbiAgICBjb25zdCBsb2NhbERhdGE6IFN0b3JhZ2VEYXRhW10gPSBsb2NhbFN0ciA/IEpTT04ucGFyc2UobG9jYWxTdHIpIDogW107XG4gICAgY29uc3Qgc2Vzc2lvbkRhdGE6IFN0b3JhZ2VEYXRhW10gPSBzZXNzaW9uU3RyID8gSlNPTi5wYXJzZShzZXNzaW9uU3RyKSA6IFtdO1xuXG4gICAgY29uc3QgZGVjcnlwdGVkU3RyID0gc3RyID8gdGhpcy5lbmNyeXB0aW9uLmRlY3J5cHQoc3RyLCB0aGlzLmFwcC5hcHBJRCkgOiBudWxsO1xuICAgIGNvbnN0IHNldHRpbmdzOiBTdG9yYWdlT3B0aW9uW10gPSBkZWNyeXB0ZWRTdHIgPyBKU09OLnBhcnNlKGRlY3J5cHRlZFN0cikgOiBbXTtcblxuICAgIHNldHRpbmdzLmZvckVhY2goc3RvcmUgPT4ge1xuXG5cbiAgICAgIC8vIG5vcm1hbGl6ZSBvcHRpb25zIHNvIHdlIGNvbXBhcmUgbnVtYmVycyBhbmQgY29tcHV0ZSBleHBpcmVzIGNvcnJlY3RseVxuICAgICAgY29uc3Qgb3B0aW9ucyA9IFNldHRpbmdPcHRpb25zLmFkYXB0KHN0b3JlLm9wdGlvbnMpO1xuXG4gICAgICAvLyBpZiBwZXJzaXN0ZWQgZGF0YSBpbmNsdWRlZCBleHBpcmVzSW4gYnV0IG5vdCBudW1lcmljIGV4cGlyZXMsIGNvbXB1dGUgaXQgbm93XG4gICAgICBpZiAoKCFvcHRpb25zLmV4cGlyZXMgfHwgb3B0aW9ucy5leHBpcmVzID09PSAwKSAmJiBvcHRpb25zLmV4cGlyZXNJbikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGNvbXB1dGVkID0gdGhpcy51dGlscy5leHBpcmVzKG9wdGlvbnMuZXhwaXJlc0luIGFzIHN0cmluZyk7XG4gICAgICAgICAgb3B0aW9ucy5leHBpcmVzID0gY29tcHV0ZWQgfHwgMDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgb3B0aW9ucy5leHBpcmVzID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBleHBpcmVkID0gKG9wdGlvbnMuZXhwaXJlcyB8fCAwKSA+IDAgJiYgdGhpcy51dGlscy5oYXNFeHBpcmVkKG9wdGlvbnMuZXhwaXJlcyB8fCAwKTtcblxuICAgICAgaWYgKCFleHBpcmVkKSB7XG5cbiAgICAgICAgY29uc3QgaGFzU3RvcmFnZSA9IHRoaXMuaGFzR2xvYmFsU3RvcmFnZShvcHRpb25zLnN0b3JhZ2UsIHN0b3JlLmlkIHx8ICcnKTtcblxuICAgICAgICBpZiAoIWhhc1N0b3JhZ2UpIHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZVN0b3JlKHsgaWQ6IHN0b3JlLmlkLCBuYW1lOiBzdG9yZS5uYW1lLCBkYXRhOiBbXSwgb3B0aW9ucyB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdG9yZURhdGEgPSAob3B0aW9ucy5zdG9yYWdlID09PSBTdG9yYWdlVHlwZS5HTE9CQUwpXG4gICAgICAgICAgICA/IGxvY2FsRGF0YS5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gc3RvcmUuaWQpXG4gICAgICAgICAgICA6IHNlc3Npb25EYXRhLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBzdG9yZS5pZCk7XG4gICAgICAgICAgdGhpcy5zZXRTdG9yZSh7IGlkOiBzdG9yZS5pZCB8fCAnJywgbmFtZTogc3RvcmUubmFtZSwgZGF0YTogc3RvcmVEYXRhPy5kYXRhLCBvcHRpb25zIH0pO1xuICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgIH0pO1xuXG4gICAgdGhpcy5zdGF0ZVJldHJpZXZlZCA9IHRydWU7XG5cbiAgICAvLyBFbnN1cmUgYWxsIHN0b3JlZCBzZXR0aW5ncyBoYXZlIG51bWVyaWMgZXhwaXJlcyBjb21wdXRlZCBhbmQgcGVyc2lzdGVkXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnN0YXRlKCk7XG4gICAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFNldHRpbmdzID0gY3VycmVudC5zZXR0aW5ncy5tYXAocyA9PiB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBTZXR0aW5nT3B0aW9ucy5hZGFwdChzLm9wdGlvbnMpO1xuICAgICAgICBpZiAoKCFvcHRzLmV4cGlyZXMgfHwgb3B0cy5leHBpcmVzID09PSAwKSAmJiBvcHRzLmV4cGlyZXNJbikge1xuICAgICAgICAgIGNvbnN0IGNvbXB1dGVkID0gdGhpcy51dGlscy5leHBpcmVzKG9wdHMuZXhwaXJlc0luIGFzIHN0cmluZykgfHwgMDtcbiAgICAgICAgICBpZiAoY29tcHV0ZWQgJiYgY29tcHV0ZWQgIT09IG9wdHMuZXhwaXJlcykge1xuICAgICAgICAgICAgb3B0cy5leHBpcmVzID0gY29tcHV0ZWQ7XG4gICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgLi4ucywgb3B0aW9uczogb3B0cyB9IGFzIFN0b3JhZ2VPcHRpb247XG4gICAgICB9KTtcblxuICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZDogU3RhdGUgPSB7IC4uLmN1cnJlbnQsIHNldHRpbmdzOiBub3JtYWxpemVkU2V0dGluZ3MgfTtcbiAgICAgICAgdGhpcy5zdGF0ZS5zZXQodXBkYXRlZCk7XG4gICAgICAgIHRoaXMucGVyc2lzdFN0YXRlKHVwZGF0ZWQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIHN3YWxsb3cgbm9ybWFsaXphdGlvbiBlcnJvcnMgdG8gYXZvaWQgYnJlYWtpbmcgaW5pdFxuICAgIH1cblxuICB9XG5cbiAgcHJpdmF0ZSBoYXNHbG9iYWxTdG9yYWdlKHR5cGU6IFN0b3JhZ2VUeXBlID0gU3RvcmFnZVR5cGUuR0xPQkFMLCBpZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3RyRGF0YTogU3RvcmFnZURhdGFbXSA9IFtdO1xuXG4gICAgaWYgKHR5cGUgPT09IFN0b3JhZ2VUeXBlLkdMT0JBTCkge1xuICAgICAgY29uc3Qgc3RyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlTmFtZSk7XG4gICAgICBzdHJEYXRhLnB1c2goLi4uKHN0ciA/IEpTT04ucGFyc2Uoc3RyKSA6IFtdKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0ciA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlTmFtZSk7XG4gICAgICBzdHJEYXRhLnB1c2goLi4uKHN0ciA/IEpTT04ucGFyc2Uoc3RyKSA6IFtdKSk7XG4gICAgfVxuXG4gICAgY29uc3QgZm91bmQgPSBzdHJEYXRhLmZpbmQoc3RvcmUgPT4gc3RvcmUuaWQgPT09IGlkKTtcbiAgICByZXR1cm4gISFmb3VuZDtcbiAgfVxuXG4gIHByaXZhdGUgaXNPYmplY3RPckFycmF5KG9iajogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHR5cGVvZiBvYmogPT09ICdvYmplY3QnID8gb2JqIDogSlNPTi5wYXJzZShvYmopO1xuICAgICAgcmV0dXJuIHR5cGVvZiBwYXJzZWQgPT09ICdvYmplY3QnICYmIHBhcnNlZCAhPT0gbnVsbDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzU3RyaW5nKG9iajogYW55KSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBTdHJpbmddJztcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRTdG9yZU5hbWUoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnXycpLnJlcGxhY2UoL1teIC1+XS9nLCAnJyk7XG4gIH1cbn1cbiJdfQ==
@@ -7,7 +7,11 @@ export class SettingOptions {
7
7
  this.encrypted = encrypted;
8
8
  }
9
9
  static adapt(item) {
10
- return new SettingOptions((item?.storage) ? item.storage : StorageType.GLOBAL, (item?.expires) ? item.expires : 0, (item?.expiresIn) ? item.expiresIn : '', (item?.encrypted) ? item?.encrypted : false);
10
+ const storage = (typeof item?.storage !== 'undefined' && item?.storage !== null) ? Number(item.storage) : StorageType.GLOBAL;
11
+ const expires = (typeof item?.expires !== 'undefined' && item?.expires !== null) ? Number(item.expires) : 0;
12
+ const expiresIn = (typeof item?.expiresIn !== 'undefined' && item?.expiresIn !== null) ? item.expiresIn : '';
13
+ const encrypted = (typeof item?.encrypted !== 'undefined' && item?.encrypted !== null) ? Boolean(item.encrypted) : false;
14
+ return new SettingOptions(storage, expires, expiresIn, encrypted);
11
15
  }
12
16
  }
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy1vcHRpb25zLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlLW1hbmFnZXItc2VydmljZS9tb2RlbHMvc2V0dGluZy1vcHRpb25zLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQVNqRCxNQUFNLE9BQU8sY0FBYztJQUV6QixZQUNTLE9BQXFCLEVBQ3JCLE9BQWdCLEVBQ2hCLFNBQWtCLEVBQ2xCLFNBQW1CO1FBSG5CLFlBQU8sR0FBUCxPQUFPLENBQWM7UUFDckIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixjQUFTLEdBQVQsU0FBUyxDQUFTO1FBQ2xCLGNBQVMsR0FBVCxTQUFTLENBQVU7SUFDekIsQ0FBQztJQUVKLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBVTtRQUVyQixPQUFPLElBQUksY0FBYyxDQUN2QixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFDbkQsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDbEMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFDdkMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FDNUMsQ0FBQTtJQUVILENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0b3JhZ2VUeXBlIH0gZnJvbSBcIi4vc3RvcmFnZS10eXBlLmVudW1cIlxuXG5leHBvcnQgaW50ZXJmYWNlIFNldHRpbmdPcHRpb25zSW50ZXJmYWNlIHtcbiAgc3RvcmFnZT86IFN0b3JhZ2VUeXBlXG4gIGV4cGlyZXM/OiBudW1iZXJcbiAgZXhwaXJlc0luPzogc3RyaW5nXG4gIGVuY3J5cHRlZD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNsYXNzIFNldHRpbmdPcHRpb25zIGltcGxlbWVudHMgU2V0dGluZ09wdGlvbnNJbnRlcmZhY2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBzdG9yYWdlPzogU3RvcmFnZVR5cGUsXG4gICAgcHVibGljIGV4cGlyZXM/OiBudW1iZXIsXG4gICAgcHVibGljIGV4cGlyZXNJbj86IHN0cmluZyxcbiAgICBwdWJsaWMgZW5jcnlwdGVkPzogYm9vbGVhbixcbiAgKSB7fVxuXG4gIHN0YXRpYyBhZGFwdChpdGVtPzogYW55KTogU2V0dGluZ09wdGlvbnMge1xuXG4gICAgcmV0dXJuIG5ldyBTZXR0aW5nT3B0aW9ucyhcbiAgICAgIChpdGVtPy5zdG9yYWdlKSA/IGl0ZW0uc3RvcmFnZSA6IFN0b3JhZ2VUeXBlLkdMT0JBTCxcbiAgICAgIChpdGVtPy5leHBpcmVzKSA/IGl0ZW0uZXhwaXJlcyA6IDAsXG4gICAgICAoaXRlbT8uZXhwaXJlc0luKSA/IGl0ZW0uZXhwaXJlc0luIDogJycsXG4gICAgICAoaXRlbT8uZW5jcnlwdGVkKSA/IGl0ZW0/LmVuY3J5cHRlZCA6IGZhbHNlLFxuICAgIClcblxuICB9XG5cbn1cbiJdfQ==
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy1vcHRpb25zLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlLW1hbmFnZXItc2VydmljZS9tb2RlbHMvc2V0dGluZy1vcHRpb25zLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQVNqRCxNQUFNLE9BQU8sY0FBYztJQUV6QixZQUNTLE9BQXFCLEVBQ3JCLE9BQWdCLEVBQ2hCLFNBQWtCLEVBQ2xCLFNBQW1CO1FBSG5CLFlBQU8sR0FBUCxPQUFPLENBQWM7UUFDckIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixjQUFTLEdBQVQsU0FBUyxDQUFTO1FBQ2xCLGNBQVMsR0FBVCxTQUFTLENBQVU7SUFDekIsQ0FBQztJQUVKLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBVTtRQUVyQixNQUFNLE9BQU8sR0FBRyxDQUFDLE9BQU8sSUFBSSxFQUFFLE9BQU8sS0FBSyxXQUFXLElBQUksSUFBSSxFQUFFLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUM3SCxNQUFNLE9BQU8sR0FBRyxDQUFDLE9BQU8sSUFBSSxFQUFFLE9BQU8sS0FBSyxXQUFXLElBQUksSUFBSSxFQUFFLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVHLE1BQU0sU0FBUyxHQUFHLENBQUMsT0FBTyxJQUFJLEVBQUUsU0FBUyxLQUFLLFdBQVcsSUFBSSxJQUFJLEVBQUUsU0FBUyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDN0csTUFBTSxTQUFTLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxTQUFTLEtBQUssV0FBVyxJQUFJLElBQUksRUFBRSxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUV6SCxPQUFPLElBQUksY0FBYyxDQUN2QixPQUFPLEVBQ1AsT0FBTyxFQUNQLFNBQVMsRUFDVCxTQUFTLENBQ1YsQ0FBQTtJQUVILENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0b3JhZ2VUeXBlIH0gZnJvbSBcIi4vc3RvcmFnZS10eXBlLmVudW1cIlxuXG5leHBvcnQgaW50ZXJmYWNlIFNldHRpbmdPcHRpb25zSW50ZXJmYWNlIHtcbiAgc3RvcmFnZT86IFN0b3JhZ2VUeXBlXG4gIGV4cGlyZXM/OiBudW1iZXJcbiAgZXhwaXJlc0luPzogc3RyaW5nXG4gIGVuY3J5cHRlZD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNsYXNzIFNldHRpbmdPcHRpb25zIGltcGxlbWVudHMgU2V0dGluZ09wdGlvbnNJbnRlcmZhY2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBzdG9yYWdlPzogU3RvcmFnZVR5cGUsXG4gICAgcHVibGljIGV4cGlyZXM/OiBudW1iZXIsXG4gICAgcHVibGljIGV4cGlyZXNJbj86IHN0cmluZyxcbiAgICBwdWJsaWMgZW5jcnlwdGVkPzogYm9vbGVhbixcbiAgKSB7fVxuXG4gIHN0YXRpYyBhZGFwdChpdGVtPzogYW55KTogU2V0dGluZ09wdGlvbnMge1xuXG4gICAgY29uc3Qgc3RvcmFnZSA9ICh0eXBlb2YgaXRlbT8uc3RvcmFnZSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXRlbT8uc3RvcmFnZSAhPT0gbnVsbCkgPyBOdW1iZXIoaXRlbS5zdG9yYWdlKSA6IFN0b3JhZ2VUeXBlLkdMT0JBTDtcbiAgICBjb25zdCBleHBpcmVzID0gKHR5cGVvZiBpdGVtPy5leHBpcmVzICE9PSAndW5kZWZpbmVkJyAmJiBpdGVtPy5leHBpcmVzICE9PSBudWxsKSA/IE51bWJlcihpdGVtLmV4cGlyZXMpIDogMDtcbiAgICBjb25zdCBleHBpcmVzSW4gPSAodHlwZW9mIGl0ZW0/LmV4cGlyZXNJbiAhPT0gJ3VuZGVmaW5lZCcgJiYgaXRlbT8uZXhwaXJlc0luICE9PSBudWxsKSA/IGl0ZW0uZXhwaXJlc0luIDogJyc7XG4gICAgY29uc3QgZW5jcnlwdGVkID0gKHR5cGVvZiBpdGVtPy5lbmNyeXB0ZWQgIT09ICd1bmRlZmluZWQnICYmIGl0ZW0/LmVuY3J5cHRlZCAhPT0gbnVsbCkgPyBCb29sZWFuKGl0ZW0uZW5jcnlwdGVkKSA6IGZhbHNlO1xuXG4gICAgcmV0dXJuIG5ldyBTZXR0aW5nT3B0aW9ucyhcbiAgICAgIHN0b3JhZ2UsXG4gICAgICBleHBpcmVzLFxuICAgICAgZXhwaXJlc0luLFxuICAgICAgZW5jcnlwdGVkLFxuICAgIClcblxuICB9XG5cbn1cbiJdfQ==
@@ -0,0 +1,199 @@
1
+ import { Inject, inject, Injectable, Injector, Optional, signal } from '@angular/core';
2
+ import { HttpErrorResponse } from '@angular/common/http';
3
+ import { Subject, throwError } from 'rxjs';
4
+ import { tap, map, finalize, catchError } from 'rxjs/operators';
5
+ import { ApiRequest } from '../request-manager-state-service/models/api-request.model';
6
+ import { RequestSignalsService } from './request-signals.service'; // 👈 updated
7
+ import { requestPolling, countdown, delayedRetry } from './rxjs-operators';
8
+ import { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display';
9
+ import { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';
10
+ import { ObjectMergerService } from '../utils/object-merger.service';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "../../models";
13
+ export class HTTPManagerSignalsService extends RequestSignalsService {
14
+ constructor(configOptions) {
15
+ super();
16
+ this.configOptions = configOptions;
17
+ this.toastMessage = inject(ToastMessageDisplayService);
18
+ this.ng_injector = inject(Injector);
19
+ this.objectMergerService = inject(ObjectMergerService);
20
+ // ✅ Replaced BehaviorSubjects with Angular signals
21
+ this.countdown = signal(0);
22
+ this.error = signal(false);
23
+ this.data = signal(null);
24
+ this.polling$ = new Subject();
25
+ this.config = ApiRequest.adapt();
26
+ this.config = configOptions
27
+ ? ApiRequest.adapt(configOptions.httpRequestOptions)
28
+ : this.config;
29
+ }
30
+ // REQUESTS
31
+ getRequest(options, params) {
32
+ this.isPending.set(true);
33
+ this.data.set(null);
34
+ const updatedOptions = this.defineReqOptions(options, params);
35
+ const func = this.getRecordRequest;
36
+ const requests = this.createRequest(func, updatedOptions);
37
+ return this.createObservable(updatedOptions, requests, func.name).pipe(tap(data => this.data.set(data)), finalize(() => this.isPending.set(false)), catchError((err) => {
38
+ if (updatedOptions.displayError)
39
+ this.handleErrorWithSnackBar(err);
40
+ this.isPending.set(false);
41
+ return this.handleError(err);
42
+ }));
43
+ }
44
+ postRequest(data, options, params) {
45
+ this.isPending.set(true);
46
+ this.data.set(null);
47
+ const updatedOptions = this.defineReqOptions(options, params);
48
+ const func = this.createRecordRequest;
49
+ const requests = this.createRequest(func, updatedOptions, data);
50
+ return this.createObservable(updatedOptions, requests, func.name).pipe(tap(data => this.data.set(data)), finalize(() => this.isPending.set(false)), catchError((err) => {
51
+ if (updatedOptions.displayError)
52
+ this.handleErrorWithSnackBar(err);
53
+ this.isPending.set(false);
54
+ return this.handleError(err);
55
+ }));
56
+ }
57
+ putRequest(data, options, params) {
58
+ this.isPending.set(true);
59
+ this.data.set(null);
60
+ const updatedOptions = this.defineReqOptions(options, params);
61
+ const func = this.updateRecordRequest;
62
+ const requests = this.createRequest(func, updatedOptions, data);
63
+ return this.createObservable(updatedOptions, requests, func.name).pipe(tap(data => this.data.set(data)), finalize(() => this.isPending.set(false)), catchError((err) => {
64
+ if (updatedOptions.displayError)
65
+ this.handleErrorWithSnackBar(err);
66
+ this.isPending.set(false);
67
+ return this.handleError(err);
68
+ }));
69
+ }
70
+ deleteRequest(options, params) {
71
+ this.isPending.set(true);
72
+ this.data.set(null);
73
+ const updatedOptions = this.defineReqOptions(options, params);
74
+ const func = this.deleteRecordRequest;
75
+ const requests = this.createRequest(func, updatedOptions);
76
+ return this.createObservable(updatedOptions, requests, func.name).pipe(tap(data => this.data.set(data)), finalize(() => this.isPending.set(false)), catchError((err) => {
77
+ if (updatedOptions.displayError)
78
+ this.handleErrorWithSnackBar(err);
79
+ this.isPending.set(false);
80
+ return this.handleError(err);
81
+ }));
82
+ }
83
+ downloadRequest(options, params, saveAs) {
84
+ this.isPending.set(true);
85
+ const updatedOptions = this.defineReqOptions(options, params);
86
+ const func = this.downloadFileRequest;
87
+ const requests = this.createRequest(func, updatedOptions);
88
+ return this.createObservable(updatedOptions, requests, func.name).pipe(catchError((err) => {
89
+ this.error.set(true);
90
+ this.isPending.set(false);
91
+ return this.handleError(err);
92
+ }));
93
+ }
94
+ // --- private helpers ---
95
+ createObservable(options, request$, funcName) {
96
+ const polling = options.polling ? (options.polling > 0 ? true : false) : false;
97
+ const isPolling = polling &&
98
+ !(funcName === 'deleteRecordRequest' ||
99
+ funcName === 'updateRecordRequest' ||
100
+ funcName === 'createRecordRequest');
101
+ this.polling$.next();
102
+ const polling$ = (isPolling && options.polling) || 0 >= 3
103
+ ? request$.pipe(requestPolling((options.polling || 0) + 1, this.polling$, this.isPending), tap(() => this.countdown.set(0)), tap(() => {
104
+ if (!options.polling)
105
+ return;
106
+ const count = options.polling ? options.polling : 0;
107
+ countdown(count)
108
+ .pipe(map((x) => {
109
+ const pollingInSec = options.polling || 0;
110
+ const percentageCompleted = ((pollingInSec - x) / pollingInSec) * 100;
111
+ return Math.round(percentageCompleted);
112
+ }))
113
+ .subscribe((countDownValue) => {
114
+ this.countdown.set(countDownValue);
115
+ });
116
+ }))
117
+ : request$.pipe(catchError((err) => {
118
+ if (err instanceof HttpErrorResponse) {
119
+ this.error.set(true);
120
+ return this.handleError(err);
121
+ }
122
+ return throwError(() => err);
123
+ }));
124
+ return polling$.pipe(catchError((err, caught) => {
125
+ if (err instanceof HttpErrorResponse) {
126
+ this.error.set(true);
127
+ if (isPolling)
128
+ this.stopPolling();
129
+ return this.handleError(err);
130
+ }
131
+ return throwError(() => err);
132
+ }), options?.retry && options.retry.times > 0
133
+ ? delayedRetry((options.retry.delay || 3) * 1000, (options.retry.times || 0) - 1)
134
+ : (source) => source);
135
+ }
136
+ createRequest(func, options, data) {
137
+ const dataItem = this.prepareRequestData(options, data, func.name);
138
+ return func.bind(this)(dataItem.options, dataItem.data);
139
+ }
140
+ prepareRequestData(options, data, funcName) {
141
+ if ((options.mapper && funcName === 'updateRecordRequest') || funcName === 'createRecordRequest') {
142
+ if (options?.mapper) {
143
+ data = options.mapper
144
+ ? Array.isArray(data)
145
+ ? map((item) => options.mapper(item))
146
+ : options.mapper(data)
147
+ : data;
148
+ }
149
+ }
150
+ else {
151
+ if (options?.adapter) {
152
+ data = Array.isArray(data)
153
+ ? map((item) => options.adapter(item))
154
+ : options.adapter(data);
155
+ }
156
+ }
157
+ return { options: options, data: data };
158
+ }
159
+ handleError(error) {
160
+ this.error.set(error.message || `${error.status} - ${error.statusText}`);
161
+ return throwError(() => error);
162
+ }
163
+ handleErrorWithSnackBar(error) {
164
+ const displayError = ToastDisplay.adapt({
165
+ message: error.message || `${error.status} - ${error.statusText}`,
166
+ action: 'OK',
167
+ color: ToastColors.ERROR,
168
+ icon: 'error',
169
+ duration: 5 * 1000,
170
+ });
171
+ this.toastMessage.toastMessage(displayError);
172
+ }
173
+ stopPolling() {
174
+ this.isPending.set(false);
175
+ this.polling$.next();
176
+ }
177
+ defineReqOptions(options, params) {
178
+ const req = ApiRequest.adapt(options);
179
+ if (req?.path)
180
+ req.path = params ? [...req.path, ...params] : req.path;
181
+ const optionsReq = req ? req : ApiRequest.adapt();
182
+ const updatedOptions = this.objectMergerService.mergeOptions(optionsReq);
183
+ return updatedOptions;
184
+ }
185
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HTTPManagerSignalsService, deps: [{ token: CONFIG_SETTINGS_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
186
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HTTPManagerSignalsService, providedIn: 'root' }); }
187
+ }
188
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HTTPManagerSignalsService, decorators: [{
189
+ type: Injectable,
190
+ args: [{
191
+ providedIn: 'root',
192
+ }]
193
+ }], ctorParameters: () => [{ type: i1.ConfigOptions, decorators: [{
194
+ type: Optional
195
+ }, {
196
+ type: Inject,
197
+ args: [CONFIG_SETTINGS_TOKEN]
198
+ }] }] });
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1tYW5hZ2VyLXNpZ25hbHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2h0dHAtcmVxdWVzdC1tYW5hZ2VyL3NyYy9saWIvc2VydmljZXMvcmVxdWVzdC1tYW5hZ2VyLXNlcnZpY2VzL2h0dHAtbWFuYWdlci1zaWduYWxzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBYyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDdkYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUMsQ0FBRyxhQUFhO0FBQ2xGLE9BQU8sRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLDBCQUEwQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFeEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7OztBQUtyRSxNQUFNLE9BQU8seUJBQTZCLFNBQVEscUJBQXFCO0lBZXJFLFlBQStELGFBQTZCO1FBQzFGLEtBQUssRUFBRSxDQUFDO1FBRHFELGtCQUFhLEdBQWIsYUFB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SUFBSSxHQUFHLEVBQUUsSUFBSTtZQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBRXZFLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV6RSxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDOytHQW5PVSx5QkFBeUIsa0JBZUoscUJBQXFCO21IQWYxQyx5QkFBeUIsY0FGeEIsTUFBTTs7NEZBRVAseUJBQXlCO2tCQUhyQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBZ0JjLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBpbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBPcHRpb25hbCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRhcCwgbWFwLCBmaW5hbGl6ZSwgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQXBpUmVxdWVzdCB9IGZyb20gJy4uL3JlcXVlc3QtbWFuYWdlci1zdGF0ZS1zZXJ2aWNlL21vZGVscy9hcGktcmVxdWVzdC5tb2RlbCc7XG5pbXBvcnQgeyBSZXF1ZXN0U2lnbmFsc1NlcnZpY2UgfSBmcm9tICcuL3JlcXVlc3Qtc2lnbmFscy5zZXJ2aWNlJzsgICAvLyDwn5GIIHVwZGF0ZWRcbmltcG9ydCB7IHJlcXVlc3RQb2xsaW5nLCBjb3VudGRvd24sIGRlbGF5ZWRSZXRyeSB9IGZyb20gJy4vcnhqcy1vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBUb2FzdENvbG9ycywgVG9hc3REaXNwbGF5LCBUb2FzdE1lc3NhZ2VEaXNwbGF5U2VydmljZSB9IGZyb20gJ3RvYXN0LW1lc3NhZ2UtZGlzcGxheSc7XG5pbXBvcnQgeyBDT05GSUdfU0VUVElOR1NfVE9LRU4gfSBmcm9tICcuLi8uLi9tb2RlbHMvY29uZmlnLXRva2VuLm1vZGVsJztcbmltcG9ydCB7IENvbmZpZ09wdGlvbnMgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgT2JqZWN0TWVyZ2VyU2VydmljZSB9IGZyb20gJy4uL3V0aWxzL29iamVjdC1tZXJnZXIuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBIVFRQTWFuYWdlclNpZ25hbHNTZXJ2aWNlPFQ+IGV4dGVuZHMgUmVxdWVzdFNpZ25hbHNTZXJ2aWNlIHsgICAvLyDwn5GIIHVzZSBzaWduYWxzIHNlcnZpY2VcblxuICB0b2FzdE1lc3NhZ2UgPSBpbmplY3QoVG9hc3RNZXNzYWdlRGlzcGxheVNlcnZpY2UpO1xuICBuZ19pbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIG9iamVjdE1lcmdlclNlcnZpY2UgPSBpbmplY3QoT2JqZWN0TWVyZ2VyU2VydmljZSk7XG5cbiAgLy8g4pyFIFJlcGxhY2VkIEJlaGF2aW9yU3ViamVjdHMgd2l0aCBBbmd1bGFyIHNpZ25hbHNcbiAgY291bnRkb3duID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIGVycm9yID0gc2lnbmFsPHN0cmluZyB8IGJvb2xlYW4+KGZhbHNlKTtcbiAgZGF0YSA9IHNpZ25hbDxhbnk+KG51bGwpO1xuXG4gIHByaXZhdGUgcG9sbGluZyQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbmZpZyA9IEFwaVJlcXVlc3QuYWRhcHQoKTtcblxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KENPTkZJR19TRVRUSU5HU19UT0tFTikgcHJpdmF0ZSBjb25maWdPcHRpb25zPzogQ29uZmlnT3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWdPcHRpb25zXG4gICAgICA/IEFwaVJlcXVlc3QuYWRhcHQoY29uZmlnT3B0aW9ucy5odHRwUmVxdWVzdE9wdGlvbnMpXG4gICAgICA6IHRoaXMuY29uZmlnO1xuICB9XG5cbiAgLy8gUkVRVUVTVFNcbiAgZ2V0UmVxdWVzdDxUPihvcHRpb25zPzogQXBpUmVxdWVzdCwgcGFyYW1zPzogYW55W10pIHtcbiAgICB0aGlzLmlzUGVuZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5kYXRhLnNldChudWxsKTtcblxuICAgIGNvbnN0IHVwZGF0ZWRPcHRpb25zID0gdGhpcy5kZWZpbmVSZXFPcHRpb25zKG9wdGlvbnMsIHBhcmFtcyk7XG4gICAgY29uc3QgZnVuYyA9IHRoaXMuZ2V0UmVjb3JkUmVxdWVzdDtcbiAgICBjb25zdCByZXF1ZXN0cyA9IHRoaXMuY3JlYXRlUmVxdWVzdChmdW5jLCB1cGRhdGVkT3B0aW9ucyk7XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVPYnNlcnZhYmxlPFQ+KHVwZGF0ZWRPcHRpb25zLCByZXF1ZXN0cywgZnVuYy5uYW1lKS5waXBlKFxuICAgICAgdGFwKGRhdGEgPT4gdGhpcy5kYXRhLnNldChkYXRhKSksXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmlzUGVuZGluZy5zZXQoZmFsc2UpKSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICBpZiAodXBkYXRlZE9wdGlvbnMuZGlzcGxheUVycm9yKSB0aGlzLmhhbmRsZUVycm9yV2l0aFNuYWNrQmFyKGVycik7XG4gICAgICAgIHRoaXMuaXNQZW5kaW5nLnNldChmYWxzZSk7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUVycm9yKGVycik7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0UmVxdWVzdDxUIGV4dGVuZHMgeyBpZD86IG51bWJlcnxzdHJpbmcgfT4oZGF0YTogVCwgb3B0aW9uczogQXBpUmVxdWVzdCwgcGFyYW1zPzogYW55W10pIHtcbiAgICB0aGlzLmlzUGVuZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5kYXRhLnNldChudWxsKTtcblxuICAgIGNvbnN0IHVwZGF0ZWRPcHRpb25zID0gdGhpcy5kZWZpbmVSZXFPcHRpb25zKG9wdGlvbnMsIHBhcmFtcyk7XG4gICAgY29uc3QgZnVuYyA9IHRoaXMuY3JlYXRlUmVjb3JkUmVxdWVzdDtcbiAgICBjb25zdCByZXF1ZXN0cyA9IHRoaXMuY3JlYXRlUmVxdWVzdChmdW5jLCB1cGRhdGVkT3B0aW9ucywgZGF0YSk7XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVPYnNlcnZhYmxlPFQ+KHVwZGF0ZWRPcHRpb25zLCByZXF1ZXN0cywgZnVuYy5uYW1lKS5waXBlKFxuICAgICAgdGFwKGRhdGEgPT4gdGhpcy5kYXRhLnNldChkYXRhKSksXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmlzUGVuZGluZy5zZXQoZmFsc2UpKSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICBpZiAodXBkYXRlZE9wdGlvbnMuZGlzcGxheUVycm9yKSB0aGlzLmhhbmRsZUVycm9yV2l0aFNuYWNrQmFyKGVycik7XG4gICAgICAgIHRoaXMuaXNQZW5kaW5nLnNldChmYWxzZSk7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUVycm9yKGVycik7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdXRSZXF1ZXN0PFQgZXh0ZW5kcyB7IGlkPzogbnVtYmVyfHN0cmluZyB9PihkYXRhOiBULCBvcHRpb25zOiBBcGlSZXF1ZXN0LCBwYXJhbXM/OiBhbnlbXSkge1xuICAgIHRoaXMuaXNQZW5kaW5nLnNldCh0cnVlKTtcbiAgICB0aGlzLmRhdGEuc2V0KG51bGwpO1xuXG4gICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSB0aGlzLmRlZmluZVJlcU9wdGlvbnMob3B0aW9ucywgcGFyYW1zKTtcbiAgICBjb25zdCBmdW5jID0gdGhpcy51cGRhdGVSZWNvcmRSZXF1ZXN0O1xuICAgIGNvbnN0IHJlcXVlc3RzID0gdGhpcy5jcmVhdGVSZXF1ZXN0KGZ1bmMsIHVwZGF0ZWRPcHRpb25zLCBkYXRhKTtcblxuICAgIHJldHVybiB0aGlzLmNyZWF0ZU9ic2VydmFibGU8VD4odXBkYXRlZE9wdGlvbnMsIHJlcXVlc3RzLCBmdW5jLm5hbWUpLnBpcGUoXG4gICAgICB0YXAoZGF0YSA9PiB0aGlzLmRhdGEuc2V0KGRhdGEpKSxcbiAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMuaXNQZW5kaW5nLnNldChmYWxzZSkpLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgIGlmICh1cGRhdGVkT3B0aW9ucy5kaXNwbGF5RXJyb3IpIHRoaXMuaGFuZGxlRXJyb3JXaXRoU25hY2tCYXIoZXJyKTtcbiAgICAgICAgdGhpcy5pc1BlbmRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZVJlcXVlc3Q8VD4ob3B0aW9uczogQXBpUmVxdWVzdCwgcGFyYW1zPzogYW55W10pIHtcbiAgICB0aGlzLmlzUGVuZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5kYXRhLnNldChudWxsKTtcblxuICAgIGNvbnN0IHVwZGF0ZWRPcHRpb25zID0gdGhpcy5kZWZpbmVSZXFPcHRpb25zKG9wdGlvbnMsIHBhcmFtcyk7XG4gICAgY29uc3QgZnVuYyA9IHRoaXMuZGVsZXRlUmVjb3JkUmVxdWVzdDtcbiAgICBjb25zdCByZXF1ZXN0cyA9IHRoaXMuY3JlYXRlUmVxdWVzdChmdW5jLCB1cGRhdGVkT3B0aW9ucyk7XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVPYnNlcnZhYmxlPFQ+KHVwZGF0ZWRPcHRpb25zLCByZXF1ZXN0cywgZnVuYy5uYW1lKS5waXBlKFxuICAgICAgdGFwKGRhdGEgPT4gdGhpcy5kYXRhLnNldChkYXRhKSksXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmlzUGVuZGluZy5zZXQoZmFsc2UpKSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICBpZiAodXBkYXRlZE9wdGlvbnMuZGlzcGxheUVycm9yKSB0aGlzLmhhbmRsZUVycm9yV2l0aFNuYWNrQmFyKGVycik7XG4gICAgICAgIHRoaXMuaXNQZW5kaW5nLnNldChmYWxzZSk7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUVycm9yKGVycik7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBkb3dubG9hZFJlcXVlc3Q8VD4ob3B0aW9uczogQXBpUmVxdWVzdCwgcGFyYW1zPzogYW55W10sIHNhdmVBcz86IHN0cmluZykge1xuICAgIHRoaXMuaXNQZW5kaW5nLnNldCh0cnVlKTtcblxuICAgIGNvbnN0IHVwZGF0ZWRPcHRpb25zID0gdGhpcy5kZWZpbmVSZXFPcHRpb25zKG9wdGlvbnMsIHBhcmFtcyk7XG4gICAgY29uc3QgZnVuYyA9IHRoaXMuZG93bmxvYWRGaWxlUmVxdWVzdDtcbiAgICBjb25zdCByZXF1ZXN0cyA9IHRoaXMuY3JlYXRlUmVxdWVzdChmdW5jLCB1cGRhdGVkT3B0aW9ucyk7XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVPYnNlcnZhYmxlPFQ+KHVwZGF0ZWRPcHRpb25zLCByZXF1ZXN0cywgZnVuYy5uYW1lKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3Iuc2V0KHRydWUpO1xuICAgICAgICB0aGlzLmlzUGVuZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLy8gLS0tIHByaXZhdGUgaGVscGVycyAtLS1cbiAgcHJpdmF0ZSBjcmVhdGVPYnNlcnZhYmxlPFQ+KG9wdGlvbnM6IEFwaVJlcXVlc3QsIHJlcXVlc3QkOiBPYnNlcnZhYmxlPFQ+LCBmdW5jTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcG9sbGluZyA9XG4gICAgICBvcHRpb25zLnBvbGxpbmcgPyAob3B0aW9ucy5wb2xsaW5nID4gMCA/IHRydWUgOiBmYWxzZSkgOiBmYWxzZTtcblxuICAgIGNvbnN0IGlzUG9sbGluZyA9XG4gICAgICBwb2xsaW5nICYmXG4gICAgICAhKGZ1bmNOYW1lID09PSAnZGVsZXRlUmVjb3JkUmVxdWVzdCcgfHxcbiAgICAgICAgZnVuY05hbWUgPT09ICd1cGRhdGVSZWNvcmRSZXF1ZXN0JyB8fFxuICAgICAgICBmdW5jTmFtZSA9PT0gJ2NyZWF0ZVJlY29yZFJlcXVlc3QnKTtcblxuICAgIHRoaXMucG9sbGluZyQubmV4dCgpO1xuXG4gICAgY29uc3QgcG9sbGluZyQgPVxuICAgICAgKGlzUG9sbGluZyAmJiBvcHRpb25zLnBvbGxpbmcpIHx8IDAgPj0gM1xuICAgICAgICA/IHJlcXVlc3QkLnBpcGUoXG4gICAgICAgICAgICByZXF1ZXN0UG9sbGluZygob3B0aW9ucy5wb2xsaW5nIHx8IDApICsgMSwgdGhpcy5wb2xsaW5nJCwgdGhpcy5pc1BlbmRpbmcpLFxuICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMuY291bnRkb3duLnNldCgwKSksXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMucG9sbGluZykgcmV0dXJuO1xuICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IG9wdGlvbnMucG9sbGluZyA/IG9wdGlvbnMucG9sbGluZyA6IDA7XG4gICAgICAgICAgICAgIGNvdW50ZG93bihjb3VudClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgIG1hcCgoeDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvbGxpbmdJblNlYyA9IG9wdGlvbnMucG9sbGluZyB8fCAwO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwZXJjZW50YWdlQ29tcGxldGVkID0gKChwb2xsaW5nSW5TZWMgLSB4KSAvIHBvbGxpbmdJblNlYykgKiAxMDA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHBlcmNlbnRhZ2VDb21wbGV0ZWQpO1xuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoY291bnREb3duVmFsdWU6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5jb3VudGRvd24uc2V0KGNvdW50RG93blZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIClcbiAgICAgICAgOiByZXF1ZXN0JC5waXBlKFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvci5zZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnIpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuXG4gICAgcmV0dXJuIHBvbGxpbmckLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKChlcnI6IGFueSwgY2F1Z2h0OiBPYnNlcnZhYmxlPFQ+KSA9PiB7XG4gICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgIHRoaXMuZXJyb3Iuc2V0KHRydWUpO1xuICAgICAgICAgIGlmIChpc1BvbGxpbmcpIHRoaXMuc3RvcFBvbGxpbmcoKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycik7XG4gICAgICB9KSxcbiAgICAgIG9wdGlvbnM/LnJldHJ5ICYmIG9wdGlvbnMucmV0cnkudGltZXMgPiAwXG4gICAgICAgID8gZGVsYXllZFJldHJ5KChvcHRpb25zLnJldHJ5LmRlbGF5IHx8IDMpICogMTAwMCwgKG9wdGlvbnMucmV0cnkudGltZXMgfHwgMCkgLSAxKVxuICAgICAgICA6IChzb3VyY2U6IE9ic2VydmFibGU8VD4pID0+IHNvdXJjZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJlcXVlc3QoZnVuYzogRnVuY3Rpb24sIG9wdGlvbnM6IEFwaVJlcXVlc3QsIGRhdGE/OiBhbnkgfCBhbnlbXSkge1xuICAgIGNvbnN0IGRhdGFJdGVtID0gdGhpcy5wcmVwYXJlUmVxdWVzdERhdGEob3B0aW9ucywgZGF0YSwgZnVuYy5uYW1lKTtcbiAgICByZXR1cm4gZnVuYy5iaW5kKHRoaXMpKGRhdGFJdGVtLm9wdGlvbnMsIGRhdGFJdGVtLmRhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlUmVxdWVzdERhdGEob3B0aW9uczogQXBpUmVxdWVzdCwgZGF0YTogYW55LCBmdW5jTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKChvcHRpb25zLm1hcHBlciAmJiBmdW5jTmFtZSA9PT0gJ3VwZGF0ZVJlY29yZFJlcXVlc3QnKSB8fCBmdW5jTmFtZSA9PT0gJ2NyZWF0ZVJlY29yZFJlcXVlc3QnKSB7XG4gICAgICBpZiAob3B0aW9ucz8ubWFwcGVyKSB7XG4gICAgICAgIGRhdGEgPSBvcHRpb25zLm1hcHBlclxuICAgICAgICAgID8gQXJyYXkuaXNBcnJheShkYXRhKVxuICAgICAgICAgICAgPyBtYXAoKGl0ZW0pID0+IG9wdGlvbnMubWFwcGVyKGl0ZW0pKVxuICAgICAgICAgICAgOiBvcHRpb25zLm1hcHBlcihkYXRhKVxuICAgICAgICAgIDogZGF0YTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG9wdGlvbnM/LmFkYXB0ZXIpIHtcbiAgICAgICAgZGF0YSA9IEFycmF5LmlzQXJyYXkoZGF0YSlcbiAgICAgICAgICA/IG1hcCgoaXRlbSkgPT4gb3B0aW9ucy5hZGFwdGVyKGl0ZW0pKVxuICAgICAgICAgIDogb3B0aW9ucy5hZGFwdGVyKGRhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBvcHRpb25zOiBvcHRpb25zLCBkYXRhOiBkYXRhIH07XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBSZXNwb25zZSB8IGFueSkge1xuICAgIHRoaXMuZXJyb3Iuc2V0KGVycm9yLm1lc3NhZ2UgfHwgYCR7ZXJyb3Iuc3RhdHVzfSAtICR7ZXJyb3Iuc3RhdHVzVGV4dH1gKTtcbiAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yV2l0aFNuYWNrQmFyKGVycm9yOiBSZXNwb25zZSB8IGFueSkge1xuICAgIGNvbnN0IGRpc3BsYXlFcnJvciA9IFRvYXN0RGlzcGxheS5hZGFwdCh7XG4gICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlIHx8IGAke2Vycm9yLnN0YXR1c30gLSAke2Vycm9yLnN0YXR1c1RleHR9YCxcbiAgICAgIGFjdGlvbjogJ09LJyxcbiAgICAgIGNvbG9yOiBUb2FzdENvbG9ycy5FUlJPUixcbiAgICAgIGljb246ICdlcnJvcicsXG4gICAgICBkdXJhdGlvbjogNSAqIDEwMDAsXG4gICAgfSk7XG4gICAgdGhpcy50b2FzdE1lc3NhZ2UudG9hc3RNZXNzYWdlKGRpc3BsYXlFcnJvcik7XG4gIH1cblxuICBwcml2YXRlIHN0b3BQb2xsaW5nKCkge1xuICAgIHRoaXMuaXNQZW5kaW5nLnNldChmYWxzZSk7XG4gICAgdGhpcy5wb2xsaW5nJC5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGRlZmluZVJlcU9wdGlvbnMob3B0aW9uczogYW55LCBwYXJhbXM/OiBhbnlbXSkge1xuICAgIGNvbnN0IHJlcSA9IEFwaVJlcXVlc3QuYWRhcHQob3B0aW9ucyk7XG4gICAgaWYgKHJlcT8ucGF0aCkgcmVxLnBhdGggPSBwYXJhbXMgPyBbLi4ucmVxLnBhdGgsIC4uLnBhcmFtc10gOiByZXEucGF0aDtcblxuICAgIGNvbnN0IG9wdGlvbnNSZXEgPSByZXEgPyByZXEgOiBBcGlSZXF1ZXN0LmFkYXB0KCk7XG4gICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSB0aGlzLm9iamVjdE1lcmdlclNlcnZpY2UubWVyZ2VPcHRpb25zKG9wdGlvbnNSZXEpO1xuXG4gICAgcmV0dXJuIHVwZGF0ZWRPcHRpb25zO1xuICB9XG59XG4iXX0=
@@ -1,5 +1,6 @@
1
1
  export * from "./http-manager.service";
2
+ export * from "./http-manager-signals.service";
2
3
  // export * from './request.service';
3
4
  export * from "../../models/index";
4
5
  export * from "./rxjs-operators/index";
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL3JlcXVlc3QtbWFuYWdlci1zZXJ2aWNlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLHFDQUFxQztBQUVyQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9odHRwLW1hbmFnZXIuc2VydmljZVwiO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9yZXF1ZXN0LnNlcnZpY2UnO1xuXG5leHBvcnQgKiBmcm9tIFwiLi4vLi4vbW9kZWxzL2luZGV4XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9yeGpzLW9wZXJhdG9ycy9pbmRleFwiO1xuIl19
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL3JlcXVlc3QtbWFuYWdlci1zZXJ2aWNlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MscUNBQXFDO0FBRXJDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2h0dHAtbWFuYWdlci5zZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9odHRwLW1hbmFnZXItc2lnbmFscy5zZXJ2aWNlXCI7XG4vLyBleHBvcnQgKiBmcm9tICcuL3JlcXVlc3Quc2VydmljZSc7XG5cbmV4cG9ydCAqIGZyb20gXCIuLi8uLi9tb2RlbHMvaW5kZXhcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3J4anMtb3BlcmF0b3JzL2luZGV4XCI7XG4iXX0=