http-request-manager 18.15.34 → 18.16.1

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 (300) hide show
  1. package/fesm2022/http-request-manager.mjs +13688 -0
  2. package/fesm2022/http-request-manager.mjs.map +1 -0
  3. package/http-request-manager-18.16.0.tgz +0 -0
  4. package/package.json +15 -6
  5. package/types/http-request-manager.d.ts +3968 -0
  6. package/TEST_COVERAGE_SUMMARY.md +0 -458
  7. package/ng-package.json +0 -8
  8. package/src/docs/ADVANCED_WEBSOCKET.md +0 -633
  9. package/src/docs/ARCHITECTURE.md +0 -633
  10. package/src/docs/BATCH_REQUEST_README.md +0 -467
  11. package/src/docs/COMPLETE_API_REFERENCE.md +0 -1037
  12. package/src/docs/DATABASE_README.md +0 -1195
  13. package/src/docs/ENCRYPTION_README.md +0 -403
  14. package/src/docs/HTTP_MANAGER_README.md +0 -628
  15. package/src/docs/HTTP_SINGNALS_MANAGER_README.md +0 -654
  16. package/src/docs/HTTP_STATE_MANAGER_README.md +0 -1391
  17. package/src/docs/INTERCEPTOR_README.md +0 -549
  18. package/src/docs/LOCAL_STORAGE_README.md +0 -1056
  19. package/src/docs/LOCAL_STORAGE_SIGNALS_README.md +0 -338
  20. package/src/docs/LOGGER_README.md +0 -310
  21. package/src/docs/MESSAGE_TRACKER_README.md +0 -518
  22. package/src/docs/MESSAGE_TRACKER_SIGNALS_README.md +0 -563
  23. package/src/docs/MODELS_README.md +0 -1264
  24. package/src/docs/SIGNAL_SERVICES_README.md +0 -238
  25. package/src/docs/SQL_DIXIE_README.md +0 -574
  26. package/src/docs/STORE_STATE_MANAGER_README.md +0 -556
  27. package/src/docs/STORE_STATE_SIGNALS_README.md +0 -600
  28. package/src/docs/UPLOAD_REQUEST_README.md +0 -324
  29. package/src/docs/UTILS_README.md +0 -1604
  30. package/src/docs/WEBSOCKET_MESSAGE_SERVICE.md +0 -799
  31. package/src/docs/WEBSOCKET_SIGNALS_README.md +0 -641
  32. package/src/docs/WEBSOCKET_SINGLETON_REFACTORING.md +0 -201
  33. package/src/docs/WS_MANAGER_README.md +0 -613
  34. package/src/lib/http-request-manager.module.ts +0 -147
  35. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.html +0 -116
  36. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.scss +0 -0
  37. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.ts +0 -255
  38. package/src/lib/http-request-services-demo/http-request-services-demo.component.html +0 -123
  39. package/src/lib/http-request-services-demo/http-request-services-demo.component.scss +0 -6
  40. package/src/lib/http-request-services-demo/http-request-services-demo.component.ts +0 -53
  41. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.html +0 -195
  42. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.scss +0 -17
  43. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.ts +0 -208
  44. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.html +0 -200
  45. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.scss +0 -17
  46. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.ts +0 -214
  47. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.html +0 -53
  48. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.scss +0 -60
  49. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.ts +0 -72
  50. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-download.module.ts +0 -28
  51. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.html +0 -10
  52. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.scss +0 -29
  53. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.ts +0 -100
  54. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/models/download-labels-model.ts +0 -22
  55. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.html +0 -8
  56. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.scss +0 -19
  57. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.ts +0 -26
  58. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/app-session.model.ts +0 -30
  59. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/app.model.ts +0 -19
  60. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/get-sample.model.ts +0 -25
  61. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-ai-prompt.ts +0 -19
  62. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client-details.ts +0 -24
  63. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client-info.ts +0 -30
  64. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client.model.ts +0 -49
  65. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-mapper-client-info.ts +0 -33
  66. package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.html +0 -279
  67. package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.scss +0 -24
  68. package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.ts +0 -461
  69. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.html +0 -53
  70. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.scss +0 -60
  71. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.ts +0 -72
  72. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.ts +0 -28
  73. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.html +0 -10
  74. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.scss +0 -29
  75. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.ts +0 -100
  76. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.ts +0 -22
  77. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.html +0 -8
  78. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.scss +0 -19
  79. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.ts +0 -26
  80. package/src/lib/http-request-services-demo/request-manager-demo/models/app-session.model.ts +0 -30
  81. package/src/lib/http-request-services-demo/request-manager-demo/models/app.model.ts +0 -19
  82. package/src/lib/http-request-services-demo/request-manager-demo/models/get-sample.model.ts +0 -25
  83. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.ts +0 -19
  84. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-details.ts +0 -24
  85. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.ts +0 -30
  86. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client.model.ts +0 -49
  87. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.ts +0 -33
  88. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.html +0 -622
  89. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.scss +0 -106
  90. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.ts +0 -687
  91. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.html +0 -418
  92. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.scss +0 -24
  93. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.ts +0 -576
  94. package/src/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.ts +0 -89
  95. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/services/state-data-request.service.ts +0 -119
  96. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.css +0 -0
  97. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.html +0 -3
  98. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.ts +0 -16
  99. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.css +0 -0
  100. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.html +0 -3
  101. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.ts +0 -16
  102. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.css +0 -31
  103. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.html +0 -94
  104. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.scss +0 -41
  105. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.spec.ts +0 -203
  106. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.ts +0 -144
  107. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.css +0 -11
  108. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.html +0 -102
  109. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.spec.ts +0 -40
  110. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.ts +0 -230
  111. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.css +0 -30
  112. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.html +0 -172
  113. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.spec.ts +0 -31
  114. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.ts +0 -239
  115. package/src/lib/http-request-services-demo/request-manager-ws-demo/models/oidc-client.model.ts +0 -31
  116. package/src/lib/http-request-services-demo/request-manager-ws-demo/models/user-data.model.ts +0 -32
  117. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.css +0 -0
  118. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.html +0 -84
  119. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.ts +0 -40
  120. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/index.ts +0 -3
  121. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/jwt-token.service.ts +0 -62
  122. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/message-service-demo.service.ts +0 -83
  123. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/notification-service-demo.service.ts +0 -147
  124. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/state-service-demo.service.ts +0 -168
  125. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.html +0 -53
  126. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.scss +0 -60
  127. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.ts +0 -72
  128. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-download.module.ts +0 -28
  129. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.html +0 -10
  130. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.scss +0 -29
  131. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.ts +0 -100
  132. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/models/download-labels-model.ts +0 -22
  133. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.html +0 -8
  134. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.scss +0 -19
  135. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.ts +0 -26
  136. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app-session.model.ts +0 -30
  137. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app.model.ts +0 -19
  138. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/get-sample.model.ts +0 -25
  139. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-ai-prompt.ts +0 -19
  140. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-details.ts +0 -24
  141. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-info.ts +0 -30
  142. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client.model.ts +0 -49
  143. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-mapper-client-info.ts +0 -33
  144. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.html +0 -380
  145. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.scss +0 -24
  146. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.ts +0 -410
  147. package/src/lib/http-request-services-demo/store-state-manager-demo/models/settings.model.ts +0 -28
  148. package/src/lib/http-request-services-demo/store-state-manager-demo/services/settings-state.service.ts +0 -49
  149. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.css +0 -0
  150. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.html +0 -23
  151. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.ts +0 -36
  152. package/src/lib/http-request-services-demo/store-state-signals-demo/store-state-signals-demo.component.ts +0 -161
  153. package/src/lib/http-request-services-demo/upload-demo/models/index.ts +0 -1
  154. package/src/lib/http-request-services-demo/upload-demo/models/upload-state.model.ts +0 -30
  155. package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.html +0 -89
  156. package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.scss +0 -160
  157. package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.spec.ts +0 -101
  158. package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.ts +0 -136
  159. package/src/lib/index.ts +0 -3
  160. package/src/lib/interceptors/credentials.interceptor.ts +0 -16
  161. package/src/lib/interceptors/index.ts +0 -6
  162. package/src/lib/interceptors/models/error-settings.model.ts +0 -22
  163. package/src/lib/interceptors/models/index.ts +0 -2
  164. package/src/lib/interceptors/proxy-debugger.interceptor.ts +0 -46
  165. package/src/lib/interceptors/request-error.interceptor.ts +0 -65
  166. package/src/lib/interceptors/request-header.interceptor.ts +0 -56
  167. package/src/lib/message-display/README.md +0 -509
  168. package/src/lib/message-display/index.ts +0 -4
  169. package/src/lib/message-display/models/action.model.ts +0 -27
  170. package/src/lib/message-display/models/communication-message.model.ts +0 -77
  171. package/src/lib/message-display/models/display-config.model.ts +0 -35
  172. package/src/lib/message-display/models/display-rule.interface.ts +0 -28
  173. package/src/lib/message-display/models/display-strategy.interface.ts +0 -8
  174. package/src/lib/message-display/models/index.ts +0 -6
  175. package/src/lib/message-display/models/slide.model.ts +0 -24
  176. package/src/lib/message-display/rules/default-display-rules.ts +0 -35
  177. package/src/lib/message-display/services/message-display-router.service.ts +0 -63
  178. package/src/lib/message-display/strategies/snackbar.strategy.ts +0 -46
  179. package/src/lib/models/batch-options.model.ts +0 -33
  180. package/src/lib/models/batch-progress.model.ts +0 -19
  181. package/src/lib/models/batch-request-state.model.ts +0 -40
  182. package/src/lib/models/batch-result.model.ts +0 -30
  183. package/src/lib/models/config-http-options.model.ts +0 -45
  184. package/src/lib/models/config-local-storage-options.model.ts +0 -27
  185. package/src/lib/models/config-options.model.ts +0 -27
  186. package/src/lib/models/config-token.model.ts +0 -9
  187. package/src/lib/models/data-type.enum.ts +0 -5
  188. package/src/lib/models/database-storage.model.ts +0 -24
  189. package/src/lib/models/index.ts +0 -16
  190. package/src/lib/models/retry-options.model.ts +0 -22
  191. package/src/lib/models/upload-validation-error.model.ts +0 -46
  192. package/src/lib/services/SQL-DixieJS service/dexie-query-executor.ts +0 -246
  193. package/src/lib/services/SQL-DixieJS service/dexie-sql.service.ts +0 -31
  194. package/src/lib/services/SQL-DixieJS service/index.ts +0 -4
  195. package/src/lib/services/SQL-DixieJS service/models/execution-plan.model.ts +0 -52
  196. package/src/lib/services/SQL-DixieJS service/models/index.ts +0 -3
  197. package/src/lib/services/SQL-DixieJS service/models/sql-errors.model.ts +0 -13
  198. package/src/lib/services/SQL-DixieJS service/models/sql-options.model.ts +0 -3
  199. package/src/lib/services/SQL-DixieJS service/query-planner.ts +0 -284
  200. package/src/lib/services/SQL-DixieJS service/schema-validator.ts +0 -217
  201. package/src/lib/services/SQL-DixieJS service/sql-parser.ts +0 -35
  202. package/src/lib/services/database-manager-service/database.manager.service.ts +0 -384
  203. package/src/lib/services/database-manager-service/db.storage.service.ts +0 -240
  204. package/src/lib/services/database-manager-service/index.ts +0 -4
  205. package/src/lib/services/database-manager-service/models/index.ts +0 -2
  206. package/src/lib/services/database-manager-service/models/table-schema.ts +0 -33
  207. package/src/lib/services/index.ts +0 -20
  208. package/src/lib/services/local-storage-manager-service/index.ts +0 -4
  209. package/src/lib/services/local-storage-manager-service/local-storage-manager.service.spec.ts +0 -71
  210. package/src/lib/services/local-storage-manager-service/local-storage-manager.service.ts +0 -567
  211. package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.spec.ts +0 -67
  212. package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.ts +0 -437
  213. package/src/lib/services/local-storage-manager-service/models/global-store-options.model.ts +0 -30
  214. package/src/lib/services/local-storage-manager-service/models/index.ts +0 -6
  215. package/src/lib/services/local-storage-manager-service/models/setting-options.model.ts +0 -35
  216. package/src/lib/services/local-storage-manager-service/models/storage-data.model.ts +0 -24
  217. package/src/lib/services/local-storage-manager-service/models/storage-option.model.ts +0 -32
  218. package/src/lib/services/local-storage-manager-service/models/storage-type.enum.ts +0 -5
  219. package/src/lib/services/request-manager-services/README.md +0 -282
  220. package/src/lib/services/request-manager-services/http-manager-signals.service.ts +0 -674
  221. package/src/lib/services/request-manager-services/http-manager.service.spec.ts +0 -353
  222. package/src/lib/services/request-manager-services/http-manager.service.ts +0 -727
  223. package/src/lib/services/request-manager-services/index.ts +0 -8
  224. package/src/lib/services/request-manager-services/request-signals.service.ts +0 -372
  225. package/src/lib/services/request-manager-services/request.service.ts +0 -435
  226. package/src/lib/services/request-manager-services/rxjs-operators/countdown.ts +0 -17
  227. package/src/lib/services/request-manager-services/rxjs-operators/delay-retry.ts +0 -16
  228. package/src/lib/services/request-manager-services/rxjs-operators/index.ts +0 -4
  229. package/src/lib/services/request-manager-services/rxjs-operators/request-polling.ts +0 -35
  230. package/src/lib/services/request-manager-services/rxjs-operators/request-streaming.ts +0 -468
  231. package/src/lib/services/request-manager-state-service/http-manager-state.store.spec.ts +0 -665
  232. package/src/lib/services/request-manager-state-service/http-manager-state.store.ts +0 -2395
  233. package/src/lib/services/request-manager-state-service/index.ts +0 -3
  234. package/src/lib/services/request-manager-state-service/models/api-request.model.ts +0 -86
  235. package/src/lib/services/request-manager-state-service/models/index.ts +0 -14
  236. package/src/lib/services/request-manager-state-service/models/operation-result.model.ts +0 -18
  237. package/src/lib/services/request-manager-state-service/models/parsing-result.model.ts +0 -21
  238. package/src/lib/services/request-manager-state-service/models/request-options.model.ts +0 -37
  239. package/src/lib/services/request-manager-state-service/models/stream-config.model.ts +0 -20
  240. package/src/lib/services/request-manager-state-service/models/stream-event-metadata.model.ts +0 -23
  241. package/src/lib/services/request-manager-state-service/models/stream-event.model.ts +0 -23
  242. package/src/lib/services/request-manager-state-service/models/stream-output.model.ts +0 -23
  243. package/src/lib/services/request-manager-state-service/models/stream-progress.model.ts +0 -24
  244. package/src/lib/services/request-manager-state-service/models/stream-type.enum.ts +0 -13
  245. package/src/lib/services/request-manager-state-service/models/ws-options.model.ts +0 -42
  246. package/src/lib/services/store-state-manager-service/index.ts +0 -4
  247. package/src/lib/services/store-state-manager-service/models/index.ts +0 -3
  248. package/src/lib/services/store-state-manager-service/models/state-operation-result.model.ts +0 -30
  249. package/src/lib/services/store-state-manager-service/models/state-storage-options.model.ts +0 -24
  250. package/src/lib/services/store-state-manager-service/store-state-manager-signals.service.ts +0 -169
  251. package/src/lib/services/store-state-manager-service/store-state-manager.service.ts +0 -153
  252. package/src/lib/services/utils/app.service.spec.ts +0 -25
  253. package/src/lib/services/utils/app.service.ts +0 -21
  254. package/src/lib/services/utils/encryption/README.md +0 -79
  255. package/src/lib/services/utils/encryption/asymmetrical-encryption.service.ts +0 -282
  256. package/src/lib/services/utils/encryption/encryption-test.service.ts +0 -39
  257. package/src/lib/services/utils/encryption/index.ts +0 -5
  258. package/src/lib/services/utils/encryption/random.ts +0 -81
  259. package/src/lib/services/utils/encryption/symmetrical-encryption.service.ts +0 -106
  260. package/src/lib/services/utils/headers.service.spec.ts +0 -80
  261. package/src/lib/services/utils/headers.service.ts +0 -18
  262. package/src/lib/services/utils/index.ts +0 -9
  263. package/src/lib/services/utils/logger.service.ts +0 -90
  264. package/src/lib/services/utils/models/index.ts +0 -4
  265. package/src/lib/services/utils/models/normalized-request-options.model.ts +0 -24
  266. package/src/lib/services/utils/models/path-tracker-state.model.ts +0 -20
  267. package/src/lib/services/utils/models/query-params-tracker-options.model.ts +0 -24
  268. package/src/lib/services/utils/models/query-tracker-state.model.ts +0 -23
  269. package/src/lib/services/utils/object-merger.service.spec.ts +0 -18
  270. package/src/lib/services/utils/object-merger.service.ts +0 -78
  271. package/src/lib/services/utils/path-query.service.spec.ts +0 -117
  272. package/src/lib/services/utils/path-query.service.ts +0 -69
  273. package/src/lib/services/utils/query-params-tracker.service.ts +0 -442
  274. package/src/lib/services/utils/random-color.utils.ts +0 -83
  275. package/src/lib/services/utils/utils.service.spec.ts +0 -165
  276. package/src/lib/services/utils/utils.service.ts +0 -192
  277. package/src/lib/services/ws-manager-service/index.ts +0 -13
  278. package/src/lib/services/ws-manager-service/message-tracker-signals.service.ts +0 -147
  279. package/src/lib/services/ws-manager-service/message-tracker.service.ts +0 -477
  280. package/src/lib/services/ws-manager-service/models/channel-info.model.ts +0 -29
  281. package/src/lib/services/ws-manager-service/models/channel-message-data.model.ts +0 -24
  282. package/src/lib/services/ws-manager-service/models/channel-message.model.ts +0 -36
  283. package/src/lib/services/ws-manager-service/models/channel-type.enum.ts +0 -6
  284. package/src/lib/services/ws-manager-service/models/communication-type.enum.ts +0 -5
  285. package/src/lib/services/ws-manager-service/models/index.ts +0 -10
  286. package/src/lib/services/ws-manager-service/models/notification-message.model.ts +0 -29
  287. package/src/lib/services/ws-manager-service/models/public-message.model.ts +0 -18
  288. package/src/lib/services/ws-manager-service/models/state-message.model.ts +0 -18
  289. package/src/lib/services/ws-manager-service/models/ws-user.model.ts +0 -38
  290. package/src/lib/services/ws-manager-service/services/index.ts +0 -4
  291. package/src/lib/services/ws-manager-service/services/websocket-message.service.ts +0 -129
  292. package/src/lib/services/ws-manager-service/services/websocket.service.ts +0 -434
  293. package/src/lib/services/ws-manager-service/websocket-service/index.ts +0 -1
  294. package/src/lib/services/ws-manager-service/websocket-service/websocket-manager.service.ts +0 -716
  295. package/src/lib/services/ws-manager-service/websocket-services-complete.spec.ts +0 -596
  296. package/src/lib/services/ws-manager-service/websocket-signals-manager.service.ts +0 -141
  297. package/src/public-api.ts +0 -19
  298. package/tsconfig.lib.json +0 -34
  299. package/tsconfig.lib.prod.json +0 -10
  300. package/tsconfig.spec.json +0 -14
