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,633 @@
1
+ # Advanced WebSocket Guide
2
+
3
+ Comprehensive guide to WebSocket features, channel architecture, and real-time communication patterns.
4
+
5
+ ## Table of Contents
6
+
7
+ 1. [Singleton Connection Pattern](#singleton-connection-pattern)
8
+ 2. [Channel Architecture](#channel-architecture)
9
+ 3. [Message Types](#message-types)
10
+ 4. [Message History & Replay](#message-history--replay)
11
+ 5. [User Presence Tracking](#user-presence-tracking)
12
+ 6. [Notifications System](#notifications-system)
13
+ 7. [Best Practices](#best-practices)
14
+
15
+ ---
16
+
17
+ ## Singleton Connection Pattern
18
+
19
+ ### One Connection Across ALL Instances
20
+
21
+ The `WebSocketManagerService` uses **static properties** to ensure only ONE WebSocket connection exists across the entire application, regardless of how many service instances are created.
22
+
23
+ ```typescript
24
+ export class WebSocketManagerService {
25
+ // Static properties = shared across ALL instances
26
+ private static socket: WebSocket | null = null;
27
+ private static isConnecting = false;
28
+ private static connectionInitialized = false;
29
+
30
+ // Shared BehaviorSubjects
31
+ private static connectionStatus = new BehaviorSubject<boolean>(false);
32
+ private static messages = new BehaviorSubject<any>(null);
33
+ private static subscribedChannels = new BehaviorSubject<Set<string>>(new Set());
34
+ }
35
+ ```
36
+
37
+ ### Benefits
38
+
39
+ ✅ **Resource Efficiency** - No duplicate connections
40
+ ✅ **Consistent State** - All instances share connection status
41
+ ✅ **Automatic Coordination** - No manual synchronization needed
42
+ ✅ **Memory Optimization** - Single connection object
43
+
44
+ ### Example
45
+
46
+ ```typescript
47
+ // Component 1
48
+ @Component({})
49
+ export class ChatComponent {
50
+ ws1 = inject(WebSocketManagerService);
51
+
52
+ ngOnInit() {
53
+ this.ws1.connect({ wsServer: 'ws://localhost:8080' }, 'token');
54
+ }
55
+ }
56
+
57
+ // Component 2 (different component, same connection)
58
+ @Component({})
59
+ export class NotificationComponent {
60
+ ws2 = inject(WebSocketManagerService);
61
+
62
+ ngOnInit() {
63
+ // This will NOT create a new connection
64
+ // It will use the existing connection from ChatComponent
65
+ this.ws2.messages$.subscribe(msg => {
66
+ console.log('Received:', msg);
67
+ });
68
+ }
69
+ }
70
+ ```
71
+
72
+ ---
73
+
74
+ ## Channel Architecture
75
+
76
+ ### Channel Prefix System
77
+
78
+ The library uses a prefix-based channel architecture to separate different types of communication:
79
+
80
+ ```typescript
81
+ export enum ChannelType {
82
+ STATE = 'SYS', // Private state synchronization
83
+ MESSAGE = 'PUB', // Public messaging
84
+ NOTIFICATION = 'MES' // Persistent notifications
85
+ }
86
+
87
+ export function createChannelName(type: ChannelType, name: string): string {
88
+ return `${type}-${name}`;
89
+ }
90
+ ```
91
+
92
+ ### Channel Types
93
+
94
+ #### 1. SYS- Channels (State Synchronization)
95
+
96
+ **Private channels** for synchronizing state between specific clients.
97
+
98
+ **Characteristics:**
99
+ - 🔒 **Private** - Only subscribed users receive messages
100
+ - 🔄 **Real-time** - Instant state updates
101
+ - 📦 **Lightweight** - No database persistence
102
+ - 🎯 **Targeted** - Specific user/state sync
103
+
104
+ **Use Cases:**
105
+ - User-specific state updates
106
+ - Private data synchronization
107
+ - Real-time form collaboration
108
+ - Live cursor tracking
109
+
110
+ **Example:**
111
+ ```typescript
112
+ // Subscribe to private state channel
113
+ stateService.subscribeToChannel('SYS-user-123');
114
+
115
+ // Send state update
116
+ stateService.sendChannelMessage('SYS-user-123', {
117
+ type: 'STATE_UPDATE',
118
+ data: { field: 'value' }
119
+ });
120
+ ```
121
+
122
+ #### 2. PUB- Channels (Public Messaging)
123
+
124
+ **Public channels** for broadcasting messages to all subscribers.
125
+
126
+ **Characteristics:**
127
+ - 📢 **Broadcast** - All subscribers receive messages
128
+ - 💬 **Chat-like** - Group conversations
129
+ - 🌐 **Open** - Anyone can subscribe
130
+ - ⚡ **Fast** - In-memory routing
131
+
132
+ **Use Cases:**
133
+ - Chat rooms
134
+ - Public announcements
135
+ - Team collaboration
136
+ - Live comments
137
+
138
+ **Example:**
139
+ ```typescript
140
+ // Join public chat room
141
+ stateService.subscribeToChannel('PUB-general-chat');
142
+
143
+ // Send message to room
144
+ stateService.sendChannelMessage('PUB-general-chat', {
145
+ type: 'CHAT_MESSAGE',
146
+ user: 'John',
147
+ message: 'Hello everyone!'
148
+ });
149
+ ```
150
+
151
+ #### 3. MES- Channels (Persistent Notifications)
152
+
153
+ **Database-backed channels** for notifications with persistence.
154
+
155
+ **Characteristics:**
156
+ - 💾 **Persistent** - Stored in SQLite database
157
+ - 📅 **Historical** - Can retrieve past notifications
158
+ - 🔔 **Notifications** - User alerts and updates
159
+ - 📊 **Trackable** - Read/unread status
160
+
161
+ **Use Cases:**
162
+ - System notifications
163
+ - Alert messages
164
+ - Activity feeds
165
+ - Announcements
166
+
167
+ **Example:**
168
+ ```typescript
169
+ // Subscribe to notification channel
170
+ stateService.subscribeToNotificationChannel('MES-alerts');
171
+
172
+ // Send notification
173
+ stateService.sendNotification('MES-alerts', {
174
+ title: 'New Order',
175
+ message: 'Order #12345 received',
176
+ priority: 'high'
177
+ });
178
+ ```
179
+
180
+ ### Channel Architecture Diagram
181
+
182
+ ```
183
+ ┌─────────────────────────────────────────────────────────────────┐
184
+ │ Client Application │
185
+ ├─────────────────────────────────────────────────────────────────┤
186
+ │ │
187
+ │ Component calls: │
188
+ │ ┌──────────────────────────────────────────────────────────┐ │
189
+ │ │ subscribeToChannel('general') → PUB-general │ │
190
+ │ │ subscribeToNotificationChannel('alerts') → MES-alerts │ │
191
+ │ │ fetchRecords() → SYS-state │ │
192
+ │ └──────────────────────────────────────────────────────────┘ │
193
+ │ │ │
194
+ │ ▼ │
195
+ │ ┌──────────────────────────────────────────────────────────┐ │
196
+ │ │ HTTPManagerStateService │ │
197
+ │ │ - Adds appropriate prefix (PUB-, MES-, SYS-) │ │
198
+ │ │ - Routes to WebSocketManagerService │ │
199
+ │ └──────────────────────────────────────────────────────────┘ │
200
+ │ │ │
201
+ │ ▼ │
202
+ │ ┌──────────────────────────────────────────────────────────┐ │
203
+ │ │ WebSocketManagerService (Singleton) │ │
204
+ │ │ - Single connection across ALL instances │ │
205
+ │ │ - Channel subscription tracking │ │
206
+ │ │ - Message routing │ │
207
+ │ └──────────────────────────────────────────────────────────┘ │
208
+ │ │ │
209
+ └────────────────────────────┼─────────────────────────────────────┘
210
+
211
+
212
+ ┌─────────────────────────────────────────────────────────────────┐
213
+ │ WebSocket Server │
214
+ ├─────────────────────────────────────────────────────────────────┤
215
+ │ │
216
+ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
217
+ │ │ PUB- Channel │ │ MES- Channel │ │ SYS- Channel │ │
218
+ │ │ │ │ │ │ │ │
219
+ │ │ In-Memory │ │ DB Persisted │ │ State Sync │ │
220
+ │ │ Broadcasting │ │ Notifications│ │ Private │ │
221
+ │ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
222
+ │ │ │ │ │
223
+ │ ▼ ▼ ▼ │
224
+ │ ┌────────────────────────────────────────────────┐ │
225
+ │ │ Channel Subscribers (Set<WebSocket>) │ │
226
+ │ └────────────────────────────────────────────────┘ │
227
+ │ │
228
+ │ For MES- channels: │
229
+ │ ┌─────────────────────────────────────────────────┐ │
230
+ │ │ 1. Store in SQLite Database │ │
231
+ │ │ 2. Broadcast to current subscribers │ │
232
+ │ │ 3. Retrieve historical data on new subscription│ │
233
+ │ └─────────────────────────────────────────────────┘ │
234
+ │ │
235
+ └───────────────────────────────────────────────────────────────────┘
236
+ ```
237
+
238
+ ---
239
+
240
+ ## Message Types
241
+
242
+ ### WebSocket Communication Types
243
+
244
+ ```typescript
245
+ export enum CommunicationType {
246
+ SUBSCRIBE = 'subscribe',
247
+ UNSUBSCRIBE = 'unsubscribe',
248
+ MESSAGE = 'message',
249
+ NOTIFICATION = 'notification',
250
+ BROADCAST = 'broadcast',
251
+ USER_LIST = 'user-list',
252
+ CHANNEL_CREATED = 'channel-created',
253
+ CHANNEL_DELETED = 'channel-deleted',
254
+ PRESENCE = 'presence',
255
+ HISTORY = 'history',
256
+ LAST_SEEN = 'last-seen'
257
+ }
258
+ ```
259
+
260
+ ### Message Structure
261
+
262
+ ```typescript
263
+ export interface ChannelMessage {
264
+ type: CommunicationType;
265
+ channel: string;
266
+ content: any;
267
+ sessionId: {
268
+ id: string;
269
+ name?: string;
270
+ email?: string;
271
+ };
272
+ timestamp?: number;
273
+ }
274
+ ```
275
+
276
+ ### Example Messages
277
+
278
+ #### Subscribe to Channel
279
+ ```json
280
+ {
281
+ "type": "subscribe",
282
+ "channel": "PUB-general",
283
+ "sessionId": {
284
+ "id": "uuid-123",
285
+ "name": "John Doe",
286
+ "email": "john@example.com"
287
+ }
288
+ }
289
+ ```
290
+
291
+ #### Send Message
292
+ ```json
293
+ {
294
+ "type": "message",
295
+ "channel": "PUB-general",
296
+ "content": {
297
+ "text": "Hello everyone!",
298
+ "timestamp": 1234567890
299
+ },
300
+ "sessionId": {
301
+ "id": "uuid-123",
302
+ "name": "John Doe"
303
+ }
304
+ }
305
+ ```
306
+
307
+ #### Notification
308
+ ```json
309
+ {
310
+ "type": "notification",
311
+ "channel": "MES-alerts",
312
+ "content": {
313
+ "title": "System Update",
314
+ "message": "Server will restart at 2 AM",
315
+ "priority": "high"
316
+ }
317
+ }
318
+ ```
319
+
320
+ ---
321
+
322
+ ## Message History & Replay
323
+
324
+ ### MessageTrackerService
325
+
326
+ Tracks message history and enables replay on reconnection.
327
+
328
+ **Features:**
329
+ - 📜 **History Tracking** - Records all messages
330
+ - 🔄 **Replay Support** - Resend messages on reconnect
331
+ - 🏷️ **Last Seen ID** - Track position in message stream
332
+ - 📊 **Statistics** - Message counts and metrics
333
+
334
+ ### Automatic Re-subscription
335
+
336
+ When a WebSocket reconnects, the MessageTrackerService automatically:
337
+
338
+ 1. Retrieves last-seen message ID
339
+ 2. Requests historical messages from server
340
+ 3. Replays missed messages
341
+ 4. Updates subscription state
342
+
343
+ **Example:**
344
+ ```typescript
345
+ export class MessageTrackerService {
346
+ private messageHistory = new Map<string, any[]>();
347
+ private lastSeenId = new BehaviorSubject<string>('');
348
+
349
+ // Subscribe with automatic replay
350
+ subscribeToChannel(channel: string, userData?: any) {
351
+ // Track subscription
352
+ this.trackedChannels.add(channel);
353
+
354
+ // Send subscribe message
355
+ this.wsManager.subscribeToChannel(channel, userData);
356
+
357
+ // Replay historical messages
358
+ this.replayHistory(channel);
359
+ }
360
+
361
+ // Replay missed messages
362
+ private replayHistory(channel: string) {
363
+ const lastId = this.lastSeenId.getValue();
364
+ if (lastId) {
365
+ this.requestHistory(channel, lastId);
366
+ }
367
+ }
368
+ }
369
+ ```
370
+
371
+ ### Usage
372
+
373
+ ```typescript
374
+ @Component({})
375
+ export class ChatComponent {
376
+ private messageTracker = inject(MessageTrackerService);
377
+
378
+ ngOnInit() {
379
+ // Messages flow through MessageTrackerService
380
+ this.messageTracker.messages$.subscribe(message => {
381
+ console.log('Received:', message);
382
+
383
+ // Update last seen
384
+ if (message.id) {
385
+ this.messageTracker.updateLastSeen(message.id);
386
+ }
387
+ });
388
+ }
389
+ }
390
+ ```
391
+
392
+ ---
393
+
394
+ ## User Presence Tracking
395
+
396
+ ### Real-time User Lists
397
+
398
+ Track which users are subscribed to each channel.
399
+
400
+ **Features:**
401
+ - 👥 **User Lists** - See all users in channel
402
+ - 🟢 **Online Status** - Real-time presence
403
+ - 📊 **Channel Stats** - User count per channel
404
+ - 🔄 **Auto-update** - Changes broadcast automatically
405
+
406
+ ### Example
407
+
408
+ ```typescript
409
+ @Component({
410
+ selector: 'app-channel-users',
411
+ template: `
412
+ <div class="user-list">
413
+ <h3>Users in {{ channelName }} ({{ userCount }})</h3>
414
+ <div *ngFor="let user of users$ | async" class="user">
415
+ <span class="status" [class.online]="user.online"></span>
416
+ {{ user.name }}
417
+ </div>
418
+ </div>
419
+ `
420
+ })
421
+ export class ChannelUsersComponent {
422
+ @Input() channelName = 'PUB-general';
423
+
424
+ private stateService = inject(HTTPManagerStateService);
425
+
426
+ users$ = this.stateService.userListByChannel$.pipe(
427
+ map(users => users.get(this.channelName) || [])
428
+ );
429
+
430
+ userCount$ = this.users$.pipe(map(users => users.length));
431
+ }
432
+ ```
433
+
434
+ ### Presence Messages
435
+
436
+ ```json
437
+ {
438
+ "type": "presence",
439
+ "channel": "PUB-general",
440
+ "content": {
441
+ "action": "joined",
442
+ "user": {
443
+ "id": "user-123",
444
+ "name": "John Doe",
445
+ "email": "john@example.com"
446
+ }
447
+ }
448
+ }
449
+ ```
450
+
451
+ ---
452
+
453
+ ## Notifications System
454
+
455
+ ### Persistent Notifications
456
+
457
+ MES- channels store notifications in the database for persistence.
458
+
459
+ **Server Requirements:**
460
+
461
+ Backend must provide endpoints for:
462
+ - GET today's notification channels
463
+ - GET previous day's notification channels
464
+ - GET notifications by channel with date filters
465
+
466
+ **Database Schema:**
467
+ ```sql
468
+ CREATE TABLE notifications (
469
+ id INTEGER PRIMARY KEY,
470
+ channel TEXT NOT NULL,
471
+ user_name TEXT,
472
+ created INTEGER NOT NULL,
473
+ message TEXT NOT NULL
474
+ );
475
+ ```
476
+
477
+ ### Subscribe to Notifications
478
+
479
+ ```typescript
480
+ @Component({})
481
+ export class NotificationBellComponent {
482
+ private stateService = inject(HTTPManagerStateService);
483
+
484
+ notifications$ = this.stateService.notificationMessages$;
485
+
486
+ ngOnInit() {
487
+ // Subscribe to notification channel
488
+ this.stateService.subscribeToNotificationChannel('MES-alerts');
489
+
490
+ // Receive notifications
491
+ this.notifications$.subscribe(notification => {
492
+ this.showNotification(notification);
493
+ });
494
+ }
495
+
496
+ private showNotification(notification: any) {
497
+ // Display notification in UI
498
+ console.log('New notification:', notification);
499
+ }
500
+ }
501
+ ```
502
+
503
+ ### Send Notification
504
+
505
+ ```typescript
506
+ // Send to specific user
507
+ stateService.sendNotification('MES-alerts', {
508
+ title: 'New Message',
509
+ body: 'You have a new message from John',
510
+ action: '/messages/123',
511
+ priority: 'high'
512
+ });
513
+
514
+ // Broadcast to all
515
+ stateService.sendBroadcast({
516
+ type: 'announcement',
517
+ message: 'System maintenance at 2 AM'
518
+ });
519
+ ```
520
+
521
+ ---
522
+
523
+ ## Best Practices
524
+
525
+ ### 1. Channel Naming Convention
526
+
527
+ ```typescript
528
+ // ✅ Good - Use prefixes and descriptive names
529
+ const userChannel = createChannelName(ChannelType.STATE, `user-${userId}`);
530
+ const chatChannel = createChannelName(ChannelType.MESSAGE, 'general-chat');
531
+ const alertChannel = createChannelName(ChannelType.NOTIFICATION, 'system-alerts');
532
+
533
+ // ❌ Avoid - No prefixes or unclear names
534
+ const channel1 = 'channel1';
535
+ const myChannel = 'my-channel';
536
+ ```
537
+
538
+ ### 2. Connection Management
539
+
540
+ ```typescript
541
+ // ✅ Good - Connect once in app initialization
542
+ @Injectable({ providedIn: 'root' })
543
+ export class WebSocketInitService {
544
+ private wsManager = inject(WebSocketManagerService);
545
+
546
+ constructor() {
547
+ // Single connection for entire app
548
+ this.wsManager.connect(options, jwtToken);
549
+ }
550
+ }
551
+
552
+ // ❌ Avoid - Multiple connect calls
553
+ @Component({})
554
+ export class ComponentA {
555
+ ws = inject(WebSocketManagerService);
556
+ ngOnInit() { this.ws.connect(...); } // Creates connection
557
+ }
558
+
559
+ @Component({})
560
+ export class ComponentB {
561
+ ws = inject(WebSocketManagerService);
562
+ ngOnInit() { this.ws.connect(...); } // Unnecessary - already connected
563
+ }
564
+ ```
565
+
566
+ ### 3. Message Handling
567
+
568
+ ```typescript
569
+ // ✅ Good - Type-safe message handling
570
+ messages$.subscribe((message: ChannelMessage) => {
571
+ switch (message.type) {
572
+ case CommunicationType.MESSAGE:
573
+ this.handleChatMessage(message.content);
574
+ break;
575
+ case CommunicationType.NOTIFICATION:
576
+ this.handleNotification(message.content);
577
+ break;
578
+ case CommunicationType.PRESENCE:
579
+ this.handlePresenceChange(message.content);
580
+ break;
581
+ }
582
+ });
583
+
584
+ // ❌ Avoid - Untyped messages
585
+ messages$.subscribe(message => {
586
+ console.log(message); // No type safety
587
+ });
588
+ ```
589
+
590
+ ### 4. Error Handling
591
+
592
+ ```typescript
593
+ // ✅ Good - Handle connection errors
594
+ connectionStatus$.subscribe(isConnected => {
595
+ if (!isConnected) {
596
+ // Show reconnection UI
597
+ this.showReconnectingMessage();
598
+
599
+ // Attempt manual reconnect if needed
600
+ setTimeout(() => {
601
+ this.wsManager.connect(options, jwtToken);
602
+ }, 5000);
603
+ }
604
+ });
605
+ ```
606
+
607
+ ### 5. Cleanup
608
+
609
+ ```typescript
610
+ // ✅ Good - Unsubscribe on destroy
611
+ @Component({})
612
+ export class ChatComponent implements OnDestroy {
613
+ private subscription?: Subscription;
614
+
615
+ ngOnInit() {
616
+ this.subscription = this.messages$.subscribe(...);
617
+ }
618
+
619
+ ngOnDestroy() {
620
+ this.subscription?.unsubscribe();
621
+ this.wsManager.unsubscribeFromChannel('PUB-general');
622
+ }
623
+ }
624
+ ```
625
+
626
+ ---
627
+
628
+ ## Related Documentation
629
+
630
+ - [`WebSocket Manager`](WS_MANAGER_README.md) - Basic WebSocket usage
631
+ - [`HTTP State Manager`](HTTP_STATE_MANAGER_README.md) - State sync with WebSocket
632
+ - [`Complete API Reference`](COMPLETE_API_REFERENCE.md) - Full API documentation
633
+ - [`Architecture`](ARCHITECTURE.md) - System architecture overview