http-request-manager 0.0.2 → 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 +17 -3
  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,275 @@
1
+ import { Injectable, inject } from '@angular/core';
2
+ import { ComponentStore } from '@ngrx/component-store';
3
+ import { withLatestFrom, map, tap } from 'rxjs/operators';
4
+ import { UtilsService } from '../utils/utils.service';
5
+ import { SymmetricalEncryptionService } from '../utils/encryption/symmetrical-encryption.service';
6
+ import { StorageOption, StorageType } from './models';
7
+ import { SettingOptions } from './models/setting-options.model';
8
+ import { EncryptionTestService } from '../utils/encryption/encryption-test.service';
9
+ import { interval } from 'rxjs';
10
+ import { AppService } from '../utils/app.service';
11
+ import * as i0 from "@angular/core";
12
+ const storage = {
13
+ localStores: [],
14
+ sessionStores: [],
15
+ settings: [],
16
+ };
17
+ export class LocalStorageManagerService extends ComponentStore {
18
+ startTimer() {
19
+ const timer$ = interval(1000 * 3).pipe(withLatestFrom(this.data$), map(([_, state]) => state), tap((state) => {
20
+ const expired = this.expired(state) ? this.expired(state) : [];
21
+ if (expired.length > 0) {
22
+ const ids = expired.map((item) => item.id);
23
+ const updatedState = {
24
+ ...state,
25
+ localStores: state.localStores.filter((item) => !ids.includes(item.id)),
26
+ sessionStores: state.sessionStores.filter((item) => !ids.includes(item.id)),
27
+ settings: state.settings.filter((item) => !ids.includes(item.id)),
28
+ };
29
+ this.persistState(updatedState);
30
+ this.updateState(updatedState);
31
+ }
32
+ }));
33
+ timer$.subscribe();
34
+ }
35
+ constructor() {
36
+ super(storage);
37
+ this.storageName = 'storage';
38
+ this.storageSettingsName = 'global-storage';
39
+ this.stateRetrieved = false;
40
+ this.encrypted = false;
41
+ this.app = inject(AppService);
42
+ this.utils = inject(UtilsService);
43
+ this.encryption = inject(SymmetricalEncryptionService);
44
+ this.encryptionTest = inject(EncryptionTestService);
45
+ // SELECTORS
46
+ this.data$ = this.select((state) => state);
47
+ this.stores$ = this.select((state) => state.settings);
48
+ this.storeExists$ = (store) => this.select(this.data$, (data) => data.settings.find(item => item.name === store) ? true : false);
49
+ this.store$ = (store) => this.select(this.data$, (data) => {
50
+ const foundStore = data.settings.find(item => item.name === store);
51
+ if (foundStore) {
52
+ const options = SettingOptions.adapt(foundStore.options);
53
+ const found = foundStore.options?.storage === StorageType.GLOBAL
54
+ ? data.localStores.find(item => item.id === foundStore.id)
55
+ : data.sessionStores.find(item => item.id === foundStore.id);
56
+ if (!found) {
57
+ this.deleteStore({ name: store });
58
+ return;
59
+ }
60
+ const storageData = (options.encrypted) ? this.encryption.decrypt(found.data, this.app.appID) : found.data;
61
+ return (this.isString(storageData)) ? JSON.parse(storageData) : storageData;
62
+ }
63
+ else {
64
+ return null;
65
+ }
66
+ });
67
+ this.settings$ = this.select((state) => state.settings);
68
+ this.setting$ = (store) => this.select(this.data$, (state) => {
69
+ const foundSetting = state.settings.find(item => item.name === store);
70
+ return (foundSetting) ? foundSetting : null;
71
+ });
72
+ this.persistence$ = this.data$
73
+ .subscribe(data => {
74
+ if (this.stateRetrieved)
75
+ this.persistState(data);
76
+ });
77
+ this.updateState = this.updater((state, updatedState) => ({
78
+ ...updatedState,
79
+ }));
80
+ this.setStore = this.updater((state, store) => {
81
+ const settings = StorageOption.adapt(store);
82
+ const type = store.options.storage;
83
+ const hasStore = this.hasGlobalStorage(type, store.id);
84
+ store.name = this.validStoreName(store.name);
85
+ if (!hasStore) {
86
+ console.warn(`No such Store: ${store.name}`);
87
+ return state;
88
+ }
89
+ else {
90
+ const str = this.encryptionTest.isEncrypted(store.data) ? store.data : JSON.stringify(store.data);
91
+ const dataStr = (this.isObjectOrArray(str)) ? (store.options.encrypted) ? this.encryption.encrypt(str, this.app.appID) : store.data : store.data;
92
+ const localData = (dataStr && settings.options?.storage === StorageType.GLOBAL) ? [{ data: dataStr, id: settings.id }] : [];
93
+ const sessionData = (dataStr && settings.options?.storage === StorageType.SESSION) ? [{ data: dataStr, id: settings.id }] : [];
94
+ return {
95
+ ...state,
96
+ localStores: [...state.localStores, ...localData],
97
+ sessionStores: [...state.sessionStores, ...sessionData],
98
+ settings: [...state.settings, ...[settings]],
99
+ };
100
+ }
101
+ });
102
+ this.createStore = this.updater((state, store) => {
103
+ const settings = StorageOption.adapt(store);
104
+ const foundStore = state?.settings.some(item => item.name === store.name);
105
+ const expires = (settings.options?.expiresIn) ? this.utils.expires(settings.options?.expiresIn) : 0;
106
+ if (settings.options)
107
+ settings.options.expires = expires;
108
+ store.name = this.validStoreName(store.name);
109
+ if (foundStore) {
110
+ return state;
111
+ }
112
+ else {
113
+ if (!this.isObjectOrArray(store.data)) {
114
+ console.warn('Data must ba an Object or Array');
115
+ return;
116
+ }
117
+ store.data = (this.isString(store.data)) ? JSON.parse(store.data) : store.data;
118
+ const dataStr = (store.options.encrypted) ? this.encryption.encrypt(store.data, this.app.appID) : store.data;
119
+ const localData = (settings.options?.storage === StorageType.GLOBAL) ? [{ data: dataStr, id: settings.id }] : [];
120
+ const sessionData = (settings.options?.storage === StorageType.SESSION) ? [{ data: dataStr, id: settings.id }] : [];
121
+ return {
122
+ ...state,
123
+ localStores: [...state.localStores, ...localData],
124
+ sessionStores: [...state.sessionStores, ...sessionData],
125
+ settings: [...state.settings, ...[settings]],
126
+ };
127
+ }
128
+ });
129
+ this.updateStore = this.updater((state, store) => {
130
+ store.name = this.validStoreName(store.name);
131
+ const settings = state.settings.find(item => item.name === store.name);
132
+ if (settings) {
133
+ const type = settings.options?.storage;
134
+ const hasStore = this.hasGlobalStorage(type, settings.id || '');
135
+ if (!hasStore) {
136
+ console.warn(`No such Store: ${store.name}`);
137
+ }
138
+ else {
139
+ const dataStr = (settings.options?.encrypted) ? this.encryption.encrypt(store.data, this.app.appID) : store.data;
140
+ const localData = (dataStr && settings.options?.storage === StorageType.GLOBAL) ? [{ data: dataStr, id: settings.id }] : [];
141
+ const sessionData = (dataStr && settings.options?.storage === StorageType.SESSION) ? [{ data: dataStr, id: settings.id }] : [];
142
+ state.localStores = state.localStores.filter(item => item.id !== settings.id);
143
+ state.sessionStores = state.sessionStores.filter(item => item.id !== settings.id);
144
+ return {
145
+ ...state,
146
+ localStores: [...state.localStores, ...localData],
147
+ sessionStores: [...state.sessionStores, ...sessionData],
148
+ };
149
+ }
150
+ }
151
+ return state;
152
+ });
153
+ this.deleteStore = this.updater((state, store) => {
154
+ store.name = this.validStoreName(store.name);
155
+ const id = state.settings.find(item => item.name === store.name)?.id;
156
+ if (id) {
157
+ const settings = state.settings.filter(item => item.id !== id);
158
+ const localData = state.localStores.filter(item => item.id !== id);
159
+ const sessionData = state.sessionStores.filter(item => item.id !== id);
160
+ return {
161
+ ...state,
162
+ localStores: [...localData],
163
+ sessionStores: [...sessionData],
164
+ settings: [...settings],
165
+ };
166
+ }
167
+ else {
168
+ console.warn(`No such Store: ${store.name}`);
169
+ return state;
170
+ }
171
+ });
172
+ this.isObjectOrArray = (obj) => {
173
+ try {
174
+ //obj = (Object.prototype.toString.call(obj) === '[object Object]') ? JSON.parse(obj) : obj
175
+ return typeof obj === 'object' || Array.isArray(obj);
176
+ }
177
+ catch (error) {
178
+ return false;
179
+ }
180
+ };
181
+ this.retrieveState();
182
+ this.startTimer();
183
+ }
184
+ resetStore() {
185
+ const newState = {
186
+ localStores: [],
187
+ sessionStores: [],
188
+ settings: [],
189
+ };
190
+ this.updateState(newState);
191
+ this.persistState(newState);
192
+ }
193
+ persistState(state) {
194
+ if (!state)
195
+ return;
196
+ const strLocal = JSON.stringify(state.localStores);
197
+ localStorage.setItem(this.storageName, strLocal);
198
+ const strSession = JSON.stringify(state.sessionStores);
199
+ sessionStorage.setItem(this.storageName, strSession);
200
+ const settingsStr = this.encryption.encrypt(state.settings, this.app.appID);
201
+ localStorage.setItem(this.storageSettingsName, settingsStr || '');
202
+ }
203
+ expired(state) {
204
+ if (!state)
205
+ return [];
206
+ return state.settings?.filter(item => (item.options?.expires || 0) > 0 && this.utils.hasExpired(item.options?.expires || 0));
207
+ }
208
+ retrieveState() {
209
+ const str = localStorage.getItem(this.storageSettingsName);
210
+ const localStr = localStorage.getItem(this.storageName);
211
+ const sessionStr = sessionStorage.getItem(this.storageName);
212
+ const localData = (localStr) ? JSON.parse(localStr) : null;
213
+ const sessionData = (sessionStr) ? JSON.parse(sessionStr) : null;
214
+ const decryptedStr = str ? this.encryption.decrypt(str, this.app.appID) : null;
215
+ const settings = (decryptedStr && decryptedStr !== null) ? JSON.parse(decryptedStr) : [];
216
+ settings.forEach(store => {
217
+ const expired = (store.options?.expires || 0) > 0 && this.utils.hasExpired(store.options?.expires || 0);
218
+ if (!expired) {
219
+ const hasStorage = this.hasGlobalStorage(store.options?.storage, store.id || '');
220
+ if (!hasStorage) {
221
+ this.createStore({ id: store.id, name: store.name, data: [], options: SettingOptions.adapt(store.options) });
222
+ }
223
+ else {
224
+ const storeData = (store.options?.storage === StorageType.GLOBAL) ? localData.find(item => item.id === store.id) : sessionData.find(item => item.id === store.id);
225
+ this.setStore({ id: store.id || '', name: store.name, data: storeData?.data, options: SettingOptions.adapt(store.options) });
226
+ }
227
+ }
228
+ });
229
+ this.stateRetrieved = true;
230
+ }
231
+ isString(obj) {
232
+ return (Object.prototype.toString.call(obj) === '[object String]');
233
+ }
234
+ fixAndParseJSON(jsonString) {
235
+ const fixedString = jsonString
236
+ .replace(/'/g, '"')
237
+ .replace(/([{,]\s*)(\w+)\s*:/g, '$1"$2":')
238
+ .replace(/,\s*(\}|\])/g, '$1');
239
+ try {
240
+ return JSON.parse(fixedString);
241
+ }
242
+ catch (error) {
243
+ throw new Error('Failed to parse JSON: ' + error.message);
244
+ }
245
+ }
246
+ validStoreName(str) {
247
+ return str
248
+ .toLowerCase() // Convert to lowercase
249
+ .replace(/\s+/g, '_') // Replace spaces with underscores
250
+ .replace(/[^ -~]/g, ''); // Remove non-ASCII characters
251
+ }
252
+ hasGlobalStorage(type = StorageType.GLOBAL, id) {
253
+ const strData = [];
254
+ if (type === StorageType.GLOBAL) {
255
+ const str = localStorage.getItem(this.storageName);
256
+ strData.push(...(str ? JSON.parse(str) : []));
257
+ }
258
+ else {
259
+ const str = sessionStorage.getItem(this.storageName);
260
+ strData.push(...(str ? JSON.parse(str) : []));
261
+ }
262
+ const found = strData.find(store => store.id === id);
263
+ return (found) ? true : false;
264
+ }
265
+ ngOnDestroy() {
266
+ this.persistence$.unsubscribe();
267
+ }
268
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalStorageManagerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
269
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalStorageManagerService, providedIn: 'root' }); }
270
+ }
271
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalStorageManagerService, decorators: [{
272
+ type: Injectable,
273
+ args: [{ providedIn: 'root' }]
274
+ }], ctorParameters: function () { return []; } });
275
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2UtbWFuYWdlci1zZXJ2aWNlL2xvY2FsLXN0b3JhZ2UtbWFuYWdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFbEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWhFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQVFsRCxNQUFNLE9BQU8sR0FBVTtJQUNyQixXQUFXLEVBQUUsRUFBRTtJQUNmLGFBQWEsRUFBRSxFQUFFO0lBQ2pCLFFBQVEsRUFBRSxFQUFFO0NBQ2IsQ0FBQztBQUdGLE1BQU0sT0FBTywwQkFBMkIsU0FBUSxjQUFxQjtJQW9FbkUsVUFBVTtRQUNSLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFB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c0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudFN0b3JlIH0gZnJvbSAnQG5ncngvY29tcG9uZW50LXN0b3JlJztcbmltcG9ydCB7IHdpdGhMYXRlc3RGcm9tLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgVXRpbHNTZXJ2aWNlIH0gZnJvbSAnLi4vdXRpbHMvdXRpbHMuc2VydmljZSc7XG5pbXBvcnQgeyBTeW1tZXRyaWNhbEVuY3J5cHRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vdXRpbHMvZW5jcnlwdGlvbi9zeW1tZXRyaWNhbC1lbmNyeXB0aW9uLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBTdG9yYWdlT3B0aW9uLCBTdG9yYWdlVHlwZSB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IFNldHRpbmdPcHRpb25zIH0gZnJvbSAnLi9tb2RlbHMvc2V0dGluZy1vcHRpb25zLm1vZGVsJztcbmltcG9ydCB7IFN0b3JhZ2VEYXRhIH0gZnJvbSAnLi9tb2RlbHMvc3RvcmFnZS1kYXRhLm1vZGVsJztcbmltcG9ydCB7IEVuY3J5cHRpb25UZXN0U2VydmljZSB9IGZyb20gJy4uL3V0aWxzL2VuY3J5cHRpb24vZW5jcnlwdGlvbi10ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFwcFNlcnZpY2UgfSBmcm9tICcuLi91dGlscy9hcHAuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdGUge1xuICBsb2NhbFN0b3JlczogU3RvcmFnZURhdGFbXVxuICBzZXNzaW9uU3RvcmVzOiBTdG9yYWdlRGF0YVtdXG4gIHNldHRpbmdzOiBTdG9yYWdlT3B0aW9uW11cbn1cblxuY29uc3Qgc3RvcmFnZTogU3RhdGUgPSB7XG4gIGxvY2FsU3RvcmVzOiBbXSxcbiAgc2Vzc2lvblN0b3JlczogW10sXG4gIHNldHRpbmdzOiBbXSxcbn07XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTG9jYWxTdG9yYWdlTWFuYWdlclNlcnZpY2UgZXh0ZW5kcyBDb21wb25lbnRTdG9yZTxTdGF0ZT4gaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIHN0b3JhZ2VOYW1lID0gJ3N0b3JhZ2UnXG4gIHN0b3JhZ2VTZXR0aW5nc05hbWUgPSAnZ2xvYmFsLXN0b3JhZ2UnXG5cbiAgc3RhdGVSZXRyaWV2ZWQgPSBmYWxzZVxuICBlbmNyeXB0ZWQgPSBmYWxzZVxuXG4gIGFwcCA9IGluamVjdChBcHBTZXJ2aWNlKVxuICB1dGlscyA9IGluamVjdChVdGlsc1NlcnZpY2UpXG4gIGVuY3J5cHRpb24gPSBpbmplY3QoU3ltbWV0cmljYWxFbmNyeXB0aW9uU2VydmljZSlcbiAgZW5jcnlwdGlvblRlc3QgPSBpbmplY3QoRW5jcnlwdGlvblRlc3RTZXJ2aWNlKVxuXG4gIC8vIFNFTEVDVE9SU1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0YSQgPSB0aGlzLnNlbGVjdCgoc3RhdGUpID0+IHN0YXRlKVxuXG4gIHJlYWRvbmx5IHN0b3JlcyQgPSB0aGlzLnNlbGVjdCgoc3RhdGUpID0+IHN0YXRlLnNldHRpbmdzKVxuXG4gIHJlYWRvbmx5IHN0b3JlRXhpc3RzJCA9IChzdG9yZTogc3RyaW5nKSA9PiB0aGlzLnNlbGVjdChcbiAgICB0aGlzLmRhdGEkLFxuICAgIChkYXRhKSA9PiAgZGF0YS5zZXR0aW5ncy5maW5kKGl0ZW0gPT4gaXRlbS5uYW1lID09PSBzdG9yZSkgPyB0cnVlIDogZmFsc2VcbiAgKVxuXG4gIHJlYWRvbmx5IHN0b3JlJCA9IChzdG9yZTogc3RyaW5nKSA9PiB0aGlzLnNlbGVjdChcbiAgICB0aGlzLmRhdGEkLFxuICAgIChkYXRhKSA9PiB7XG5cbiAgICAgIGNvbnN0IGZvdW5kU3RvcmUgPSBkYXRhLnNldHRpbmdzLmZpbmQoaXRlbSA9PiBpdGVtLm5hbWUgPT09IHN0b3JlKVxuXG4gICAgICBpZihmb3VuZFN0b3JlKSB7XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IFNldHRpbmdPcHRpb25zLmFkYXB0KGZvdW5kU3RvcmUub3B0aW9ucylcblxuICAgICAgICBjb25zdCBmb3VuZCA9IGZvdW5kU3RvcmUub3B0aW9ucz8uc3RvcmFnZSA9PT0gU3RvcmFnZVR5cGUuR0xPQkFMXG4gICAgICAgICAgPyBkYXRhLmxvY2FsU3RvcmVzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBmb3VuZFN0b3JlLmlkKSBhcyBTdG9yYWdlRGF0YVxuICAgICAgICAgIDogZGF0YS5zZXNzaW9uU3RvcmVzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBmb3VuZFN0b3JlLmlkKSBhcyBTdG9yYWdlRGF0YTtcblxuICAgICAgICBpZighZm91bmQpIHtcbiAgICAgICAgICB0aGlzLmRlbGV0ZVN0b3JlKHsgbmFtZTogc3RvcmUgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VEYXRhID0gKG9wdGlvbnMuZW5jcnlwdGVkKSA/IHRoaXMuZW5jcnlwdGlvbi5kZWNyeXB0KGZvdW5kLmRhdGEsIHRoaXMuYXBwLmFwcElEKSA6IGZvdW5kLmRhdGFcbiAgICAgICAgcmV0dXJuICh0aGlzLmlzU3RyaW5nKHN0b3JhZ2VEYXRhKSkgPyBKU09OLnBhcnNlKHN0b3JhZ2VEYXRhKTogc3RvcmFnZURhdGFcblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgIH1cbiAgKVxuXG4gIHJlYWRvbmx5IHNldHRpbmdzJCA9IHRoaXMuc2VsZWN0KChzdGF0ZSkgPT4gc3RhdGUuc2V0dGluZ3MpXG5cbiAgcmVhZG9ubHkgc2V0dGluZyQgPSAoc3RvcmU6IHN0cmluZykgPT4gdGhpcy5zZWxlY3QoXG4gICAgdGhpcy5kYXRhJCxcbiAgICAoc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kU2V0dGluZyA9IHN0YXRlLnNldHRpbmdzLmZpbmQoaXRlbSA9PiBpdGVtLm5hbWUgPT09IHN0b3JlKVxuICAgICAgcmV0dXJuIChmb3VuZFNldHRpbmcpID8gZm91bmRTZXR0aW5nIDogbnVsbFxuICAgIH1cbiAgKVxuXG4gIHBlcnNpc3RlbmNlJCA9IHRoaXMuZGF0YSRcbiAgLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICBpZih0aGlzLnN0YXRlUmV0cmlldmVkKSB0aGlzLnBlcnNpc3RTdGF0ZShkYXRhKVxuICB9KVxuXG4gIHN0YXJ0VGltZXIoKSB7XG4gICAgY29uc3QgdGltZXIkID0gaW50ZXJ2YWwoMTAwMCAqIDMpLnBpcGUoXG4gICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmRhdGEkKSxcbiAgICAgIG1hcCgoW18sIHN0YXRlXSkgPT4gc3RhdGUpLFxuICAgICAgdGFwKChzdGF0ZSkgPT4ge1xuXG4gICAgICAgIGNvbnN0IGV4cGlyZWQ6IFN0b3JhZ2VPcHRpb25bXSA9IHRoaXMuZXhwaXJlZChzdGF0ZSkgPyB0aGlzLmV4cGlyZWQoc3RhdGUpIDogW11cblxuICAgICAgICBpZiAoZXhwaXJlZC5sZW5ndGggPiAwKSB7XG5cbiAgICAgICAgICBjb25zdCBpZHMgPSBleHBpcmVkLm1hcCgoaXRlbSkgPT4gaXRlbS5pZClcblxuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRTdGF0ZTogU3RhdGUgPSB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIGxvY2FsU3RvcmVzOiBzdGF0ZS5sb2NhbFN0b3Jlcy5maWx0ZXIoKGl0ZW0pID0+ICFpZHMuaW5jbHVkZXMoaXRlbS5pZCkpLFxuICAgICAgICAgICAgc2Vzc2lvblN0b3Jlczogc3RhdGUuc2Vzc2lvblN0b3Jlcy5maWx0ZXIoKGl0ZW0pID0+ICFpZHMuaW5jbHVkZXMoaXRlbS5pZCkpLFxuICAgICAgICAgICAgc2V0dGluZ3M6IHN0YXRlLnNldHRpbmdzLmZpbHRlcigoaXRlbSkgPT4gIWlkcy5pbmNsdWRlcyhpdGVtLmlkKSksXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRoaXMucGVyc2lzdFN0YXRlKHVwZGF0ZWRTdGF0ZSlcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKHVwZGF0ZWRTdGF0ZSlcblxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aW1lciQuc3Vic2NyaWJlKClcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RhdGUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCB1cGRhdGVkU3RhdGU6IFN0YXRlKSA9PiAoe1xuICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgfSkpXG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoc3RvcmFnZSlcbiAgICB0aGlzLnJldHJpZXZlU3RhdGUoKVxuICAgIHRoaXMuc3RhcnRUaW1lcigpXG4gIH1cblxuICByZWFkb25seSBzZXRTdG9yZSA9IHRoaXMudXBkYXRlcigoc3RhdGU6IFN0YXRlLCBzdG9yZTogeyBpZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGRhdGE6IGFueSwgb3B0aW9uczogU2V0dGluZ09wdGlvbnMgfSk6IGFueSA9PiB7XG5cbiAgICBjb25zdCBzZXR0aW5ncyA9IFN0b3JhZ2VPcHRpb24uYWRhcHQoc3RvcmUpXG5cbiAgICBjb25zdCB0eXBlID0gc3RvcmUub3B0aW9ucy5zdG9yYWdlXG4gICAgY29uc3QgaGFzU3RvcmUgPSB0aGlzLmhhc0dsb2JhbFN0b3JhZ2UodHlwZSwgc3RvcmUuaWQpXG5cbiAgICBzdG9yZS5uYW1lID0gdGhpcy52YWxpZFN0b3JlTmFtZShzdG9yZS5uYW1lKVxuXG4gICAgaWYoIWhhc1N0b3JlKSB7XG4gICAgICBjb25zb2xlLndhcm4oYE5vIHN1Y2ggU3RvcmU6ICR7c3RvcmUubmFtZX1gKVxuICAgICAgcmV0dXJuIHN0YXRlXG4gICAgfSBlbHNlIHtcblxuICAgIGNvbnN0IHN0ciA9IHRoaXMuZW5jcnlwdGlvblRlc3QuaXNFbmNyeXB0ZWQoc3RvcmUuZGF0YSkgPyBzdG9yZS5kYXRhIDogSlNPTi5zdHJpbmdpZnkoc3RvcmUuZGF0YSlcbiAgICBjb25zdCBkYXRhU3RyID0gKHRoaXMuaXNPYmplY3RPckFycmF5KHN0cikpID8gKHN0b3JlLm9wdGlvbnMuZW5jcnlwdGVkKSA/IHRoaXMuZW5jcnlwdGlvbi5lbmNyeXB0KHN0ciwgdGhpcy5hcHAuYXBwSUQpIDogc3RvcmUuZGF0YSA6IHN0b3JlLmRhdGFcblxuICAgIGNvbnN0IGxvY2FsRGF0YSA9IChkYXRhU3RyICYmIHNldHRpbmdzLm9wdGlvbnM/LnN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLkdMT0JBTCkgPyBbeyBkYXRhOiBkYXRhU3RyLCBpZDogc2V0dGluZ3MuaWQgfV0gOiBbXVxuICAgIGNvbnN0IHNlc3Npb25EYXRhID0gKGRhdGFTdHIgJiYgc2V0dGluZ3Mub3B0aW9ucz8uc3RvcmFnZSA9PT0gU3RvcmFnZVR5cGUuU0VTU0lPTikgPyBbeyBkYXRhOiBkYXRhU3RyLCBpZDogc2V0dGluZ3MuaWQgfV0gOiBbXVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbG9jYWxTdG9yZXM6IFsuLi5zdGF0ZS5sb2NhbFN0b3JlcywgLi4ubG9jYWxEYXRhXSxcbiAgICAgIHNlc3Npb25TdG9yZXM6IFsuLi5zdGF0ZS5zZXNzaW9uU3RvcmVzLCAuLi5zZXNzaW9uRGF0YV0sXG4gICAgICBzZXR0aW5nczogWy4uLnN0YXRlLnNldHRpbmdzLCAuLi5bc2V0dGluZ3NdXSxcbiAgICAgIH1cblxuICAgIH1cblxuICB9KVxuXG4gIHJlYWRvbmx5IGNyZWF0ZVN0b3JlID0gdGhpcy51cGRhdGVyKChzdGF0ZTogU3RhdGUsIHN0b3JlOiB7IGlkPzogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGRhdGE6IGFueSwgb3B0aW9uczogU2V0dGluZ09wdGlvbnMgfSk6IGFueSA9PiB7XG5cbiAgICBjb25zdCBzZXR0aW5ncyA9IFN0b3JhZ2VPcHRpb24uYWRhcHQoc3RvcmUpXG4gICAgY29uc3QgZm91bmRTdG9yZSA9IHN0YXRlPy5zZXR0aW5ncy5zb21lKGl0ZW0gPT4gaXRlbS5uYW1lID09PSBzdG9yZS5uYW1lKVxuXG4gICAgY29uc3QgZXhwaXJlcyA9IChzZXR0aW5ncy5vcHRpb25zPy5leHBpcmVzSW4pID8gdGhpcy51dGlscy5leHBpcmVzKHNldHRpbmdzLm9wdGlvbnM/LmV4cGlyZXNJbikgOiAwXG4gICAgaWYoc2V0dGluZ3Mub3B0aW9ucykgc2V0dGluZ3Mub3B0aW9ucy5leHBpcmVzID0gZXhwaXJlc1xuXG4gICAgc3RvcmUubmFtZSA9IHRoaXMudmFsaWRTdG9yZU5hbWUoc3RvcmUubmFtZSlcbiAgICBpZihmb3VuZFN0b3JlKSB7XG4gICAgICByZXR1cm4gc3RhdGVcbiAgICB9IGVsc2Uge1xuICAgICAgaWYoIXRoaXMuaXNPYmplY3RPckFycmF5KHN0b3JlLmRhdGEpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignRGF0YSBtdXN0IGJhIGFuIE9iamVjdCBvciBBcnJheScpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG5cbiAgICAgIHN0b3JlLmRhdGEgPSAodGhpcy5pc1N0cmluZyhzdG9yZS5kYXRhKSkgPyBKU09OLnBhcnNlKHN0b3JlLmRhdGEpIDogc3RvcmUuZGF0YVxuICAgICAgY29uc3QgZGF0YVN0ciA9IChzdG9yZS5vcHRpb25zLmVuY3J5cHRlZCkgPyB0aGlzLmVuY3J5cHRpb24uZW5jcnlwdChzdG9yZS5kYXRhLCB0aGlzLmFwcC5hcHBJRCkgOiBzdG9yZS5kYXRhXG5cbiAgICAgIGNvbnN0IGxvY2FsRGF0YSA9IChzZXR0aW5ncy5vcHRpb25zPy5zdG9yYWdlID09PSBTdG9yYWdlVHlwZS5HTE9CQUwpID8gW3sgZGF0YTogZGF0YVN0ciwgaWQ6IHNldHRpbmdzLmlkIH1dIDogW11cbiAgICAgIGNvbnN0IHNlc3Npb25EYXRhID0gKHNldHRpbmdzLm9wdGlvbnM/LnN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLlNFU1NJT04pID8gW3sgZGF0YTogZGF0YVN0ciwgaWQ6IHNldHRpbmdzLmlkIH1dIDogW11cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGxvY2FsU3RvcmVzOiBbLi4uc3RhdGUubG9jYWxTdG9yZXMsIC4uLmxvY2FsRGF0YV0sXG4gICAgICAgIHNlc3Npb25TdG9yZXM6IFsuLi5zdGF0ZS5zZXNzaW9uU3RvcmVzLCAuLi5zZXNzaW9uRGF0YV0sXG4gICAgICAgIHNldHRpbmdzOiBbLi4uc3RhdGUuc2V0dGluZ3MsIC4uLltzZXR0aW5nc11dLFxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgfSlcblxuICByZWFkb25seSB1cGRhdGVTdG9yZSA9IHRoaXMudXBkYXRlcigoc3RhdGU6IFN0YXRlLCBzdG9yZTogeyBuYW1lOiBzdHJpbmcsIGRhdGE6IGFueSB9KTogYW55ID0+IHtcblxuICAgICAgc3RvcmUubmFtZSA9IHRoaXMudmFsaWRTdG9yZU5hbWUoc3RvcmUubmFtZSlcblxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSBzdGF0ZS5zZXR0aW5ncy5maW5kKGl0ZW0gPT4gaXRlbS5uYW1lID09PSBzdG9yZS5uYW1lKVxuXG4gICAgICBpZihzZXR0aW5ncykge1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBzZXR0aW5ncy5vcHRpb25zPy5zdG9yYWdlXG4gICAgICAgIGNvbnN0IGhhc1N0b3JlID0gdGhpcy5oYXNHbG9iYWxTdG9yYWdlKHR5cGUsIHNldHRpbmdzLmlkIHx8ICcnKVxuXG4gICAgICAgIGlmKCFoYXNTdG9yZSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgTm8gc3VjaCBTdG9yZTogJHtzdG9yZS5uYW1lfWApXG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgY29uc3QgZGF0YVN0ciA9IChzZXR0aW5ncy5vcHRpb25zPy5lbmNyeXB0ZWQpID8gdGhpcy5lbmNyeXB0aW9uLmVuY3J5cHQoc3RvcmUuZGF0YSwgdGhpcy5hcHAuYXBwSUQpIDogc3RvcmUuZGF0YVxuXG4gICAgICAgIGNvbnN0IGxvY2FsRGF0YSA9IChkYXRhU3RyICYmIHNldHRpbmdzLm9wdGlvbnM/LnN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLkdMT0JBTCkgPyBbeyBkYXRhOiBkYXRhU3RyLCBpZDogc2V0dGluZ3MuaWQgfV0gOiBbXVxuICAgICAgICBjb25zdCBzZXNzaW9uRGF0YSA9IChkYXRhU3RyICYmIHNldHRpbmdzLm9wdGlvbnM/LnN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLlNFU1NJT04pID8gW3sgZGF0YTogZGF0YVN0ciwgaWQ6IHNldHRpbmdzLmlkIH1dIDogW11cblxuICAgICAgICBzdGF0ZS5sb2NhbFN0b3JlcyA9IHN0YXRlLmxvY2FsU3RvcmVzLmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgIT09IHNldHRpbmdzLmlkKVxuICAgICAgICBzdGF0ZS5zZXNzaW9uU3RvcmVzID0gc3RhdGUuc2Vzc2lvblN0b3Jlcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlkICE9PSBzZXR0aW5ncy5pZClcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIGxvY2FsU3RvcmVzOiBbLi4uc3RhdGUubG9jYWxTdG9yZXMsIC4uLmxvY2FsRGF0YV0sXG4gICAgICAgICAgc2Vzc2lvblN0b3JlczogWy4uLnN0YXRlLnNlc3Npb25TdG9yZXMsIC4uLnNlc3Npb25EYXRhXSxcbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlXG5cbiAgfSlcblxuICByZWFkb25seSBkZWxldGVTdG9yZSA9IHRoaXMudXBkYXRlcigoc3RhdGU6IFN0YXRlLCBzdG9yZTogeyBuYW1lOiBzdHJpbmcgfSk6IGFueSA9PiB7XG5cbiAgICBzdG9yZS5uYW1lID0gdGhpcy52YWxpZFN0b3JlTmFtZShzdG9yZS5uYW1lKVxuXG4gICAgY29uc3QgaWQgPSBzdGF0ZS5zZXR0aW5ncy5maW5kKGl0ZW0gPT4gaXRlbS5uYW1lID09PSBzdG9yZS5uYW1lKT8uaWRcblxuICAgIGlmKGlkKSB7XG5cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gc3RhdGUuc2V0dGluZ3MuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pZCAhPT0gaWQpXG4gICAgICBjb25zdCBsb2NhbERhdGEgPSBzdGF0ZS5sb2NhbFN0b3Jlcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlkICE9PSBpZClcbiAgICAgIGNvbnN0IHNlc3Npb25EYXRhID0gc3RhdGUuc2Vzc2lvblN0b3Jlcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlkICE9PSBpZClcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGxvY2FsU3RvcmVzOiBbLi4ubG9jYWxEYXRhXSxcbiAgICAgICAgc2Vzc2lvblN0b3JlczogWy4uLnNlc3Npb25EYXRhXSxcbiAgICAgICAgc2V0dGluZ3M6IFsuLi5zZXR0aW5nc10sXG4gICAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oYE5vIHN1Y2ggU3RvcmU6ICR7c3RvcmUubmFtZX1gKVxuICAgICAgcmV0dXJuIHN0YXRlXG4gICAgfVxuXG4gIH0pXG5cbiAgcmVzZXRTdG9yZSgpIHtcblxuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgbG9jYWxTdG9yZXM6IFtdLFxuICAgICAgc2Vzc2lvblN0b3JlczogW10sXG4gICAgICBzZXR0aW5nczogW10sXG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlU3RhdGUobmV3U3RhdGUpXG4gICAgICB0aGlzLnBlcnNpc3RTdGF0ZShuZXdTdGF0ZSlcblxuICB9XG5cbiAgcHJpdmF0ZSBwZXJzaXN0U3RhdGUoc3RhdGU6IFN0YXRlfG51bGwpIHtcblxuICAgIGlmKCFzdGF0ZSkgcmV0dXJuXG5cbiAgICBjb25zdCBzdHJMb2NhbCA9IEpTT04uc3RyaW5naWZ5KHN0YXRlLmxvY2FsU3RvcmVzKVxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZU5hbWUsIHN0ckxvY2FsKVxuXG4gICAgY29uc3Qgc3RyU2Vzc2lvbiA9IEpTT04uc3RyaW5naWZ5KHN0YXRlLnNlc3Npb25TdG9yZXMpXG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VOYW1lLCBzdHJTZXNzaW9uKVxuXG4gICAgY29uc3Qgc2V0dGluZ3NTdHIgPSB0aGlzLmVuY3J5cHRpb24uZW5jcnlwdChzdGF0ZS5zZXR0aW5ncywgdGhpcy5hcHAuYXBwSUQpXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlU2V0dGluZ3NOYW1lLCBzZXR0aW5nc1N0ciB8fCAnJylcblxuICB9XG5cbiAgcHJpdmF0ZSBleHBpcmVkKHN0YXRlOiBTdGF0ZXxudWxsKSB7XG5cbiAgICBpZighc3RhdGUpIHJldHVybiBbXVxuICAgIHJldHVybiBzdGF0ZS5zZXR0aW5ncz8uZmlsdGVyKGl0ZW0gPT4gKGl0ZW0ub3B0aW9ucz8uZXhwaXJlcyB8fCAwKSA+IDAgJiYgdGhpcy51dGlscy5oYXNFeHBpcmVkKGl0ZW0ub3B0aW9ucz8uZXhwaXJlcyB8fCAwKSlcblxuICB9XG5cbiAgcHJpdmF0ZSByZXRyaWV2ZVN0YXRlKCkge1xuXG4gICAgY29uc3Qgc3RyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlU2V0dGluZ3NOYW1lKVxuXG4gICAgY29uc3QgbG9jYWxTdHIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VOYW1lKVxuICAgIGNvbnN0IHNlc3Npb25TdHIgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZU5hbWUpXG5cbiAgICBjb25zdCBsb2NhbERhdGE6IFN0b3JhZ2VEYXRhW10gPSAobG9jYWxTdHIpID8gSlNPTi5wYXJzZShsb2NhbFN0cikgOiBudWxsXG4gICAgY29uc3Qgc2Vzc2lvbkRhdGE6IFN0b3JhZ2VEYXRhW10gPSAoc2Vzc2lvblN0cikgPyBKU09OLnBhcnNlKHNlc3Npb25TdHIpIDogbnVsbFxuXG4gICAgY29uc3QgZGVjcnlwdGVkU3RyID0gc3RyID8gdGhpcy5lbmNyeXB0aW9uLmRlY3J5cHQoc3RyLCB0aGlzLmFwcC5hcHBJRCkgOiBudWxsXG4gICAgY29uc3Qgc2V0dGluZ3M6IFN0b3JhZ2VPcHRpb25bXSA9IChkZWNyeXB0ZWRTdHIgJiYgZGVjcnlwdGVkU3RyICE9PSBudWxsKSA/IEpTT04ucGFyc2UoZGVjcnlwdGVkU3RyKSA6IFtdXG5cbiAgICBzZXR0aW5ncy5mb3JFYWNoKHN0b3JlID0+IHtcblxuICAgICAgY29uc3QgZXhwaXJlZCA9ICAoc3RvcmUub3B0aW9ucz8uZXhwaXJlcyB8fCAwKSA+IDAgJiYgdGhpcy51dGlscy5oYXNFeHBpcmVkKHN0b3JlLm9wdGlvbnM/LmV4cGlyZXMgfHwgMClcblxuICAgICAgaWYoIWV4cGlyZWQpIHtcblxuICAgICAgICBjb25zdCBoYXNTdG9yYWdlID0gdGhpcy5oYXNHbG9iYWxTdG9yYWdlKHN0b3JlLm9wdGlvbnM/LnN0b3JhZ2UsIHN0b3JlLmlkIHx8ICcnKVxuXG4gICAgICAgIGlmKCFoYXNTdG9yYWdlKSB7XG4gICAgICAgICAgdGhpcy5jcmVhdGVTdG9yZSh7IGlkOiBzdG9yZS5pZCwgbmFtZTogc3RvcmUubmFtZSwgZGF0YTogW10sIG9wdGlvbnM6IFNldHRpbmdPcHRpb25zLmFkYXB0KHN0b3JlLm9wdGlvbnMpfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdG9yZURhdGEgPSAoc3RvcmUub3B0aW9ucz8uc3RvcmFnZSA9PT0gU3RvcmFnZVR5cGUuR0xPQkFMKSA/IGxvY2FsRGF0YS5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gc3RvcmUuaWQpIDogc2Vzc2lvbkRhdGEuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IHN0b3JlLmlkKVxuICAgICAgICAgIHRoaXMuc2V0U3RvcmUoeyBpZDogc3RvcmUuaWQgfHwgJycsIG5hbWU6IHN0b3JlLm5hbWUsIGRhdGE6IHN0b3JlRGF0YT8uZGF0YSwgb3B0aW9uczogU2V0dGluZ09wdGlvbnMuYWRhcHQoc3RvcmUub3B0aW9ucykgfSlcbiAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICB9KVxuXG4gICAgdGhpcy5zdGF0ZVJldHJpZXZlZCA9IHRydWVcblxuICB9XG5cbiAgcHJpdmF0ZSBpc09iamVjdE9yQXJyYXkgPSAob2JqOiBhbnkpID0+IHtcbiAgICB0cnkge1xuXG4gICAgICAvL29iaiA9IChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpID8gSlNPTi5wYXJzZShvYmopIDogb2JqXG4gICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShvYmopXG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gIH1cblxuICBwcml2YXRlIGlzU3RyaW5nIChvYmo6IGFueSkge1xuICAgIHJldHVybiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IFN0cmluZ10nKVxuICB9XG5cbiAgcHJpdmF0ZSBmaXhBbmRQYXJzZUpTT04oanNvblN0cmluZzogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCBmaXhlZFN0cmluZyA9IGpzb25TdHJpbmdcbiAgICAgIC5yZXBsYWNlKC8nL2csICdcIicpXG4gICAgICAucmVwbGFjZSgvKFt7LF1cXHMqKShcXHcrKVxccyo6L2csICckMVwiJDJcIjonKVxuICAgICAgLnJlcGxhY2UoLyxcXHMqKFxcfXxcXF0pL2csICckMScpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGZpeGVkU3RyaW5nKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSBKU09OOiAnICsgZXJyb3IubWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZFN0b3JlTmFtZShzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBzdHJcbiAgICAgIC50b0xvd2VyQ2FzZSgpIC8vIENvbnZlcnQgdG8gbG93ZXJjYXNlXG4gICAgICAucmVwbGFjZSgvXFxzKy9nLCAnXycpIC8vIFJlcGxhY2Ugc3BhY2VzIHdpdGggdW5kZXJzY29yZXNcbiAgICAgIC5yZXBsYWNlKC9bXiAtfl0vZywgJycpOyAvLyBSZW1vdmUgbm9uLUFTQ0lJIGNoYXJhY3RlcnNcbiAgfVxuXG4gIHByaXZhdGUgaGFzR2xvYmFsU3RvcmFnZSh0eXBlOiBTdG9yYWdlVHlwZSA9IFN0b3JhZ2VUeXBlLkdMT0JBTCwgaWQ6IHN0cmluZykge1xuXG4gICAgY29uc3Qgc3RyRGF0YTogU3RvcmFnZU9wdGlvbltdID0gW11cblxuICAgIGlmKHR5cGUgPT09IFN0b3JhZ2VUeXBlLkdMT0JBTCkge1xuICAgICAgY29uc3Qgc3RyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlTmFtZSlcbiAgICAgIHN0ckRhdGEucHVzaCguLi4oc3RyID8gSlNPTi5wYXJzZShzdHIpIDogW10pKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdHIgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZU5hbWUpXG4gICAgICBzdHJEYXRhLnB1c2goLi4uKHN0ciA/IEpTT04ucGFyc2Uoc3RyKSA6IFtdKSlcbiAgICB9XG5cbiAgICBjb25zdCBmb3VuZCA9IHN0ckRhdGEuZmluZChzdG9yZSA9PiBzdG9yZS5pZCA9PT0gaWQpXG4gICAgcmV0dXJuIChmb3VuZCkgPyB0cnVlIDogZmFsc2VcblxuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5wZXJzaXN0ZW5jZSQudW5zdWJzY3JpYmUoKVxuICB9XG5cbn1cbiJdfQ==
@@ -0,0 +1,13 @@
1
+ import { StorageOption } from "./storage-option.model";
2
+ export class GlobalStoreOptions {
3
+ constructor(encryption = false, expiresIn, expires, stores = []) {
4
+ this.encryption = encryption;
5
+ this.expiresIn = expiresIn;
6
+ this.expires = expires;
7
+ this.stores = stores;
8
+ }
9
+ static adapt(item) {
10
+ return new GlobalStoreOptions((item?.encryption) ? item.encryption : false, (item?.expiresIn) ? item.expiresIn : '', (item?.expires) ? item.expires : 0, (item?.stores) ? item.stores.map((item) => StorageOption.adapt(item)) : []);
11
+ }
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLXN0b3JlLW9wdGlvbnMubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2UtbWFuYWdlci1zZXJ2aWNlL21vZGVscy9nbG9iYWwtc3RvcmUtb3B0aW9ucy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFTdEQsTUFBTSxPQUFPLGtCQUFrQjtJQUU3QixZQUNTLGFBQWEsS0FBSyxFQUNsQixTQUFrQixFQUNsQixPQUFnQixFQUNoQixTQUErQixFQUFFO1FBSGpDLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDbEIsY0FBUyxHQUFULFNBQVMsQ0FBUztRQUNsQixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLFdBQU0sR0FBTixNQUFNLENBQTJCO0lBQ3ZDLENBQUM7SUFFSixNQUFNLENBQUMsS0FBSyxDQUFDLElBQVU7UUFFckIsT0FBTyxJQUFJLGtCQUFrQixDQUMzQixDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUM1QyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUN2QyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNsQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUNoRixDQUFBO0lBRUgsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RvcmFnZU9wdGlvbiB9IGZyb20gXCIuL3N0b3JhZ2Utb3B0aW9uLm1vZGVsXCJcblxuZXhwb3J0IGludGVyZmFjZSBHbG9iYWxTdG9yZU9wdGlvbnNJbnRlcmZhY2Uge1xuICBlbmNyeXB0aW9uPzogYm9vbGVhblxuICBleHBpcmVzSW4/OiBzdHJpbmdcbiAgZXhwaXJlcz86IG51bWJlclxuICBzdG9yZXM6IFN0b3JhZ2VPcHRpb25bXXxudWxsXG59XG5cbmV4cG9ydCBjbGFzcyBHbG9iYWxTdG9yZU9wdGlvbnMgaW1wbGVtZW50cyBHbG9iYWxTdG9yZU9wdGlvbnNJbnRlcmZhY2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBlbmNyeXB0aW9uID0gZmFsc2UsXG4gICAgcHVibGljIGV4cGlyZXNJbj86IHN0cmluZyxcbiAgICBwdWJsaWMgZXhwaXJlcz86IG51bWJlcixcbiAgICBwdWJsaWMgc3RvcmVzOiBTdG9yYWdlT3B0aW9uW118bnVsbCA9IFtdLFxuICApIHt9XG5cbiAgc3RhdGljIGFkYXB0KGl0ZW0/OiBhbnkpOiBHbG9iYWxTdG9yZU9wdGlvbnMge1xuXG4gICAgcmV0dXJuIG5ldyBHbG9iYWxTdG9yZU9wdGlvbnMoXG4gICAgICAoaXRlbT8uZW5jcnlwdGlvbikgPyBpdGVtLmVuY3J5cHRpb24gOiBmYWxzZSxcbiAgICAgIChpdGVtPy5leHBpcmVzSW4pID8gaXRlbS5leHBpcmVzSW4gOiAnJyxcbiAgICAgIChpdGVtPy5leHBpcmVzKSA/IGl0ZW0uZXhwaXJlcyA6IDAsXG4gICAgICAoaXRlbT8uc3RvcmVzKSA/IGl0ZW0uc3RvcmVzLm1hcCgoaXRlbTogYW55KSA9PiBTdG9yYWdlT3B0aW9uLmFkYXB0KGl0ZW0pKSA6IFtdXG4gICAgKVxuXG4gIH1cblxufVxuIl19
@@ -0,0 +1,7 @@
1
+ export * from "./global-store-options.model";
2
+ export * from "./setting-options.model";
3
+ export * from "./storage-data.model";
4
+ export * from "./storage-option-settings.model";
5
+ export * from "./storage-option.model";
6
+ export * from "./storage-type.enum";
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2UtbWFuYWdlci1zZXJ2aWNlL21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDhCQUE4QixDQUFBO0FBQzVDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsd0JBQXdCLENBQUM7QUFFdkMsY0FBYyxxQkFBcUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2dsb2JhbC1zdG9yZS1vcHRpb25zLm1vZGVsXCJcbmV4cG9ydCAqIGZyb20gXCIuL3NldHRpbmctb3B0aW9ucy5tb2RlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3RvcmFnZS1kYXRhLm1vZGVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdG9yYWdlLW9wdGlvbi1zZXR0aW5ncy5tb2RlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3RvcmFnZS1vcHRpb24ubW9kZWxcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vc3RvcmFnZS10eXBlLmVudW1cIjtcbiJdfQ==
@@ -0,0 +1,13 @@
1
+ import { StorageType } from "./storage-type.enum";
2
+ export class SettingOptions {
3
+ constructor(storage = StorageType.GLOBAL, expires, expiresIn, encrypted) {
4
+ this.storage = storage;
5
+ this.expires = expires;
6
+ this.expiresIn = expiresIn;
7
+ this.encrypted = encrypted;
8
+ }
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);
11
+ }
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy1vcHRpb25zLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlLW1hbmFnZXItc2VydmljZS9tb2RlbHMvc2V0dGluZy1vcHRpb25zLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQVNqRCxNQUFNLE9BQU8sY0FBYztJQUV6QixZQUNTLFVBQVUsV0FBVyxDQUFDLE1BQU0sRUFDNUIsT0FBZ0IsRUFDaEIsU0FBa0IsRUFDbEIsU0FBbUI7UUFIbkIsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUFDNUIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixjQUFTLEdBQVQsU0FBUyxDQUFTO1FBQ2xCLGNBQVMsR0FBVCxTQUFTLENBQVU7SUFDekIsQ0FBQztJQUVKLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBVTtRQUVyQixPQUFPLElBQUksY0FBYyxDQUN2QixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFDbkQsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDbEMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFDdkMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FDNUMsQ0FBQTtJQUVILENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0b3JhZ2VUeXBlIH0gZnJvbSBcIi4vc3RvcmFnZS10eXBlLmVudW1cIlxuXG5leHBvcnQgaW50ZXJmYWNlIFNldHRpbmdPcHRpb25zSW50ZXJmYWNlIHtcbiAgc3RvcmFnZT86IFN0b3JhZ2VUeXBlXG4gIGV4cGlyZXM/OiBudW1iZXJcbiAgZXhwaXJlc0luPzogc3RyaW5nXG4gIGVuY3J5cHRlZD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNsYXNzIFNldHRpbmdPcHRpb25zIGltcGxlbWVudHMgU2V0dGluZ09wdGlvbnNJbnRlcmZhY2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBzdG9yYWdlID0gU3RvcmFnZVR5cGUuR0xPQkFMLFxuICAgIHB1YmxpYyBleHBpcmVzPzogbnVtYmVyLFxuICAgIHB1YmxpYyBleHBpcmVzSW4/OiBzdHJpbmcsXG4gICAgcHVibGljIGVuY3J5cHRlZD86IGJvb2xlYW4sXG4gICkge31cblxuICBzdGF0aWMgYWRhcHQoaXRlbT86IGFueSk6IFNldHRpbmdPcHRpb25zIHtcblxuICAgIHJldHVybiBuZXcgU2V0dGluZ09wdGlvbnMoXG4gICAgICAoaXRlbT8uc3RvcmFnZSkgPyBpdGVtLnN0b3JhZ2UgOiBTdG9yYWdlVHlwZS5HTE9CQUwsXG4gICAgICAoaXRlbT8uZXhwaXJlcykgPyBpdGVtLmV4cGlyZXMgOiAwLFxuICAgICAgKGl0ZW0/LmV4cGlyZXNJbikgPyBpdGVtLmV4cGlyZXNJbiA6ICcnLFxuICAgICAgKGl0ZW0/LmVuY3J5cHRlZCkgPyBpdGVtPy5lbmNyeXB0ZWQgOiBmYWxzZSxcbiAgICApXG5cbiAgfVxuXG59XG4iXX0=
@@ -0,0 +1,10 @@
1
+ export class StorageData {
2
+ constructor(id, data) {
3
+ this.id = id;
4
+ this.data = data;
5
+ }
6
+ static adapt(item) {
7
+ return new StorageData((item?.id) ? item.id : crypto.randomUUID(), (item?.data) ? item.data : null);
8
+ }
9
+ }
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS1kYXRhLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlLW1hbmFnZXItc2VydmljZS9tb2RlbHMvc3RvcmFnZS1kYXRhLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE1BQU0sT0FBTyxXQUFXO0lBRXRCLFlBQ1MsRUFBVyxFQUNYLElBQVU7UUFEVixPQUFFLEdBQUYsRUFBRSxDQUFTO1FBQ1gsU0FBSSxHQUFKLElBQUksQ0FBTTtJQUNoQixDQUFDO0lBRUosTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFVO1FBRXJCLE9BQU8sSUFBSSxXQUFXLENBQ3BCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQzFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2hDLENBQUE7SUFFSCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFN0b3JhZ2VEYXRhSW50ZXJmYWNlIHtcbiAgaWQ/OiBzdHJpbmdcbiAgZGF0YT86IGFueVxufVxuXG5leHBvcnQgY2xhc3MgU3RvcmFnZURhdGEgaW1wbGVtZW50cyBTdG9yYWdlRGF0YUludGVyZmFjZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGlkPzogc3RyaW5nLFxuICAgIHB1YmxpYyBkYXRhPzogYW55LFxuICApIHt9XG5cbiAgc3RhdGljIGFkYXB0KGl0ZW0/OiBhbnkpOiBTdG9yYWdlRGF0YSB7XG5cbiAgICByZXR1cm4gbmV3IFN0b3JhZ2VEYXRhKFxuICAgICAgKGl0ZW0/LmlkKSA/IGl0ZW0uaWQgOiBjcnlwdG8ucmFuZG9tVVVJRCgpLFxuICAgICAgKGl0ZW0/LmRhdGEpID8gaXRlbS5kYXRhIDogbnVsbFxuICAgIClcblxuICB9XG5cbn1cblxuXG4iXX0=
@@ -0,0 +1,13 @@
1
+ import { StorageType } from "./storage-type.enum";
2
+ export class StorageOptionSettings {
3
+ constructor(storage = StorageType.GLOBAL, expires, expiresIn, encrypted) {
4
+ this.storage = storage;
5
+ this.expires = expires;
6
+ this.expiresIn = expiresIn;
7
+ this.encrypted = encrypted;
8
+ }
9
+ static adapt(item) {
10
+ return new StorageOptionSettings((item?.storage) ? item.storage : StorageType.GLOBAL, (item?.expires) ? item.expires : 0, (item?.expiresIn) ? item.expiresIn : '', (item?.encrypted) ? item.encrypted : false);
11
+ }
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS1vcHRpb24tc2V0dGluZ3MubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2UtbWFuYWdlci1zZXJ2aWNlL21vZGVscy9zdG9yYWdlLW9wdGlvbi1zZXR0aW5ncy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFTakQsTUFBTSxPQUFPLHFCQUFxQjtJQUVoQyxZQUNTLFVBQVUsV0FBVyxDQUFDLE1BQU0sRUFDNUIsT0FBZ0IsRUFDaEIsU0FBa0IsRUFDbEIsU0FBbUI7UUFIbkIsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUFDNUIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixjQUFTLEdBQVQsU0FBUyxDQUFTO1FBQ2xCLGNBQVMsR0FBVCxTQUFTLENBQVU7SUFDekIsQ0FBQztJQUVKLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBVTtRQUVyQixPQUFPLElBQUkscUJBQXFCLENBQzlCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUNuRCxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNsQyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUN2QyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUMzQyxDQUFBO0lBRUgsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RvcmFnZVR5cGUgfSBmcm9tIFwiLi9zdG9yYWdlLXR5cGUuZW51bVwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmFnZU9wdGlvblNldHRpbmdzSW50ZXJmYWNlIHtcbiAgc3RvcmFnZT86IFN0b3JhZ2VUeXBlXG4gIGV4cGlyZXM/OiBudW1iZXJcbiAgZXhwaXJlc0luPzogc3RyaW5nXG4gIGVuY3J5cHRlZD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNsYXNzIFN0b3JhZ2VPcHRpb25TZXR0aW5ncyBpbXBsZW1lbnRzIFN0b3JhZ2VPcHRpb25TZXR0aW5nc0ludGVyZmFjZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHN0b3JhZ2UgPSBTdG9yYWdlVHlwZS5HTE9CQUwsXG4gICAgcHVibGljIGV4cGlyZXM/OiBudW1iZXIsXG4gICAgcHVibGljIGV4cGlyZXNJbj86IHN0cmluZyxcbiAgICBwdWJsaWMgZW5jcnlwdGVkPzogYm9vbGVhbixcbiAgKSB7fVxuXG4gIHN0YXRpYyBhZGFwdChpdGVtPzogYW55KTogU3RvcmFnZU9wdGlvblNldHRpbmdzIHtcblxuICAgIHJldHVybiBuZXcgU3RvcmFnZU9wdGlvblNldHRpbmdzKFxuICAgICAgKGl0ZW0/LnN0b3JhZ2UpID8gaXRlbS5zdG9yYWdlIDogU3RvcmFnZVR5cGUuR0xPQkFMLFxuICAgICAgKGl0ZW0/LmV4cGlyZXMpID8gaXRlbS5leHBpcmVzIDogMCxcbiAgICAgIChpdGVtPy5leHBpcmVzSW4pID8gaXRlbS5leHBpcmVzSW4gOiAnJyxcbiAgICAgIChpdGVtPy5lbmNyeXB0ZWQpID8gaXRlbS5lbmNyeXB0ZWQgOiBmYWxzZSxcbiAgICApXG5cbiAgfVxuXG59XG4iXX0=
@@ -0,0 +1,12 @@
1
+ import { StorageOptionSettings } from "./storage-option-settings.model";
2
+ export class StorageOption {
3
+ constructor(id, name = 'untitled', options) {
4
+ this.id = id;
5
+ this.name = name;
6
+ this.options = options;
7
+ }
8
+ static adapt(item) {
9
+ return new StorageOption((item?.id) ? item.id : crypto.randomUUID(), item?.name, (item?.options) ? StorageOptionSettings.adapt(item.options) : StorageOptionSettings.adapt());
10
+ }
11
+ }
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS1vcHRpb24ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2UtbWFuYWdlci1zZXJ2aWNlL21vZGVscy9zdG9yYWdlLW9wdGlvbi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQVF2RSxNQUFNLE9BQU8sYUFBYTtJQUV4QixZQUNTLEVBQVcsRUFDWCxPQUFPLFVBQVUsRUFDakIsT0FBK0I7UUFGL0IsT0FBRSxHQUFGLEVBQUUsQ0FBUztRQUNYLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsWUFBTyxHQUFQLE9BQU8sQ0FBd0I7SUFDckMsQ0FBQztJQUVKLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBVTtRQUVyQixPQUFPLElBQUksYUFBYSxDQUN0QixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUMxQyxJQUFJLEVBQUUsSUFBSSxFQUNWLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsQ0FDNUYsQ0FBQTtJQUVILENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0b3JhZ2VPcHRpb25TZXR0aW5ncyB9IGZyb20gXCIuL3N0b3JhZ2Utb3B0aW9uLXNldHRpbmdzLm1vZGVsXCJcblxuZXhwb3J0IGludGVyZmFjZSBTdG9yYWdlT3B0aW9uSW50ZXJmYWNlIHtcbiAgaWQ/OiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIG9wdGlvbnM/OiBTdG9yYWdlT3B0aW9uU2V0dGluZ3Ncbn1cblxuZXhwb3J0IGNsYXNzIFN0b3JhZ2VPcHRpb24gaW1wbGVtZW50cyBTdG9yYWdlT3B0aW9uSW50ZXJmYWNlIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgaWQ/OiBzdHJpbmcsXG4gICAgcHVibGljIG5hbWUgPSAndW50aXRsZWQnLFxuICAgIHB1YmxpYyBvcHRpb25zPzogU3RvcmFnZU9wdGlvblNldHRpbmdzLFxuICApIHt9XG5cbiAgc3RhdGljIGFkYXB0KGl0ZW0/OiBhbnkpOiBTdG9yYWdlT3B0aW9uIHtcblxuICAgIHJldHVybiBuZXcgU3RvcmFnZU9wdGlvbihcbiAgICAgIChpdGVtPy5pZCkgPyBpdGVtLmlkIDogY3J5cHRvLnJhbmRvbVVVSUQoKSxcbiAgICAgIGl0ZW0/Lm5hbWUsXG4gICAgICAoaXRlbT8ub3B0aW9ucykgPyBTdG9yYWdlT3B0aW9uU2V0dGluZ3MuYWRhcHQoaXRlbS5vcHRpb25zKSA6IFN0b3JhZ2VPcHRpb25TZXR0aW5ncy5hZGFwdCgpLFxuICAgIClcblxuICB9XG5cbn1cblxuXG4iXX0=
@@ -0,0 +1,7 @@
1
+ export var StorageType;
2
+ (function (StorageType) {
3
+ StorageType[StorageType["GLOBAL"] = 0] = "GLOBAL";
4
+ StorageType[StorageType["SESSION"] = 1] = "SESSION";
5
+ StorageType[StorageType["DB"] = 2] = "DB";
6
+ })(StorageType || (StorageType = {}));
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS10eXBlLmVudW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2UtbWFuYWdlci1zZXJ2aWNlL21vZGVscy9zdG9yYWdlLXR5cGUuZW51bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQU4sSUFBWSxXQUlYO0FBSkQsV0FBWSxXQUFXO0lBQ3JCLGlEQUFNLENBQUE7SUFDTixtREFBTyxDQUFBO0lBQ1AseUNBQUUsQ0FBQTtBQUNKLENBQUMsRUFKVyxXQUFXLEtBQVgsV0FBVyxRQUl0QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIFN0b3JhZ2VUeXBlIHtcbiAgR0xPQkFMLFxuICBTRVNTSU9OLFxuICBEQlxufVxuIl19