http-request-manager 15.0.26 → 18.0.2

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 (232) hide show
  1. package/esm2022/http-request-manager.mjs +5 -0
  2. package/esm2022/lib/http-request-manager.module.mjs +146 -0
  3. package/esm2022/lib/http-request-services-demo/database-data-demo/database-data-demo.component.mjs +71 -0
  4. package/esm2022/lib/http-request-services-demo/http-request-services-demo.component.mjs +41 -0
  5. package/esm2022/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.mjs +173 -0
  6. package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.mjs +80 -0
  7. package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.mjs +42 -0
  8. package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.mjs +88 -0
  9. package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.mjs +11 -0
  10. package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.mjs +29 -0
  11. package/esm2022/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.mjs +9 -0
  12. package/esm2022/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.mjs +12 -0
  13. package/esm2022/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.mjs +14 -0
  14. package/esm2022/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.mjs +315 -0
  15. package/esm2022/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.mjs +270 -0
  16. package/esm2022/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.mjs +67 -0
  17. package/esm2022/lib/index.mjs +4 -0
  18. package/esm2022/lib/interceptors/credentials.interceptor.mjs +14 -0
  19. package/esm2022/lib/interceptors/index.mjs +5 -0
  20. package/esm2022/lib/interceptors/models/error-settings.model.mjs +10 -0
  21. package/esm2022/lib/interceptors/proxy-debugger.interceptor.mjs +47 -0
  22. package/esm2022/lib/interceptors/request-error.interceptor.mjs +49 -0
  23. package/esm2022/lib/interceptors/request-header.interceptor.mjs +41 -0
  24. package/esm2022/lib/models/config-http-options.model.mjs +18 -0
  25. package/esm2022/lib/models/config-local-storage-options.model.mjs +12 -0
  26. package/esm2022/lib/models/config-options.model.mjs +12 -0
  27. package/esm2022/lib/models/config-token.model.mjs +8 -0
  28. package/esm2022/lib/models/data-type.enum.mjs +7 -0
  29. package/esm2022/lib/models/database-storage.model.mjs +10 -0
  30. package/esm2022/lib/models/index.mjs +7 -0
  31. package/esm2022/lib/models/retry-options.model.mjs +10 -0
  32. package/esm2022/lib/services/database-manager-services/database.manager.service.mjs +119 -0
  33. package/esm2022/lib/services/database-manager-services/db.storage.service.mjs +143 -0
  34. package/esm2022/lib/services/database-manager-services/index.mjs +4 -0
  35. package/esm2022/lib/services/database-manager-services/models/table-schema.mjs +20 -0
  36. package/esm2022/lib/services/index.mjs +6 -0
  37. package/esm2022/lib/services/local-storage-manager-service/index.mjs +3 -0
  38. package/esm2022/lib/services/local-storage-manager-service/local-storage-manager.service.mjs +302 -0
  39. package/esm2022/lib/services/local-storage-manager-service/models/global-store-options.model.mjs +13 -0
  40. package/esm2022/lib/services/local-storage-manager-service/models/index.mjs +6 -0
  41. package/esm2022/lib/services/local-storage-manager-service/models/setting-options.model.mjs +13 -0
  42. package/esm2022/lib/services/local-storage-manager-service/models/storage-data.model.mjs +10 -0
  43. package/esm2022/lib/services/local-storage-manager-service/models/storage-option.model.mjs +12 -0
  44. package/esm2022/lib/services/local-storage-manager-service/models/storage-type.enum.mjs +7 -0
  45. package/esm2022/lib/services/request-manager-services/http-manager.service.mjs +207 -0
  46. package/esm2022/lib/services/request-manager-services/index.mjs +5 -0
  47. package/esm2022/lib/services/request-manager-services/request.service.mjs +189 -0
  48. package/esm2022/lib/services/request-manager-services/rxjs-operators/countdown.mjs +9 -0
  49. package/esm2022/lib/services/request-manager-services/rxjs-operators/delay-retry.mjs +10 -0
  50. package/esm2022/lib/services/request-manager-services/rxjs-operators/index.mjs +5 -0
  51. package/esm2022/lib/services/request-manager-services/rxjs-operators/request-polling.mjs +14 -0
  52. package/esm2022/lib/services/request-manager-services/rxjs-operators/request-streaming.mjs +19 -0
  53. package/esm2022/lib/services/request-manager-state-service/http-manager-state.store.mjs +267 -0
  54. package/esm2022/lib/services/request-manager-state-service/index.mjs +3 -0
  55. package/esm2022/lib/services/request-manager-state-service/models/api-request.model.mjs +20 -0
  56. package/esm2022/lib/services/request-manager-state-service/models/index.mjs +3 -0
  57. package/esm2022/lib/services/request-manager-state-service/models/request-options.model.mjs +10 -0
  58. package/esm2022/lib/services/utils/app.service.mjs +26 -0
  59. package/esm2022/lib/services/utils/encryption/asymmetrical-encryption.service.mjs +186 -0
  60. package/esm2022/lib/services/utils/encryption/encryption-test.service.mjs +35 -0
  61. package/esm2022/lib/services/utils/encryption/index.mjs +4 -0
  62. package/esm2022/lib/services/utils/encryption/random.mjs +52 -0
  63. package/esm2022/lib/services/utils/encryption/symmetrical-encryption.service.mjs +77 -0
  64. package/esm2022/lib/services/utils/headers.service.mjs +21 -0
  65. package/esm2022/lib/services/utils/index.mjs +6 -0
  66. package/esm2022/lib/services/utils/object-merger.service.mjs +50 -0
  67. package/esm2022/lib/services/utils/path-query.service.mjs +54 -0
  68. package/esm2022/lib/services/utils/utils.service.mjs +155 -0
  69. package/esm2022/public-api.mjs +11 -0
  70. package/fesm2022/http-request-manager.mjs +3444 -0
  71. package/fesm2022/http-request-manager.mjs.map +1 -0
  72. package/http-request-manager-18.0.2.tgz +0 -0
  73. package/index.d.ts +5 -0
  74. package/lib/http-request-manager.module.d.ts +33 -0
  75. package/lib/http-request-services-demo/database-data-demo/database-data-demo.component.d.ts +19 -0
  76. package/lib/http-request-services-demo/http-request-services-demo.component.d.ts +24 -0
  77. package/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.d.ts +56 -0
  78. package/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.d.ts +26 -0
  79. package/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.d.ts +13 -0
  80. package/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.d.ts +27 -0
  81. package/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.d.ts +12 -0
  82. package/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.d.ts +16 -0
  83. package/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.d.ts +8 -0
  84. package/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.d.ts +14 -0
  85. package/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.d.ts +14 -0
  86. package/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.d.ts +107 -0
  87. package/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.d.ts +122 -0
  88. package/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.d.ts +15 -0
  89. package/lib/index.d.ts +3 -0
  90. package/lib/interceptors/credentials.interceptor.d.ts +8 -0
  91. package/{src/lib/interceptors/index.ts → lib/interceptors/index.d.ts} +0 -2
  92. package/lib/interceptors/models/error-settings.model.d.ts +10 -0
  93. package/lib/interceptors/proxy-debugger.interceptor.d.ts +12 -0
  94. package/lib/interceptors/request-error.interceptor.d.ts +10 -0
  95. package/lib/interceptors/request-header.interceptor.d.ts +15 -0
  96. package/lib/models/config-http-options.model.d.ts +21 -0
  97. package/lib/models/config-local-storage-options.model.d.ts +13 -0
  98. package/lib/models/config-options.model.d.ts +12 -0
  99. package/{src/lib/models/config-token.model.ts → lib/models/config-token.model.d.ts} +1 -2
  100. package/lib/models/data-type.enum.d.ts +5 -0
  101. package/lib/models/database-storage.model.d.ts +10 -0
  102. package/lib/models/index.d.ts +6 -0
  103. package/lib/models/retry-options.model.d.ts +10 -0
  104. package/lib/services/database-manager-services/database.manager.service.d.ts +31 -0
  105. package/lib/services/database-manager-services/db.storage.service.d.ts +26 -0
  106. package/{src/lib/services/database-manager-services/index.ts → lib/services/database-manager-services/index.d.ts} +0 -1
  107. package/lib/services/database-manager-services/models/table-schema.d.ts +11 -0
  108. package/{src/lib/services/index.ts → lib/services/index.d.ts} +0 -4
  109. package/lib/services/local-storage-manager-service/index.d.ts +2 -0
  110. package/lib/services/local-storage-manager-service/local-storage-manager.service.d.ts +86 -0
  111. package/lib/services/local-storage-manager-service/models/global-store-options.model.d.ts +15 -0
  112. package/{src/lib/services/local-storage-manager-service/models/index.ts → lib/services/local-storage-manager-service/models/index.d.ts} +1 -2
  113. package/lib/services/local-storage-manager-service/models/setting-options.model.d.ts +15 -0
  114. package/lib/services/local-storage-manager-service/models/storage-data.model.d.ts +10 -0
  115. package/lib/services/local-storage-manager-service/models/storage-option.model.d.ts +13 -0
  116. package/lib/services/local-storage-manager-service/models/storage-type.enum.d.ts +5 -0
  117. package/lib/services/request-manager-services/http-manager.service.d.ts +41 -0
  118. package/{src/lib/services/request-manager-services/index.ts → lib/services/request-manager-services/index.d.ts} +0 -2
  119. package/lib/services/request-manager-services/request.service.d.ts +27 -0
  120. package/lib/services/request-manager-services/rxjs-operators/countdown.d.ts +2 -0
  121. package/lib/services/request-manager-services/rxjs-operators/delay-retry.d.ts +2 -0
  122. package/lib/services/request-manager-services/rxjs-operators/request-polling.d.ts +7 -0
  123. package/lib/services/request-manager-services/rxjs-operators/request-streaming.d.ts +2 -0
  124. package/lib/services/request-manager-state-service/http-manager-state.store.d.ts +51 -0
  125. package/{src/lib/services/request-manager-state-service/index.ts → lib/services/request-manager-state-service/index.d.ts} +0 -1
  126. package/lib/services/request-manager-state-service/models/api-request.model.d.ts +27 -0
  127. package/{src/lib/services/request-manager-state-service/models/index.ts → lib/services/request-manager-state-service/models/index.d.ts} +0 -1
  128. package/lib/services/request-manager-state-service/models/request-options.model.d.ts +10 -0
  129. package/lib/services/utils/app.service.d.ts +8 -0
  130. package/lib/services/utils/encryption/asymmetrical-encryption.service.d.ts +17 -0
  131. package/lib/services/utils/encryption/encryption-test.service.d.ts +10 -0
  132. package/{src/lib/services/utils/encryption/index.ts → lib/services/utils/encryption/index.d.ts} +0 -2
  133. package/lib/services/utils/encryption/random.d.ts +7 -0
  134. package/lib/services/utils/encryption/symmetrical-encryption.service.d.ts +14 -0
  135. package/lib/services/utils/headers.service.d.ts +10 -0
  136. package/{src/lib/services/utils/index.ts → lib/services/utils/index.d.ts} +0 -2
  137. package/lib/services/utils/object-merger.service.d.ts +12 -0
  138. package/lib/services/utils/path-query.service.d.ts +11 -0
  139. package/lib/services/utils/utils.service.d.ts +24 -0
  140. package/package.json +14 -1
  141. package/{src/public-api.ts → public-api.d.ts} +0 -7
  142. package/ng-package.json +0 -8
  143. package/src/lib/http-request-manager.module.ts +0 -101
  144. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.html +0 -3
  145. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.scss +0 -0
  146. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.ts +0 -105
  147. package/src/lib/http-request-services-demo/http-request-services-demo.component.html +0 -64
  148. package/src/lib/http-request-services-demo/http-request-services-demo.component.scss +0 -6
  149. package/src/lib/http-request-services-demo/http-request-services-demo.component.ts +0 -34
  150. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.html +0 -195
  151. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.scss +0 -17
  152. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.ts +0 -205
  153. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.html +0 -59
  154. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.scss +0 -60
  155. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.ts +0 -71
  156. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.ts +0 -28
  157. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.html +0 -10
  158. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.scss +0 -29
  159. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.ts +0 -99
  160. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.ts +0 -22
  161. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.html +0 -8
  162. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.scss +0 -19
  163. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.ts +0 -25
  164. package/src/lib/http-request-services-demo/request-manager-demo/models/app-session.model.ts +0 -30
  165. package/src/lib/http-request-services-demo/request-manager-demo/models/app.model.ts +0 -19
  166. package/src/lib/http-request-services-demo/request-manager-demo/models/get-sample.model.ts +0 -25
  167. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.ts +0 -19
  168. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-details.ts +0 -24
  169. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.ts +0 -30
  170. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client.model.ts +0 -49
  171. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.ts +0 -33
  172. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.html +0 -336
  173. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.scss +0 -24
  174. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.ts +0 -403
  175. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.html +0 -328
  176. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.scss +0 -24
  177. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.ts +0 -347
  178. package/src/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.ts +0 -88
  179. package/src/lib/index.ts +0 -3
  180. package/src/lib/interceptors/credentials.interceptor.ts +0 -18
  181. package/src/lib/interceptors/models/error-settings.model.ts +0 -22
  182. package/src/lib/interceptors/proxy-debugger.interceptor.ts +0 -46
  183. package/src/lib/interceptors/request-error.interceptor.ts +0 -65
  184. package/src/lib/interceptors/request-header.interceptor.ts +0 -58
  185. package/src/lib/models/config-http-options.model.ts +0 -42
  186. package/src/lib/models/config-local-storage-options.model.ts +0 -27
  187. package/src/lib/models/config-options.model.ts +0 -27
  188. package/src/lib/models/data-type.enum.ts +0 -5
  189. package/src/lib/models/database-storage.model.ts +0 -24
  190. package/src/lib/models/index.ts +0 -9
  191. package/src/lib/models/retry-options.model.ts +0 -22
  192. package/src/lib/services/database-manager-services/database.manager.service.ts +0 -193
  193. package/src/lib/services/database-manager-services/db.storage.service.ts +0 -191
  194. package/src/lib/services/database-manager-services/models/table-schema.ts +0 -35
  195. package/src/lib/services/local-storage-manager-service/index.ts +0 -2
  196. package/src/lib/services/local-storage-manager-service/local-storage-manager.service.spec.ts +0 -71
  197. package/src/lib/services/local-storage-manager-service/local-storage-manager.service.ts +0 -421
  198. package/src/lib/services/local-storage-manager-service/models/global-store-options.model.ts +0 -30
  199. package/src/lib/services/local-storage-manager-service/models/setting-options.model.ts +0 -30
  200. package/src/lib/services/local-storage-manager-service/models/storage-data.model.ts +0 -24
  201. package/src/lib/services/local-storage-manager-service/models/storage-option.model.ts +0 -29
  202. package/src/lib/services/local-storage-manager-service/models/storage-type.enum.ts +0 -5
  203. package/src/lib/services/request-manager-services/README.md +0 -268
  204. package/src/lib/services/request-manager-services/http-manager.service.spec.ts +0 -230
  205. package/src/lib/services/request-manager-services/http-manager.service.ts +0 -274
  206. package/src/lib/services/request-manager-services/request.service.ts +0 -261
  207. package/src/lib/services/request-manager-services/rxjs-operators/countdown.ts +0 -17
  208. package/src/lib/services/request-manager-services/rxjs-operators/delay-retry.ts +0 -16
  209. package/src/lib/services/request-manager-services/rxjs-operators/request-polling.ts +0 -21
  210. package/src/lib/services/request-manager-services/rxjs-operators/request-streaming.ts +0 -32
  211. package/src/lib/services/request-manager-state-service/http-manager-state.store.ts +0 -402
  212. package/src/lib/services/request-manager-state-service/models/api-request.model.ts +0 -50
  213. package/src/lib/services/request-manager-state-service/models/request-options.model.ts +0 -22
  214. package/src/lib/services/utils/app.service.spec.ts +0 -25
  215. package/src/lib/services/utils/app.service.ts +0 -21
  216. package/src/lib/services/utils/encryption/README.md +0 -79
  217. package/src/lib/services/utils/encryption/asymmetrical-encryption.service.ts +0 -282
  218. package/src/lib/services/utils/encryption/encryption-test.service.ts +0 -39
  219. package/src/lib/services/utils/encryption/random.ts +0 -69
  220. package/src/lib/services/utils/encryption/symmetrical-encryption.service.ts +0 -93
  221. package/src/lib/services/utils/headers.service.spec.ts +0 -80
  222. package/src/lib/services/utils/headers.service.ts +0 -18
  223. package/src/lib/services/utils/object-merger.service.spec.ts +0 -16
  224. package/src/lib/services/utils/object-merger.service.ts +0 -60
  225. package/src/lib/services/utils/path-query.service.spec.ts +0 -117
  226. package/src/lib/services/utils/path-query.service.ts +0 -69
  227. package/src/lib/services/utils/utils.service.spec.ts +0 -164
  228. package/src/lib/services/utils/utils.service.ts +0 -192
  229. package/tsconfig.lib.json +0 -32
  230. package/tsconfig.lib.prod.json +0 -10
  231. package/tsconfig.spec.json +0 -14
  232. /package/{src/lib/services/request-manager-services/rxjs-operators/index.ts → lib/services/request-manager-services/rxjs-operators/index.d.ts} +0 -0
