http-request-manager 18.7.21 → 18.7.27

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 (198) hide show
  1. package/fesm2022/http-request-manager.mjs +7633 -0
  2. package/fesm2022/http-request-manager.mjs.map +1 -0
  3. package/http-request-manager-18.7.27.tgz +0 -0
  4. package/package.json +16 -5
  5. package/types/http-request-manager.d.ts +2277 -0
  6. package/ARCHITECTURE.md +0 -483
  7. package/DATABASE_README.md +0 -1176
  8. package/HTTP_MANAGER_README.md +0 -579
  9. package/HTTP_SINGNALS_MANAGER_README.md +0 -654
  10. package/HTTP_STATE_MANAGER_README.md +0 -948
  11. package/INTERCEPTOR_README.md +0 -549
  12. package/LOCAL_STORAGE_README.md +0 -1056
  13. package/STORE_STATE_MANAGER_README.md +0 -1322
  14. package/UTILS_README.md +0 -1186
  15. package/WS_MANAGER_README.md +0 -613
  16. package/ng-package.json +0 -8
  17. package/src/lib/http-request-manager.module.ts +0 -132
  18. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.html +0 -65
  19. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.scss +0 -0
  20. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.ts +0 -224
  21. package/src/lib/http-request-services-demo/http-request-services-demo.component.html +0 -114
  22. package/src/lib/http-request-services-demo/http-request-services-demo.component.scss +0 -6
  23. package/src/lib/http-request-services-demo/http-request-services-demo.component.ts +0 -52
  24. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.html +0 -195
  25. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.scss +0 -17
  26. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.ts +0 -206
  27. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.html +0 -200
  28. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.scss +0 -17
  29. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.ts +0 -212
  30. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.html +0 -53
  31. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.scss +0 -60
  32. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.ts +0 -72
  33. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.ts +0 -28
  34. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.html +0 -10
  35. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.scss +0 -29
  36. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.ts +0 -100
  37. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.ts +0 -22
  38. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.html +0 -8
  39. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.scss +0 -19
  40. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.ts +0 -26
  41. package/src/lib/http-request-services-demo/request-manager-demo/models/app-session.model.ts +0 -30
  42. package/src/lib/http-request-services-demo/request-manager-demo/models/app.model.ts +0 -19
  43. package/src/lib/http-request-services-demo/request-manager-demo/models/get-sample.model.ts +0 -25
  44. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.ts +0 -19
  45. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-details.ts +0 -24
  46. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.ts +0 -30
  47. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client.model.ts +0 -49
  48. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.ts +0 -33
  49. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.html +0 -392
  50. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.scss +0 -24
  51. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.ts +0 -461
  52. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.html +0 -393
  53. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.scss +0 -24
  54. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.ts +0 -421
  55. package/src/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.ts +0 -87
  56. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/services/state-data-request.service.ts +0 -120
  57. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.css +0 -0
  58. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.html +0 -3
  59. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.ts +0 -16
  60. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.css +0 -0
  61. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.html +0 -3
  62. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.ts +0 -16
  63. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.css +0 -31
  64. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.html +0 -72
  65. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.scss +0 -41
  66. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.spec.ts +0 -205
  67. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.ts +0 -77
  68. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.css +0 -11
  69. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.html +0 -96
  70. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.spec.ts +0 -31
  71. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.ts +0 -229
  72. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.css +0 -30
  73. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.html +0 -172
  74. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.spec.ts +0 -31
  75. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.ts +0 -239
  76. package/src/lib/http-request-services-demo/request-manager-ws-demo/models/oidc-client.model.ts +0 -31
  77. package/src/lib/http-request-services-demo/request-manager-ws-demo/models/user-data.model.ts +0 -32
  78. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.css +0 -0
  79. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.html +0 -84
  80. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.ts +0 -41
  81. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/index.ts +0 -3
  82. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/message-service-demo.service.ts +0 -83
  83. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/notification-service-demo.service.ts +0 -147
  84. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/state-service-demo.service.ts +0 -158
  85. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.html +0 -53
  86. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.scss +0 -60
  87. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.ts +0 -72
  88. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-download.module.ts +0 -28
  89. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.html +0 -10
  90. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.scss +0 -29
  91. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.ts +0 -100
  92. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/models/download-labels-model.ts +0 -22
  93. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.html +0 -8
  94. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.scss +0 -19
  95. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.ts +0 -26
  96. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app-session.model.ts +0 -30
  97. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app.model.ts +0 -19
  98. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/get-sample.model.ts +0 -25
  99. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-ai-prompt.ts +0 -19
  100. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-details.ts +0 -24
  101. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-info.ts +0 -30
  102. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client.model.ts +0 -49
  103. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-mapper-client-info.ts +0 -33
  104. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.html +0 -380
  105. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.scss +0 -24
  106. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.ts +0 -410
  107. package/src/lib/http-request-services-demo/store-state-manager-demo/models/settings.model.ts +0 -28
  108. package/src/lib/http-request-services-demo/store-state-manager-demo/services/settings-state.service.ts +0 -48
  109. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.css +0 -0
  110. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.html +0 -23
  111. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.ts +0 -36
  112. package/src/lib/index.ts +0 -3
  113. package/src/lib/interceptors/credentials.interceptor.ts +0 -16
  114. package/src/lib/interceptors/index.ts +0 -6
  115. package/src/lib/interceptors/models/error-settings.model.ts +0 -22
  116. package/src/lib/interceptors/models/index.ts +0 -2
  117. package/src/lib/interceptors/proxy-debugger.interceptor.ts +0 -46
  118. package/src/lib/interceptors/request-error.interceptor.ts +0 -65
  119. package/src/lib/interceptors/request-header.interceptor.ts +0 -53
  120. package/src/lib/models/config-http-options.model.ts +0 -42
  121. package/src/lib/models/config-local-storage-options.model.ts +0 -27
  122. package/src/lib/models/config-options.model.ts +0 -27
  123. package/src/lib/models/config-token.model.ts +0 -9
  124. package/src/lib/models/data-type.enum.ts +0 -5
  125. package/src/lib/models/database-storage.model.ts +0 -24
  126. package/src/lib/models/index.ts +0 -12
  127. package/src/lib/models/retry-options.model.ts +0 -22
  128. package/src/lib/services/database-manager-service/database.manager.service.ts +0 -262
  129. package/src/lib/services/database-manager-service/db.storage.service.ts +0 -207
  130. package/src/lib/services/database-manager-service/index.ts +0 -4
  131. package/src/lib/services/database-manager-service/models/index.ts +0 -2
  132. package/src/lib/services/database-manager-service/models/table-schema.ts +0 -33
  133. package/src/lib/services/index.ts +0 -12
  134. package/src/lib/services/local-storage-manager-service/index.ts +0 -4
  135. package/src/lib/services/local-storage-manager-service/local-storage-manager.service.spec.ts +0 -71
  136. package/src/lib/services/local-storage-manager-service/local-storage-manager.service.ts +0 -426
  137. package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.spec.ts +0 -67
  138. package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.ts +0 -345
  139. package/src/lib/services/local-storage-manager-service/models/global-store-options.model.ts +0 -30
  140. package/src/lib/services/local-storage-manager-service/models/index.ts +0 -6
  141. package/src/lib/services/local-storage-manager-service/models/setting-options.model.ts +0 -35
  142. package/src/lib/services/local-storage-manager-service/models/storage-data.model.ts +0 -24
  143. package/src/lib/services/local-storage-manager-service/models/storage-option.model.ts +0 -32
  144. package/src/lib/services/local-storage-manager-service/models/storage-type.enum.ts +0 -5
  145. package/src/lib/services/request-manager-services/README.md +0 -268
  146. package/src/lib/services/request-manager-services/http-manager-signals.service.ts +0 -246
  147. package/src/lib/services/request-manager-services/http-manager.service.spec.ts +0 -232
  148. package/src/lib/services/request-manager-services/http-manager.service.ts +0 -274
  149. package/src/lib/services/request-manager-services/index.ts +0 -8
  150. package/src/lib/services/request-manager-services/request-signals.service.ts +0 -214
  151. package/src/lib/services/request-manager-services/request.service.ts +0 -309
  152. package/src/lib/services/request-manager-services/rxjs-operators/countdown.ts +0 -17
  153. package/src/lib/services/request-manager-services/rxjs-operators/delay-retry.ts +0 -16
  154. package/src/lib/services/request-manager-services/rxjs-operators/index.ts +0 -4
  155. package/src/lib/services/request-manager-services/rxjs-operators/request-polling.ts +0 -35
  156. package/src/lib/services/request-manager-services/rxjs-operators/request-streaming.ts +0 -436
  157. package/src/lib/services/request-manager-state-service/http-manager-state.store.ts +0 -1321
  158. package/src/lib/services/request-manager-state-service/index.ts +0 -3
  159. package/src/lib/services/request-manager-state-service/models/api-request.model.ts +0 -61
  160. package/src/lib/services/request-manager-state-service/models/index.ts +0 -6
  161. package/src/lib/services/request-manager-state-service/models/request-options.model.ts +0 -22
  162. package/src/lib/services/request-manager-state-service/models/stream-type.enum.ts +0 -13
  163. package/src/lib/services/request-manager-state-service/models/ws-options.model.ts +0 -39
  164. package/src/lib/services/store-state-manager-service/index.ts +0 -3
  165. package/src/lib/services/store-state-manager-service/models/index.ts +0 -2
  166. package/src/lib/services/store-state-manager-service/models/state-storage-options.model.ts +0 -24
  167. package/src/lib/services/store-state-manager-service/store-state-manager.service.ts +0 -88
  168. package/src/lib/services/utils/app.service.spec.ts +0 -25
  169. package/src/lib/services/utils/app.service.ts +0 -21
  170. package/src/lib/services/utils/encryption/README.md +0 -79
  171. package/src/lib/services/utils/encryption/asymmetrical-encryption.service.ts +0 -282
  172. package/src/lib/services/utils/encryption/encryption-test.service.ts +0 -39
  173. package/src/lib/services/utils/encryption/index.ts +0 -5
  174. package/src/lib/services/utils/encryption/random.ts +0 -81
  175. package/src/lib/services/utils/encryption/symmetrical-encryption.service.ts +0 -93
  176. package/src/lib/services/utils/headers.service.spec.ts +0 -80
  177. package/src/lib/services/utils/headers.service.ts +0 -18
  178. package/src/lib/services/utils/index.ts +0 -7
  179. package/src/lib/services/utils/object-merger.service.spec.ts +0 -18
  180. package/src/lib/services/utils/object-merger.service.ts +0 -78
  181. package/src/lib/services/utils/path-query.service.spec.ts +0 -117
  182. package/src/lib/services/utils/path-query.service.ts +0 -69
  183. package/src/lib/services/utils/random-color.utils.ts +0 -83
  184. package/src/lib/services/utils/utils.service.spec.ts +0 -165
  185. package/src/lib/services/utils/utils.service.ts +0 -192
  186. package/src/lib/services/ws-manager-service/index.ts +0 -4
  187. package/src/lib/services/ws-manager-service/models/channel-info.model.ts +0 -24
  188. package/src/lib/services/ws-manager-service/models/channel-message-data.model.ts +0 -24
  189. package/src/lib/services/ws-manager-service/models/channel-message.model.ts +0 -24
  190. package/src/lib/services/ws-manager-service/models/communication-type.enum.ts +0 -5
  191. package/src/lib/services/ws-manager-service/models/index.ts +0 -5
  192. package/src/lib/services/ws-manager-service/models/ws-user.model.ts +0 -38
  193. package/src/lib/services/ws-manager-service/services/index.ts +0 -3
  194. package/src/lib/services/ws-manager-service/services/websocket.service.ts +0 -392
  195. package/src/public-api.ts +0 -14
  196. package/tsconfig.lib.json +0 -32
  197. package/tsconfig.lib.prod.json +0 -10
  198. package/tsconfig.spec.json +0 -14
