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,674 +0,0 @@
1
- import { Inject, inject, Injectable, Injector, Optional, signal } from '@angular/core';
2
- import { HttpErrorResponse } from '@angular/common/http';
3
- import { 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 { RequestSignalsService } from './request-signals.service';
8
- import { requestPolling, countdown, delayedRetry } from './rxjs-operators';
9
-
10
- import { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display';
11
- import { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';
12
- import { ConfigOptions, BatchOptions, BatchResult, BatchRequestState } from '../../models';
13
- import { ObjectMergerService } from '../utils/object-merger.service';
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 HTTPManagerSignalsService<T> extends RequestSignalsService {
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$;
31
- override subscribedChannels$ = this.wsManager.subscribedChannels$;
32
-
33
- // ✅ Replaced BehaviorSubjects with Angular signals
34
- countdown = signal<number>(0);
35
- error = signal<string | boolean>(false);
36
- data = signal<any>(null);
37
-
38
- private polling$ = new Subject<void>();
39
-
40
- config = ApiRequest.adapt();
41
-
42
- constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {
43
- super();
44
- this.config = configOptions
45
- ? ApiRequest.adapt(configOptions.httpRequestOptions)
46
- : this.config;
47
- }
48
-
49
- // ═══════════════════════════════════════════════════════════════════════════
50
- // WEBSOCKET METHODS (Delegated to WebSocketManagerService singleton)
51
- // ═══════════════════════════════════════════════════════════════════════════
52
-
53
- /**
54
- * Connect to WebSocket server
55
- */
56
- override connect(options: any, jwtToken: string): void {
57
- this.wsManager.connect(options, jwtToken);
58
- }
59
-
60
- /**
61
- * Disconnect from WebSocket server
62
- */
63
- override disconnect(): void {
64
- this.wsManager.disconnect();
65
- }
66
-
67
- /**
68
- * Subscribe to a channel
69
- */
70
- override subscribeToChannel(channel: string, userData?: any): void {
71
- this.messageTracker.subscribeToChannel(channel, userData);
72
- }
73
-
74
- /**
75
- * Subscribe to multiple channels
76
- */
77
- override subscribeToChannels(channels: string[], userData?: any): void {
78
- channels.forEach(channel => this.messageTracker.subscribeToChannel(channel, userData));
79
- }
80
-
81
- /**
82
- * Unsubscribe from a channel
83
- */
84
- override unsubscribeFromChannel(channel: string): void {
85
- this.wsManager.unsubscribeFromChannel(channel);
86
- }
87
-
88
- /**
89
- * Get currently subscribed channels
90
- */
91
- override getSubscribedChannels(): Set<string> {
92
- return this.wsManager.getSubscribedChannels();
93
- }
94
-
95
- /**
96
- * Send broadcast message
97
- */
98
- override sendBroadcast(content: any): void {
99
- this.wsManager.sendBroadcast(content);
100
- }
101
-
102
- /**
103
- * Send message in channel (state manager message)
104
- */
105
- override sendMessageInChannel(channel: string, content: any): void {
106
- this.wsManager.sendMessageInChannel(channel, content);
107
- }
108
-
109
- /**
110
- * Send channel message
111
- */
112
- override sendChannelMessage(channel: string, content: any): void {
113
- this.wsManager.sendChannelMessage(channel, content);
114
- }
115
-
116
- /**
117
- * Send message to multiple channels
118
- */
119
- override sendChannelMessageToChannels(channels: string[], content: any): void {
120
- this.wsManager.sendChannelMessageToChannels(channels, content);
121
- }
122
-
123
- /**
124
- * Send message to user
125
- */
126
- override sendMessageToUser(user: string, content: any): void {
127
- this.wsManager.sendMessageToUser(user, content);
128
- }
129
-
130
- /**
131
- * Get all channels
132
- */
133
- override getAllChannels(): void {
134
- this.wsManager.getAllChannels();
135
- }
136
-
137
- /**
138
- * Create channel
139
- */
140
- override createChannel(channel: string): void {
141
- this.wsManager.createChannel(channel);
142
- }
143
-
144
- /**
145
- * Delete channel
146
- */
147
- override deleteChannel(channel: string): void {
148
- this.wsManager.deleteChannel(channel);
149
- }
150
-
151
- /**
152
- * Get users in channel
153
- */
154
- override getUsersInChannel(channel: string): void {
155
- this.wsManager.getUsersInChannel(channel);
156
- }
157
-
158
- /**
159
- * Create notification channel
160
- */
161
- override createNotificationChannel(channel: string): void {
162
- this.wsManager.createNotificationChannel(channel);
163
- }
164
-
165
- /**
166
- * Get notification channels
167
- */
168
- override getNotificationChannels(): void {
169
- this.wsManager.getNotificationChannels();
170
- }
171
-
172
- /**
173
- * Get today's notification channels
174
- */
175
- override getTodaysNotificationChannels(): void {
176
- this.wsManager.getTodaysNotificationChannels();
177
- }
178
-
179
- /**
180
- * Subscribe to notification channel
181
- */
182
- override subscribeToNotificationChannel(channel: string, options?: any, user?: any): void {
183
- this.wsManager.subscribeToNotificationChannel(channel, options, user);
184
- }
185
-
186
- /**
187
- * Unsubscribe from notification channel
188
- */
189
- override unsubscribeFromNotificationChannel(channel: string): void {
190
- this.wsManager.unsubscribeFromNotificationChannel(channel);
191
- }
192
-
193
- /**
194
- * Send notification to channel
195
- */
196
- override sendNotification(channel: string, content: any): void {
197
- this.wsManager.sendNotification(channel, content);
198
- }
199
-
200
- // REQUESTS
201
- getRequest<T>(options?: ApiRequest, params?: any[]) {
202
- this.isPending.set(true);
203
- this.data.set(null);
204
-
205
- const updatedOptions = this.defineReqOptions(options, params);
206
- const func = this.getRecordRequest;
207
- const requests = this.createRequest(func, updatedOptions);
208
-
209
- return this.createObservable<T>(updatedOptions, requests, func.name).pipe(
210
- tap(data => {
211
- this.data.set(data);
212
- if (updatedOptions.displaySuccess) this.handleSuccessWithSnackBar(updatedOptions.successMessage);
213
- }),
214
- finalize(() => this.isPending.set(false)),
215
- catchError((err) => {
216
- if (updatedOptions.displayError) this.handleErrorWithSnackBar(err, updatedOptions.errorMessage || err?.message);
217
- this.isPending.set(false);
218
- return this.handleError(err);
219
- })
220
- );
221
- }
222
-
223
- postRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {
224
- this.isPending.set(true);
225
- this.data.set(null);
226
-
227
- const updatedOptions = this.defineReqOptions(options, params);
228
- const func = this.createRecordRequest;
229
- const requests = this.createRequest(func, updatedOptions, data);
230
-
231
- return this.createObservable<T>(updatedOptions, requests, func.name).pipe(
232
- tap(data => {
233
- this.data.set(data);
234
- if (updatedOptions.displaySuccess) this.handleSuccessWithSnackBar(updatedOptions.successMessage);
235
- }),
236
- finalize(() => this.isPending.set(false)),
237
- catchError((err) => {
238
- if (updatedOptions.displayError) this.handleErrorWithSnackBar(err, updatedOptions.errorMessage);
239
- this.isPending.set(false);
240
- return this.handleError(err);
241
- })
242
- );
243
- }
244
-
245
- putRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {
246
- this.isPending.set(true);
247
- this.data.set(null);
248
-
249
- const updatedOptions = this.defineReqOptions(options, params);
250
- const func = this.updateRecordRequest;
251
- const requests = this.createRequest(func, updatedOptions, data);
252
-
253
- return this.createObservable<T>(updatedOptions, requests, func.name).pipe(
254
- tap(data => {
255
- this.data.set(data);
256
- if (updatedOptions.displaySuccess) this.handleSuccessWithSnackBar(updatedOptions.successMessage);
257
- }),
258
- finalize(() => this.isPending.set(false)),
259
- catchError((err) => {
260
- if (updatedOptions.displayError) this.handleErrorWithSnackBar(err, updatedOptions.errorMessage);
261
- this.isPending.set(false);
262
- return this.handleError(err);
263
- })
264
- );
265
- }
266
-
267
- deleteRequest<T>(options: ApiRequest, params?: any[]) {
268
- this.isPending.set(true);
269
- this.data.set(null);
270
-
271
- const updatedOptions = this.defineReqOptions(options, params);
272
- const func = this.deleteRecordRequest;
273
- const requests = this.createRequest(func, updatedOptions);
274
-
275
- return this.createObservable<T>(updatedOptions, requests, func.name).pipe(
276
- tap(data => {
277
- this.data.set(data);
278
- if (updatedOptions.displaySuccess) this.handleSuccessWithSnackBar(updatedOptions.successMessage);
279
- }),
280
- finalize(() => this.isPending.set(false)),
281
- catchError((err) => {
282
- if (updatedOptions.displayError) this.handleErrorWithSnackBar(err, updatedOptions.errorMessage);
283
- this.isPending.set(false);
284
- return this.handleError(err);
285
- })
286
- );
287
- }
288
-
289
- downloadRequest<T>(options: ApiRequest, params?: any[], saveAs?: string) {
290
- this.isPending.set(true);
291
-
292
- const updatedOptions = this.defineReqOptions(options, params);
293
- const func = this.downloadFileRequest;
294
- const requests = this.createRequest(func, updatedOptions);
295
-
296
- return this.createObservable<T>(updatedOptions, requests, func.name).pipe(
297
- catchError((err) => {
298
- this.error.set(true);
299
- this.isPending.set(false);
300
- return this.handleError(err);
301
- })
302
- );
303
- }
304
- uploadRequest<T>(files: File | File[], options: ApiRequest, params?: any[]) {
305
- this.isPending.set(true);
306
- this.data.set(null);
307
-
308
- const updatedOptions = this.defineReqOptions(options, params);
309
- updatedOptions.uploadFiles = files;
310
-
311
- const func = this.uploadFileRequest;
312
- const requests = this.createRequest(func, updatedOptions);
313
-
314
- return this.createObservable<T>(updatedOptions, requests, func.name).pipe(
315
- tap(data => {
316
- this.data.set(data);
317
- if (updatedOptions.displaySuccess) this.handleSuccessWithSnackBar(updatedOptions.successMessage);
318
- }),
319
- finalize(() => this.isPending.set(false)),
320
- catchError((err) => {
321
- if (updatedOptions.displayError) this.handleErrorWithSnackBar(err, updatedOptions.errorMessage || err?.message);
322
- this.isPending.set(false);
323
- return this.handleError(err);
324
- })
325
- );
326
- }
327
-
328
- // --- private helpers ---
329
- private createObservable<T>(options: ApiRequest, request$: Observable<T>, funcName: string) {
330
- const polling =
331
- options.polling ? (options.polling > 0 ? true : false) : false;
332
-
333
- const isPolling =
334
- polling &&
335
- !(funcName === 'deleteRecordRequest' ||
336
- funcName === 'updateRecordRequest' ||
337
- funcName === 'createRecordRequest');
338
-
339
- this.polling$.next();
340
-
341
- const polling$ =
342
- (isPolling && options.polling) || 0 >= 3
343
- ? request$.pipe(
344
- requestPolling((options.polling || 0) + 1, this.polling$, this.isPending),
345
- tap(() => this.countdown.set(0)),
346
- tap(() => {
347
- if (!options.polling) return;
348
- const count = options.polling ? options.polling : 0;
349
- countdown(count)
350
- .pipe(
351
- map((x: number) => {
352
- const pollingInSec = options.polling || 0;
353
- const percentageCompleted = ((pollingInSec - x) / pollingInSec) * 100;
354
- return Math.round(percentageCompleted);
355
- })
356
- )
357
- .subscribe((countDownValue: number) => {
358
- this.countdown.set(countDownValue);
359
- });
360
- }),
361
- )
362
- : request$.pipe(
363
- catchError((err: any) => {
364
- if (err instanceof HttpErrorResponse) {
365
- this.error.set(true);
366
- return this.handleError(err);
367
- }
368
- return throwError(() => err);
369
- })
370
- );
371
-
372
- return polling$.pipe(
373
- options?.retry && options.retry.times > 0
374
- ? delayedRetry((options.retry.delay || 3) * 1000, (options.retry.times || 0) - 1)
375
- : (source: Observable<T>) => source,
376
- catchError((err: any, caught: Observable<T>) => {
377
- if (err instanceof HttpErrorResponse) {
378
- this.error.set(true);
379
- if (isPolling) this.stopPolling();
380
- return this.handleError(err);
381
- }
382
- return throwError(() => err);
383
- })
384
- );
385
- }
386
-
387
- private createRequest(func: Function, options: ApiRequest, data?: any | any[]) {
388
- const dataItem = this.prepareRequestData(options, data, func.name);
389
- return func.bind(this)(dataItem.options, dataItem.data);
390
- }
391
-
392
- private prepareRequestData(options: ApiRequest, data: any, funcName: string) {
393
- if ((options.mapper && funcName === 'updateRecordRequest') || funcName === 'createRecordRequest') {
394
- if (options?.mapper) {
395
- data = options.mapper
396
- ? Array.isArray(data)
397
- ? map((item) => options.mapper(item))
398
- : options.mapper(data)
399
- : data;
400
- }
401
- } else {
402
- if (options?.adapter) {
403
- data = Array.isArray(data)
404
- ? map((item) => options.adapter(item))
405
- : options.adapter(data);
406
- }
407
- }
408
- return { options: options, data: data };
409
- }
410
-
411
- private handleError(error: Response | any) {
412
- this.error.set(error.message || `${error.status} - ${error.statusText}`);
413
- return throwError(() => error);
414
- }
415
-
416
- private handleErrorWithSnackBar(error: Response | any, message?: string) {
417
- const displayError = ToastDisplay.adapt({
418
- message: message || error.message || `${error.status} - ${error.statusText}`,
419
- action: 'OK',
420
- color: ToastColors.ERROR,
421
- icon: 'error',
422
- duration: 5 * 1000,
423
- });
424
- this.toastMessage.toastMessage(displayError);
425
- }
426
-
427
- private handleSuccessWithSnackBar(message?: string) {
428
- const displaySuccess = ToastDisplay.adapt({
429
- message: message || 'Success',
430
- action: 'OK',
431
- color: ToastColors.SUCCESS,
432
- icon: 'check_circle',
433
- duration: 3 * 1000,
434
- });
435
- this.toastMessage.toastMessage(displaySuccess);
436
- }
437
-
438
- private stopPolling() {
439
- this.isPending.set(false);
440
- this.polling$.next();
441
- }
442
-
443
- private defineReqOptions(options: any, params?: any[]) {
444
- const req = ApiRequest.adapt(options);
445
- if (req?.path) req.path = params ? [...req.path, ...params] : req.path;
446
-
447
- const optionsReq = req ? req : ApiRequest.adapt();
448
- const updatedOptions = this.objectMergerService.mergeOptions(optionsReq);
449
-
450
- return updatedOptions;
451
- }
452
-
453
- // BATCH REQUESTS
454
-
455
- /**
456
- * Execute multiple HTTP requests with configurable execution strategy
457
- * @param requests Array of ApiRequest configurations
458
- * @param options Optional batch configuration (all properties optional)
459
- * @returns Observable emitting array of data in the order of requests provided
460
- */
461
- getBatchRequests<U = T>(
462
- requests: ApiRequest[],
463
- options?: BatchOptions
464
- ): Observable<U[]> {
465
- const batchOptions = BatchOptions.adapt(options);
466
-
467
- const mode = batchOptions.mode || 'sequential';
468
-
469
- if (mode === 'parallel') {
470
- return this.getParallelRequest(requests, batchOptions);
471
- } else {
472
- return this.getSequentialRequest(requests, batchOptions);
473
- }
474
- }
475
-
476
- /**
477
- * Execute requests sequentially (one at a time, in order)
478
- * @param requests Array of ApiRequest configurations
479
- * @param options Optional batch configuration
480
- * @returns Observable emitting array of data when all requests complete
481
- */
482
- getSequentialRequest<U = T>(
483
- requests: ApiRequest[],
484
- options?: BatchOptions,
485
- successMessage?: string,
486
- errorMessage?: string
487
- ): Observable<U[]> {
488
- const batchOptions = BatchOptions.adapt(options);
489
- const results: U[] = new Array(requests.length);
490
-
491
- return from(requests).pipe(
492
- concatMap((req, index) => {
493
- return this.getRequest<U>(req, undefined).pipe(
494
- tap(data => {
495
- results[index] = data;
496
- }),
497
- catchError(error => this.handleSequentialError(req, error, index, batchOptions))
498
- );
499
- }),
500
- toArray(),
501
- tap(() => {
502
- if (batchOptions.displaySuccess) this.handleSuccessWithSnackBar(successMessage);
503
- }),
504
- map(() => results)
505
- );
506
- }
507
-
508
- /**
509
- * Execute requests in parallel with concurrency control
510
- * @param requests Array of ApiRequest configurations
511
- * @param options Optional batch configuration with concurrency limit
512
- * @returns Observable emitting array of data when all requests complete
513
- */
514
- getParallelRequest<U = T>(
515
- requests: ApiRequest[],
516
- options?: BatchOptions,
517
- successMessage?: string,
518
- errorMessage?: string
519
- ): Observable<U[]> {
520
- const batchOptions = BatchOptions.adapt(options);
521
- const concurrency = batchOptions.concurrency || 3;
522
- const results: U[] = new Array(requests.length);
523
-
524
- return from(requests).pipe(
525
- mergeMap((req, index) => {
526
- return this.getRequest<U>(req, undefined).pipe(
527
- tap(data => {
528
- results[index] = data;
529
- }),
530
- catchError(error => this.handleParallelError(req, error, index, batchOptions))
531
- );
532
- }, concurrency),
533
- toArray(),
534
- tap(() => {
535
- if (batchOptions.displaySuccess) this.handleSuccessWithSnackBar(successMessage);
536
- }),
537
- map(() => results)
538
- );
539
- }
540
-
541
- /**
542
- * Execute multiple HTTP requests and emit individual state changes in real-time
543
- * @param requests Array of ApiRequest configurations
544
- * @param options Optional batch configuration (all properties optional)
545
- * @returns Observable stream of individual request states
546
- */
547
- getBatchRequestsStream<U = T>(
548
- requests: ApiRequest[],
549
- options?: BatchOptions
550
- ): Observable<BatchRequestState<U>> {
551
- const batchOptions = BatchOptions.adapt(options);
552
- const mode = batchOptions.mode || 'sequential';
553
-
554
- if (mode === 'parallel') {
555
- return this.getParallelStream(requests, batchOptions);
556
- } else {
557
- return this.getSequentialStream(requests, batchOptions);
558
- }
559
- }
560
-
561
- /**
562
- * Execute requests sequentially and emit state changes
563
- */
564
- private getSequentialStream<U>(
565
- requests: ApiRequest[],
566
- options: BatchOptions
567
- ): Observable<BatchRequestState<U>> {
568
- return from(requests).pipe(
569
- concatMap((req, index) => {
570
- const pending$: Observable<BatchRequestState<U>> = of({
571
- index,
572
- request: req,
573
- isPending: true
574
- });
575
-
576
- const result$: Observable<BatchRequestState<U>> = this.getRequest<U>(req).pipe(
577
- map((data) => ({
578
- index,
579
- request: req,
580
- isPending: false,
581
- data
582
- }) as BatchRequestState<U>),
583
- catchError((error) => of({
584
- index,
585
- request: req,
586
- isPending: false,
587
- error
588
- } as BatchRequestState<U>))
589
- );
590
-
591
- return pending$.pipe(
592
- concatMap(() => result$)
593
- );
594
- })
595
- );
596
- }
597
-
598
- /**
599
- * Execute requests in parallel and emit state changes
600
- */
601
- private getParallelStream<U>(
602
- requests: ApiRequest[],
603
- options: BatchOptions
604
- ): Observable<BatchRequestState<U>> {
605
- const concurrency = options.concurrency || 3;
606
-
607
- return from(requests).pipe(
608
- mergeMap((req, index) => {
609
- const pending$: Observable<BatchRequestState<U>> = of({
610
- index,
611
- request: req,
612
- isPending: true
613
- });
614
-
615
- const result$: Observable<BatchRequestState<U>> = this.getRequest<U>(req).pipe(
616
- map((data) => ({
617
- index,
618
- request: req,
619
- isPending: false,
620
- data
621
- }) as BatchRequestState<U>),
622
- catchError((error) => of({
623
- index,
624
- request: req,
625
- isPending: false,
626
- error
627
- } as BatchRequestState<U>))
628
- );
629
-
630
- return pending$.pipe(
631
- concatMap(() => result$)
632
- );
633
- }, concurrency)
634
- );
635
- }
636
-
637
- private handleSequentialError<U>(
638
- request: ApiRequest,
639
- error: any,
640
- index: number,
641
- options: BatchOptions
642
- ): Observable<U> {
643
- if (options.logErrors !== false) {
644
- console.error(`Batch request ${index} failed:`, error);
645
- }
646
-
647
- if (options.stopOnError) {
648
- return throwError(() => error);
649
- }
650
-
651
- if (options.ignoreErrors) {
652
- return of(undefined as unknown as U);
653
- }
654
-
655
- return throwError(() => error);
656
- }
657
-
658
- private handleParallelError<U>(
659
- request: ApiRequest,
660
- error: any,
661
- index: number,
662
- options: BatchOptions
663
- ): Observable<U> {
664
- if (options.logErrors !== false) {
665
- console.error(`Batch request ${index} failed:`, error);
666
- }
667
-
668
- if (options.ignoreErrors) {
669
- return of(undefined as unknown as U);
670
- }
671
-
672
- return of(undefined as unknown as U);
673
- }
674
- }