@@ -1,727 +0,0 @@
1
- import { Inject, inject, Injectable, Injector, Optional } from '@angular/core';
2
- import { HttpErrorResponse } from '@angular/common/http';
3
- import { BehaviorSubject, Observable, Subject, throwError, from, of } from 'rxjs';
4
- import { tap, map, finalize, catchError, concatMap, mergeMap, toArray, concat } from 'rxjs/operators';
5
-
6
- import { ApiRequest } from '../request-manager-state-service/models/api-request.model';
7
- import { RequestService } from './request.service';
8
- import { requestPolling, countdown, delayedRetry } from './rxjs-operators';
9
-
10
- import { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';
11
- import { ConfigOptions, BatchOptions, BatchResult, BatchRequestState } from '../../models';
12
- import { ObjectMergerService } from '../utils/object-merger.service';
13
- import { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display';
14
- import { WebSocketManagerService } from '../ws-manager-service/websocket-service';
15
- import { MessageTrackerService } from '../ws-manager-service/message-tracker.service';
16
-
17
- @Injectable({
18
- providedIn: 'root',
19
- })
20
- export class HTTPManagerService<T> extends RequestService {
21
-
22
- toastMessage = inject(ToastMessageDisplayService)
23
- ng_injector = inject(Injector)
24
- objectMergerService = inject(ObjectMergerService)
25
- wsManager = inject(WebSocketManagerService)
26
- messageTracker = inject(MessageTrackerService)
27
-
28
- // Delegate WebSocket observables to WebSocketManagerService (singleton)
29
- override connectionStatus$ = this.wsManager.connectionStatus$
30
- override messages$ = this.messageTracker.messages$ // Messages flow through MessageTrackerService
31
- override subscribedChannels$ = this.wsManager.subscribedChannels$
32
- retryCount$ = this.wsManager.retryCount$
33
- maxRetries$ = this.wsManager.maxRetries$
34
-
35
- private countdown = new BehaviorSubject<number>(0);
36
- countdown$ = this.countdown.asObservable();
37
-
38
- private error = new BehaviorSubject<boolean>(false);
39
- error$ = this.error.asObservable();
40
-
41
- private data = new BehaviorSubject<any>(null)
42
- data$ = this.data.asObservable()
43
-
44
- private polling$ = new Subject<void>();
45
-
46
- config = ApiRequest.adapt();
47
-
48
- override streamProgress$ = this.streamProgress.asObservable();
49
-
50
- constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {
51
- super()
52
- this.config = (configOptions) ? ApiRequest.adapt(configOptions.httpRequestOptions) : this.config
53
- }
54
-
55
- // ═══════════════════════════════════════════════════════════════════════════
56
- // WEBSOCKET METHODS (Delegated to WebSocketManagerService singleton)
57
- // ═══════════════════════════════════════════════════════════════════════════
58
-
59
- /**
60
- * Connect to WebSocket server
61
- * Only the first call across ALL instances will establish a connection
62
- */
63
- override connect(options: any, jwtToken: string): void {
64
- this.wsManager.connect(options, jwtToken);
65
- }
66
-
67
- /**
68
- * Disconnect from WebSocket server
69
- */
70
- override disconnect(): void {
71
- this.wsManager.disconnect();
72
- }
73
-
74
- /**
75
- * Subscribe to a channel
76
- */
77
- override subscribeToChannel(channel: string, userData?: any): void {
78
- this.messageTracker.subscribeToChannel(channel, userData);
79
- }
80
-
81
- /**
82
- * Subscribe to multiple channels
83
- */
84
- override subscribeToChannels(channels: string[], userData?: any): void {
85
- channels.forEach(channel => this.messageTracker.subscribeToChannel(channel, userData));
86
- }
87
-
88
- /**
89
- * Unsubscribe from a channel
90
- */
91
- override unsubscribeFromChannel(channel: string): void {
92
- this.wsManager.unsubscribeFromChannel(channel);
93
- }
94
-
95
- /**
96
- * Get currently subscribed channels
97
- */
98
- override getSubscribedChannels(): Set<string> {
99
- return this.wsManager.getSubscribedChannels();
100
- }
101
-
102
- /**
103
- * Send broadcast message
104
- */
105
- override sendBroadcast(content: any): void {
106
- this.wsManager.sendBroadcast(content);
107
- }
108
-
109
- /**
110
- * Send message in channel (state manager message)
111
- */
112
- override sendMessageInChannel(channel: string, content: any): void {
113
- this.wsManager.sendMessageInChannel(channel, content);
114
- }
115
-
116
- /**
117
- * Send channel message
118
- */
119
- override sendChannelMessage(channel: string, content: any): void {
120
- this.wsManager.sendChannelMessage(channel, content);
121
- }
122
-
123
- /**
124
- * Send message to multiple channels
125
- */
126
- override sendChannelMessageToChannels(channels: string[], content: any): void {
127
- this.wsManager.sendChannelMessageToChannels(channels, content);
128
- }
129
-
130
- /**
131
- * Send message to user
132
- */
133
- override sendMessageToUser(user: string, content: any): void {
134
- this.wsManager.sendMessageToUser(user, content);
135
- }
136
-
137
- /**
138
- * Get all channels
139
- */
140
- override getAllChannels(): void {
141
- this.wsManager.getAllChannels();
142
- }
143
-
144
- /**
145
- * Create channel
146
- */
147
- override createChannel(channel: string): void {
148
- this.wsManager.createChannel(channel);
149
- }
150
-
151
- /**
152
- * Delete channel
153
- */
154
- override deleteChannel(channel: string): void {
155
- this.wsManager.deleteChannel(channel);
156
- }
157
-
158
- /**
159
- * Get users in channel
160
- */
161
- override getUsersInChannel(channel: string): void {
162
- this.wsManager.getUsersInChannel(channel);
163
- }
164
-
165
- /**
166
- * Create notification channel
167
- */
168
- override createNotificationChannel(channel: string): void {
169
- this.wsManager.createNotificationChannel(channel);
170
- }
171
-
172
- /**
173
- * Get notification channels
174
- */
175
- override getNotificationChannels(): void {
176
- this.wsManager.getNotificationChannels();
177
- }
178
-
179
- /**
180
- * Get today's notification channels
181
- */
182
- override getTodaysNotificationChannels(): void {
183
- this.wsManager.getTodaysNotificationChannels();
184
- }
185
-
186
- /**
187
- * Subscribe to notification channel
188
- */
189
- override subscribeToNotificationChannel(channel: string, options?: any, user?: any): void {
190
- this.wsManager.subscribeToNotificationChannel(channel, options, user);
191
- }
192
-
193
- /**
194
- * Unsubscribe from notification channel
195
- */
196
- override unsubscribeFromNotificationChannel(channel: string): void {
197
- this.wsManager.unsubscribeFromNotificationChannel(channel);
198
- }
199
-
200
- /**
201
- * Send notification to channel
202
- */
203
- override sendNotification(channel: string, content: any): void {
204
- this.wsManager.sendNotification(channel, content);
205
- }
206
-
207
- // REQUESTS
208
-
209
- getRequest<T>(options?: ApiRequest, params?: any[]) {
210
-
211
- this.isPending.next(true);
212
- this.data.next(null)
213
- this.streamProgress.next({
214
- received: 0,
215
- total: undefined,
216
- percent: 0,
217
- stage: 'connecting'
218
- });
219
-
220
- const updatedOptions = this.defineReqOptions(options, params)
221
- const func = this.getRecordRequest;
222
- const requests = this.createRequest(func, updatedOptions);
223
-
224
- return this.createObservable<T>(updatedOptions, requests, func.name)
225
- .pipe(
226
- tap(data => {
227
- this.data.next(data)
228
- if(updatedOptions.displaySuccess) this.handleSuccessWithSnackBar(updatedOptions.successMessage)
229
- }),
230
- finalize(() => {
231
- this.streamProgress.next({
232
- ...this.streamProgress.value,
233
- stage: 'complete'
234
- });
235
- this.isPending.next(false)
236
- }),
237
- catchError((err) => {
238
- if(updatedOptions.displayError) this.handleErrorWithSnackBar(err, updatedOptions.errorMessage || err?.message)
239
- this.streamProgress.next({
240
- ...this.streamProgress.value,
241
- stage: 'error'
242
- });
243
- this.isPending.next(false)
244
- return this.handleError(err);
245
- })
246
- )
247
- }
248
-
249
- postRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {
250
-
251
- this.isPending.next(true);
252
- this.data.next(null)
253
-
254
- const updatedOptions = this.defineReqOptions(options, params)
255
- const func = this.createRecordRequest;
256
- const requests = this.createRequest(func, updatedOptions, data);
257
-
258
- return this.createObservable<T>(updatedOptions, requests, func.name).pipe(
259
- tap(data => {
260
- this.data.next(data)
261
- if(updatedOptions.displaySuccess) this.handleSuccessWithSnackBar(updatedOptions.successMessage)
262
- }),
263
- finalize(() => this.isPending.next(false)),
264
- catchError((err) => {
265
- if(updatedOptions.displayError) this.handleErrorWithSnackBar(err, updatedOptions.errorMessage || err?.message)
266
- this.isPending.next(false)
267
- return this.handleError(err);
268
- })
269
- )
270
- }
271
-
272
- putRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {
273
-
274
- this.isPending.next(true);
275
- this.data.next(null)
276
-
277
- const updatedOptions = this.defineReqOptions(options, params)
278
- const func = this.updateRecordRequest;
279
- const requests = this.createRequest(func, updatedOptions, data);
280
-
281
- return this.createObservable<T>(updatedOptions, requests, func.name).pipe(
282
- tap(data => {
283
- this.data.next(data)
284
- if(updatedOptions.displaySuccess) this.handleSuccessWithSnackBar(updatedOptions.successMessage)
285
- }),
286
- finalize(() => this.isPending.next(false)),
287
- catchError((err) => {
288
- if(updatedOptions.displayError) this.handleErrorWithSnackBar(err, updatedOptions.errorMessage || err?.message)
289
- this.isPending.next(false)
290
- return this.handleError(err);
291
- })
292
- )
293
- }
294
-
295
- deleteRequest<T>(options: ApiRequest, params?: any[]) {
296
-
297
- this.isPending.next(true);
298
- this.data.next(null)
299
-
300
- const updatedOptions = this.defineReqOptions(options, params)
301
- const func = this.deleteRecordRequest;
302
- const requests = this.createRequest(func, updatedOptions);
303
-
304
- return this.createObservable<T>(updatedOptions, requests, func.name).pipe(
305
- tap(data => {
306
- this.data.next(data)
307
- if(updatedOptions.displaySuccess) this.handleSuccessWithSnackBar(updatedOptions.successMessage)
308
- }),
309
- finalize(() => this.isPending.next(false)),
310
- catchError((err) => {
311
- if(updatedOptions.displayError) this.handleErrorWithSnackBar(err, updatedOptions.errorMessage || err?.message)
312
- this.isPending.next(false)
313
- return this.handleError(err);
314
- })
315
- )
316
- }
317
-
318
- downloadRequest<T>(options: ApiRequest, params?: any[], saveAs?: string) {
319
-
320
- this.isPending.next(true);
321
-
322
- const updatedOptions = this.defineReqOptions(options, params)
323
- const func = this.downloadFileRequest;
324
- const requests = this.createRequest(func, updatedOptions)
325
-
326
- return this.createObservable<T>(updatedOptions, requests, func.name)
327
- .pipe(
328
- catchError((err) => {
329
- this.error.next(true)
330
- this.isPending.next(false)
331
- return this.handleError(err);
332
- })
333
- )
334
-
335
- }
336
-
337
- uploadRequest<T>(files: File | File[], options: ApiRequest, params?: any[]) {
338
-
339
- this.isPending.next(true);
340
- this.data.next(null)
341
-
342
- const updatedOptions = this.defineReqOptions(options, params)
343
- updatedOptions.uploadFiles = files
344
-
345
- const func = this.uploadFileRequest;
346
- const requests = this.createRequest(func, updatedOptions);
347
-
348
- return this.createObservable<T>(updatedOptions, requests, func.name).pipe(
349
- tap(data => {
350
- this.data.next(data)
351
- if(updatedOptions.displaySuccess) this.handleSuccessWithSnackBar(updatedOptions.successMessage)
352
- }),
353
- finalize(() => this.isPending.next(false)),
354
- catchError((err) => {
355
- if(updatedOptions.displayError) this.handleErrorWithSnackBar(err, updatedOptions.errorMessage || err?.message)
356
- this.isPending.next(false)
357
- return this.handleError(err);
358
- })
359
- )
360
- }
361
-
362
- private createObservable<T>(options: ApiRequest, request$: Observable<T>, funcName: string) {
363
-
364
- const polling = options.polling ? (options.polling > 0 ? true : false) : false;
365
- const isPolling =
366
- polling &&
367
- !(funcName === 'deleteRecordRequest' || funcName === 'updateRecordRequest' || funcName === 'createRecordRequest')
368
- ? true
369
- : false;
370
-
371
- this.polling$.next();
372
-
373
- const polling$ =
374
- (isPolling && options.polling) || 0 >= 3
375
- ? request$.pipe(
376
- requestPolling((options.polling || 0) + 1, this.polling$, this.isPending),
377
- tap(() => this.countdown.next(0)),
378
- tap(() => {
379
- if (!options.polling) return;
380
- const count = options.polling ? options.polling : 0;
381
- // console.log('COUNT:', count);
382
- countdown(count)
383
- .pipe(
384
- map((x: number) => {
385
- // console.log('XX:', count, x);
386
- const pollingInSec = options.polling || 0;
387
- const percentageCompleted = ((pollingInSec - x) / pollingInSec) * 100;
388
- return Math.round(percentageCompleted);
389
- })
390
- )
391
- .subscribe((countDownValue: number) => {
392
- // console.log(this.countdown.value, countDownValue);
393
- this.countdown.next(countDownValue);
394
- });
395
- }),
396
- )
397
- : request$.pipe(
398
- catchError((err: any) => {
399
-
400
- if (err instanceof HttpErrorResponse) {
401
- this.error.next(true);
402
- return this.handleError(err);
403
- }
404
-
405
- return throwError(() => err);
406
- }),
407
- // finalize(() => this.isPending.next(false))
408
- )
409
-
410
- return polling$.pipe(
411
- (options?.retry && options.retry.times > 0)
412
- ? delayedRetry((options.retry.delay || 3) * 1000, (options.retry.times || 0) - 1)
413
- : (source: Observable<T>) => source,
414
- catchError((err: any, caught: Observable<T>) => {
415
-
416
- if (err instanceof HttpErrorResponse) {
417
- this.error.next(true);
418
- if(isPolling) this.stopPolling();
419
- return this.handleError(err);
420
- }
421
-
422
- return throwError(() => err);
423
- })
424
- );
425
- }
426
-
427
- private createRequest(func: Function, options: ApiRequest, data?: any | any[]) {
428
- const dataItem = this.prepareRequestData(options, data, func.name);
429
- return func.bind(this)(dataItem.options, dataItem.data);
430
- }
431
-
432
- private prepareRequestData(options: ApiRequest, data: any, funcName: string) {
433
-
434
- if ((options.mapper && funcName === 'updateRecordRequest') || funcName === 'createRecordRequest') {
435
- if (options?.mapper) {
436
- data = options.mapper
437
- ? Array.isArray(data)
438
- ? map((item) => options.mapper(item))
439
- : options.mapper(data)
440
- : data;
441
- }
442
- } else {
443
- if (options?.adapter) {
444
- data = Array.isArray(data)
445
- ? map((item) => options.adapter(item))
446
- : options.adapter(data)
447
- }
448
- }
449
-
450
- return { options: options, data: data };
451
- }
452
-
453
- // MISC
454
-
455
- private handleError(error: Response | any) {
456
- this.error.next(error.message || `${error.status} - ${error.statusText}`)
457
- return throwError(() => error)
458
- }
459
-
460
- private handleErrorWithSnackBar(error: Response | any, message?: string) {
461
-
462
- const displayError = ToastDisplay.adapt({
463
- message: message || error.message || `${error.status} - ${error.statusText}`,
464
- action: 'OK',
465
- color: ToastColors.ERROR,
466
- icon: 'error',
467
- duration: 5 * 1000, //5 seconds
468
- })
469
-
470
- this.toastMessage.toastMessage(displayError)
471
-
472
- }
473
-
474
- private handleSuccessWithSnackBar(message?: string) {
475
-
476
- const displaySuccess = ToastDisplay.adapt({
477
- message: message || 'Success',
478
- action: 'OK',
479
- color: ToastColors.SUCCESS,
480
- icon: 'check_circle',
481
- duration: 3 * 1000, //3 seconds
482
- })
483
-
484
- this.toastMessage.toastMessage(displaySuccess)
485
-
486
- }
487
-
488
- private stopPolling() {
489
- this.isPending.next(false);
490
- this.polling$.next();
491
- }
492
-
493
- private defineReqOptions(options: any, params?: any[]) {
494
-
495
- const req = ApiRequest.adapt(options)
496
- if(req?.path) req.path = (params) ? [...req.path, ...params] : req.path
497
-
498
- const optionsReq = (req)? req : ApiRequest.adapt()
499
- const updatedOptions = this.objectMergerService.mergeOptions(optionsReq)
500
-
501
- return updatedOptions
502
-
503
- }
504
-
505
- // BATCH REQUESTS
506
-
507
- /**
508
- * Execute multiple HTTP requests with configurable execution strategy
509
- * @param requests Array of ApiRequest configurations
510
- * @param options Optional batch configuration (all properties optional)
511
- * @returns Observable emitting array of data in the order of requests provided
512
- */
513
- getBatchRequests<U = T>(
514
- requests: ApiRequest[],
515
- options?: BatchOptions
516
- ): Observable<U[]> {
517
- const batchOptions = BatchOptions.adapt(options);
518
-
519
- const mode = batchOptions.mode || 'sequential';
520
-
521
- if (mode === 'parallel') {
522
- return this.getParallelRequest(requests, batchOptions);
523
- } else {
524
- return this.getSequentialRequest(requests, batchOptions);
525
- }
526
- }
527
-
528
- /**
529
- * Execute requests sequentially (one at a time, in order)
530
- * @param requests Array of ApiRequest configurations
531
- * @param options Optional batch configuration
532
- * @returns Observable emitting array of data when all requests complete
533
- */
534
- getSequentialRequest<U = T>(
535
- requests: ApiRequest[],
536
- options?: BatchOptions,
537
- successMessage?: string,
538
- errorMessage?: string
539
- ): Observable<U[]> {
540
- const batchOptions = BatchOptions.adapt(options);
541
- const results: U[] = new Array(requests.length);
542
-
543
- return from(requests).pipe(
544
- concatMap((req, index) => {
545
- return this.getRequest<U>(req, undefined).pipe(
546
- tap(data => {
547
- results[index] = data;
548
- }),
549
- catchError(error => this.handleSequentialError(req, error, index, batchOptions))
550
- );
551
- }),
552
- toArray(),
553
- tap(() => {
554
- if (batchOptions.displaySuccess) this.handleSuccessWithSnackBar(successMessage);
555
- }),
556
- map(() => results)
557
- );
558
- }
559
-
560
- /**
561
- * Execute requests in parallel with concurrency control
562
- * @param requests Array of ApiRequest configurations
563
- * @param options Optional batch configuration with concurrency limit
564
- * @returns Observable emitting array of data when all requests complete
565
- */
566
- getParallelRequest<U = T>(
567
- requests: ApiRequest[],
568
- options?: BatchOptions,
569
- successMessage?: string,
570
- errorMessage?: string
571
- ): Observable<U[]> {
572
- const batchOptions = BatchOptions.adapt(options);
573
- const concurrency = batchOptions.concurrency || 3;
574
- const results: U[] = new Array(requests.length);
575
-
576
- return from(requests).pipe(
577
- mergeMap((req, index) => {
578
- return this.getRequest<U>(req, undefined).pipe(
579
- tap(data => {
580
- results[index] = data;
581
- }),
582
- catchError(error => this.handleParallelError(req, error, index, batchOptions))
583
- );
584
- }, concurrency),
585
- toArray(),
586
- tap(() => {
587
- if (batchOptions.displaySuccess) this.handleSuccessWithSnackBar(successMessage);
588
- }),
589
- map(() => results)
590
- );
591
- }
592
-
593
- /**
594
- * Execute multiple HTTP requests and emit individual state changes in real-time
595
- * @param requests Array of ApiRequest configurations
596
- * @param options Optional batch configuration (all properties optional)
597
- * @returns Observable stream of individual request states
598
- */
599
- getBatchRequestsStream<U = T>(
600
- requests: ApiRequest[],
601
- options?: BatchOptions
602
- ): Observable<BatchRequestState<U>> {
603
- const batchOptions = BatchOptions.adapt(options);
604
- const mode = batchOptions.mode || 'sequential';
605
-
606
- if (mode === 'parallel') {
607
- return this.getParallelStream(requests, batchOptions);
608
- } else {
609
- return this.getSequentialStream(requests, batchOptions);
610
- }
611
- }
612
-
613
- /**
614
- * Execute requests sequentially and emit state changes
615
- */
616
- private getSequentialStream<U>(
617
- requests: ApiRequest[],
618
- options: BatchOptions
619
- ): Observable<BatchRequestState<U>> {
620
- return from(requests).pipe(
621
- concatMap((req, index) => {
622
- const pending$: Observable<BatchRequestState<U>> = of({
623
- index,
624
- request: req,
625
- isPending: true
626
- });
627
-
628
- const result$: Observable<BatchRequestState<U>> = this.getRequest<U>(req).pipe(
629
- map((data) => ({
630
- index,
631
- request: req,
632
- isPending: false,
633
- data
634
- }) as BatchRequestState<U>),
635
- catchError((error) => of({
636
- index,
637
- request: req,
638
- isPending: false,
639
- error
640
- } as BatchRequestState<U>))
641
- );
642
-
643
- return pending$.pipe(
644
- concatMap(() => result$)
645
- );
646
- })
647
- );
648
- }
649
-
650
- /**
651
- * Execute requests in parallel and emit state changes
652
- */
653
- private getParallelStream<U>(
654
- requests: ApiRequest[],
655
- options: BatchOptions
656
- ): Observable<BatchRequestState<U>> {
657
- const concurrency = options.concurrency || 3;
658
-
659
- return from(requests).pipe(
660
- mergeMap((req, index) => {
661
- const pending$: Observable<BatchRequestState<U>> = of({
662
- index,
663
- request: req,
664
- isPending: true
665
- });
666
-
667
- const result$: Observable<BatchRequestState<U>> = this.getRequest<U>(req).pipe(
668
- map((data) => ({
669
- index,
670
- request: req,
671
- isPending: false,
672
- data
673
- }) as BatchRequestState<U>),
674
- catchError((error) => of({
675
- index,
676
- request: req,
677
- isPending: false,
678
- error
679
- } as BatchRequestState<U>))
680
- );
681
-
682
- return pending$.pipe(
683
- concatMap(() => result$)
684
- );
685
- }, concurrency)
686
- );
687
- }
688
-
689
- private handleSequentialError<U>(
690
- request: ApiRequest,
691
- error: any,
692
- index: number,
693
- options: BatchOptions
694
- ): Observable<U> {
695
- if (options.logErrors !== false) {
696
- console.error(`Batch request ${index} failed:`, error);
697
- }
698
-
699
- if (options.stopOnError) {
700
- return throwError(() => error);
701
- }
702
-
703
- if (options.ignoreErrors) {
704
- return of(undefined as unknown as U);
705
- }
706
-
707
- return throwError(() => error);
708
- }
709
-
710
- private handleParallelError<U>(
711
- request: ApiRequest,
712
- error: any,
713
- index: number,
714
- options: BatchOptions
715
- ): Observable<U> {
716
- if (options.logErrors !== false) {
717
- console.error(`Batch request ${index} failed:`, error);
718
- }
719
-
720
- if (options.ignoreErrors) {
721
- return of(undefined as unknown as U);
722
- }
723
-
724
- return of(undefined as unknown as U);
725
- }
726
- }
727
-