http-request-manager 18.15.32 → 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 (301) hide show
  1. package/README.md +2 -0
  2. package/TEST_COVERAGE_SUMMARY.md +458 -0
  3. package/ng-package.json +8 -0
  4. package/package.json +5 -13
  5. package/src/docs/ADVANCED_WEBSOCKET.md +633 -0
  6. package/src/docs/ARCHITECTURE.md +633 -0
  7. package/src/docs/BATCH_REQUEST_README.md +467 -0
  8. package/src/docs/COMPLETE_API_REFERENCE.md +1037 -0
  9. package/src/docs/DATABASE_README.md +1195 -0
  10. package/src/docs/ENCRYPTION_README.md +403 -0
  11. package/src/docs/HTTP_MANAGER_README.md +628 -0
  12. package/src/docs/HTTP_SINGNALS_MANAGER_README.md +654 -0
  13. package/src/docs/HTTP_STATE_MANAGER_README.md +1391 -0
  14. package/src/docs/INTERCEPTOR_README.md +549 -0
  15. package/src/docs/LOCAL_STORAGE_README.md +1056 -0
  16. package/src/docs/LOCAL_STORAGE_SIGNALS_README.md +338 -0
  17. package/src/docs/LOGGER_README.md +310 -0
  18. package/src/docs/MESSAGE_TRACKER_README.md +518 -0
  19. package/src/docs/MESSAGE_TRACKER_SIGNALS_README.md +563 -0
  20. package/src/docs/MODELS_README.md +1264 -0
  21. package/src/docs/SIGNAL_SERVICES_README.md +238 -0
  22. package/src/docs/SQL_DIXIE_README.md +574 -0
  23. package/src/docs/STORE_STATE_MANAGER_README.md +556 -0
  24. package/src/docs/STORE_STATE_SIGNALS_README.md +600 -0
  25. package/src/docs/UPLOAD_REQUEST_README.md +324 -0
  26. package/src/docs/UTILS_README.md +1604 -0
  27. package/src/docs/WEBSOCKET_MESSAGE_SERVICE.md +799 -0
  28. package/src/docs/WEBSOCKET_SIGNALS_README.md +641 -0
  29. package/src/docs/WEBSOCKET_SINGLETON_REFACTORING.md +201 -0
  30. package/src/docs/WS_MANAGER_README.md +613 -0
  31. package/src/lib/http-request-manager.module.ts +147 -0
  32. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.html +116 -0
  33. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.scss +0 -0
  34. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.ts +255 -0
  35. package/src/lib/http-request-services-demo/http-request-services-demo.component.html +123 -0
  36. package/src/lib/http-request-services-demo/http-request-services-demo.component.scss +6 -0
  37. package/src/lib/http-request-services-demo/http-request-services-demo.component.ts +53 -0
  38. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.html +195 -0
  39. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.scss +17 -0
  40. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.ts +208 -0
  41. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.html +200 -0
  42. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.scss +17 -0
  43. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.ts +214 -0
  44. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.html +53 -0
  45. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.scss +60 -0
  46. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.ts +72 -0
  47. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-download.module.ts +28 -0
  48. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.html +10 -0
  49. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.scss +29 -0
  50. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.ts +100 -0
  51. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/models/download-labels-model.ts +22 -0
  52. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.html +8 -0
  53. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.scss +19 -0
  54. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.ts +26 -0
  55. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/app-session.model.ts +30 -0
  56. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/app.model.ts +19 -0
  57. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/get-sample.model.ts +25 -0
  58. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-ai-prompt.ts +19 -0
  59. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client-details.ts +24 -0
  60. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client-info.ts +30 -0
  61. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client.model.ts +49 -0
  62. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-mapper-client-info.ts +33 -0
  63. package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.html +279 -0
  64. package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.scss +24 -0
  65. package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.ts +461 -0
  66. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.html +53 -0
  67. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.scss +60 -0
  68. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.ts +72 -0
  69. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.ts +28 -0
  70. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.html +10 -0
  71. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.scss +29 -0
  72. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.ts +100 -0
  73. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.ts +22 -0
  74. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.html +8 -0
  75. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.scss +19 -0
  76. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.ts +26 -0
  77. package/src/lib/http-request-services-demo/request-manager-demo/models/app-session.model.ts +30 -0
  78. package/src/lib/http-request-services-demo/request-manager-demo/models/app.model.ts +19 -0
  79. package/src/lib/http-request-services-demo/request-manager-demo/models/get-sample.model.ts +25 -0
  80. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.ts +19 -0
  81. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-details.ts +24 -0
  82. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.ts +30 -0
  83. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client.model.ts +49 -0
  84. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.ts +33 -0
  85. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.html +622 -0
  86. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.scss +106 -0
  87. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.ts +687 -0
  88. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.html +418 -0
  89. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.scss +24 -0
  90. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.ts +576 -0
  91. package/src/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.ts +89 -0
  92. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/services/state-data-request.service.ts +119 -0
  93. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.css +0 -0
  94. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.html +3 -0
  95. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.ts +16 -0
  96. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.css +0 -0
  97. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.html +3 -0
  98. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.ts +16 -0
  99. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.css +31 -0
  100. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.html +94 -0
  101. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.scss +41 -0
  102. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.spec.ts +203 -0
  103. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.ts +144 -0
  104. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.css +11 -0
  105. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.html +102 -0
  106. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.spec.ts +40 -0
  107. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.ts +230 -0
  108. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.css +30 -0
  109. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.html +172 -0
  110. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.spec.ts +31 -0
  111. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.ts +239 -0
  112. package/src/lib/http-request-services-demo/request-manager-ws-demo/models/oidc-client.model.ts +31 -0
  113. package/src/lib/http-request-services-demo/request-manager-ws-demo/models/user-data.model.ts +32 -0
  114. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.css +0 -0
  115. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.html +84 -0
  116. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.ts +40 -0
  117. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/index.ts +3 -0
  118. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/jwt-token.service.ts +62 -0
  119. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/message-service-demo.service.ts +83 -0
  120. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/notification-service-demo.service.ts +147 -0
  121. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/state-service-demo.service.ts +168 -0
  122. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.html +53 -0
  123. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.scss +60 -0
  124. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.ts +72 -0
  125. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-download.module.ts +28 -0
  126. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.html +10 -0
  127. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.scss +29 -0
  128. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.ts +100 -0
  129. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/models/download-labels-model.ts +22 -0
  130. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.html +8 -0
  131. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.scss +19 -0
  132. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.ts +26 -0
  133. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app-session.model.ts +30 -0
  134. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app.model.ts +19 -0
  135. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/get-sample.model.ts +25 -0
  136. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-ai-prompt.ts +19 -0
  137. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-details.ts +24 -0
  138. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-info.ts +30 -0
  139. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client.model.ts +49 -0
  140. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-mapper-client-info.ts +33 -0
  141. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.html +380 -0
  142. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.scss +24 -0
  143. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.ts +410 -0
  144. package/src/lib/http-request-services-demo/store-state-manager-demo/models/settings.model.ts +28 -0
  145. package/src/lib/http-request-services-demo/store-state-manager-demo/services/settings-state.service.ts +49 -0
  146. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.css +0 -0
  147. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.html +23 -0
  148. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.ts +36 -0
  149. package/src/lib/http-request-services-demo/store-state-signals-demo/store-state-signals-demo.component.ts +161 -0
  150. package/src/lib/http-request-services-demo/upload-demo/models/index.ts +1 -0
  151. package/src/lib/http-request-services-demo/upload-demo/models/upload-state.model.ts +30 -0
  152. package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.html +89 -0
  153. package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.scss +160 -0
  154. package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.spec.ts +101 -0
  155. package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.ts +136 -0
  156. package/src/lib/index.ts +3 -0
  157. package/src/lib/interceptors/credentials.interceptor.ts +16 -0
  158. package/src/lib/interceptors/index.ts +6 -0
  159. package/src/lib/interceptors/models/error-settings.model.ts +22 -0
  160. package/src/lib/interceptors/models/index.ts +2 -0
  161. package/src/lib/interceptors/proxy-debugger.interceptor.ts +46 -0
  162. package/src/lib/interceptors/request-error.interceptor.ts +65 -0
  163. package/src/lib/interceptors/request-header.interceptor.ts +56 -0
  164. package/src/lib/message-display/README.md +509 -0
  165. package/src/lib/message-display/index.ts +4 -0
  166. package/src/lib/message-display/models/action.model.ts +27 -0
  167. package/src/lib/message-display/models/communication-message.model.ts +77 -0
  168. package/src/lib/message-display/models/display-config.model.ts +35 -0
  169. package/src/lib/message-display/models/display-rule.interface.ts +28 -0
  170. package/src/lib/message-display/models/display-strategy.interface.ts +8 -0
  171. package/src/lib/message-display/models/index.ts +6 -0
  172. package/src/lib/message-display/models/slide.model.ts +24 -0
  173. package/src/lib/message-display/rules/default-display-rules.ts +35 -0
  174. package/src/lib/message-display/services/message-display-router.service.ts +63 -0
  175. package/src/lib/message-display/strategies/snackbar.strategy.ts +46 -0
  176. package/src/lib/models/batch-options.model.ts +33 -0
  177. package/src/lib/models/batch-progress.model.ts +19 -0
  178. package/src/lib/models/batch-request-state.model.ts +40 -0
  179. package/src/lib/models/batch-result.model.ts +30 -0
  180. package/src/lib/models/config-http-options.model.ts +45 -0
  181. package/src/lib/models/config-local-storage-options.model.ts +27 -0
  182. package/src/lib/models/config-options.model.ts +27 -0
  183. package/src/lib/models/config-token.model.ts +9 -0
  184. package/src/lib/models/data-type.enum.ts +5 -0
  185. package/src/lib/models/database-storage.model.ts +24 -0
  186. package/src/lib/models/index.ts +16 -0
  187. package/src/lib/models/retry-options.model.ts +22 -0
  188. package/src/lib/models/upload-validation-error.model.ts +46 -0
  189. package/src/lib/services/SQL-DixieJS service/dexie-query-executor.ts +246 -0
  190. package/src/lib/services/SQL-DixieJS service/dexie-sql.service.ts +31 -0
  191. package/src/lib/services/SQL-DixieJS service/index.ts +4 -0
  192. package/src/lib/services/SQL-DixieJS service/models/execution-plan.model.ts +52 -0
  193. package/src/lib/services/SQL-DixieJS service/models/index.ts +3 -0
  194. package/src/lib/services/SQL-DixieJS service/models/sql-errors.model.ts +13 -0
  195. package/src/lib/services/SQL-DixieJS service/models/sql-options.model.ts +3 -0
  196. package/src/lib/services/SQL-DixieJS service/query-planner.ts +284 -0
  197. package/src/lib/services/SQL-DixieJS service/schema-validator.ts +217 -0
  198. package/src/lib/services/SQL-DixieJS service/sql-parser.ts +35 -0
  199. package/src/lib/services/database-manager-service/database.manager.service.ts +384 -0
  200. package/src/lib/services/database-manager-service/db.storage.service.ts +240 -0
  201. package/src/lib/services/database-manager-service/index.ts +4 -0
  202. package/src/lib/services/database-manager-service/models/index.ts +2 -0
  203. package/src/lib/services/database-manager-service/models/table-schema.ts +33 -0
  204. package/src/lib/services/index.ts +20 -0
  205. package/src/lib/services/local-storage-manager-service/index.ts +4 -0
  206. package/src/lib/services/local-storage-manager-service/local-storage-manager.service.spec.ts +71 -0
  207. package/src/lib/services/local-storage-manager-service/local-storage-manager.service.ts +567 -0
  208. package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.spec.ts +67 -0
  209. package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.ts +437 -0
  210. package/src/lib/services/local-storage-manager-service/models/global-store-options.model.ts +30 -0
  211. package/src/lib/services/local-storage-manager-service/models/index.ts +6 -0
  212. package/src/lib/services/local-storage-manager-service/models/setting-options.model.ts +35 -0
  213. package/src/lib/services/local-storage-manager-service/models/storage-data.model.ts +24 -0
  214. package/src/lib/services/local-storage-manager-service/models/storage-option.model.ts +32 -0
  215. package/src/lib/services/local-storage-manager-service/models/storage-type.enum.ts +5 -0
  216. package/src/lib/services/request-manager-services/README.md +282 -0
  217. package/src/lib/services/request-manager-services/http-manager-signals.service.ts +674 -0
  218. package/src/lib/services/request-manager-services/http-manager.service.spec.ts +353 -0
  219. package/src/lib/services/request-manager-services/http-manager.service.ts +727 -0
  220. package/src/lib/services/request-manager-services/index.ts +8 -0
  221. package/src/lib/services/request-manager-services/request-signals.service.ts +372 -0
  222. package/src/lib/services/request-manager-services/request.service.ts +435 -0
  223. package/src/lib/services/request-manager-services/rxjs-operators/countdown.ts +17 -0
  224. package/src/lib/services/request-manager-services/rxjs-operators/delay-retry.ts +16 -0
  225. package/src/lib/services/request-manager-services/rxjs-operators/index.ts +4 -0
  226. package/src/lib/services/request-manager-services/rxjs-operators/request-polling.ts +35 -0
  227. package/src/lib/services/request-manager-services/rxjs-operators/request-streaming.ts +468 -0
  228. package/src/lib/services/request-manager-state-service/http-manager-state.store.spec.ts +665 -0
  229. package/src/lib/services/request-manager-state-service/http-manager-state.store.ts +2395 -0
  230. package/src/lib/services/request-manager-state-service/index.ts +3 -0
  231. package/src/lib/services/request-manager-state-service/models/api-request.model.ts +86 -0
  232. package/src/lib/services/request-manager-state-service/models/index.ts +14 -0
  233. package/src/lib/services/request-manager-state-service/models/operation-result.model.ts +18 -0
  234. package/src/lib/services/request-manager-state-service/models/parsing-result.model.ts +21 -0
  235. package/src/lib/services/request-manager-state-service/models/request-options.model.ts +37 -0
  236. package/src/lib/services/request-manager-state-service/models/stream-config.model.ts +20 -0
  237. package/src/lib/services/request-manager-state-service/models/stream-event-metadata.model.ts +23 -0
  238. package/src/lib/services/request-manager-state-service/models/stream-event.model.ts +23 -0
  239. package/src/lib/services/request-manager-state-service/models/stream-output.model.ts +23 -0
  240. package/src/lib/services/request-manager-state-service/models/stream-progress.model.ts +24 -0
  241. package/src/lib/services/request-manager-state-service/models/stream-type.enum.ts +13 -0
  242. package/src/lib/services/request-manager-state-service/models/ws-options.model.ts +42 -0
  243. package/src/lib/services/store-state-manager-service/index.ts +4 -0
  244. package/src/lib/services/store-state-manager-service/models/index.ts +3 -0
  245. package/src/lib/services/store-state-manager-service/models/state-operation-result.model.ts +30 -0
  246. package/src/lib/services/store-state-manager-service/models/state-storage-options.model.ts +24 -0
  247. package/src/lib/services/store-state-manager-service/store-state-manager-signals.service.ts +169 -0
  248. package/src/lib/services/store-state-manager-service/store-state-manager.service.ts +153 -0
  249. package/src/lib/services/utils/app.service.spec.ts +25 -0
  250. package/src/lib/services/utils/app.service.ts +21 -0
  251. package/src/lib/services/utils/encryption/README.md +79 -0
  252. package/src/lib/services/utils/encryption/asymmetrical-encryption.service.ts +282 -0
  253. package/src/lib/services/utils/encryption/encryption-test.service.ts +39 -0
  254. package/src/lib/services/utils/encryption/index.ts +5 -0
  255. package/src/lib/services/utils/encryption/random.ts +81 -0
  256. package/src/lib/services/utils/encryption/symmetrical-encryption.service.ts +106 -0
  257. package/src/lib/services/utils/headers.service.spec.ts +80 -0
  258. package/src/lib/services/utils/headers.service.ts +18 -0
  259. package/src/lib/services/utils/index.ts +9 -0
  260. package/src/lib/services/utils/logger.service.ts +90 -0
  261. package/src/lib/services/utils/models/index.ts +4 -0
  262. package/src/lib/services/utils/models/normalized-request-options.model.ts +24 -0
  263. package/src/lib/services/utils/models/path-tracker-state.model.ts +20 -0
  264. package/src/lib/services/utils/models/query-params-tracker-options.model.ts +24 -0
  265. package/src/lib/services/utils/models/query-tracker-state.model.ts +23 -0
  266. package/src/lib/services/utils/object-merger.service.spec.ts +18 -0
  267. package/src/lib/services/utils/object-merger.service.ts +78 -0
  268. package/src/lib/services/utils/path-query.service.spec.ts +117 -0
  269. package/src/lib/services/utils/path-query.service.ts +69 -0
  270. package/src/lib/services/utils/query-params-tracker.service.ts +442 -0
  271. package/src/lib/services/utils/random-color.utils.ts +83 -0
  272. package/src/lib/services/utils/utils.service.spec.ts +165 -0
  273. package/src/lib/services/utils/utils.service.ts +192 -0
  274. package/src/lib/services/ws-manager-service/index.ts +13 -0
  275. package/src/lib/services/ws-manager-service/message-tracker-signals.service.ts +147 -0
  276. package/src/lib/services/ws-manager-service/message-tracker.service.ts +477 -0
  277. package/src/lib/services/ws-manager-service/models/channel-info.model.ts +29 -0
  278. package/src/lib/services/ws-manager-service/models/channel-message-data.model.ts +24 -0
  279. package/src/lib/services/ws-manager-service/models/channel-message.model.ts +36 -0
  280. package/src/lib/services/ws-manager-service/models/channel-type.enum.ts +6 -0
  281. package/src/lib/services/ws-manager-service/models/communication-type.enum.ts +5 -0
  282. package/src/lib/services/ws-manager-service/models/index.ts +10 -0
  283. package/src/lib/services/ws-manager-service/models/notification-message.model.ts +29 -0
  284. package/src/lib/services/ws-manager-service/models/public-message.model.ts +18 -0
  285. package/src/lib/services/ws-manager-service/models/state-message.model.ts +18 -0
  286. package/src/lib/services/ws-manager-service/models/ws-user.model.ts +38 -0
  287. package/src/lib/services/ws-manager-service/services/index.ts +4 -0
  288. package/src/lib/services/ws-manager-service/services/websocket-message.service.ts +129 -0
  289. package/src/lib/services/ws-manager-service/services/websocket.service.ts +434 -0
  290. package/src/lib/services/ws-manager-service/websocket-service/index.ts +1 -0
  291. package/src/lib/services/ws-manager-service/websocket-service/websocket-manager.service.ts +716 -0
  292. package/src/lib/services/ws-manager-service/websocket-services-complete.spec.ts +596 -0
  293. package/src/lib/services/ws-manager-service/websocket-signals-manager.service.ts +141 -0
  294. package/src/public-api.ts +19 -0
  295. package/tsconfig.lib.json +34 -0
  296. package/tsconfig.lib.prod.json +10 -0
  297. package/tsconfig.spec.json +14 -0
  298. package/fesm2022/http-request-manager.mjs +0 -13297
  299. package/fesm2022/http-request-manager.mjs.map +0 -1
  300. package/http-request-manager-18.15.32.tgz +0 -0
  301. package/types/http-request-manager.d.ts +0 -3875