@@ -1,345 +0,0 @@
1
- import { Inject, Injectable, Optional, WritableSignal, signal, computed, effect, inject } from '@angular/core';
2
-
3
- import { UtilsService } from '../utils/utils.service';
4
- import { SymmetricalEncryptionService } from '../utils/encryption/symmetrical-encryption.service';
5
-
6
- import { StorageOption, StorageType } from './models';
7
- import { SettingOptions } from './models/setting-options.model';
8
- import { StorageData } from './models/storage-data.model';
9
- import { EncryptionTestService } from '../utils/encryption/encryption-test.service';
10
- import { AppService } from '../utils/app.service';
11
- import { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';
12
- import { ConfigOptions } from '../request-manager-services';
13
- import { ObjectMergerService } from '../utils/object-merger.service';
14
-
15
- export interface State {
16
- localStores: StorageData[];
17
- sessionStores: StorageData[];
18
- settings: StorageOption[];
19
- }
20
-
21
- const initialState: State = {
22
- localStores: [],
23
- sessionStores: [],
24
- settings: [],
25
- };
26
-
27
- @Injectable({ providedIn: 'root' })
28
- export class LocalStorageSignalsManagerService {
29
-
30
- private state: WritableSignal<State> = signal(initialState);
31
-
32
- storageName = 'storage';
33
- storageSettingsName = 'global-storage';
34
- defaultOptions = SettingOptions.adapt();
35
-
36
- stateRetrieved = false;
37
- encrypted = false;
38
-
39
- app = inject(AppService);
40
- utils = inject(UtilsService);
41
- objectMergerService = inject(ObjectMergerService);
42
- encryption = inject(SymmetricalEncryptionService);
43
- encryptionTest = inject(EncryptionTestService);
44
-
45
- // --- SELECTORS ---
46
-
47
- readonly stores = computed(() => this.state().settings);
48
-
49
- readonly storeExists = (store: string) =>
50
- computed(() => !!this.state().settings.find(item => item.name === store));
51
-
52
- readonly store = (store: string) =>
53
- computed(() => {
54
- const data = this.state();
55
- const foundStore = data.settings.find(item => item.name === store);
56
- if (!foundStore) return null;
57
-
58
- const options = SettingOptions.adapt(foundStore.options);
59
- const found =
60
- options.storage === StorageType.GLOBAL
61
- ? data.localStores.find(item => item.id === foundStore.id)
62
- : data.sessionStores.find(item => item.id === foundStore.id);
63
-
64
- if (!found) {
65
- this.deleteStore({ name: store });
66
- return null;
67
- }
68
-
69
- if (!this.app?.appID) {
70
- console.warn('No App ID found - AppId not Provided');
71
- return null;
72
- }
73
-
74
- const storageData = options.encrypted
75
- ? this.encryption.decrypt(found.data, this.app.appID)
76
- : found.data;
77
-
78
- return this.isString(storageData) ? JSON.parse(storageData) : storageData;
79
- });
80
-
81
- readonly settings = computed(() => this.state().settings);
82
-
83
- readonly setting = (store: string) =>
84
- computed(() => this.state().settings.find(item => item.name === store) ?? null);
85
-
86
- constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {
87
- this.storageName = configOptions?.LocalStorageOptions?.storageName || this.storageName;
88
- this.storageSettingsName = configOptions?.LocalStorageOptions?.storageSettingsName || this.storageSettingsName;
89
- this.defaultOptions = configOptions?.LocalStorageOptions?.options || this.defaultOptions;
90
-
91
- this.retrieveState();
92
- // Auto-persist when state changes
93
- effect(() => {
94
- if (this.stateRetrieved) {
95
- this.persistState(this.state());
96
- }
97
- });
98
-
99
- // Expiration timer every 3s
100
- setInterval(() => {
101
- const state = this.state();
102
- const expired = this.expired(state);
103
- if (expired.length > 0) {
104
- const ids = expired.map(i => i.id);
105
- const updated: State = {
106
- ...state,
107
- localStores: state.localStores.filter(i => !ids.includes(i.id)),
108
- sessionStores: state.sessionStores.filter(i => !ids.includes(i.id)),
109
- settings: state.settings.filter(i => !ids.includes(i.id)),
110
- };
111
- this.state.set(updated);
112
- this.persistState(updated);
113
- }
114
- }, 3000);
115
- }
116
-
117
- // --- STATE MUTATORS ---
118
-
119
- setStore(store: { id: string; name: string; data: any; options: SettingOptions }) {
120
- this.state.update(state => {
121
- const settings = StorageOption.adapt(store);
122
- settings.options = this.objectMergerService.mergeStorageOptions(settings.options);
123
- store.name = this.validStoreName(store.name);
124
-
125
- const str = this.encryptionTest.isEncrypted(store.data) ? store.data : JSON.stringify(store.data);
126
- const dataStr =
127
- this.isObjectOrArray(str) && store.options.encrypted
128
- ? this.encryption.encrypt(str, this.app.appID)
129
- : store.data;
130
-
131
- const localData =
132
- dataStr && settings.options?.storage === StorageType.GLOBAL
133
- ? [{ data: dataStr, id: settings.id }]
134
- : [];
135
- const sessionData =
136
- dataStr && settings.options?.storage === StorageType.SESSION
137
- ? [{ data: dataStr, id: settings.id }]
138
- : [];
139
-
140
- return {
141
- ...state,
142
- localStores: [...state.localStores, ...localData],
143
- sessionStores: [...state.sessionStores, ...sessionData],
144
- settings: [...state.settings, settings],
145
- };
146
- });
147
- }
148
-
149
- createStore(store: { id?: string; name: string; data: any; options: SettingOptions }) {
150
- this.state.update(state => {
151
- const settings = StorageOption.adapt(store);
152
- settings.options = this.objectMergerService.mergeStorageOptions(settings.options);
153
-
154
- if (state.settings.some(item => item.name === store.name)) {
155
- return state;
156
- }
157
-
158
- if (!this.isObjectOrArray(store.data)) {
159
- console.warn('Data must be an Object or Array');
160
- return state;
161
- }
162
-
163
- const dataStr =
164
- store.options.encrypted ? this.encryption.encrypt(store.data, this.app.appID) : store.data;
165
-
166
- const localData =
167
- settings.options?.storage === StorageType.GLOBAL ? [{ data: dataStr, id: settings.id }] : [];
168
- const sessionData =
169
- settings.options?.storage === StorageType.SESSION ? [{ data: dataStr, id: settings.id }] : [];
170
-
171
- return {
172
- ...state,
173
- localStores: [...state.localStores, ...localData],
174
- sessionStores: [...state.sessionStores, ...sessionData],
175
- settings: [...state.settings, settings],
176
- };
177
- });
178
- }
179
-
180
- updateStore(store: { name: string; data: any }) {
181
- this.state.update(state => {
182
- const settings = state.settings.find(item => item.name === store.name);
183
- if (!settings) return state;
184
-
185
- const dataStr =
186
- settings.options?.encrypted
187
- ? this.encryption.encrypt(store.data, this.app.appID)
188
- : store.data;
189
-
190
- const localData =
191
- settings.options?.storage === StorageType.GLOBAL ? [{ data: dataStr, id: settings.id }] : [];
192
- const sessionData =
193
- settings.options?.storage === StorageType.SESSION ? [{ data: dataStr, id: settings.id }] : [];
194
-
195
- return {
196
- ...state,
197
- localStores: [...state.localStores.filter(i => i.id !== settings.id), ...localData],
198
- sessionStores: [...state.sessionStores.filter(i => i.id !== settings.id), ...sessionData],
199
- };
200
- });
201
- }
202
-
203
- deleteStore(store: { name: string }) {
204
- this.state.update(state => {
205
- const id = state.settings.find(item => item.name === store.name)?.id;
206
- if (!id) return state;
207
- return {
208
- ...state,
209
- localStores: state.localStores.filter(i => i.id !== id),
210
- sessionStores: state.sessionStores.filter(i => i.id !== id),
211
- settings: state.settings.filter(i => i.id !== id),
212
- };
213
- });
214
- }
215
-
216
- resetStore() {
217
- const cleared: State = { localStores: [], sessionStores: [], settings: [] };
218
- this.state.set(cleared);
219
- this.persistState(cleared);
220
- }
221
-
222
- // --- HELPERS ---
223
-
224
- private persistState(state: State) {
225
- localStorage.setItem(this.storageName, JSON.stringify(state.localStores));
226
- sessionStorage.setItem(this.storageName, JSON.stringify(state.sessionStores));
227
- const settingsStr = this.encryption.encrypt(state.settings, this.app.appID);
228
- localStorage.setItem(this.storageSettingsName, settingsStr || '');
229
- }
230
-
231
- private expired(state: State) {
232
- return state.settings.filter(
233
- s => (s.options?.expires || 0) > 0 && this.utils.hasExpired(s.options?.expires!)
234
- );
235
- }
236
-
237
- retrieveState() {
238
-
239
- const str = localStorage.getItem(this.storageSettingsName);
240
-
241
- const localStr = localStorage.getItem(this.storageName);
242
- const sessionStr = sessionStorage.getItem(this.storageName);
243
-
244
- const localData: StorageData[] = localStr ? JSON.parse(localStr) : [];
245
- const sessionData: StorageData[] = sessionStr ? JSON.parse(sessionStr) : [];
246
-
247
- const decryptedStr = str ? this.encryption.decrypt(str, this.app.appID) : null;
248
- const settings: StorageOption[] = decryptedStr ? JSON.parse(decryptedStr) : [];
249
-
250
- settings.forEach(store => {
251
-
252
-
253
- // normalize options so we compare numbers and compute expires correctly
254
- const options = SettingOptions.adapt(store.options);
255
-
256
- // if persisted data included expiresIn but not numeric expires, compute it now
257
- if ((!options.expires || options.expires === 0) && options.expiresIn) {
258
- try {
259
- const computed = this.utils.expires(options.expiresIn as string);
260
- options.expires = computed || 0;
261
- } catch {
262
- options.expires = 0;
263
- }
264
- }
265
-
266
- const expired = (options.expires || 0) > 0 && this.utils.hasExpired(options.expires || 0);
267
-
268
- if (!expired) {
269
-
270
- const hasStorage = this.hasGlobalStorage(options.storage, store.id || '');
271
-
272
- if (!hasStorage) {
273
- this.createStore({ id: store.id, name: store.name, data: [], options });
274
- } else {
275
- const storeData = (options.storage === StorageType.GLOBAL)
276
- ? localData.find(item => item.id === store.id)
277
- : sessionData.find(item => item.id === store.id);
278
- this.setStore({ id: store.id || '', name: store.name, data: storeData?.data, options });
279
- }
280
-
281
- }
282
-
283
- });
284
-
285
- this.stateRetrieved = true;
286
-
287
- // Ensure all stored settings have numeric expires computed and persisted
288
- try {
289
- const current = this.state();
290
- let changed = false;
291
- const normalizedSettings = current.settings.map(s => {
292
- const opts = SettingOptions.adapt(s.options);
293
- if ((!opts.expires || opts.expires === 0) && opts.expiresIn) {
294
- const computed = this.utils.expires(opts.expiresIn as string) || 0;
295
- if (computed && computed !== opts.expires) {
296
- opts.expires = computed;
297
- changed = true;
298
- }
299
- }
300
- return { ...s, options: opts } as StorageOption;
301
- });
302
-
303
- if (changed) {
304
- const updated: State = { ...current, settings: normalizedSettings };
305
- this.state.set(updated);
306
- this.persistState(updated);
307
- }
308
- } catch (e) {
309
- // swallow normalization errors to avoid breaking init
310
- }
311
-
312
- }
313
-
314
- private hasGlobalStorage(type: StorageType = StorageType.GLOBAL, id: string) {
315
- const strData: StorageData[] = [];
316
-
317
- if (type === StorageType.GLOBAL) {
318
- const str = localStorage.getItem(this.storageName);
319
- strData.push(...(str ? JSON.parse(str) : []));
320
- } else {
321
- const str = sessionStorage.getItem(this.storageName);
322
- strData.push(...(str ? JSON.parse(str) : []));
323
- }
324
-
325
- const found = strData.find(store => store.id === id);
326
- return !!found;
327
- }
328
-
329
- private isObjectOrArray(obj: any) {
330
- try {
331
- const parsed = typeof obj === 'object' ? obj : JSON.parse(obj);
332
- return typeof parsed === 'object' && parsed !== null;
333
- } catch {
334
- return false;
335
- }
336
- }
337
-
338
- private isString(obj: any) {
339
- return Object.prototype.toString.call(obj) === '[object String]';
340
- }
341
-
342
- private validStoreName(str: string) {
343
- return str.toLowerCase().replace(/\s+/g, '_').replace(/[^ -~]/g, '');
344
- }
345
- }
@@ -1,30 +0,0 @@
1
- import { StorageOption } from "./storage-option.model"
2
-
3
- export interface GlobalStoreOptionsInterface {
4
- encryption?: boolean
5
- expiresIn?: string
6
- expires?: number
7
- stores: StorageOption[]|null
8
- }
9
-
10
- export class GlobalStoreOptions implements GlobalStoreOptionsInterface {
11
-
12
- constructor(
13
- public encryption = false,
14
- public expiresIn?: string,
15
- public expires?: number,
16
- public stores: StorageOption[]|null = [],
17
- ) {}
18
-
19
- static adapt(item?: any): GlobalStoreOptions {
20
-
21
- return new GlobalStoreOptions(
22
- (item?.encryption) ? item.encryption : false,
23
- (item?.expiresIn) ? item.expiresIn : '',
24
- (item?.expires) ? item.expires : 0,
25
- (item?.stores) ? item.stores.map((item: any) => StorageOption.adapt(item)) : []
26
- )
27
-
28
- }
29
-
30
- }
@@ -1,6 +0,0 @@
1
- export * from "./global-store-options.model"
2
- export * from "./setting-options.model";
3
- export * from "./storage-data.model";
4
- export * from "./storage-option.model";
5
-
6
- export * from "./storage-type.enum";
@@ -1,35 +0,0 @@
1
- import { StorageType } from "./storage-type.enum"
2
-
3
- export interface SettingOptionsInterface {
4
- storage?: StorageType
5
- expires?: number
6
- expiresIn?: string
7
- encrypted?: boolean
8
- }
9
-
10
- export class SettingOptions implements SettingOptionsInterface {
11
-
12
- constructor(
13
- public storage?: StorageType,
14
- public expires?: number,
15
- public expiresIn?: string,
16
- public encrypted?: boolean,
17
- ) {}
18
-
19
- static adapt(item?: any): SettingOptions {
20
-
21
- const storage = (typeof item?.storage !== 'undefined' && item?.storage !== null) ? Number(item.storage) : StorageType.GLOBAL;
22
- const expires = (typeof item?.expires !== 'undefined' && item?.expires !== null) ? Number(item.expires) : 0;
23
- const expiresIn = (typeof item?.expiresIn !== 'undefined' && item?.expiresIn !== null) ? item.expiresIn : '';
24
- const encrypted = (typeof item?.encrypted !== 'undefined' && item?.encrypted !== null) ? Boolean(item.encrypted) : false;
25
-
26
- return new SettingOptions(
27
- storage,
28
- expires,
29
- expiresIn,
30
- encrypted,
31
- )
32
-
33
- }
34
-
35
- }
@@ -1,24 +0,0 @@
1
- export interface StorageDataInterface {
2
- id?: string
3
- data?: any
4
- }
5
-
6
- export class StorageData implements StorageDataInterface {
7
-
8
- constructor(
9
- public id?: string,
10
- public data?: any,
11
- ) {}
12
-
13
- static adapt(item?: any): StorageData {
14
-
15
- return new StorageData(
16
- (item?.id) ? item.id : crypto.randomUUID(),
17
- (item?.data) ? item.data : null
18
- )
19
-
20
- }
21
-
22
- }
23
-
24
-
@@ -1,32 +0,0 @@
1
- import { SettingOptions } from "./setting-options.model"
2
-
3
- export interface StorageOptionInterface {
4
- id?: string
5
- name: string
6
- data?: any
7
- options?: SettingOptions
8
- }
9
-
10
- export class StorageOption implements StorageOptionInterface {
11
-
12
- constructor(
13
- public id?: string,
14
- public name: string = 'untitled',
15
- public data?: any,
16
- public options?: SettingOptions,
17
- ) {}
18
-
19
- static adapt(item?: any): StorageOption {
20
-
21
- return new StorageOption(
22
- (item?.id) ? item.id : crypto.randomUUID(),
23
- (item?.name) ? item.name.toLowerCase() : 'untitled',
24
- item?.data,
25
- (item?.options) ? SettingOptions.adapt(item.options) : SettingOptions.adapt(),
26
- )
27
-
28
- }
29
-
30
- }
31
-
32
-
@@ -1,5 +0,0 @@
1
- export enum StorageType {
2
- GLOBAL,
3
- SESSION,
4
- DB
5
- }