http-request-manager 18.15.33 → 18.15.34

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/TEST_COVERAGE_SUMMARY.md +458 -0
  2. package/ng-package.json +8 -0
  3. package/package.json +4 -13
  4. package/src/docs/ADVANCED_WEBSOCKET.md +633 -0
  5. package/src/docs/ARCHITECTURE.md +633 -0
  6. package/src/docs/BATCH_REQUEST_README.md +467 -0
  7. package/src/docs/COMPLETE_API_REFERENCE.md +1037 -0
  8. package/src/docs/DATABASE_README.md +1195 -0
  9. package/src/docs/ENCRYPTION_README.md +403 -0
  10. package/src/docs/HTTP_MANAGER_README.md +628 -0
  11. package/src/docs/HTTP_SINGNALS_MANAGER_README.md +654 -0
  12. package/src/docs/HTTP_STATE_MANAGER_README.md +1391 -0
  13. package/src/docs/INTERCEPTOR_README.md +549 -0
  14. package/src/docs/LOCAL_STORAGE_README.md +1056 -0
  15. package/src/docs/LOCAL_STORAGE_SIGNALS_README.md +338 -0
  16. package/src/docs/LOGGER_README.md +310 -0
  17. package/src/docs/MESSAGE_TRACKER_README.md +518 -0
  18. package/src/docs/MESSAGE_TRACKER_SIGNALS_README.md +563 -0
  19. package/src/docs/MODELS_README.md +1264 -0
  20. package/src/docs/SIGNAL_SERVICES_README.md +238 -0
  21. package/src/docs/SQL_DIXIE_README.md +574 -0
  22. package/src/docs/STORE_STATE_MANAGER_README.md +556 -0
  23. package/src/docs/STORE_STATE_SIGNALS_README.md +600 -0
  24. package/src/docs/UPLOAD_REQUEST_README.md +324 -0
  25. package/src/docs/UTILS_README.md +1604 -0
  26. package/src/docs/WEBSOCKET_MESSAGE_SERVICE.md +799 -0
  27. package/src/docs/WEBSOCKET_SIGNALS_README.md +641 -0
  28. package/src/docs/WEBSOCKET_SINGLETON_REFACTORING.md +201 -0
  29. package/src/docs/WS_MANAGER_README.md +613 -0
  30. package/src/lib/http-request-manager.module.ts +147 -0
  31. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.html +116 -0
  32. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.scss +0 -0
  33. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.ts +255 -0
  34. package/src/lib/http-request-services-demo/http-request-services-demo.component.html +123 -0
  35. package/src/lib/http-request-services-demo/http-request-services-demo.component.scss +6 -0
  36. package/src/lib/http-request-services-demo/http-request-services-demo.component.ts +53 -0
  37. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.html +195 -0
  38. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.scss +17 -0
  39. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.ts +208 -0
  40. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.html +200 -0
  41. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.scss +17 -0
  42. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.ts +214 -0
  43. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.html +53 -0
  44. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.scss +60 -0
  45. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.ts +72 -0
  46. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-download.module.ts +28 -0
  47. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.html +10 -0
  48. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.scss +29 -0
  49. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.ts +100 -0
  50. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/models/download-labels-model.ts +22 -0
  51. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.html +8 -0
  52. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.scss +19 -0
  53. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.ts +26 -0
  54. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/app-session.model.ts +30 -0
  55. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/app.model.ts +19 -0
  56. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/get-sample.model.ts +25 -0
  57. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-ai-prompt.ts +19 -0
  58. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client-details.ts +24 -0
  59. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client-info.ts +30 -0
  60. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client.model.ts +49 -0
  61. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-mapper-client-info.ts +33 -0
  62. package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.html +279 -0
  63. package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.scss +24 -0
  64. package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.ts +461 -0
  65. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.html +53 -0
  66. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.scss +60 -0
  67. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.ts +72 -0
  68. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.ts +28 -0
  69. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.html +10 -0
  70. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.scss +29 -0
  71. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.ts +100 -0
  72. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.ts +22 -0
  73. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.html +8 -0
  74. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.scss +19 -0
  75. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.ts +26 -0
  76. package/src/lib/http-request-services-demo/request-manager-demo/models/app-session.model.ts +30 -0
  77. package/src/lib/http-request-services-demo/request-manager-demo/models/app.model.ts +19 -0
  78. package/src/lib/http-request-services-demo/request-manager-demo/models/get-sample.model.ts +25 -0
  79. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.ts +19 -0
  80. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-details.ts +24 -0
  81. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.ts +30 -0
  82. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client.model.ts +49 -0
  83. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.ts +33 -0
  84. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.html +622 -0
  85. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.scss +106 -0
  86. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.ts +687 -0
  87. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.html +418 -0
  88. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.scss +24 -0
  89. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.ts +576 -0
  90. package/src/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.ts +89 -0
  91. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/services/state-data-request.service.ts +119 -0
  92. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.css +0 -0
  93. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.html +3 -0
  94. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.ts +16 -0
  95. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.css +0 -0
  96. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.html +3 -0
  97. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.ts +16 -0
  98. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.css +31 -0
  99. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.html +94 -0
  100. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.scss +41 -0
  101. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.spec.ts +203 -0
  102. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.ts +144 -0
  103. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.css +11 -0
  104. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.html +102 -0
  105. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.spec.ts +40 -0
  106. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.ts +230 -0
  107. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.css +30 -0
  108. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.html +172 -0
  109. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.spec.ts +31 -0
  110. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.ts +239 -0
  111. package/src/lib/http-request-services-demo/request-manager-ws-demo/models/oidc-client.model.ts +31 -0
  112. package/src/lib/http-request-services-demo/request-manager-ws-demo/models/user-data.model.ts +32 -0
  113. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.css +0 -0
  114. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.html +84 -0
  115. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.ts +40 -0
  116. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/index.ts +3 -0
  117. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/jwt-token.service.ts +62 -0
  118. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/message-service-demo.service.ts +83 -0
  119. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/notification-service-demo.service.ts +147 -0
  120. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/state-service-demo.service.ts +168 -0
  121. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.html +53 -0
  122. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.scss +60 -0
  123. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.ts +72 -0
  124. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-download.module.ts +28 -0
  125. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.html +10 -0
  126. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.scss +29 -0
  127. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.ts +100 -0
  128. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/models/download-labels-model.ts +22 -0
  129. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.html +8 -0
  130. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.scss +19 -0
  131. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.ts +26 -0
  132. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app-session.model.ts +30 -0
  133. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app.model.ts +19 -0
  134. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/get-sample.model.ts +25 -0
  135. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-ai-prompt.ts +19 -0
  136. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-details.ts +24 -0
  137. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-info.ts +30 -0
  138. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client.model.ts +49 -0
  139. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-mapper-client-info.ts +33 -0
  140. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.html +380 -0
  141. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.scss +24 -0
  142. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.ts +410 -0
  143. package/src/lib/http-request-services-demo/store-state-manager-demo/models/settings.model.ts +28 -0
  144. package/src/lib/http-request-services-demo/store-state-manager-demo/services/settings-state.service.ts +49 -0
  145. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.css +0 -0
  146. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.html +23 -0
  147. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.ts +36 -0
  148. package/src/lib/http-request-services-demo/store-state-signals-demo/store-state-signals-demo.component.ts +161 -0
  149. package/src/lib/http-request-services-demo/upload-demo/models/index.ts +1 -0
  150. package/src/lib/http-request-services-demo/upload-demo/models/upload-state.model.ts +30 -0
  151. package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.html +89 -0
  152. package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.scss +160 -0
  153. package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.spec.ts +101 -0
  154. package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.ts +136 -0
  155. package/src/lib/index.ts +3 -0
  156. package/src/lib/interceptors/credentials.interceptor.ts +16 -0
  157. package/src/lib/interceptors/index.ts +6 -0
  158. package/src/lib/interceptors/models/error-settings.model.ts +22 -0
  159. package/src/lib/interceptors/models/index.ts +2 -0
  160. package/src/lib/interceptors/proxy-debugger.interceptor.ts +46 -0
  161. package/src/lib/interceptors/request-error.interceptor.ts +65 -0
  162. package/src/lib/interceptors/request-header.interceptor.ts +56 -0
  163. package/src/lib/message-display/README.md +509 -0
  164. package/src/lib/message-display/index.ts +4 -0
  165. package/src/lib/message-display/models/action.model.ts +27 -0
  166. package/src/lib/message-display/models/communication-message.model.ts +77 -0
  167. package/src/lib/message-display/models/display-config.model.ts +35 -0
  168. package/src/lib/message-display/models/display-rule.interface.ts +28 -0
  169. package/src/lib/message-display/models/display-strategy.interface.ts +8 -0
  170. package/src/lib/message-display/models/index.ts +6 -0
  171. package/src/lib/message-display/models/slide.model.ts +24 -0
  172. package/src/lib/message-display/rules/default-display-rules.ts +35 -0
  173. package/src/lib/message-display/services/message-display-router.service.ts +63 -0
  174. package/src/lib/message-display/strategies/snackbar.strategy.ts +46 -0
  175. package/src/lib/models/batch-options.model.ts +33 -0
  176. package/src/lib/models/batch-progress.model.ts +19 -0
  177. package/src/lib/models/batch-request-state.model.ts +40 -0
  178. package/src/lib/models/batch-result.model.ts +30 -0
  179. package/src/lib/models/config-http-options.model.ts +45 -0
  180. package/src/lib/models/config-local-storage-options.model.ts +27 -0
  181. package/src/lib/models/config-options.model.ts +27 -0
  182. package/src/lib/models/config-token.model.ts +9 -0
  183. package/src/lib/models/data-type.enum.ts +5 -0
  184. package/src/lib/models/database-storage.model.ts +24 -0
  185. package/src/lib/models/index.ts +16 -0
  186. package/src/lib/models/retry-options.model.ts +22 -0
  187. package/src/lib/models/upload-validation-error.model.ts +46 -0
  188. package/src/lib/services/SQL-DixieJS service/dexie-query-executor.ts +246 -0
  189. package/src/lib/services/SQL-DixieJS service/dexie-sql.service.ts +31 -0
  190. package/src/lib/services/SQL-DixieJS service/index.ts +4 -0
  191. package/src/lib/services/SQL-DixieJS service/models/execution-plan.model.ts +52 -0
  192. package/src/lib/services/SQL-DixieJS service/models/index.ts +3 -0
  193. package/src/lib/services/SQL-DixieJS service/models/sql-errors.model.ts +13 -0
  194. package/src/lib/services/SQL-DixieJS service/models/sql-options.model.ts +3 -0
  195. package/src/lib/services/SQL-DixieJS service/query-planner.ts +284 -0
  196. package/src/lib/services/SQL-DixieJS service/schema-validator.ts +217 -0
  197. package/src/lib/services/SQL-DixieJS service/sql-parser.ts +35 -0
  198. package/src/lib/services/database-manager-service/database.manager.service.ts +384 -0
  199. package/src/lib/services/database-manager-service/db.storage.service.ts +240 -0
  200. package/src/lib/services/database-manager-service/index.ts +4 -0
  201. package/src/lib/services/database-manager-service/models/index.ts +2 -0
  202. package/src/lib/services/database-manager-service/models/table-schema.ts +33 -0
  203. package/src/lib/services/index.ts +20 -0
  204. package/src/lib/services/local-storage-manager-service/index.ts +4 -0
  205. package/src/lib/services/local-storage-manager-service/local-storage-manager.service.spec.ts +71 -0
  206. package/src/lib/services/local-storage-manager-service/local-storage-manager.service.ts +567 -0
  207. package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.spec.ts +67 -0
  208. package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.ts +437 -0
  209. package/src/lib/services/local-storage-manager-service/models/global-store-options.model.ts +30 -0
  210. package/src/lib/services/local-storage-manager-service/models/index.ts +6 -0
  211. package/src/lib/services/local-storage-manager-service/models/setting-options.model.ts +35 -0
  212. package/src/lib/services/local-storage-manager-service/models/storage-data.model.ts +24 -0
  213. package/src/lib/services/local-storage-manager-service/models/storage-option.model.ts +32 -0
  214. package/src/lib/services/local-storage-manager-service/models/storage-type.enum.ts +5 -0
  215. package/src/lib/services/request-manager-services/README.md +282 -0
  216. package/src/lib/services/request-manager-services/http-manager-signals.service.ts +674 -0
  217. package/src/lib/services/request-manager-services/http-manager.service.spec.ts +353 -0
  218. package/src/lib/services/request-manager-services/http-manager.service.ts +727 -0
  219. package/src/lib/services/request-manager-services/index.ts +8 -0
  220. package/src/lib/services/request-manager-services/request-signals.service.ts +372 -0
  221. package/src/lib/services/request-manager-services/request.service.ts +435 -0
  222. package/src/lib/services/request-manager-services/rxjs-operators/countdown.ts +17 -0
  223. package/src/lib/services/request-manager-services/rxjs-operators/delay-retry.ts +16 -0
  224. package/src/lib/services/request-manager-services/rxjs-operators/index.ts +4 -0
  225. package/src/lib/services/request-manager-services/rxjs-operators/request-polling.ts +35 -0
  226. package/src/lib/services/request-manager-services/rxjs-operators/request-streaming.ts +468 -0
  227. package/src/lib/services/request-manager-state-service/http-manager-state.store.spec.ts +665 -0
  228. package/src/lib/services/request-manager-state-service/http-manager-state.store.ts +2395 -0
  229. package/src/lib/services/request-manager-state-service/index.ts +3 -0
  230. package/src/lib/services/request-manager-state-service/models/api-request.model.ts +86 -0
  231. package/src/lib/services/request-manager-state-service/models/index.ts +14 -0
  232. package/src/lib/services/request-manager-state-service/models/operation-result.model.ts +18 -0
  233. package/src/lib/services/request-manager-state-service/models/parsing-result.model.ts +21 -0
  234. package/src/lib/services/request-manager-state-service/models/request-options.model.ts +37 -0
  235. package/src/lib/services/request-manager-state-service/models/stream-config.model.ts +20 -0
  236. package/src/lib/services/request-manager-state-service/models/stream-event-metadata.model.ts +23 -0
  237. package/src/lib/services/request-manager-state-service/models/stream-event.model.ts +23 -0
  238. package/src/lib/services/request-manager-state-service/models/stream-output.model.ts +23 -0
  239. package/src/lib/services/request-manager-state-service/models/stream-progress.model.ts +24 -0
  240. package/src/lib/services/request-manager-state-service/models/stream-type.enum.ts +13 -0
  241. package/src/lib/services/request-manager-state-service/models/ws-options.model.ts +42 -0
  242. package/src/lib/services/store-state-manager-service/index.ts +4 -0
  243. package/src/lib/services/store-state-manager-service/models/index.ts +3 -0
  244. package/src/lib/services/store-state-manager-service/models/state-operation-result.model.ts +30 -0
  245. package/src/lib/services/store-state-manager-service/models/state-storage-options.model.ts +24 -0
  246. package/src/lib/services/store-state-manager-service/store-state-manager-signals.service.ts +169 -0
  247. package/src/lib/services/store-state-manager-service/store-state-manager.service.ts +153 -0
  248. package/src/lib/services/utils/app.service.spec.ts +25 -0
  249. package/src/lib/services/utils/app.service.ts +21 -0
  250. package/src/lib/services/utils/encryption/README.md +79 -0
  251. package/src/lib/services/utils/encryption/asymmetrical-encryption.service.ts +282 -0
  252. package/src/lib/services/utils/encryption/encryption-test.service.ts +39 -0
  253. package/src/lib/services/utils/encryption/index.ts +5 -0
  254. package/src/lib/services/utils/encryption/random.ts +81 -0
  255. package/src/lib/services/utils/encryption/symmetrical-encryption.service.ts +106 -0
  256. package/src/lib/services/utils/headers.service.spec.ts +80 -0
  257. package/src/lib/services/utils/headers.service.ts +18 -0
  258. package/src/lib/services/utils/index.ts +9 -0
  259. package/src/lib/services/utils/logger.service.ts +90 -0
  260. package/src/lib/services/utils/models/index.ts +4 -0
  261. package/src/lib/services/utils/models/normalized-request-options.model.ts +24 -0
  262. package/src/lib/services/utils/models/path-tracker-state.model.ts +20 -0
  263. package/src/lib/services/utils/models/query-params-tracker-options.model.ts +24 -0
  264. package/src/lib/services/utils/models/query-tracker-state.model.ts +23 -0
  265. package/src/lib/services/utils/object-merger.service.spec.ts +18 -0
  266. package/src/lib/services/utils/object-merger.service.ts +78 -0
  267. package/src/lib/services/utils/path-query.service.spec.ts +117 -0
  268. package/src/lib/services/utils/path-query.service.ts +69 -0
  269. package/src/lib/services/utils/query-params-tracker.service.ts +442 -0
  270. package/src/lib/services/utils/random-color.utils.ts +83 -0
  271. package/src/lib/services/utils/utils.service.spec.ts +165 -0
  272. package/src/lib/services/utils/utils.service.ts +192 -0
  273. package/src/lib/services/ws-manager-service/index.ts +13 -0
  274. package/src/lib/services/ws-manager-service/message-tracker-signals.service.ts +147 -0
  275. package/src/lib/services/ws-manager-service/message-tracker.service.ts +477 -0
  276. package/src/lib/services/ws-manager-service/models/channel-info.model.ts +29 -0
  277. package/src/lib/services/ws-manager-service/models/channel-message-data.model.ts +24 -0
  278. package/src/lib/services/ws-manager-service/models/channel-message.model.ts +36 -0
  279. package/src/lib/services/ws-manager-service/models/channel-type.enum.ts +6 -0
  280. package/src/lib/services/ws-manager-service/models/communication-type.enum.ts +5 -0
  281. package/src/lib/services/ws-manager-service/models/index.ts +10 -0
  282. package/src/lib/services/ws-manager-service/models/notification-message.model.ts +29 -0
  283. package/src/lib/services/ws-manager-service/models/public-message.model.ts +18 -0
  284. package/src/lib/services/ws-manager-service/models/state-message.model.ts +18 -0
  285. package/src/lib/services/ws-manager-service/models/ws-user.model.ts +38 -0
  286. package/src/lib/services/ws-manager-service/services/index.ts +4 -0
  287. package/src/lib/services/ws-manager-service/services/websocket-message.service.ts +129 -0
  288. package/src/lib/services/ws-manager-service/services/websocket.service.ts +434 -0
  289. package/src/lib/services/ws-manager-service/websocket-service/index.ts +1 -0
  290. package/src/lib/services/ws-manager-service/websocket-service/websocket-manager.service.ts +716 -0
  291. package/src/lib/services/ws-manager-service/websocket-services-complete.spec.ts +596 -0
  292. package/src/lib/services/ws-manager-service/websocket-signals-manager.service.ts +141 -0
  293. package/src/public-api.ts +19 -0
  294. package/tsconfig.lib.json +34 -0
  295. package/tsconfig.lib.prod.json +10 -0
  296. package/tsconfig.spec.json +14 -0
  297. package/fesm2022/http-request-manager.mjs +0 -13688
  298. package/fesm2022/http-request-manager.mjs.map +0 -1
  299. package/http-request-manager-18.15.33.tgz +0 -0
  300. package/types/http-request-manager.d.ts +0 -3968
