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,239 @@
1
+ import { Component, inject, Input, OnInit, OnDestroy } from '@angular/core';
2
+ import { NotificationServiceDemo } from '../../services/notification-service-demo.service';
3
+ import { StateServiceDemo } from '../../services/state-service-demo.service';
4
+ import { FormBuilder, FormControl, Validators } from '@angular/forms';
5
+ import { Subject, takeUntil, filter, startWith, distinctUntilChanged, map, tap, combineLatest } from 'rxjs';
6
+
7
+ @Component({
8
+ selector: 'app-ws-notifications',
9
+ templateUrl: './ws-notifications.component.html',
10
+ styleUrls: ['./ws-notifications.component.css'],
11
+ standalone: false
12
+ })
13
+ export class WsNotificationsComponent implements OnInit, OnDestroy {
14
+
15
+ @Input() server!: string;
16
+ @Input() wsServer!: string;
17
+ @Input() jwtToken!: string;
18
+ @Input() user!: any;
19
+
20
+ private destroy$ = new Subject<void>();
21
+
22
+ fb = inject(FormBuilder);
23
+ notificationService = inject(NotificationServiceDemo);
24
+ stateService = inject(StateServiceDemo);
25
+
26
+ // Combine in-memory channels and today's DB channels, dedupe and strip prefix for display
27
+ todaysNotificationChannels$ = combineLatest([
28
+ this.notificationService.notificationChannels$.pipe(startWith([] as string[])),
29
+ this.notificationService.todaysNotificationChannels$.pipe(startWith([] as string[]))
30
+ ]).pipe(
31
+ tap(([inMemory, fromDb]) => console.log('📢 In-memory channels:', inMemory, 'DB channels:', fromDb)),
32
+ map(([inMemory, fromDb]) => {
33
+ // Merge both sources and dedupe
34
+ const allChannels = [...(inMemory || []), ...(fromDb || [])];
35
+ const uniqueChannels = [...new Set(allChannels)]
36
+ .filter(channel => channel.startsWith('MES-'))
37
+ .map(channel => channel.replace('MES-', ''));
38
+ return uniqueChannels.sort();
39
+ }),
40
+ tap(channels => console.log('📢 Combined channels for display:', channels)),
41
+ distinctUntilChanged((prev, curr) => prev.length === curr.length && prev.every((v, i) => v === curr[i]))
42
+ );
43
+
44
+ // Track subscribed notification channels, strip prefix for display
45
+ subscribedNotificationChannels$ = this.notificationService.subscribedNotificationChannels$.pipe(
46
+ map(set => Array.from(set)
47
+ .filter(channel => channel.startsWith('MES-'))
48
+ .map(channel => channel.replace('MES-', ''))
49
+ ),
50
+ startWith([] as string[]),
51
+ distinctUntilChanged((prev, curr) => prev.length === curr.length && prev.every((v, i) => v === curr[i]))
52
+ );
53
+
54
+ // Notification messages
55
+ notificationMessages$ = this.notificationService.notificationMessages$;
56
+
57
+ connectionStatus$ = this.stateService.connectionStatus$;
58
+
59
+ /**
60
+ * Helper to ensure channel has MES- prefix for outgoing communication
61
+ */
62
+ private toNotificationChannel(channel: string): string {
63
+ return channel.startsWith('MES-') ? channel : `MES-${channel}`;
64
+ }
65
+
66
+ // Form for creating new notification channels
67
+ newChannelName = this.fb.control<string>('', [Validators.required, Validators.minLength(2)]);
68
+
69
+ // Channel connection selection
70
+ selectedConnectionChannel = this.fb.control<string | null>(null);
71
+ connectedChannel: string | null = null;
72
+
73
+ // Table columns for notifications display
74
+ displayedColumns: string[] = ['date', 'user', 'message'];
75
+
76
+ // Form for date filter when subscribing
77
+ dateFilter = this.fb.group({
78
+ startDate: this.fb.control<Date | null>(null),
79
+ endDate: this.fb.control<Date | null>(null),
80
+ });
81
+
82
+ // Form for sending notifications
83
+ notificationForm = this.fb.group({
84
+ content: this.fb.control<string | null>(null, Validators.required),
85
+ });
86
+
87
+ get content() {
88
+ return this.notificationForm.get('content') as FormControl;
89
+ }
90
+
91
+ /**
92
+ * Check if currently connected to a channel
93
+ */
94
+ isChannelConnected(subscribedChannels: string[]): boolean {
95
+ return this.connectedChannel !== null && subscribedChannels.includes(this.connectedChannel);
96
+ }
97
+
98
+ /**
99
+ * Connect to the selected channel
100
+ */
101
+ onConnectToChannel() {
102
+ const channel = this.selectedConnectionChannel.value;
103
+ if (!channel) return;
104
+
105
+ this.connectedChannel = channel;
106
+ this.onSubscribeToChannel(channel);
107
+ }
108
+
109
+ /**
110
+ * Disconnect from the current channel
111
+ */
112
+ onDisconnectFromChannel() {
113
+ if (this.connectedChannel) {
114
+ this.onUnsubscribeFromChannel(this.connectedChannel);
115
+ this.connectedChannel = null;
116
+ }
117
+ }
118
+
119
+ ngOnInit() {
120
+ // Request today's notification channels when connection is established
121
+ this.connectionStatus$.pipe(
122
+ filter(isConnected => isConnected),
123
+ takeUntil(this.destroy$)
124
+ ).subscribe(() => {
125
+ // Request the list of today's notification channels from database
126
+ this.notificationService.getTodaysNotificationChannels();
127
+ });
128
+ }
129
+
130
+ ngOnDestroy() {
131
+ this.destroy$.next();
132
+ this.destroy$.complete();
133
+ }
134
+
135
+ /**
136
+ * Create a new notification channel
137
+ */
138
+ onCreateChannel() {
139
+ if (this.newChannelName.invalid) return;
140
+
141
+ const channelName = this.newChannelName.value?.trim();
142
+ if (channelName) {
143
+ this.notificationService.createNotificationChannel(channelName);
144
+ this.newChannelName.reset();
145
+ }
146
+ }
147
+
148
+ /**
149
+ * Define and load previous channels
150
+ */
151
+ onDefinePreviousChannels() {
152
+ this.notificationService.definePreviousNotificationChannels();
153
+ }
154
+
155
+ /**
156
+ * Subscribe to a notification channel with optional date filter
157
+ */
158
+ onSubscribeToChannel(channel: string) {
159
+ const startDate = this.dateFilter.get('startDate')?.value as Date | null;
160
+ const endDate = this.dateFilter.get('endDate')?.value as Date | null;
161
+
162
+ const options: { startEpoch?: number; endEpoch?: number } = {};
163
+
164
+ if (startDate) {
165
+ // Set to start of day
166
+ const startOfDay = new Date(startDate);
167
+ startOfDay.setHours(0, 0, 0, 0);
168
+ options.startEpoch = Math.floor(startOfDay.getTime() / 1000);
169
+ }
170
+ if (endDate) {
171
+ // Set to end of day
172
+ const endOfDay = new Date(endDate);
173
+ endOfDay.setHours(23, 59, 59, 999);
174
+ options.endEpoch = Math.floor(endOfDay.getTime() / 1000);
175
+ }
176
+
177
+ this.notificationService.subscribeToNotificationChannel(channel, options, this.user);
178
+ }
179
+
180
+ /**
181
+ * Unsubscribe from a notification channel
182
+ */
183
+ onUnsubscribeFromChannel(channel: string) {
184
+ this.notificationService.unsubscribeFromNotificationChannel(channel);
185
+ }
186
+
187
+ /**
188
+ * Check if currently subscribed to a channel
189
+ */
190
+ isSubscribed(channel: string, subscribedChannels: string[]): boolean {
191
+ return subscribedChannels.includes(channel);
192
+ }
193
+
194
+ /**
195
+ * Handle chip click - toggle subscription state
196
+ */
197
+ onChipClick(channel: string, subscribedChannels: string[]) {
198
+ const isCurrentlySubscribed = this.isSubscribed(channel, subscribedChannels);
199
+ if (isCurrentlySubscribed) {
200
+ this.onUnsubscribeFromChannel(channel);
201
+ } else {
202
+ this.onSubscribeToChannel(channel);
203
+ }
204
+ }
205
+
206
+ /**
207
+ * Send a notification
208
+ */
209
+ onSendNotification() {
210
+ this.notificationForm.markAllAsTouched();
211
+
212
+ if (this.notificationForm.invalid) return;
213
+
214
+ const channel = this.connectedChannel;
215
+ if (!channel) return;
216
+
217
+ const messageContent = {
218
+ message: this.content.value
219
+ };
220
+
221
+ this.notificationService.sendNotification(channel, messageContent, this.user);
222
+ this.content.reset();
223
+ }
224
+
225
+ /**
226
+ * Format epoch timestamp to readable date/time
227
+ */
228
+ formatTimestamp(epoch: number): string {
229
+ return new Date(epoch * 1000).toLocaleString();
230
+ }
231
+
232
+ /**
233
+ * Get today's date in YYYY-MM-DD format for date input default
234
+ */
235
+ getTodayDate(): string {
236
+ return new Date().toISOString().split('T')[0];
237
+ }
238
+
239
+ }
@@ -0,0 +1,31 @@
1
+ export interface OIDCClientInterface {
2
+ spiffe: string
3
+ id: number
4
+ first_name: string
5
+ last_name: string
6
+ email: string
7
+ }
8
+
9
+ export class OIDCClient implements OIDCClientInterface {
10
+
11
+ constructor(
12
+ public spiffe: string = '',
13
+ public id: number = 0,
14
+ public first_name: string = '',
15
+ public last_name: string = '',
16
+ public email: string = '',
17
+ ) {}
18
+
19
+ static adapt(item?: any): OIDCClient {
20
+
21
+ return new OIDCClient(
22
+ item?.spiffe,
23
+ item?.id,
24
+ item?.first_name,
25
+ item?.last_name,
26
+ item?.email,
27
+ )
28
+
29
+ }
30
+
31
+ }
@@ -0,0 +1,32 @@
1
+ import { RandomPaletteColor } from "../../../services/utils/random-color.utils"
2
+
3
+ export interface UserDataInterface {
4
+ ldap: string
5
+ name: string
6
+ email: string
7
+ color: string
8
+ }
9
+
10
+ export class UserData implements UserDataInterface {
11
+
12
+ constructor(
13
+ public ldap = '',
14
+ public name = '',
15
+ public email = '',
16
+ public color = RandomPaletteColor(),
17
+ ) {}
18
+
19
+ static adapt(item?: any): UserData {
20
+
21
+ const userName = `${item?.first_name} ${item?.last_name}`
22
+
23
+ return new UserData(
24
+ item?.ldap,
25
+ userName,
26
+ item?.email,
27
+ item?.color,
28
+ )
29
+
30
+ }
31
+
32
+ }
@@ -0,0 +1,84 @@
1
+ <div style="margin: 2rem;">
2
+
3
+ <h2 style="display: flex;">
4
+ <span style="flex:1">HTTP Request State Manager - Websockets</span>
5
+ @if ((connectionStatus$ | async); as connected) {
6
+ <span>
7
+ WS -
8
+ <span style="color: green;">Connected</span>
9
+ </span>
10
+ } @else {
11
+ <span style="color: red;">Disconnected {{ retryCount$ | async }} / {{ maxRetries$ | async }}</span>
12
+ }
13
+ </h2>
14
+
15
+ <div>
16
+
17
+ @if ((user$ | async); as userInfo) {
18
+ <div>
19
+ <mat-toolbar>
20
+ <div style="display: flex; flex:1">
21
+ <div style="flex:1">{{ userInfo.name }}</div>
22
+ <div>({{ userInfo.ldap }})</div>
23
+ </div>
24
+ </mat-toolbar>
25
+ </div>
26
+ }
27
+
28
+ @if (!(connectionStatus$ | async) && ((retryCount$ | async) ?? 0) < ((maxRetries$ | async) ?? 0)) {
29
+ <div>
30
+ <mat-progress-bar mode="indeterminate"></mat-progress-bar>
31
+ </div>
32
+ }
33
+
34
+ <mat-tab-group animationDuration="0ms" [selectedIndex]="1">
35
+
36
+ <mat-tab label="WS - Data Control" [disabled]="!(connectionStatus$ | async)">
37
+ <!-- DATA CONTROL -->
38
+ <app-ws-data-control
39
+ [server]="server"
40
+ [wsServer]="wsServer"
41
+ [jwtToken]="jwtToken"
42
+ [user]="user"
43
+ [path]="path"
44
+ ></app-ws-data-control>
45
+
46
+ </mat-tab>
47
+
48
+ <mat-tab label="WS - Messaging" [disabled]="!(connectionStatus$ | async)">
49
+ <!-- MESSAGING -->
50
+ <app-ws-messaging
51
+ [server]="server"
52
+ [wsServer]="wsServer"
53
+ [jwtToken]="jwtToken"
54
+ [user]="user"
55
+ [path]="path"
56
+ ></app-ws-messaging>
57
+
58
+ </mat-tab>
59
+
60
+ <mat-tab label="WS - Notifications" [disabled]="!(connectionStatus$ | async)">
61
+ <!-- WS - Notifications -->
62
+ <app-ws-notifications
63
+ [server]="server"
64
+ [wsServer]="wsServer"
65
+ [jwtToken]="jwtToken"
66
+ [user]="user"
67
+ ></app-ws-notifications>
68
+ </mat-tab>
69
+
70
+ <mat-tab label="WS - Chats" [disabled]="true">
71
+ <!-- WS - Chats -->
72
+ <app-ws-chats></app-ws-chats>
73
+ </mat-tab>
74
+
75
+ <mat-tab label="WS - AI Messaging" [disabled]="true">
76
+ <!-- WS - AI Messaging -->
77
+ <app-ws-ai-messaging></app-ws-ai-messaging>
78
+ </mat-tab>
79
+
80
+ </mat-tab-group>
81
+ </div>
82
+
83
+ </div>
84
+
@@ -0,0 +1,40 @@
1
+ import { Component, inject, OnInit, Input } from '@angular/core';
2
+ import { FormBuilder } from '@angular/forms';
3
+
4
+ import { HTTPManagerService } from '../../services/request-manager-services/http-manager.service';
5
+ import { StateServiceDemo } from './services';
6
+
7
+ @Component({
8
+ selector: 'app-request-manager-ws-demo',
9
+ templateUrl: './request-manager-ws-demo.component.html',
10
+ styleUrls: ['./request-manager-ws-demo.component.css'],
11
+ standalone: false
12
+ })
13
+ export class RequestManagerWsDemoComponent implements OnInit {
14
+
15
+ httpManagerService = inject(HTTPManagerService)
16
+ stateService = inject(StateServiceDemo)
17
+
18
+ fb = inject(FormBuilder)
19
+
20
+ @Input() server!: string;
21
+ @Input() wsServer!: string;
22
+ @Input() jwtToken!: string;
23
+ @Input() user!: any;
24
+ @Input() path: string[] = ['ai','tests'];
25
+
26
+ user$ = this.stateService.user$
27
+
28
+ retryCount$ = this.stateService.wsRetryCount$
29
+ maxRetries$ = this.stateService.wsMaxRetries$
30
+
31
+ connectionStatus$ = this.stateService.connectionStatus$
32
+
33
+ data$ = this.stateService.data$;
34
+ isPending$ = this.stateService.isPending$;
35
+
36
+ ngOnInit() {
37
+ this.stateService.updateConnection(this.server, this.wsServer, this.jwtToken, this.user, this.path);
38
+ }
39
+
40
+ }
@@ -0,0 +1,3 @@
1
+ export { StateServiceDemo } from './state-service-demo.service';
2
+ export { MessageServiceDemo } from './message-service-demo.service';
3
+ export { NotificationServiceDemo, NotificationMessage } from './notification-service-demo.service';
@@ -0,0 +1,62 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Observable } from 'rxjs';
3
+ import { HTTPManagerService, ApiRequest } from '../../../services';
4
+ import { environment } from 'src/environments/environment';
5
+ import { BehaviorSubject, filter, take } from 'rxjs';
6
+
7
+ @Injectable({
8
+ providedIn: 'root'
9
+ })
10
+ export class JwtTokenService extends HTTPManagerService<any> {
11
+
12
+ options = ApiRequest.adapt({
13
+ server: environment.baseUrl,
14
+ path: ['jwt'],
15
+ });
16
+
17
+ private _token = ''
18
+ private _tokenSubject = new BehaviorSubject<string>('');
19
+ public token$ = this._tokenSubject.asObservable();
20
+
21
+ get token() {
22
+ return this._tokenSubject.getValue();
23
+ }
24
+
25
+ constructor() {
26
+ super();
27
+ this.fetchToken();
28
+ }
29
+
30
+ isTokenExpired(): boolean {
31
+ // Check if token is empty or expired
32
+ // You may want to add actual JWT expiry checking here
33
+ const currentToken = this._tokenSubject.getValue();
34
+ return !currentToken || currentToken === '';
35
+ }
36
+
37
+ getToken(): Observable<string> {
38
+ this.fetchToken(); // Trigger HTTP request
39
+ // Returns Observable that emits when token arrives (non-empty)
40
+ // Completes after first emission via take(1) in consumer
41
+ return this.token$.pipe(
42
+ filter(token => !!token), // Wait until we have a non-empty token
43
+ take(1) // Only take first valid token
44
+ );
45
+ }
46
+
47
+ fetchToken(): void {
48
+ this.getRequest(this.options)
49
+ .subscribe((response: any) => {
50
+ if (response && response.token) {
51
+ this._token = response.token;
52
+ this._tokenSubject.next(response.token);
53
+ }
54
+ });
55
+ }
56
+
57
+ forceRefresh(): void {
58
+ this.fetchToken();
59
+ }
60
+
61
+
62
+ }
@@ -0,0 +1,83 @@
1
+ import { Injectable, inject } from '@angular/core';
2
+ import { ChannelMessage } from '../../../services/ws-manager-service/models/channel-message.model';
3
+ import { StateServiceDemo } from './state-service-demo.service';
4
+
5
+ /**
6
+ * MessageServiceDemo - Channel messaging service (PUB- prefix channels)
7
+ *
8
+ * Handles:
9
+ * - Sending messages to channels
10
+ * - Channel subscription for messaging
11
+ * - Real-time message broadcast
12
+ */
13
+ @Injectable({
14
+ providedIn: 'root'
15
+ })
16
+ export class MessageServiceDemo {
17
+
18
+ private stateService = inject(StateServiceDemo);
19
+
20
+ // Expose observables from state service
21
+ channels$ = this.stateService.channels$;
22
+ subscribedChannels$ = this.stateService.subscribedChannels$;
23
+ communicationMessages$ = this.stateService.communicationMessages$;
24
+ latestCommunicationMessages$ = this.stateService.latestCommunicationMessages$;
25
+ connectionStatus$ = this.stateService.connectionStatus$;
26
+ user$ = this.stateService.user$;
27
+ data$ = this.stateService.data$;
28
+
29
+ /**
30
+ * Helper to ensure channel has PUB- prefix
31
+ */
32
+ private toPublicChannel(channel: string): string {
33
+ return channel.startsWith('PUB-') ? channel : `PUB-${channel}`;
34
+ }
35
+
36
+ /**
37
+ * Helper to strip PUB- prefix for display
38
+ */
39
+ private fromPublicChannel(channel: string): string {
40
+ return channel.startsWith('PUB-') ? channel.replace('PUB-', '') : channel;
41
+ }
42
+
43
+ /**
44
+ * Create a new public channel
45
+ */
46
+ createChannel(channel: string) {
47
+ const publicChannel = this.toPublicChannel(channel);
48
+ this.stateService.createChannel(publicChannel);
49
+ }
50
+
51
+ /**
52
+ * Get all available channels
53
+ */
54
+ getAllChannels() {
55
+ this.stateService.getAllChannels();
56
+ }
57
+
58
+ /**
59
+ * Subscribe to a channel to receive messages
60
+ */
61
+ subscribeToChannel(channel: string) {
62
+ const publicChannel = this.toPublicChannel(channel);
63
+ this.stateService.subscribeToChannel(publicChannel);
64
+ }
65
+
66
+ /**
67
+ * Unsubscribe from a channel
68
+ */
69
+ unsubscribeFromChannel(channel: string) {
70
+ const publicChannel = this.toPublicChannel(channel);
71
+ this.stateService.unsubscribeFromChannel(publicChannel);
72
+ }
73
+
74
+ /**
75
+ * Send a message to one or more channels
76
+ */
77
+ sendMessage(data: ChannelMessage, channels?: string[]) {
78
+ const publicChannels = channels?.map(ch => this.toPublicChannel(ch));
79
+ console.log('sendMessage', data, 'to channels:', publicChannels);
80
+ this.stateService.wsMessaging(data, publicChannels);
81
+ }
82
+
83
+ }