@@ -0,0 +1,799 @@
1
+ # WebSocket Message Service
2
+
3
+ A unified, type-safe service for sending WebSocket messages with automatic prefix management and concrete message models.
4
+
5
+ ## Overview
6
+
7
+ The `WebSocketMessageService` provides a simplified API for sending WebSocket messages across different channel types. It automatically handles channel prefixes, message validation, and provides compile-time type safety.
8
+
9
+ ## Key Features
10
+
11
+ ✅ **Type-Safe Messages** - Concrete models with TypeScript validation
12
+ ✅ **Automatic Prefix Management** - SYS-, PUB-, MES- prefixes handled automatically
13
+ ✅ **Runtime Validation** - Checks required fields before sending
14
+ ✅ **Boolean Return Values** - Simple success/failure indication
15
+ ✅ **Silent Failure** - Console errors without exceptions
16
+ ✅ **Single Service** - One injection point for all WebSocket messaging
17
+
18
+ ## Installation
19
+
20
+ The service is automatically available when you import `HttpRequestManagerModule`:
21
+
22
+ ```typescript
23
+ import { HttpRequestManagerModule } from 'http-request-manager';
24
+
25
+ @NgModule({
26
+ imports: [HttpRequestManagerModule.forRoot({})]
27
+ })
28
+ export class AppModule { }
29
+ ```
30
+
31
+ ## Usage
32
+
33
+ ### Import the Service
34
+
35
+ ```typescript
36
+ import { Component, inject } from '@angular/core';
37
+ import {
38
+ WebSocketMessageService,
39
+ StateMessage,
40
+ PublicMessage,
41
+ NotificationMessage
42
+ } from 'http-request-manager';
43
+
44
+ @Component({
45
+ selector: 'app-messaging',
46
+ template: `...`
47
+ })
48
+ export class MessagingComponent {
49
+ private wsMessageService = inject(WebSocketMessageService);
50
+ }
51
+ ```
52
+
53
+ ---
54
+
55
+ ## Message Types
56
+
57
+ The service supports three message types, each with its own channel prefix:
58
+
59
+ | Type | Prefix | Use Case | Model |
60
+ |------|--------|----------|-------|
61
+ | **State** | `SYS-` | CRUD operations, state synchronization | `StateMessage` |
62
+ | **Public** | `PUB-` | Chat, broadcast, general messaging | `PublicMessage` |
63
+ | **Notification** | `MES-` | Persistent notifications with history | `NotificationMessage` |
64
+
65
+ ---
66
+
67
+ ## API Reference
68
+
69
+ ### `sendStateMessage(path, payload)`
70
+
71
+ Send a state message for CRUD operations and state synchronization.
72
+
73
+ **Parameters:**
74
+ - `path: (string|number)[]` - Path array (e.g., `['ai', 'tests']`)
75
+ - `payload: StateMessage` - Message with sessionId and content
76
+
77
+ **Returns:** `boolean` - `true` if sent successfully, `false` otherwise
78
+
79
+ **Channel:** `SYS-{path.join('/')}` (e.g., `SYS-ai/tests`)
80
+
81
+ **Example:**
82
+
83
+ ```typescript
84
+ const message = StateMessage.adapt({
85
+ sessionId: { id: 'user123', name: 'John', email: 'john@example.com' },
86
+ content: {
87
+ action: 'create',
88
+ data: { name: 'New Item', value: 42 }
89
+ }
90
+ });
91
+
92
+ const success = this.wsMessageService.sendStateMessage(
93
+ ['ai', 'tests'],
94
+ message
95
+ );
96
+
97
+ if (!success) {
98
+ console.warn('Failed to send state message');
99
+ }
100
+ ```
101
+
102
+ **Validation:**
103
+ - ✅ `sessionId.id` is required
104
+ - ✅ `content` can be any object
105
+ - ✅ WebSocket must be connected
106
+
107
+ ---
108
+
109
+ ### `sendPublicMessage(channel, payload)`
110
+
111
+ Send a public message for chat, broadcast, or general messaging.
112
+
113
+ **Parameters:**
114
+ - `channel: string` - Channel name (without prefix)
115
+ - `payload: PublicMessage` - Message with sessionId and content.message
116
+
117
+ **Returns:** `boolean` - `true` if sent successfully, `false` otherwise
118
+
119
+ **Channel:** `PUB-{channel}` (e.g., `PUB-chat`)
120
+
121
+ **Example:**
122
+
123
+ ```typescript
124
+ const chatMessage = PublicMessage.adapt({
125
+ sessionId: { id: 'user123', name: 'John' },
126
+ content: {
127
+ message: 'Hello everyone!',
128
+ timestamp: Date.now()
129
+ }
130
+ });
131
+
132
+ const success = this.wsMessageService.sendPublicMessage('chat', chatMessage);
133
+ ```
134
+
135
+ **Validation:**
136
+ - ✅ `sessionId.id` is required
137
+ - ✅ `content.message` is required (string)
138
+ - ✅ `content` can have additional properties
139
+ - ✅ WebSocket must be connected
140
+
141
+ ---
142
+
143
+ ### `sendNotification(channel, payload)`
144
+
145
+ Send a persistent notification with history support.
146
+
147
+ **Parameters:**
148
+ - `channel: string` - Channel name (without prefix)
149
+ - `payload: NotificationMessage` - Message with sessionId and message
150
+
151
+ **Returns:** `boolean` - `true` if sent successfully, `false` otherwise
152
+
153
+ **Channel:** `MES-{channel}` (e.g., `MES-alerts`)
154
+
155
+ **Example:**
156
+
157
+ ```typescript
158
+ const notification = NotificationMessage.adapt({
159
+ sessionId: { id: 'user123', name: 'John', color: '#FF0000' },
160
+ message: 'New item created!',
161
+ timestamp: Date.now(),
162
+ priority: 'high'
163
+ });
164
+
165
+ const success = this.wsMessageService.sendNotification('alerts', notification);
166
+ ```
167
+
168
+ **Validation:**
169
+ - ✅ `sessionId.id` is required
170
+ - ✅ `message` is required (string)
171
+ - ✅ Additional properties allowed (index signature)
172
+ - ✅ WebSocket must be connected
173
+
174
+ ---
175
+
176
+ ### `sendToCustomChannel(channel, payload)`
177
+
178
+ Send to a custom channel without automatic prefix.
179
+
180
+ **Parameters:**
181
+ - `channel: string` - Full channel name (as-is)
182
+ - `payload: any` - Any message payload
183
+
184
+ **Returns:** `boolean` - `true` if sent successfully, `false` otherwise
185
+
186
+ **Channel:** Raw channel name (no prefix added)
187
+
188
+ **Example:**
189
+
190
+ ```typescript
191
+ const success = this.wsMessageService.sendToCustomChannel(
192
+ 'CUSTOM-my-channel',
193
+ { custom: 'data', value: 123 }
194
+ );
195
+ ```
196
+
197
+ **Validation:**
198
+ - ✅ WebSocket must be connected
199
+ - ✅ No payload validation (accepts any data)
200
+
201
+ ---
202
+
203
+ ## Message Models
204
+
205
+ All message models follow the data-model pattern with `Interface` + `Class` + `adapt()` method.
206
+
207
+ ### StateMessage
208
+
209
+ Used for state synchronization and CRUD operations.
210
+
211
+ ```typescript
212
+ export interface StateMessageInterface {
213
+ sessionId: { id: string; ldap?: string; name?: string; email?: string };
214
+ content: any;
215
+ }
216
+
217
+ export class StateMessage implements StateMessageInterface {
218
+ constructor(
219
+ public sessionId: { id: string; ldap?: string; name?: string; email?: string } = { id: '' },
220
+ public content: any = {}
221
+ ) {}
222
+
223
+ static adapt(item?: any): StateMessage {
224
+ return new StateMessage(
225
+ item?.sessionId,
226
+ item?.content
227
+ );
228
+ }
229
+ }
230
+ ```
231
+
232
+ **Usage:**
233
+
234
+ ```typescript
235
+ // With adapt()
236
+ const message = StateMessage.adapt({
237
+ sessionId: { id: 'user123', name: 'John' },
238
+ content: { action: 'update', data: { id: 1, name: 'Updated' } }
239
+ });
240
+
241
+ // With constructor
242
+ const message = new StateMessage(
243
+ { id: 'user123', name: 'John' },
244
+ { action: 'delete', id: 1 }
245
+ );
246
+ ```
247
+
248
+ ---
249
+
250
+ ### PublicMessage
251
+
252
+ Used for chat and broadcast messaging.
253
+
254
+ ```typescript
255
+ export interface PublicMessageInterface {
256
+ sessionId: { id: string; ldap?: string; name?: string; email?: string };
257
+ content: { message: string; [key: string]: any };
258
+ }
259
+
260
+ export class PublicMessage implements PublicMessageInterface {
261
+ constructor(
262
+ public sessionId: { id: string; ldap?: string; name?: string; email?: string } = { id: '' },
263
+ public content: { message: string; [key: string]: any } = { message: '' }
264
+ ) {}
265
+
266
+ static adapt(item?: any): PublicMessage {
267
+ return new PublicMessage(
268
+ item?.sessionId,
269
+ item?.content
270
+ );
271
+ }
272
+ }
273
+ ```
274
+
275
+ **Usage:**
276
+
277
+ ```typescript
278
+ const message = PublicMessage.adapt({
279
+ sessionId: { id: 'user123', name: 'John' },
280
+ content: {
281
+ message: 'Hello!',
282
+ emoji: '👋',
283
+ replyTo: 42
284
+ }
285
+ });
286
+ ```
287
+
288
+ ---
289
+
290
+ ### NotificationMessage
291
+
292
+ Used for persistent notifications with history.
293
+
294
+ ```typescript
295
+ export interface NotificationMessageInterface {
296
+ sessionId: { id: string; ldap?: string; name?: string; email?: string; color?: string };
297
+ message: string;
298
+ [key: string]: any;
299
+ }
300
+
301
+ export class NotificationMessage implements NotificationMessageInterface {
302
+ sessionId: { id: string; ldap?: string; name?: string; email?: string; color?: string };
303
+ message: string;
304
+ [key: string]: any;
305
+
306
+ constructor(
307
+ sessionId: { id: string; ldap?: string; name?: string; email?: string; color?: string } = { id: '' },
308
+ message: string = '',
309
+ additionalProperties: any = {}
310
+ ) {
311
+ this.sessionId = sessionId;
312
+ this.message = message;
313
+ Object.assign(this, additionalProperties);
314
+ }
315
+
316
+ static adapt(item?: any): NotificationMessage {
317
+ return new NotificationMessage(
318
+ item?.sessionId,
319
+ item?.message,
320
+ item
321
+ );
322
+ }
323
+ }
324
+ ```
325
+
326
+ **Usage:**
327
+
328
+ ```typescript
329
+ const notification = NotificationMessage.adapt({
330
+ sessionId: { id: 'user123', name: 'John', color: '#FF0000' },
331
+ message: 'System update scheduled',
332
+ timestamp: Date.now(),
333
+ link: '/updates/123',
334
+ icon: 'notification'
335
+ });
336
+ ```
337
+
338
+ ---
339
+
340
+ ## ChannelType Enum
341
+
342
+ The service uses the `ChannelType` enum for prefix management:
343
+
344
+ ```typescript
345
+ export enum ChannelType {
346
+ STATE = 'SYS', // System/state channel (CRUD operations)
347
+ PUBLIC = 'PUB', // Public messaging (chat/broadcast)
348
+ NOTIFICATION = 'MES', // Notification channel (persistent messages)
349
+ CUSTOM = '' // No prefix (raw channel name)
350
+ }
351
+ ```
352
+
353
+ **Note:** `ChannelType` is already exported from `request-manager-state-service` to avoid conflicts.
354
+
355
+ ---
356
+
357
+ ## Error Handling
358
+
359
+ The service uses silent failure with console errors:
360
+
361
+ ### Validation Errors
362
+
363
+ ```typescript
364
+ // Missing sessionId.id
365
+ const message = StateMessage.adapt({
366
+ sessionId: {}, // ❌ Missing id
367
+ content: { action: 'create' }
368
+ });
369
+
370
+ const success = this.wsMessageService.sendStateMessage(['ai', 'tests'], message);
371
+ // Console: ❌ WebSocketMessageService: StateMessage must have sessionId.id
372
+ // Returns: false
373
+ ```
374
+
375
+ ### Connection Errors
376
+
377
+ ```typescript
378
+ // WebSocket not connected
379
+ const success = this.wsMessageService.sendPublicMessage('chat', message);
380
+ // Console: ❌ WebSocketMessageService: Cannot send public message - not connected
381
+ // Returns: false
382
+ ```
383
+
384
+ ### Success Example
385
+
386
+ ```typescript
387
+ const message = PublicMessage.adapt({
388
+ sessionId: { id: 'user123' },
389
+ content: { message: 'Hello!' }
390
+ });
391
+
392
+ const success = this.wsMessageService.sendPublicMessage('chat', message);
393
+ // Console: (no error)
394
+ // Returns: true
395
+ // Message sent to: PUB-chat
396
+ ```
397
+
398
+ ---
399
+
400
+ ## Complete Examples
401
+
402
+ ### Example 1: State Synchronization (CRUD)
403
+
404
+ ```typescript
405
+ import { Component, inject } from '@angular/core';
406
+ import { WebSocketMessageService, StateMessage } from 'http-request-manager';
407
+
408
+ @Component({
409
+ selector: 'app-data-sync',
410
+ template: `<button (click)="createItem()">Create Item</button>`
411
+ })
412
+ export class DataSyncComponent {
413
+ private wsMessageService = inject(WebSocketMessageService);
414
+
415
+ createItem() {
416
+ const message = StateMessage.adapt({
417
+ sessionId: { id: 'user123', name: 'John' },
418
+ content: {
419
+ action: 'create',
420
+ data: {
421
+ name: 'New Product',
422
+ price: 29.99,
423
+ category: 'Electronics'
424
+ }
425
+ }
426
+ });
427
+
428
+ const success = this.wsMessageService.sendStateMessage(
429
+ ['products', 'inventory'],
430
+ message
431
+ );
432
+
433
+ if (success) {
434
+ console.log('✅ State update sent to SYS-products/inventory');
435
+ } else {
436
+ console.warn('❌ Failed to send state update');
437
+ }
438
+ }
439
+ }
440
+ ```
441
+
442
+ ---
443
+
444
+ ### Example 2: Chat Application
445
+
446
+ ```typescript
447
+ import { Component, inject } from '@angular/core';
448
+ import { WebSocketMessageService, PublicMessage } from 'http-request-manager';
449
+
450
+ @Component({
451
+ selector: 'app-chat',
452
+ template: `
453
+ <input [(ngModel)]="messageText" placeholder="Type message...">
454
+ <button (click)="sendMessage()">Send</button>
455
+ `
456
+ })
457
+ export class ChatComponent {
458
+ private wsMessageService = inject(WebSocketMessageService);
459
+ messageText = '';
460
+
461
+ sendMessage() {
462
+ const chatMessage = PublicMessage.adapt({
463
+ sessionId: {
464
+ id: 'user123',
465
+ name: 'John',
466
+ color: '#00FF00'
467
+ },
468
+ content: {
469
+ message: this.messageText,
470
+ timestamp: Date.now(),
471
+ type: 'text'
472
+ }
473
+ });
474
+
475
+ const success = this.wsMessageService.sendPublicMessage('general', chatMessage);
476
+
477
+ if (success) {
478
+ this.messageText = '';
479
+ }
480
+ }
481
+ }
482
+ ```
483
+
484
+ ---
485
+
486
+ ### Example 3: Notification System
487
+
488
+ ```typescript
489
+ import { Component, inject } from '@angular/core';
490
+ import { WebSocketMessageService, NotificationMessage } from 'http-request-manager';
491
+
492
+ @Component({
493
+ selector: 'app-notifications',
494
+ template: `<button (click)="notifyUser()">Notify User</button>`
495
+ })
496
+ export class NotificationsComponent {
497
+ private wsMessageService = inject(WebSocketMessageService);
498
+
499
+ notifyUser() {
500
+ const notification = NotificationMessage.adapt({
501
+ sessionId: {
502
+ id: 'user123',
503
+ name: 'System',
504
+ color: '#FF0000'
505
+ },
506
+ message: 'Your order has been shipped!',
507
+ orderId: 'ORD-12345',
508
+ trackingNumber: 'TRACK-67890',
509
+ link: '/orders/12345',
510
+ icon: 'shipping',
511
+ priority: 'high'
512
+ });
513
+
514
+ const success = this.wsMessageService.sendNotification(
515
+ 'user-notifications',
516
+ notification
517
+ );
518
+ }
519
+ }
520
+ ```
521
+
522
+ ---
523
+
524
+ ### Example 4: Multi-Channel Messaging
525
+
526
+ ```typescript
527
+ import { Component, inject } from '@angular/core';
528
+ import {
529
+ WebSocketMessageService,
530
+ StateMessage,
531
+ PublicMessage,
532
+ NotificationMessage
533
+ } from 'http-request-manager';
534
+
535
+ @Component({
536
+ selector: 'app-multi-channel',
537
+ template: `
538
+ <button (click)="sendAll()">Send to All Channels</button>
539
+ `
540
+ })
541
+ export class MultiChannelComponent {
542
+ private wsMessageService = inject(WebSocketMessageService);
543
+
544
+ sendAll() {
545
+ // Send state update
546
+ const stateMsg = StateMessage.adapt({
547
+ sessionId: { id: 'user123' },
548
+ content: { action: 'update', data: { status: 'online' } }
549
+ });
550
+ this.wsMessageService.sendStateMessage(['users', 'status'], stateMsg);
551
+
552
+ // Send chat message
553
+ const chatMsg = PublicMessage.adapt({
554
+ sessionId: { id: 'user123' },
555
+ content: { message: 'User is now online!' }
556
+ });
557
+ this.wsMessageService.sendPublicMessage('activity', chatMsg);
558
+
559
+ // Send notification
560
+ const notification = NotificationMessage.adapt({
561
+ sessionId: { id: 'user123' },
562
+ message: 'Status changed to online'
563
+ });
564
+ this.wsMessageService.sendNotification('alerts', notification);
565
+ }
566
+ }
567
+ ```
568
+
569
+ ---
570
+
571
+ ## Comparison with Old Approach
572
+
573
+ ### Before (Multiple Services)
574
+
575
+ ```typescript
576
+ // Inject 3 different services
577
+ private stateService = inject(StateServiceDemo);
578
+ private messageService = inject(MessageServiceDemo);
579
+ private notificationService = inject(NotificationServiceDemo);
580
+
581
+ // Different patterns for each
582
+ this.stateService.updateConnection(server, wsServer, token, user, ['ai', 'tests']);
583
+ this.stateService.createRecord(data); // Hidden channel
584
+
585
+ this.messageService.sendMessage(msg, ['chat']); // Manual prefix
586
+
587
+ this.notificationService.sendNotification('alerts', msg); // Manual prefix
588
+ ```
589
+
590
+ ### After (Unified Service)
591
+
592
+ ```typescript
593
+ // Inject 1 service
594
+ private wsMessageService = inject(WebSocketMessageService);
595
+
596
+ // Consistent pattern for all
597
+ this.wsMessageService.sendStateMessage(['ai', 'tests'], stateMsg); // Explicit
598
+ this.wsMessageService.sendPublicMessage('chat', chatMsg); // Explicit
599
+ this.wsMessageService.sendNotification('alerts', notification); // Explicit
600
+ ```
601
+
602
+ **Benefits:**
603
+ - ✅ Single injection point
604
+ - ✅ Consistent API across all message types
605
+ - ✅ Explicit channel names (no hidden state)
606
+ - ✅ Type-safe message models
607
+ - ✅ Automatic prefix management
608
+
609
+ ---
610
+
611
+ ## Best Practices
612
+
613
+ ### 1. Always Use `adapt()` Method
614
+
615
+ ```typescript
616
+ // ✅ Correct
617
+ const message = StateMessage.adapt({
618
+ sessionId: { id: 'user123' },
619
+ content: { action: 'create' }
620
+ });
621
+
622
+ // ❌ Avoid
623
+ const message = new StateMessage({ id: 'user123' }, { action: 'create' });
624
+ ```
625
+
626
+ ### 2. Check Return Value
627
+
628
+ ```typescript
629
+ const success = this.wsMessageService.sendPublicMessage('chat', message);
630
+
631
+ if (!success) {
632
+ // Handle failure (log, retry, notify user, etc.)
633
+ console.warn('Message not sent - WebSocket may be disconnected');
634
+ }
635
+ ```
636
+
637
+ ### 3. Include Session ID
638
+
639
+ Always provide at least `sessionId.id`:
640
+
641
+ ```typescript
642
+ // ✅ Minimum required
643
+ StateMessage.adapt({
644
+ sessionId: { id: 'user123' },
645
+ content: { ... }
646
+ });
647
+
648
+ // ❌ Will fail validation
649
+ StateMessage.adapt({
650
+ sessionId: {}, // Missing id
651
+ content: { ... }
652
+ });
653
+ ```
654
+
655
+ ### 4. Use Meaningful Paths/Channels
656
+
657
+ ```typescript
658
+ // ✅ Clear and descriptive
659
+ sendStateMessage(['products', 'inventory'], message);
660
+ sendPublicMessage('customer-support', message);
661
+ sendNotification('order-updates', message);
662
+
663
+ // ❌ Vague
664
+ sendStateMessage(['data'], message);
665
+ sendPublicMessage('channel1', message);
666
+ ```
667
+
668
+ ### 5. Extend NotificationMessage with Custom Properties
669
+
670
+ ```typescript
671
+ const notification = NotificationMessage.adapt({
672
+ sessionId: { id: 'user123' },
673
+ message: 'Order shipped',
674
+ // Custom properties
675
+ orderId: 'ORD-123',
676
+ trackingNumber: 'TRACK-456',
677
+ estimatedDelivery: '2026-04-05',
678
+ carrier: 'FedEx'
679
+ });
680
+ ```
681
+
682
+ ---
683
+
684
+ ## Troubleshooting
685
+
686
+ ### Message Not Sending
687
+
688
+ **Problem:** `sendStateMessage()` returns `false`
689
+
690
+ **Solution:**
691
+ 1. Check console for error messages
692
+ 2. Verify WebSocket is connected: `WebSocketManagerService.isConnected()`
693
+ 3. Ensure `sessionId.id` is provided
694
+ 4. Check path is not empty: `['ai', 'tests']` not `[]`
695
+
696
+ ### Wrong Channel Received
697
+
698
+ **Problem:** Messages appearing on unexpected channels
699
+
700
+ **Solution:**
701
+ 1. Verify channel name construction
702
+ 2. Check prefix is correct (SYS-, PUB-, MES-)
703
+ 3. Ensure no typos in path/channel names
704
+
705
+ ### TypeScript Errors
706
+
707
+ **Problem:** Type errors when creating messages
708
+
709
+ **Solution:**
710
+ 1. Use `adapt()` method for automatic type inference
711
+ 2. Ensure `sessionId` object has required properties
712
+ 3. For `PublicMessage`, ensure `content.message` is a string
713
+ 4. For `NotificationMessage`, ensure `message` is a string
714
+
715
+ ---
716
+
717
+ ## Related Documentation
718
+
719
+ - [WebSocket Manager Service](./WS_MANAGER_README.md) - Underlying WebSocket connection management
720
+ - [Advanced WebSocket Guide](./ADVANCED_WEBSOCKET.md) - Channel architecture, presence tracking, message replay
721
+ - [ChannelMessage Model](./MODELS_README.md#channelmessage) - Base message structure
722
+ - [Complete API Reference](./COMPLETE_API_REFERENCE.md) - Full library API documentation
723
+
724
+ ---
725
+
726
+ ## Migration Guide
727
+
728
+ ### From MessageServiceDemo
729
+
730
+ **Before:**
731
+
732
+ ```typescript
733
+ private messageService = inject(MessageServiceDemo);
734
+
735
+ this.messageService.sendMessage(
736
+ ChannelMessage.adapt({
737
+ sessionId: { id: 'user123' },
738
+ content: { message: 'Hello' }
739
+ }),
740
+ ['chat']
741
+ );
742
+ ```
743
+
744
+ **After:**
745
+
746
+ ```typescript
747
+ private wsMessageService = inject(WebSocketMessageService);
748
+
749
+ this.wsMessageService.sendPublicMessage(
750
+ 'chat',
751
+ PublicMessage.adapt({
752
+ sessionId: { id: 'user123' },
753
+ content: { message: 'Hello' }
754
+ })
755
+ );
756
+ ```
757
+
758
+ ### From NotificationServiceDemo
759
+
760
+ **Before:**
761
+
762
+ ```typescript
763
+ private notificationService = inject(NotificationServiceDemo);
764
+
765
+ this.notificationService.sendNotification('alerts', {
766
+ sessionId: { id: 'user123' },
767
+ message: 'New notification'
768
+ });
769
+ ```
770
+
771
+ **After:**
772
+
773
+ ```typescript
774
+ private wsMessageService = inject(WebSocketMessageService);
775
+
776
+ this.wsMessageService.sendNotification(
777
+ 'alerts',
778
+ NotificationMessage.adapt({
779
+ sessionId: { id: 'user123' },
780
+ message: 'New notification'
781
+ })
782
+ );
783
+ ```
784
+
785
+ ---
786
+
787
+ ## Summary
788
+
789
+ The `WebSocketMessageService` provides a unified, type-safe approach to WebSocket messaging with:
790
+
791
+ - ✅ **Three message types** - State (SYS-), Public (PUB-), Notification (MES-)
792
+ - ✅ **Automatic prefixes** - No manual string concatenation
793
+ - ✅ **Type safety** - Compile-time validation of message structures
794
+ - ✅ **Runtime validation** - Checks required fields before sending
795
+ - ✅ **Simple API** - Boolean return values for success/failure
796
+ - ✅ **Silent failure** - Console errors without exceptions
797
+ - ✅ **Backward compatible** - Existing services continue to work
798
+
799
+ For more information, see the [WebSocket Manager Service documentation](./WS_MANAGER_README.md) or the [Advanced WebSocket Guide](./ADVANCED_WEBSOCKET.md).