@@ -0,0 +1,654 @@
1
+ # HTTP Manager Signals Service
2
+
3
+ The `HTTPManagerSignalsService` provides the same functionality as `HTTPManagerService` but uses Angular Signals for state management, making it ideal for modern Angular applications that leverage fine-grained reactivity.
4
+
5
+ ## Overview
6
+
7
+ This service provides:
8
+
9
+ - **Signal-Based State** - Exposes `data`, `isPending`, `error`, and `countdown` as Angular Signals
10
+ - **Feature Parity** - Supports all features of `HTTPManagerService` including polling, retries, adapters, and streaming
11
+ - **Optimized for Signals** - Designed to work seamlessly with Angular's Signal-based components and templates
12
+ - **Modern Reactivity** - Leverages Angular's latest reactive patterns
13
+
14
+ ## Usage
15
+
16
+ ### Basic Signal-Based HTTP Request
17
+
18
+ ```typescript
19
+ import { Component, inject } from '@angular/core';
20
+ import { HTTPManagerSignalsService, ApiRequest } from 'http-request-manager';
21
+
22
+ @Component({
23
+ selector: 'app-users',
24
+ template: `
25
+ <div *ngIf="isLoading()">Loading...</div>
26
+ <div *ngFor="let user of data()">
27
+ {{ user.name }}
28
+ </div>
29
+ `
30
+ })
31
+ export class UsersComponent {
32
+ httpManager = inject(HTTPManagerSignalsService);
33
+
34
+ data = this.httpManager.data; // Signal<any[]>
35
+ isLoading = this.httpManager.isPending; // Signal<boolean>
36
+ error = this.httpManager.error; // Signal<any>
37
+ countdown = this.httpManager.countdown; // Signal<number>
38
+
39
+ ngOnInit() {
40
+ this.httpManager.getRequest(
41
+ ApiRequest.adapt({ path: ['users'] })
42
+ ).subscribe();
43
+ }
44
+ }
45
+ ```
46
+
47
+ ### Modern Component with Signals
48
+
49
+ ```typescript
50
+ import { Component, inject, signal, computed } from '@angular/core';
51
+ import { HTTPManagerSignalsService, ApiRequest } from 'http-request-manager';
52
+
53
+ interface User {
54
+ id: number;
55
+ name: string;
56
+ email: string;
57
+ }
58
+
59
+ @Component({
60
+ selector: 'app-user-list',
61
+ template: `
62
+ <div class="user-list">
63
+ <h2>Users ({{ userCount() }})</h2>
64
+
65
+ <div *ngIf="loadingState() === 'loading'">
66
+ Loading users...
67
+ </div>
68
+
69
+ <div *ngIf="loadingState() === 'error'" class="error">
70
+ {{ errorMessage() }}
71
+ </div>
72
+
73
+ <div class="user-grid">
74
+ <div *ngFor="let user of activeUsers()" class="user-card">
75
+ <h3>{{ user.name }}</h3>
76
+ <p>{{ user.email }}</p>
77
+ <span class="user-id">#{{ user.id }}</span>
78
+ </div>
79
+ </div>
80
+
81
+ <div *ngIf="isPolling()" class="polling-info">
82
+ Auto-refresh in {{ countdown() }}s
83
+ <button (click)="refreshNow()">Refresh Now</button>
84
+ </div>
85
+ </div>
86
+ `
87
+ })
88
+ export class UserListComponent {
89
+ private httpManager = inject(HTTPManagerSignalsService);
90
+
91
+ // Raw signals
92
+ data = this.httpManager.data;
93
+ isPending = this.httpManager.isPending;
94
+ error = this.httpManager.error;
95
+ countdown = this.httpManager.countdown;
96
+
97
+ // Computed signals
98
+ userCount = computed(() => this.data().length);
99
+
100
+ activeUsers = computed(() =>
101
+ this.data().filter(user => user.active !== false)
102
+ );
103
+
104
+ loadingState = computed(() => {
105
+ if (this.isPending()) return 'loading';
106
+ if (this.error()) return 'error';
107
+ return 'idle';
108
+ });
109
+
110
+ errorMessage = computed(() => {
111
+ const err = this.error();
112
+ return err ? err.message || 'Unknown error' : '';
113
+ });
114
+
115
+ isPolling = computed(() => this.countdown() > 0);
116
+
117
+ constructor() {
118
+ // Initialize with polling
119
+ this.loadUsersWithPolling();
120
+ }
121
+
122
+ loadUsersWithPolling() {
123
+ this.httpManager.getRequest(
124
+ ApiRequest.adapt({
125
+ path: ['users'],
126
+ polling: 30, // Poll every 30 seconds
127
+ retry: { times: 3, delay: 2 },
128
+ displayError: true
129
+ })
130
+ ).subscribe();
131
+ }
132
+
133
+ refreshNow() {
134
+ this.loadUsersWithPolling();
135
+ }
136
+
137
+ stopPolling() {
138
+ this.httpManager.stopPolling();
139
+ }
140
+ }
141
+ ```
142
+
143
+ ## API Reference
144
+
145
+ ### Signal Properties
146
+
147
+ | Signal | Type | Description | Usage |
148
+ |--------|------|-------------|-------|
149
+ | `data` | `Signal<any>` | Response data from requests | `this.data()` |
150
+ | `isPending` | `Signal<boolean>` | Loading state indicator | `this.isPending()` |
151
+ | `error` | `Signal<any>` | Error state | `this.error()` |
152
+ | `countdown` | `Signal<number>` | Countdown for polling | `this.countdown()` |
153
+
154
+ ### HTTP Methods
155
+
156
+ All HTTP methods work the same as `HTTPManagerService`:
157
+
158
+ ```typescript
159
+ // GET Request
160
+ this.httpManager.getRequest(
161
+ ApiRequest.adapt({ path: ['users'] })
162
+ ).subscribe();
163
+
164
+ // POST Request
165
+ this.httpManager.postRequest(
166
+ ApiRequest.adapt({ path: ['users'] }),
167
+ { name: 'John Doe', email: 'john@example.com' }
168
+ ).subscribe();
169
+
170
+ // PUT Request
171
+ this.httpManager.putRequest(
172
+ ApiRequest.adapt({ path: ['users', '123'] }),
173
+ { name: 'Jane Doe' }
174
+ ).subscribe();
175
+
176
+ // DELETE Request
177
+ this.httpManager.deleteRequest(
178
+ ApiRequest.adapt({ path: ['users', '123'] })
179
+ ).subscribe();
180
+
181
+ // Download Request
182
+ this.httpManager.downloadRequest(
183
+ ApiRequest.adapt({
184
+ path: ['files', 'report.pdf'],
185
+ saveAs: 'my-report.pdf'
186
+ })
187
+ ).subscribe();
188
+ ```
189
+
190
+ ## Advanced Signal Patterns
191
+
192
+ ### Computed Signals for Data Transformation
193
+
194
+ ```typescript
195
+ import { computed, signal, inject } from '@angular/core';
196
+ import { HTTPManagerSignalsService, ApiRequest } from 'http-request-manager';
197
+
198
+ @Component({
199
+ template: `
200
+ <div class="dashboard">
201
+ <div class="stats">
202
+ <div class="stat-card">
203
+ <h3>Total Users</h3>
204
+ <div class="stat-value">{{ totalUsers() }}</div>
205
+ </div>
206
+ <div class="stat-card">
207
+ <h3>Active Users</h3>
208
+ <div class="stat-value">{{ activeUsers() }}</div>
209
+ </div>
210
+ <div class="stat-card">
211
+ <h3>Admins</h3>
212
+ <div class="stat-value">{{ adminUsers() }}</div>
213
+ </div>
214
+ </div>
215
+
216
+ <div class="filters">
217
+ <select (change)="setRoleFilter($any($event.target).value)">
218
+ <option value="">All Roles</option>
219
+ <option value="admin">Admin</option>
220
+ <option value="user">User</option>
221
+ </select>
222
+
223
+ <select (change)="setStatusFilter($any($event.target).value)">
224
+ <option value="">All Status</option>
225
+ <option value="active">Active</option>
226
+ <option value="inactive">Inactive</option>
227
+ </select>
228
+ </div>
229
+
230
+ <div class="user-list">
231
+ <div *ngFor="let user of filteredUsers()">
232
+ {{ user.name }} - {{ user.role }} ({{ user.status }})
233
+ </div>
234
+ </div>
235
+ </div>
236
+ `
237
+ })
238
+ export class UserDashboardComponent {
239
+ private httpManager = inject(HTTPManagerSignalsService);
240
+
241
+ // Raw data signal
242
+ rawData = this.httpManager.data;
243
+
244
+ // Filter state signals
245
+ roleFilter = signal<string>('');
246
+ statusFilter = signal<string>('');
247
+
248
+ // Computed signals
249
+ totalUsers = computed(() => this.rawData().length);
250
+
251
+ activeUsers = computed(() =>
252
+ this.rawData().filter(user => user.status === 'active').length
253
+ );
254
+
255
+ adminUsers = computed(() =>
256
+ this.rawData().filter(user => user.role === 'admin').length
257
+ );
258
+
259
+ filteredUsers = computed(() => {
260
+ const data = this.rawData();
261
+ const roleFilter = this.roleFilter();
262
+ const statusFilter = this.statusFilter();
263
+
264
+ return data.filter(user => {
265
+ const matchesRole = !roleFilter || user.role === roleFilter;
266
+ const matchesStatus = !statusFilter || user.status === statusFilter;
267
+ return matchesRole && matchesStatus;
268
+ });
269
+ });
270
+
271
+ constructor() {
272
+ this.loadUsers();
273
+ }
274
+
275
+ loadUsers() {
276
+ this.httpManager.getRequest(
277
+ ApiRequest.adapt({
278
+ path: ['users'],
279
+ adapter: User.adapt
280
+ })
281
+ ).subscribe();
282
+ }
283
+
284
+ setRoleFilter(role: string) {
285
+ this.roleFilter.set(role);
286
+ }
287
+
288
+ setStatusFilter(status: string) {
289
+ this.statusFilter.set(status);
290
+ }
291
+ }
292
+ ```
293
+
294
+ ### Effect-Based Side Effects
295
+
296
+ ```typescript
297
+ import { effect, inject } from '@angular/core';
298
+ import { HTTPManagerSignalsService, ApiRequest } from 'http-request-manager';
299
+
300
+ @Component({
301
+ template: `
302
+ <div class="notifications">
303
+ <div *ngFor="let notification of notifications()">
304
+ {{ notification.message }}
305
+ </div>
306
+ </div>
307
+
308
+ <div class="data-display">
309
+ <div *ngFor="let item of data()">
310
+ {{ item.name }}
311
+ </div>
312
+ </div>
313
+ `
314
+ })
315
+ export class NotificationComponent {
316
+ private httpManager = inject(HTTPManagerSignalsService);
317
+
318
+ data = this.httpManager.data;
319
+ error = this.httpManager.error;
320
+ isPending = this.httpManager.isPending;
321
+
322
+ // External state
323
+ notifications = signal<Array<{message: string, type: string}>>([]);
324
+
325
+ constructor() {
326
+ // Auto-load data on component init
327
+ this.loadData();
328
+
329
+ // Set up effects for side effects
330
+ this.setupEffects();
331
+ }
332
+
333
+ private setupEffects() {
334
+ // Show loading notifications
335
+ effect(() => {
336
+ if (this.isPending()) {
337
+ this.addNotification('Loading data...', 'info');
338
+ }
339
+ });
340
+
341
+ // Show error notifications
342
+ effect(() => {
343
+ const error = this.error();
344
+ if (error) {
345
+ this.addNotification(`Error: ${error.message}`, 'error');
346
+ }
347
+ });
348
+
349
+ // Auto-retry on certain errors
350
+ effect(() => {
351
+ const error = this.error();
352
+ if (error && error.status === 503) { // Service unavailable
353
+ setTimeout(() => this.loadData(), 5000); // Retry in 5s
354
+ }
355
+ });
356
+ }
357
+
358
+ loadData() {
359
+ this.httpManager.getRequest(
360
+ ApiRequest.adapt({
361
+ path: ['data'],
362
+ retry: { times: 3, delay: 2 }
363
+ })
364
+ ).subscribe();
365
+ }
366
+
367
+ private addNotification(message: string, type: string) {
368
+ const current = this.notifications();
369
+ this.notifications.set([
370
+ ...current,
371
+ { message, type }
372
+ ]);
373
+
374
+ // Auto-remove after 5 seconds
375
+ setTimeout(() => {
376
+ const updated = this.notifications().slice(1);
377
+ this.notifications.set(updated);
378
+ }, 5000);
379
+ }
380
+ }
381
+ ```
382
+
383
+ ## Migration from Observables to Signals
384
+
385
+ ### Before (Observable-based)
386
+
387
+ ```typescript
388
+ @Component({
389
+ template: `
390
+ <div *ngIf="isLoading$ | async">Loading...</div>
391
+ <div *ngFor="let user of users$ | async">
392
+ {{ user.name }}
393
+ </div>
394
+ <div *ngIf="error$ | async as error">
395
+ Error: {{ error }}
396
+ </div>
397
+ `
398
+ })
399
+ export class UserListComponent implements OnInit {
400
+ private httpManager = inject(HTTPManagerService);
401
+
402
+ users$ = this.httpManager.data$;
403
+ isLoading$ = this.httpManager.isPending$;
404
+ error$ = this.httpManager.error$;
405
+
406
+ ngOnInit() {
407
+ this.httpManager.getRequest(
408
+ ApiRequest.adapt({ path: ['users'] })
409
+ ).subscribe();
410
+ }
411
+ }
412
+ ```
413
+
414
+ ### After (Signal-based)
415
+
416
+ ```typescript
417
+ @Component({
418
+ template: `
419
+ <div *ngIf="isLoading()">Loading...</div>
420
+ <div *ngIf="data() as users">
421
+ <div *ngFor="let user of users">
422
+ {{ user.name }}
423
+ </div>
424
+ </div>
425
+ <div *ngIf="error() as error">
426
+ Error: {{ error }}
427
+ </div>
428
+ `
429
+ })
430
+ export class UserListComponent {
431
+ private httpManager = inject(HTTPManagerSignalsService);
432
+
433
+ data = this.httpManager.data;
434
+ isLoading = this.httpManager.isPending;
435
+ error = this.httpManager.error;
436
+
437
+ constructor() {
438
+ this.httpManager.getRequest(
439
+ ApiRequest.adapt({ path: ['users'] })
440
+ ).subscribe();
441
+ }
442
+ }
443
+ ```
444
+
445
+ ## Integration with Other Signal-Based Services
446
+
447
+ ### Local Storage Signals
448
+
449
+ ```typescript
450
+ import { signal, computed, inject } from '@angular/core';
451
+ import { LocalStorageSignalsManagerService } from 'http-request-manager';
452
+
453
+ @Component({
454
+ template: `
455
+ <div class="user-preferences">
456
+ <h3>Welcome, {{ userName() }}!</h3>
457
+
458
+ <div class="preferences">
459
+ <label>
460
+ Theme:
461
+ <select [value]="theme()" (change)="setTheme($any($event.target).value)">
462
+ <option value="light">Light</option>
463
+ <option value="dark">Dark</option>
464
+ </select>
465
+ </label>
466
+
467
+ <label>
468
+ Notifications:
469
+ <input type="checkbox" [checked]="notifications()"
470
+ (change)="setNotifications($any($event.target).checked)">
471
+ </label>
472
+ </div>
473
+
474
+ <div class="data-sync">
475
+ <p>Data last updated: {{ lastUpdated() }}</p>
476
+ <button (click)="refreshData()">Refresh from Server</button>
477
+ </div>
478
+ </div>
479
+ `
480
+ })
481
+ export class UserPreferencesComponent {
482
+ private httpManager = inject(HTTPManagerSignalsService);
483
+ private storage = inject(LocalStorageSignalsManagerService);
484
+
485
+ // HTTP data signals
486
+ serverData = this.httpManager.data;
487
+
488
+ // Storage signals
489
+ theme = this.storage.signal('theme', 'light');
490
+ notifications = this.storage.signal('notifications', true);
491
+ lastUpdated = this.storage.signal('lastUpdated', new Date().toISOString());
492
+
493
+ // Computed signals
494
+ userName = computed(() => {
495
+ const data = this.serverData();
496
+ return data?.user?.name || 'Guest';
497
+ });
498
+
499
+ hasUnsavedChanges = computed(() => {
500
+ // Compare local storage with server data
501
+ return this.theme() !== 'light' || this.notifications() !== true;
502
+ });
503
+
504
+ constructor() {
505
+ this.loadUserData();
506
+ this.setupAutoSync();
507
+ }
508
+
509
+ private setupAutoSync() {
510
+ // Auto-save to server when preferences change
511
+ setInterval(() => {
512
+ if (this.hasUnsavedChanges()) {
513
+ this.saveToServer();
514
+ }
515
+ }, 30000); // Every 30 seconds
516
+ }
517
+
518
+ loadUserData() {
519
+ this.httpManager.getRequest(
520
+ ApiRequest.adapt({ path: ['user', 'preferences'] })
521
+ ).subscribe();
522
+ }
523
+
524
+ setTheme(theme: string) {
525
+ this.theme.set(theme);
526
+ this.updateLastUpdated();
527
+ }
528
+
529
+ setNotifications(enabled: boolean) {
530
+ this.notifications.set(enabled);
531
+ this.updateLastUpdated();
532
+ }
533
+
534
+ private updateLastUpdated() {
535
+ this.lastUpdated.set(new Date().toISOString());
536
+ }
537
+
538
+ refreshData() {
539
+ this.loadUserData();
540
+ }
541
+
542
+ private saveToServer() {
543
+ const preferences = {
544
+ theme: this.theme(),
545
+ notifications: this.notifications(),
546
+ lastUpdated: this.lastUpdated()
547
+ };
548
+
549
+ this.httpManager.postRequest(
550
+ ApiRequest.adapt({ path: ['user', 'preferences'] }),
551
+ preferences
552
+ ).subscribe();
553
+ }
554
+ }
555
+ ```
556
+
557
+ ## Performance Considerations
558
+
559
+ ### Optimized Rendering
560
+
561
+ ```typescript
562
+ import { trackByFn } from '@angular/core';
563
+
564
+ @Component({
565
+ template: `
566
+ <div *ngFor="let user; trackBy: trackByUserId">
567
+ {{ user.name }}
568
+ </div>
569
+ `
570
+ })
571
+ export class OptimizedComponent {
572
+ private httpManager = inject(HTTPManagerSignalsService);
573
+ data = this.httpManager.data;
574
+
575
+ trackByUserId = (index: number, user: any) => user.id;
576
+ }
577
+ ```
578
+
579
+ ### Efficient Computed Signals
580
+
581
+ ```typescript
582
+ // ✅ Good - Efficient computed
583
+ filteredData = computed(() => {
584
+ return this.data().filter(item => item.active);
585
+ });
586
+
587
+ // ❌ Avoid - Inefficient computed
588
+ allData = computed(() => this.data());
589
+ activeData = computed(() => this.allData().filter(item => item.active));
590
+ ```
591
+
592
+ ## Best Practices
593
+
594
+ ### 1. Signal Initialization
595
+
596
+ ```typescript
597
+ // ✅ Good
598
+ data = this.httpManager.data;
599
+ isLoading = this.httpManager.isPending;
600
+
601
+ // ❌ Avoid
602
+ data = signal<any[]>([]);
603
+ isLoading = signal(false);
604
+ ```
605
+
606
+ ### 2. Computed Signal Usage
607
+
608
+ ```typescript
609
+ // ✅ Good
610
+ userCount = computed(() => this.data().length);
611
+
612
+ // ❌ Avoid
613
+ getUserCount() {
614
+ return this.data().length; // Called on every change detection
615
+ }
616
+ ```
617
+
618
+ ### 3. Effect Cleanup
619
+
620
+ ```typescript
621
+ import { effect, inject, OnDestroy } from '@angular/core';
622
+
623
+ @Component({ template: '...' })
624
+ export class MyComponent implements OnDestroy {
625
+ private httpManager = inject(HTTPManagerSignalsService);
626
+ private cleanup?: () => void;
627
+
628
+ constructor() {
629
+ // Store cleanup function
630
+ this.setupEffects();
631
+ }
632
+
633
+ private setupEffects() {
634
+ const stopEffect = effect(() => {
635
+ console.log('Data changed:', this.httpManager.data());
636
+ });
637
+
638
+ this.cleanup = stopEffect;
639
+ }
640
+
641
+ ngOnDestroy() {
642
+ if (this.cleanup) {
643
+ this.cleanup();
644
+ }
645
+ }
646
+ }
647
+ ```
648
+
649
+ ## Related Documentation
650
+
651
+ - [HTTP Manager Service](http-manager/README.md)
652
+ - [HTTP State Service](http-state/README.md)
653
+ - [Local Storage Signals](local-storage/README.md)
654
+ - [Angular Signals Documentation](https://angular.io/guide/signals)