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,477 @@
1
+ import { Injectable, OnDestroy } from '@angular/core';
2
+ import { BehaviorSubject, interval, Observable, Subject, Subscription } from 'rxjs';
3
+ import { takeUntil } from 'rxjs/operators';
4
+ import { WebSocketManagerService } from './websocket-service/websocket-manager.service';
5
+
6
+ /**
7
+ * Message Tracker Service - Guaranteed Message Delivery
8
+ *
9
+ * Tracks message IDs, detects gaps, manages acknowledgments, and handles sync.
10
+ * Ensures frontend clients never miss messages even during disconnections.
11
+ *
12
+ * Features:
13
+ * - Per-channel message sequence tracking
14
+ * - Automatic gap detection and recovery
15
+ * - Batch acknowledgments (configurable interval)
16
+ * - Reconnection sync with last-seen tracking
17
+ * - Gap threshold alerting (10 messages before UI notification)
18
+ */
19
+ @Injectable({
20
+ providedIn: 'root',
21
+ })
22
+ export class MessageTrackerService implements OnDestroy {
23
+
24
+ // ═══════════════════════════════════════════════════════════════════════════
25
+ // CONFIGURATION
26
+ // ═══════════════════════════════════════════════════════════════════════════
27
+
28
+ /** Batch acknowledgment interval in milliseconds */
29
+ private readonly BATCH_ACK_INTERVAL_MS = 5000; // 5 seconds
30
+
31
+ /** Maximum gap before alerting UI */
32
+ private readonly GAP_THRESHOLD = 10;
33
+
34
+ /** Maximum messages to store in pending acks before forcing batch */
35
+ private readonly MAX_PENDING_ACKS = 100;
36
+
37
+ // ═══════════════════════════════════════════════════════════════════════════
38
+ // STATE TRACKING
39
+ // ═══════════════════════════════════════════════════════════════════════════
40
+
41
+ /**
42
+ * Track last seen message ID per channel
43
+ * Map<channelName, lastMessageId>
44
+ */
45
+ private lastSeen = new Map<string, number>();
46
+
47
+ /**
48
+ * Expected next message ID per channel (for gap detection)
49
+ * Map<channelName, nextExpectedId>
50
+ */
51
+ private expectedSequence = new Map<string, number>();
52
+
53
+ /**
54
+ * Pending acknowledgments per channel
55
+ * Map<channelName, Set<messageId>>
56
+ */
57
+ private pendingAcks = new Map<string, Set<number>>();
58
+
59
+ /**
60
+ * Gap count per channel (for threshold alerting)
61
+ * Map<channelName, gapCount>
62
+ */
63
+ private gapCounts = new Map<string, number>();
64
+
65
+ /**
66
+ * Replay mode tracking (per channel)
67
+ * Used to distinguish replay vs live messages
68
+ */
69
+ private inReplayMode = new Map<string, boolean>();
70
+
71
+ /**
72
+ * Gap retry count (for retry logic)
73
+ * Map<channel, retryCount>
74
+ */
75
+ private gapRetryCount = new Map<string, number>();
76
+
77
+ /** Subscription to WebSocket messages */
78
+ private messagesSubscription: Subscription | null = null;
79
+
80
+ /** Subject to signal destroy for takeUntil */
81
+ private destroy$ = new Subject<void>();
82
+
83
+ /**
84
+ * Track channels we want to be subscribed to (survives disconnect/reconnect)
85
+ * This is separate from WebSocketManagerService.subscribedChannels which tracks
86
+ * actual active subscriptions
87
+ */
88
+ private intendedChannels = new Set<string>();
89
+
90
+ /** Observable to emit processed messages to UI components */
91
+ private messagesSubject = new BehaviorSubject<any>(null);
92
+ public messages$: Observable<any> = this.messagesSubject.asObservable();
93
+
94
+ // ═══════════════════════════════════════════════════════════════════════════
95
+ // INITIALIZATION
96
+ // ═══════════════════════════════════════════════════════════════════════════
97
+
98
+ constructor(private wsManager: WebSocketManagerService) {
99
+ // Restore state from sessionStorage (survives page reload)
100
+ this.restoreLastSeen();
101
+ this.restoreIntendedChannels();
102
+
103
+ // Start batch acknowledgment timer
104
+ interval(this.BATCH_ACK_INTERVAL_MS)
105
+ .pipe(takeUntil(this.destroy$))
106
+ .subscribe(() => this.sendAllBatchAcks());
107
+
108
+ // Subscribe to all incoming WebSocket messages
109
+ this.messagesSubscription = this.wsManager.messages$.subscribe(msg => {
110
+ if (msg) {
111
+ this.onMessage(msg);
112
+ }
113
+ });
114
+
115
+ // Listen for reconnect events - re-subscribe with lastSeenId for sync
116
+ this.wsManager.onReconnect$.subscribe(() => {
117
+ console.log('🔄 Reconnection detected, re-subscribing with lastSeenId...');
118
+ this.reSubscribeAllChannels();
119
+ });
120
+
121
+ console.log('✅ MessageTrackerService initialized');
122
+ }
123
+
124
+ ngOnDestroy(): void {
125
+ this.destroy$.next();
126
+ this.destroy$.complete();
127
+ this.persistLastSeen(); // This now also persists intendedChannels
128
+ this.messagesSubscription?.unsubscribe();
129
+ console.log('🛑 MessageTrackerService destroyed');
130
+ }
131
+
132
+ // ═══════════════════════════════════════════════════════════════════════════
133
+ // MESSAGE HANDLING
134
+ // ═══════════════════════════════════════════════════════════════════════════
135
+
136
+ /**
137
+ * Process incoming message
138
+ * Tracks ID, detects gaps, queues acknowledgment
139
+ */
140
+ private onMessage(msg: any): void {
141
+ const { type, channel, messageId, isReplay } = msg;
142
+
143
+ // Only track messages with IDs (ignore legacy messages without messageId)
144
+ if (messageId === undefined || messageId === null) {
145
+ console.warn('⚠️ Received message without ID (legacy format):', msg);
146
+ // Still forward legacy messages to UI
147
+ this.messagesSubject.next(msg);
148
+ return;
149
+ }
150
+
151
+ // Handle replay mode transitions
152
+ if (isReplay && !this.inReplayMode.get(channel)) {
153
+ console.log(`🔄 Entering replay mode for channel: ${channel}`);
154
+ this.inReplayMode.set(channel, true);
155
+ } else if (!isReplay && this.inReplayMode.get(channel)) {
156
+ console.log(`✅ Exiting replay mode for channel: ${channel}`);
157
+ this.inReplayMode.set(channel, false);
158
+ }
159
+
160
+ // Track message and detect gaps
161
+ this.trackMessage(channel, messageId, isReplay);
162
+
163
+ // Forward message to UI components
164
+ this.messagesSubject.next(msg);
165
+ }
166
+
167
+ /**
168
+ * Track message ID and detect gaps
169
+ */
170
+ private trackMessage(channel: string, messageId: number, isReplay: boolean): void {
171
+ const expected = this.expectedSequence.get(channel) || 1;
172
+
173
+ // Gap detection
174
+ if (messageId !== expected) {
175
+ console.warn(`⚠️ Gap detected in channel "${channel}": expected ${expected}, got ${messageId}`);
176
+
177
+ // Increment gap count
178
+ const currentGapCount = this.gapCounts.get(channel) || 0;
179
+ const newGapCount = currentGapCount + 1;
180
+ this.gapCounts.set(channel, newGapCount);
181
+
182
+ // Check threshold
183
+ if (newGapCount >= this.GAP_THRESHOLD) {
184
+ console.error(`🚨 Gap threshold exceeded for channel "${channel}": ${newGapCount} gaps`);
185
+ this.onGapThresholdExceeded(channel, newGapCount);
186
+ }
187
+
188
+ // Request gap fill
189
+ this.requestGapFill(channel, expected, messageId - 1);
190
+ } else {
191
+ // Reset gap count and retry count on successful sequence
192
+ this.gapCounts.set(channel, 0);
193
+ this.gapRetryCount.set(channel, 0);
194
+ }
195
+
196
+ // Update tracking
197
+ this.lastSeen.set(channel, messageId);
198
+ this.expectedSequence.set(channel, messageId + 1);
199
+
200
+ // Persist to sessionStorage (debounced in production)
201
+ this.persistLastSeen();
202
+
203
+ // Queue for acknowledgment
204
+ this.queueAck(channel, messageId);
205
+
206
+ // Check if we should force batch ack due to volume
207
+ const pendingCount = this.pendingAcks.get(channel)?.size || 0;
208
+ if (pendingCount >= this.MAX_PENDING_ACKS) {
209
+ console.log(`📦 Forcing batch ack: ${pendingCount} pending messages`);
210
+ this.sendBatchAck(channel);
211
+ }
212
+ }
213
+
214
+ // ═══════════════════════════════════════════════════════════════════════════
215
+ // ACKNOWLEDGMENT MANAGEMENT
216
+ // ═══════════════════════════════════════════════════════════════════════════
217
+
218
+ /**
219
+ * Queue message for batch acknowledgment
220
+ */
221
+ private queueAck(channel: string, messageId: number): void {
222
+ if (!this.pendingAcks.has(channel)) {
223
+ this.pendingAcks.set(channel, new Set());
224
+ }
225
+ this.pendingAcks.get(channel)!.add(messageId);
226
+ }
227
+
228
+ /**
229
+ * Send batch acknowledgments for all channels with pending acks
230
+ */
231
+ private sendAllBatchAcks(): void {
232
+ this.pendingAcks.forEach((messageIds, channel) => {
233
+ if (messageIds.size > 0) {
234
+ this.sendBatchAck(channel);
235
+ }
236
+ });
237
+ }
238
+
239
+ /**
240
+ * Send batch acknowledgment for a specific channel
241
+ */
242
+ private sendBatchAck(channel: string): void {
243
+ const messageIds = this.pendingAcks.get(channel);
244
+
245
+ if (!messageIds || messageIds.size === 0) {
246
+ return;
247
+ }
248
+
249
+ // Convert Set to sorted array
250
+ const sortedIds = Array.from(messageIds).sort((a, b) => a - b);
251
+ const ackUpTo = sortedIds[sortedIds.length - 1];
252
+
253
+ console.log(`📦 Batch ack for channel "${channel}": ackUpTo=${ackUpTo} (${messageIds.size} messages)`);
254
+
255
+ this.wsManager.send({
256
+ type: 'messageAckBatch',
257
+ channel,
258
+ ackUpTo,
259
+ // Optional: include skippedIds if you want to report gaps
260
+ // skippedIds: this.getSkippedIds(channel, ackUpTo)
261
+ });
262
+
263
+ // Clear pending acks
264
+ messageIds.clear();
265
+ }
266
+
267
+ // ═══════════════════════════════════════════════════════════════════════════
268
+ // GAP RECOVERY
269
+ // ═══════════════════════════════════════════════════════════════════════════
270
+
271
+ /**
272
+ * Request missing messages from server
273
+ */
274
+ private requestGapFill(channel: string, fromId: number, toId: number): void {
275
+ const retries = this.gapRetryCount.get(channel) || 0;
276
+
277
+ if (retries >= 3) {
278
+ console.error(`🚨 Gap fill failed after 3 retries for channel "${channel}": ${fromId} to ${toId}`);
279
+ // Could emit to UI for manual intervention
280
+ return;
281
+ }
282
+
283
+ console.log(`🔍 Requesting gap fill for channel "${channel}": ${fromId} to ${toId} (attempt ${retries + 1})`);
284
+
285
+ this.wsManager.send({
286
+ type: 'gapRequest',
287
+ channel,
288
+ fromId,
289
+ toId
290
+ });
291
+
292
+ this.gapRetryCount.set(channel, retries + 1);
293
+ }
294
+
295
+ /**
296
+ * Handle gap threshold exceeded (optional: alert UI)
297
+ */
298
+ private onGapThresholdExceeded(channel: string, gapCount: number): void {
299
+ console.warn(`⚠️ High gap count for channel "${channel}": ${gapCount} missed messages`);
300
+ // Could emit to a separate observable for UI components to subscribe to
301
+ // this.gapAlerts.next({ channel, gapCount });
302
+ }
303
+
304
+ // ═══════════════════════════════════════════════════════════════════════════
305
+ // SUBSCRIPTION MANAGEMENT
306
+ // ═══════════════════════════════════════════════════════════════════════════
307
+
308
+ /**
309
+ * Subscribe to channel with sync support
310
+ * Automatically includes lastSeenId for replay
311
+ */
312
+ subscribeToChannel(channel: string, userData?: any): void {
313
+ const lastSeenId = this.lastSeen.get(channel) || 0;
314
+
315
+ console.log(`📥 Subscribing to channel "${channel}" with lastSeenId=${lastSeenId}`);
316
+ console.log(`📝 Adding to intendedChannels (now has ${this.intendedChannels.size + 1} channels)`);
317
+
318
+ // Track this channel as intended (survives disconnect/reconnect)
319
+ this.intendedChannels.add(channel);
320
+ this.persistIntendedChannels();
321
+
322
+ this.wsManager.sendSubscribeWithLastSeen(channel, userData, lastSeenId);
323
+ }
324
+
325
+ /**
326
+ * Re-subscribe to all previously subscribed channels after reconnect
327
+ * Includes lastSeenId for each channel to trigger message replay
328
+ */
329
+ private reSubscribeAllChannels(): void {
330
+ // Use intendedChannels which survives disconnect/reconnect
331
+ const channels = Array.from(this.intendedChannels);
332
+
333
+ console.log(`🔄 Re-subscribing to ${channels.length} channel(s) with lastSeenId...`);
334
+
335
+ channels.forEach((channel: string) => {
336
+ this.subscribeToChannel(channel);
337
+ });
338
+
339
+ console.log(`✅ Re-subscription complete for ${channels.length} channel(s)`);
340
+ }
341
+
342
+ // ═══════════════════════════════════════════════════════════════════════════
343
+ // STATE PERSISTENCE
344
+ // ═══════════════════════════════════════════════════════════════════════════
345
+
346
+ /**
347
+ * Persist lastSeen to sessionStorage (survives page reload)
348
+ */
349
+ private persistLastSeen(): void {
350
+ try {
351
+ const data = JSON.stringify(Array.from(this.lastSeen.entries()));
352
+ sessionStorage.setItem('messageLastSeen', data);
353
+
354
+ // Also persist intendedChannels
355
+ this.persistIntendedChannels();
356
+ } catch (err: any) {
357
+ console.warn('⚠️ Failed to persist lastSeen:', err.message);
358
+ }
359
+ }
360
+
361
+ /**
362
+ * Restore lastSeen from sessionStorage
363
+ */
364
+ private restoreLastSeen(): void {
365
+ try {
366
+ const data = sessionStorage.getItem('messageLastSeen');
367
+ if (data) {
368
+ const entries = JSON.parse(data);
369
+ this.lastSeen = new Map(entries);
370
+
371
+ // Rebuild expectedSequence from restored lastSeen
372
+ this.lastSeen.forEach((lastId, channel) => {
373
+ this.expectedSequence.set(channel, lastId + 1);
374
+ });
375
+
376
+ console.log('📥 Restored lastSeen from sessionStorage:', this.lastSeen.size, 'channels');
377
+ }
378
+ } catch (err: any) {
379
+ console.warn('⚠️ Failed to restore lastSeen:', err.message);
380
+ }
381
+ }
382
+
383
+ /**
384
+ * Persist intendedChannels to sessionStorage
385
+ */
386
+ private persistIntendedChannels(): void {
387
+ try {
388
+ const channels = Array.from(this.intendedChannels);
389
+ sessionStorage.setItem('intendedChannels', JSON.stringify(channels));
390
+ } catch (err: any) {
391
+ console.warn('⚠️ Failed to persist intendedChannels:', err.message);
392
+ }
393
+ }
394
+
395
+ /**
396
+ * Restore intendedChannels from sessionStorage
397
+ */
398
+ private restoreIntendedChannels(): void {
399
+ try {
400
+ const data = sessionStorage.getItem('intendedChannels');
401
+ if (data) {
402
+ const channels = JSON.parse(data);
403
+ this.intendedChannels = new Set(channels);
404
+ console.log('📥 Restored intendedChannels from sessionStorage:', this.intendedChannels.size, 'channels');
405
+ }
406
+ } catch (err: any) {
407
+ console.warn('⚠️ Failed to restore intendedChannels:', err.message);
408
+ }
409
+ }
410
+
411
+ // ═══════════════════════════════════════════════════════════════════════════
412
+ // PUBLIC ACCESSORS
413
+ // ═══════════════════════════════════════════════════════════════════════════
414
+
415
+ /**
416
+ * Get last seen message ID for a channel
417
+ */
418
+ getLastSeenId(channel: string): number {
419
+ return this.lastSeen.get(channel) || 0;
420
+ }
421
+
422
+ /**
423
+ * Get expected next message ID for a channel
424
+ */
425
+ getExpectedNextId(channel: string): number {
426
+ return this.expectedSequence.get(channel) || 1;
427
+ }
428
+
429
+ /**
430
+ * Check if currently in replay mode for a channel
431
+ */
432
+ isInReplayMode(channel: string): boolean {
433
+ return this.inReplayMode.get(channel) || false;
434
+ }
435
+
436
+ /**
437
+ * Get gap count for a channel
438
+ */
439
+ getGapCount(channel: string): number {
440
+ return this.gapCounts.get(channel) || 0;
441
+ }
442
+
443
+ // ═══════════════════════════════════════════════════════════════════════════
444
+ // UTILITY METHODS
445
+ // ═══════════════════════════════════════════════════════════════════════════
446
+
447
+ /**
448
+ * Get skipped IDs between expected and received (for detailed gap reporting)
449
+ */
450
+ private getSkippedIds(channel: string, upToId: number): number[] {
451
+ const expected = this.expectedSequence.get(channel) || 1;
452
+ const skipped: number[] = [];
453
+
454
+ for (let i = expected; i < upToId; i++) {
455
+ const pending = this.pendingAcks.get(channel);
456
+ if (!pending?.has(i)) {
457
+ skipped.push(i);
458
+ }
459
+ }
460
+
461
+ return skipped;
462
+ }
463
+
464
+ /**
465
+ * Clear all tracking state (useful for debugging or manual reset)
466
+ */
467
+ clearState(): void {
468
+ this.lastSeen.clear();
469
+ this.expectedSequence.clear();
470
+ this.pendingAcks.clear();
471
+ this.gapCounts.clear();
472
+ this.inReplayMode.clear();
473
+ this.gapRetryCount.clear();
474
+ this.persistLastSeen();
475
+ console.log('🧹 MessageTracker state cleared');
476
+ }
477
+ }
@@ -0,0 +1,29 @@
1
+ export interface ChannelInfoInterface {
2
+ name: string
3
+ canSubscribe: boolean
4
+ }
5
+
6
+ export class ChannelInfo implements ChannelInfoInterface {
7
+
8
+ constructor(
9
+ public name = '',
10
+ public canSubscribe = false,
11
+ ) {}
12
+
13
+ static adapt(item?: any): ChannelInfo {
14
+ // Handle string input (backward compatibility with old server responses)
15
+ if (typeof item === 'string') {
16
+ return new ChannelInfo(item, true); // Assume subscribable
17
+ }
18
+
19
+ // Handle object input (new server responses)
20
+ // Default canSubscribe to true if not specified (backward compat)
21
+ return new ChannelInfo(
22
+ item?.name,
23
+ item?.canSubscribe ?? true,
24
+ )
25
+ }
26
+
27
+ }
28
+
29
+
@@ -0,0 +1,24 @@
1
+ import { UserMessage } from "./user-message.model"
2
+
3
+ export interface ChannelMessageInterface {
4
+ channel: string,
5
+ users: UserMessage[],
6
+ }
7
+
8
+ export class ChannelMessage implements ChannelMessageInterface {
9
+
10
+ constructor(
11
+ public channel: string,
12
+ public users: UserMessage[] = [],
13
+ ) {}
14
+
15
+ static adapt(item?: any): ChannelMessage {
16
+
17
+ return new ChannelMessage(
18
+ item?.channel,
19
+ (item?.users) ? item?.users.map((userItem: any) => UserMessage.adapt(userItem)) : [],
20
+ )
21
+
22
+ }
23
+
24
+ }
@@ -0,0 +1,36 @@
1
+ import { WSUser } from "./ws-user.model";
2
+
3
+ export interface ChannelMessageInterface {
4
+ messageId?: number, // NEW: Sequential ID per channel
5
+ channel?: string, // NEW: Channel name
6
+ isReplay?: boolean, // NEW: Replay indicator
7
+ sessionId: any,
8
+ content: any,
9
+ timestamp?: string,
10
+ }
11
+
12
+ export class ChannelMessage implements ChannelMessageInterface {
13
+
14
+ constructor(
15
+ public messageId?: number,
16
+ public channel?: string,
17
+ public isReplay?: boolean,
18
+ public sessionId: any = null,
19
+ public content: any = null,
20
+ public timestamp?: string,
21
+ ) {}
22
+
23
+ static adapt(item?: any): ChannelMessage {
24
+
25
+ return new ChannelMessage(
26
+ item?.messageId,
27
+ item?.channel,
28
+ item?.isReplay,
29
+ item?.sessionId || item?.id, // Support both for backward compatibility
30
+ item?.content,
31
+ item?.timestamp,
32
+ )
33
+
34
+ }
35
+
36
+ }
@@ -0,0 +1,6 @@
1
+ export enum ChannelType {
2
+ STATE = 'SYS', // System/state channel (CRUD operations)
3
+ PUBLIC = 'PUB', // Public messaging (chat/broadcast)
4
+ NOTIFICATION = 'MES', // Notification channel (persistent messages)
5
+ CUSTOM = '' // No prefix (raw channel name)
6
+ }
@@ -0,0 +1,5 @@
1
+ export enum CommunicationType {
2
+ MESSAGE,
3
+ ALERT,
4
+ OTHER
5
+ }
@@ -0,0 +1,10 @@
1
+ export * from "./channel-info.model";
2
+ export * from "./ws-user.model";
3
+
4
+ export * from "./communication-type.enum";
5
+ export * from "./channel-type.enum";
6
+
7
+ export * from "./state-message.model";
8
+ export * from "./public-message.model";
9
+ export * from "./notification-message.model";
10
+
@@ -0,0 +1,29 @@
1
+ export interface NotificationMessageInterface {
2
+ sessionId: { id: string; ldap?: string; name?: string; email?: string; color?: string };
3
+ message: string;
4
+ [key: string]: any;
5
+ }
6
+
7
+ export class NotificationMessage implements NotificationMessageInterface {
8
+ sessionId: { id: string; ldap?: string; name?: string; email?: string; color?: string };
9
+ message: string;
10
+ [key: string]: any;
11
+
12
+ constructor(
13
+ sessionId: { id: string; ldap?: string; name?: string; email?: string; color?: string } = { id: '' },
14
+ message: string = '',
15
+ additionalProperties: any = {}
16
+ ) {
17
+ this.sessionId = sessionId;
18
+ this.message = message;
19
+ Object.assign(this, additionalProperties);
20
+ }
21
+
22
+ static adapt(item?: any): NotificationMessage {
23
+ return new NotificationMessage(
24
+ item?.sessionId,
25
+ item?.message,
26
+ item
27
+ );
28
+ }
29
+ }
@@ -0,0 +1,18 @@
1
+ export interface PublicMessageInterface {
2
+ sessionId: { id: string; ldap?: string; name?: string; email?: string };
3
+ content: { message: string; [key: string]: any };
4
+ }
5
+
6
+ export class PublicMessage implements PublicMessageInterface {
7
+ constructor(
8
+ public sessionId: { id: string; ldap?: string; name?: string; email?: string } = { id: '' },
9
+ public content: { message: string; [key: string]: any } = { message: '' }
10
+ ) {}
11
+
12
+ static adapt(item?: any): PublicMessage {
13
+ return new PublicMessage(
14
+ item?.sessionId,
15
+ item?.content
16
+ );
17
+ }
18
+ }
@@ -0,0 +1,18 @@
1
+ export interface StateMessageInterface {
2
+ sessionId: { id: string; ldap?: string; name?: string; email?: string };
3
+ content: any;
4
+ }
5
+
6
+ export class StateMessage implements StateMessageInterface {
7
+ constructor(
8
+ public sessionId: { id: string; ldap?: string; name?: string; email?: string } = { id: '' },
9
+ public content: any = {}
10
+ ) {}
11
+
12
+ static adapt(item?: any): StateMessage {
13
+ return new StateMessage(
14
+ item?.sessionId,
15
+ item?.content
16
+ );
17
+ }
18
+ }