@@ -1,421 +0,0 @@
1
- import { Inject, Injectable, OnDestroy, Optional, inject } from '@angular/core';
2
- import { ComponentStore } from '@ngrx/component-store';
3
- import { withLatestFrom, map, tap } from 'rxjs/operators';
4
-
5
- import { UtilsService } from '../utils/utils.service';
6
- import { SymmetricalEncryptionService } from '../utils/encryption/symmetrical-encryption.service';
7
-
8
- import { StorageOption, StorageType } from './models';
9
- import { SettingOptions } from './models/setting-options.model';
10
- import { StorageData } from './models/storage-data.model';
11
- import { EncryptionTestService } from '../utils/encryption/encryption-test.service';
12
- import { interval } from 'rxjs';
13
- import { AppService } from '../utils/app.service';
14
- import { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';
15
- import { ConfigOptions } from '../request-manager-services';
16
- import { ObjectMergerService } from '../utils/object-merger.service';
17
-
18
- export interface State {
19
- localStores: StorageData[]
20
- sessionStores: StorageData[]
21
- settings: StorageOption[]
22
- }
23
-
24
- const storage: State = {
25
- localStores: [],
26
- sessionStores: [],
27
- settings: [],
28
- };
29
-
30
- @Injectable({ providedIn: 'root' })
31
- export class LocalStorageManagerService extends ComponentStore<State> implements OnDestroy {
32
-
33
- storageName = 'storage'
34
- storageSettingsName = 'global-storage'
35
- defaultOptions = SettingOptions.adapt()
36
-
37
- stateRetrieved = false
38
- encrypted = false
39
-
40
- app = inject(AppService)
41
- utils = inject(UtilsService)
42
- objectMergerService = inject(ObjectMergerService)
43
- encryption = inject(SymmetricalEncryptionService)
44
- encryptionTest = inject(EncryptionTestService)
45
-
46
- // SELECTORS
47
-
48
- private readonly data$ = this.select((state) => state)
49
-
50
- readonly stores$ = this.select((state) => state.settings)
51
-
52
- readonly storeExists$ = (store: string) => this.select(
53
- this.data$,
54
- (data) => data.settings.find(item => item.name === store) ? true : false
55
- )
56
-
57
- readonly store$ = (store: string) => this.select(
58
- this.data$,
59
- (data) => {
60
-
61
- const foundStore = data.settings.find(item => item.name === store)
62
-
63
- if(foundStore) {
64
-
65
- const options = SettingOptions.adapt(foundStore.options)
66
-
67
- const found = foundStore.options?.storage === StorageType.GLOBAL
68
- ? data.localStores.find(item => item.id === foundStore.id) as StorageData
69
- : data.sessionStores.find(item => item.id === foundStore.id) as StorageData
70
-
71
- if(!found) {
72
- this.deleteStore({ name: store })
73
- return
74
- }
75
-
76
- if(!this.app?.appID) {
77
- console.warn('No App ID found - AppId not Provided')
78
- return
79
- }
80
-
81
- const storageData = (options.encrypted) ? this.encryption.decrypt(found.data, this.app.appID) : found.data
82
- return (this.isString(storageData)) ? JSON.parse(storageData): storageData
83
-
84
- } else {
85
- return null
86
- }
87
-
88
- }
89
- )
90
-
91
- readonly settings$ = this.select(state => (state) ? state.settings : storage.settings)
92
-
93
- readonly setting$ = (store: string) => this.select(
94
- this.data$,
95
- (state) => {
96
- const foundSetting = state.settings.find(item => item.name === store)
97
- return (foundSetting) ? foundSetting : null
98
- }
99
- )
100
-
101
- persistence$ = this.data$
102
- .subscribe(data => {
103
- if(this.stateRetrieved) this.persistState(data)
104
- })
105
-
106
- startTimer() {
107
- const timer$ = interval(1000 * 3).pipe(
108
- withLatestFrom(this.data$),
109
- map(([_, state]) => state),
110
- tap((state) => {
111
-
112
- const expired: StorageOption[] = this.expired(state) ? this.expired(state) : []
113
-
114
- if (expired.length > 0) {
115
-
116
- const ids = expired.map((item) => item.id)
117
-
118
- const updatedState: State = {
119
- ...state,
120
- localStores: state.localStores.filter((item) => !ids.includes(item.id)),
121
- sessionStores: state.sessionStores.filter((item) => !ids.includes(item.id)),
122
- settings: state.settings.filter((item) => !ids.includes(item.id)),
123
- };
124
-
125
- this.persistState(updatedState)
126
- this.updateState(updatedState)
127
-
128
- }
129
- })
130
- );
131
-
132
- timer$.subscribe()
133
- }
134
-
135
- private updateState = this.updater((state, updatedState: State) => ({
136
- ...updatedState,
137
- }))
138
-
139
-
140
- constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {
141
-
142
- super(storage)
143
-
144
- this.storageName = configOptions?.LocalStorageOptions?.storageName || this.storageName
145
- this.storageSettingsName = configOptions?.LocalStorageOptions?.storageSettingsName || this.storageSettingsName
146
- this.defaultOptions = configOptions?.LocalStorageOptions?.options || this.defaultOptions
147
-
148
- this.retrieveState()
149
- this.startTimer()
150
- }
151
-
152
- readonly setStore = this.updater((state: State, store: { id: string, name: string, data: any, options: SettingOptions }): any => {
153
-
154
- const settings = StorageOption.adapt(store)
155
- settings.options = this.objectMergerService.mergeStorageOptions(settings.options)
156
-
157
- const type = store.options.storage
158
- const hasStore = this.hasGlobalStorage(type, store.id)
159
-
160
- store.name = this.validStoreName(store.name)
161
-
162
- if(!hasStore) {
163
- console.warn(`No such Store: ${store.name}`)
164
- return state
165
- } else {
166
-
167
- const str = this.encryptionTest.isEncrypted(store.data) ? store.data : JSON.stringify(store.data)
168
- const dataStr = (this.isObjectOrArray(str)) ? (store.options.encrypted) ? this.encryption.encrypt(str, this.app.appID) : store.data : store.data
169
-
170
- const localData = (dataStr && settings.options?.storage === StorageType.GLOBAL) ? [{ data: dataStr, id: settings.id }] : []
171
- const sessionData = (dataStr && settings.options?.storage === StorageType.SESSION) ? [{ data: dataStr, id: settings.id }] : []
172
-
173
- return {
174
- ...state,
175
- localStores: [...state.localStores, ...localData],
176
- sessionStores: [...state.sessionStores, ...sessionData],
177
- settings: [...state.settings, ...[settings]],
178
- }
179
-
180
- }
181
-
182
- })
183
-
184
- readonly createStore = this.updater((state: State, store: { id?: string, name: string, data: any, options: SettingOptions }): any => {
185
-
186
- const settings = StorageOption.adapt(store)
187
- settings.options = this.objectMergerService.mergeStorageOptions(settings.options)
188
- const foundStore = state?.settings.some(item => item.name === store.name)
189
-
190
- const expires = (settings.options?.expiresIn) ? this.utils.expires(settings.options?.expiresIn) : 0
191
- if(settings.options) settings.options.expires = expires
192
-
193
- store.name = this.validStoreName(store.name)
194
-
195
- if(foundStore) {
196
- return state
197
- } else {
198
- if(!this.isObjectOrArray(store.data)) {
199
- console.warn('Data must ba an Object or Array')
200
- return
201
- }
202
-
203
- store.data = (this.isString(store.data)) ? JSON.parse(store.data) : store.data
204
- const dataStr = (store.options.encrypted) ? this.encryption.encrypt(store.data, this.app.appID) : store.data
205
-
206
- const localData = (settings.options?.storage === StorageType.GLOBAL) ? [{ data: dataStr, id: settings.id }] : []
207
- const sessionData = (settings.options?.storage === StorageType.SESSION) ? [{ data: dataStr, id: settings.id }] : []
208
-
209
- return {
210
- ...state,
211
- localStores: [...state.localStores, ...localData],
212
- sessionStores: [...state.sessionStores, ...sessionData],
213
- settings: [...state.settings, ...[settings]],
214
- }
215
-
216
- }
217
-
218
- })
219
-
220
- readonly updateStore = this.updater((state: State, store: { name: string, data: any }): any => {
221
-
222
- store.name = this.validStoreName(store.name)
223
-
224
- const settings = state.settings.find(item => item.name === store.name)
225
-
226
- if(settings) {
227
-
228
- const type = settings.options?.storage
229
- const hasStore = this.hasGlobalStorage(type, settings.id || '')
230
-
231
- if(!hasStore) {
232
- console.warn(`No such Store: ${store.name}`)
233
- } else {
234
-
235
- const dataStr = (settings.options?.encrypted) ? this.encryption.encrypt(store.data, this.app.appID) : store.data
236
-
237
- const localData = (dataStr && settings.options?.storage === StorageType.GLOBAL) ? [{ data: dataStr, id: settings.id }] : []
238
- const sessionData = (dataStr && settings.options?.storage === StorageType.SESSION) ? [{ data: dataStr, id: settings.id }] : []
239
-
240
- state.localStores = state.localStores.filter(item => item.id !== settings.id)
241
- state.sessionStores = state.sessionStores.filter(item => item.id !== settings.id)
242
-
243
- return {
244
- ...state,
245
- localStores: [...state.localStores, ...localData],
246
- sessionStores: [...state.sessionStores, ...sessionData],
247
- }
248
-
249
- }
250
- }
251
-
252
- return state
253
-
254
- })
255
-
256
- readonly deleteStore = this.updater((state: State, store: { name: string }): any => {
257
-
258
- store.name = this.validStoreName(store.name)
259
-
260
- const id = state.settings.find(item => item.name === store.name)?.id
261
-
262
- if(id) {
263
-
264
- const settings = state.settings.filter(item => item.id !== id)
265
- const localData = state.localStores.filter(item => item.id !== id)
266
- const sessionData = state.sessionStores.filter(item => item.id !== id)
267
-
268
- return {
269
- ...state,
270
- localStores: [...localData],
271
- sessionStores: [...sessionData],
272
- settings: [...settings],
273
- }
274
-
275
- } else {
276
- console.warn(`No such Store: ${store.name}`)
277
- return state
278
- }
279
-
280
- })
281
-
282
- resetStore() {
283
-
284
- const newState = {
285
- localStores: [],
286
- sessionStores: [],
287
- settings: [],
288
- }
289
-
290
- this.updateState(newState)
291
- this.persistState(newState)
292
-
293
- }
294
-
295
- private persistState(state: State|null) {
296
-
297
- if(!state) return
298
-
299
- const strLocal = JSON.stringify(state.localStores)
300
- localStorage.setItem(this.storageName, strLocal)
301
-
302
- const strSession = JSON.stringify(state.sessionStores)
303
- sessionStorage.setItem(this.storageName, strSession)
304
-
305
- const settingsStr = this.encryption.encrypt(state.settings, this.app.appID)
306
- localStorage.setItem(this.storageSettingsName, settingsStr || '')
307
-
308
- }
309
-
310
- private expired(state: State|null) {
311
-
312
- if(!state) return []
313
- return state.settings?.filter(item => (item.options?.expires || 0) > 0 && this.utils.hasExpired(item.options?.expires || 0))
314
-
315
- }
316
-
317
- retrieveState() {
318
-
319
- const str = localStorage.getItem(this.storageSettingsName)
320
-
321
- const localStr = localStorage.getItem(this.storageName)
322
- const sessionStr = sessionStorage.getItem(this.storageName)
323
-
324
- const localData: StorageData[] = (localStr) ? JSON.parse(localStr) : null
325
- const sessionData: StorageData[] = (sessionStr) ? JSON.parse(sessionStr) : null
326
-
327
- const decryptedStr = str ? this.encryption.decrypt(str, this.app.appID) : null
328
- const settings: StorageOption[] = (decryptedStr && decryptedStr !== null) ? JSON.parse(decryptedStr) : []
329
-
330
- settings.forEach(store => {
331
-
332
- const expired = (store.options?.expires || 0) > 0 && this.utils.hasExpired(store.options?.expires || 0)
333
-
334
- if(!expired) {
335
-
336
- const hasStorage = this.hasGlobalStorage(store.options?.storage, store.id || '')
337
-
338
- if(!hasStorage) {
339
- this.createStore({ id: store.id, name: store.name, data: [], options: SettingOptions.adapt(store.options)})
340
- } else {
341
- const storeData = (store.options?.storage === StorageType.GLOBAL) ? localData.find(item => item.id === store.id) : sessionData.find(item => item.id === store.id)
342
- this.setStore({ id: store.id || '', name: store.name, data: storeData?.data, options: SettingOptions.adapt(store.options) })
343
- }
344
-
345
- }
346
-
347
- })
348
-
349
- this.stateRetrieved = true
350
-
351
- }
352
-
353
- private isObjectOrArray = (obj: any) => {
354
-
355
- let parsed;
356
-
357
- try {
358
- parsed = (typeof obj === 'object') ? obj : JSON.parse(obj)
359
- } catch (e) {
360
- return false;
361
- }
362
-
363
- if (Array.isArray(parsed)) {
364
- const allStringsOrObjectsOrNumbers = parsed.every(item =>
365
- typeof item === 'string' ||
366
- typeof item === 'object' && item !== null ||
367
- typeof item === 'number'
368
- );
369
- return allStringsOrObjectsOrNumbers;
370
- }
371
-
372
- return typeof parsed === 'object' && parsed !== null;
373
-
374
- }
375
-
376
- private isString (obj: any) {
377
- return (Object.prototype.toString.call(obj) === '[object String]')
378
- }
379
-
380
- private fixAndParseJSON(jsonString: string): any {
381
- const fixedString = jsonString
382
- .replace(/'/g, '"')
383
- .replace(/([{,]\s*)(\w+)\s*:/g, '$1"$2":')
384
- .replace(/,\s*(\}|\])/g, '$1');
385
-
386
- try {
387
- return JSON.parse(fixedString);
388
- } catch (error: any) {
389
- throw new Error('Failed to parse JSON: ' + error.message);
390
- }
391
- }
392
-
393
- private validStoreName(str: string) {
394
- return str
395
- .toLowerCase() // Convert to lowercase
396
- .replace(/\s+/g, '_') // Replace spaces with underscores
397
- .replace(/[^ -~]/g, ''); // Remove non-ASCII characters
398
- }
399
-
400
- private hasGlobalStorage(type: StorageType = StorageType.GLOBAL, id: string) {
401
-
402
- const strData: StorageOption[] = []
403
-
404
- if(type === StorageType.GLOBAL) {
405
- const str = localStorage.getItem(this.storageName)
406
- strData.push(...(str ? JSON.parse(str) : []))
407
- } else {
408
- const str = sessionStorage.getItem(this.storageName)
409
- strData.push(...(str ? JSON.parse(str) : []))
410
- }
411
-
412
- const found = strData.find(store => store.id === id)
413
- return (found) ? true : false
414
-
415
- }
416
-
417
- override ngOnDestroy() {
418
- this.persistence$.unsubscribe()
419
- }
420
-
421
- }
@@ -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,30 +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
- return new SettingOptions(
22
- (item?.storage) ? item.storage : StorageType.GLOBAL,
23
- (item?.expires) ? item.expires : 0,
24
- (item?.expiresIn) ? item.expiresIn : '',
25
- (item?.encrypted) ? item?.encrypted : false,
26
- )
27
-
28
- }
29
-
30
- }
@@ -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,29 +0,0 @@
1
- import { SettingOptions } from "./setting-options.model"
2
-
3
- export interface StorageOptionInterface {
4
- id?: string
5
- name: string
6
- options?: SettingOptions
7
- }
8
-
9
- export class StorageOption implements StorageOptionInterface {
10
-
11
- constructor(
12
- public id?: string,
13
- public name = 'untitled',
14
- public options?: SettingOptions,
15
- ) {}
16
-
17
- static adapt(item?: any): StorageOption {
18
-
19
- return new StorageOption(
20
- (item?.id) ? item.id : crypto.randomUUID(),
21
- item?.name,
22
- (item?.options) ? SettingOptions.adapt(item.options) : SettingOptions.adapt(),
23
- )
24
-
25
- }
26
-
27
- }
28
-
29
-
@@ -1,5 +0,0 @@
1
- export enum StorageType {
2
- GLOBAL,
3
- SESSION,
4
- DB
5
- }