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,165 @@
1
+ import { TestBed } from '@angular/core/testing';
2
+ import { HttpTestingController, provideHttpClientTesting } from '@angular/common/http/testing';
3
+ import { UtilsService } from './utils.service';
4
+ import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
5
+
6
+ describe('UtilsService', () => {
7
+ let service: UtilsService;
8
+ let httpMock: HttpTestingController;
9
+
10
+ beforeEach(() => {
11
+ TestBed.configureTestingModule({
12
+ imports: [],
13
+ providers: [UtilsService, provideHttpClient(withInterceptorsFromDi()), provideHttpClientTesting()]
14
+ });
15
+ service = TestBed.inject(UtilsService);
16
+ httpMock = TestBed.inject(HttpTestingController);
17
+ });
18
+
19
+ afterEach(() => {
20
+ httpMock.verify();
21
+ });
22
+
23
+ it('should be created', () => {
24
+ expect(service).toBeTruthy();
25
+ });
26
+
27
+ describe('Type Checks and JSON Conversions', () => {
28
+ it('should check string and object types', () => {
29
+ expect(service.isString('test')).toBeTrue();
30
+ expect(service.isString(123)).toBeFalse();
31
+ expect(service.isObject({})).toBeTrue();
32
+ expect(service.isObject('test')).toBeFalse();
33
+ });
34
+
35
+ it('should convert between JSON and string', () => {
36
+ const obj = { key: 'value' };
37
+ const jsonString = '{"key":"value"}';
38
+ expect(service.JSONToString(obj)).toBe(JSON.stringify(obj));
39
+ expect(service.JSONToString('test')).toBe('test');
40
+ expect(service.stringToJSON(jsonString)).toEqual(JSON.parse(jsonString));
41
+ expect(service.stringToJSON('test')).toBe('test');
42
+ });
43
+
44
+ it('should check if a string is valid JSON', () => {
45
+ expect(service.isJSON('{"key":"value"}')).toBeTrue();
46
+ expect(service.isJSON('not json')).toBeFalse();
47
+ });
48
+ });
49
+
50
+ describe('Object Access and Comparison', () => {
51
+ it('should return property value and compare objects', () => {
52
+ const obj = { key: 'value' };
53
+ expect(service.getValueByProp(obj, 'key')).toBe('value');
54
+ expect(service.getValueByProp(undefined, 'key')).toBeFalse();
55
+
56
+ const obj1 = { key: 'value', nested: { a: 1 } };
57
+ const obj2 = { key: 'value', nested: { a: 1 } };
58
+ const obj3 = { key: 'value', nested: { a: 2 } };
59
+ expect(service.objectsEqual(obj1, obj2)).toBeTrue();
60
+ expect(service.objectsEqual(obj1, obj3)).toBeFalse();
61
+ });
62
+ });
63
+
64
+ describe('HTTP and Getter', () => {
65
+ it('should obtain JSON from file', () => {
66
+ const dummyData = { key: 'value' };
67
+ service.getJSON('test.json').subscribe(data => {
68
+ expect(data).toEqual(dummyData);
69
+ });
70
+ const req = httpMock.expectOne('assets/data/test.json');
71
+ expect(req.request.method).toBe('GET');
72
+ req.flush(dummyData);
73
+ });
74
+
75
+ it('should return current time from today getter', () => {
76
+ const nowInSec = new Date().getMilliseconds() / 1000;
77
+ expect(service.today).toBeCloseTo(nowInSec, 0);
78
+ });
79
+ });
80
+
81
+ describe('Conversion Methods', () => {
82
+ it('should convert base32 to hex (simple case)', () => {
83
+ // For "A", expecting "0".
84
+ expect(service.base32ToHex('A')).toBe('0');
85
+ });
86
+
87
+ it('should convert binary to hex with 32-character padding', () => {
88
+ /* For the binary representation of "Hello":
89
+ H -> 01001000
90
+ e -> 01100101
91
+ l -> 01101100
92
+ l -> 01101100
93
+ o -> 01101111
94
+ -> Hex: "48656c6c6f"
95
+ Padded (22 zeros in front): "00000000000000000000000048656c6c6f"
96
+ */
97
+ const binary = '0100100001100101011011000110110001101111';
98
+ const expected = '000000000000000000000048656c6c6f';
99
+ expect(service.binaryToHex(binary)).toBe(expected);
100
+ });
101
+ });
102
+
103
+ describe('Expiry Calculations', () => {
104
+ // Helper to test expiry() returns a value close to now + (multiplier)
105
+ function expectExpiryClose(input: string, multiplier: number) {
106
+ const now = Math.floor(new Date().getTime() / 1000);
107
+ const expiry = service.expires(input);
108
+ expect(expiry).toBeGreaterThanOrEqual(now + multiplier - 1);
109
+ expect(expiry).toBeLessThanOrEqual(now + multiplier + 1);
110
+ }
111
+
112
+ it('should calculate expiry for various time units', () => {
113
+ expectExpiryClose("1y", 31556926);
114
+ expectExpiryClose("1m", 2629743);
115
+ expectExpiryClose("1w", 604800);
116
+ expectExpiryClose("1d", 86400);
117
+ expectExpiryClose("1hr", 3600);
118
+ expectExpiryClose("1mn", 60);
119
+ expectExpiryClose("1s", 1);
120
+ });
121
+
122
+ it('should return undefined for missing expiry string', () => {
123
+ expect(service.expires()).toBeUndefined();
124
+ });
125
+
126
+ it('should indicate if expired', () => {
127
+ const now = Math.floor(new Date().getTime() / 1000);
128
+ expect(service.hasExpired(now - 10)).toBeTrue();
129
+ expect(service.hasExpired(now + 10)).toBeFalse();
130
+ expect(service.hasExpired(0)).toBeFalse();
131
+ });
132
+
133
+ it('should check setting for expiry', () => {
134
+ const settingWithExpiry = { expires: 1234567890 };
135
+ const settingWithoutExpiry = { key: 'value' };
136
+ expect(service.hasExpiry(settingWithExpiry)).toBeTrue();
137
+ expect(service.hasExpiry(settingWithoutExpiry)).toBeFalse();
138
+ });
139
+
140
+ it('should return a formatted string for future expiry dates', () => {
141
+ const now = Math.floor(new Date().getTime() / 1000);
142
+ const future = now + 10000;
143
+ const result = service.expiresIn(future);
144
+ expect(typeof result).toBe('string');
145
+ expect(result).toBeDefined();
146
+ expect(result!.length).toBeGreaterThan(0);
147
+ // Expect one of the time unit labels in the formatted result.
148
+ expect(result).toMatch(/(y|m|w|d|h|min|s)/);
149
+ });
150
+
151
+ it('should return "Expired" for past or current expiry dates', () => {
152
+ const now = Math.floor(new Date().getTime() / 1000);
153
+ expect(service.expiresIn(now - 1)).toBe("Expired");
154
+ expect(service.expiresIn(now)).toBe("Expired");
155
+ });
156
+ });
157
+
158
+ describe('String Conversion', () => {
159
+ it('should convert string to lowercase with underscores', () => {
160
+ const input = 'Hello, World!';
161
+ // Expected conversion: remove punctuation, convert to lowercase, replace spaces with underscores.
162
+ expect(service.lc(input)).toBe('hello_world');
163
+ });
164
+ });
165
+ });
@@ -0,0 +1,192 @@
1
+
2
+ import { HttpClient } from '@angular/common/http';
3
+ import { Injectable, inject } from '@angular/core';
4
+
5
+ @Injectable({
6
+ providedIn: 'root'
7
+ })
8
+ export class UtilsService {
9
+
10
+ http = inject(HttpClient)
11
+
12
+ constructor() { }
13
+
14
+ isString(x: string | number) {
15
+ return Object.prototype.toString.call(x) === '[object String]'
16
+ }
17
+
18
+ isObject(obj: any) {
19
+ return Object.prototype.toString.call(obj) === '[object Object]'
20
+ }
21
+
22
+ JSONToString(value: any) {
23
+ return (this.isObject(value)) ? JSON.stringify(value) : value
24
+ }
25
+
26
+ stringToJSON(value: string) {
27
+ return (this.isJSON(value)) ? JSON.parse(value) : value
28
+ }
29
+
30
+ isJSON(str: any) {
31
+ try {
32
+ JSON.parse(str)
33
+ } catch (e) {
34
+ return false
35
+ }
36
+ return true
37
+ }
38
+
39
+ getValueByProp(obj: any, prop: string) {
40
+ if(typeof obj === 'undefined') return false
41
+ return obj[prop]
42
+ }
43
+
44
+ objectsEqual(x: any, y: any): boolean {
45
+
46
+ const ok = Object.keys, tx = typeof x, ty = typeof y
47
+
48
+ return x && y && tx === 'object' && tx === ty ? (
49
+ ok(x).length === ok(y).length &&
50
+ ok(x).every((key: any) => this.objectsEqual(x[key], y[key]))
51
+ ) : (x === y)
52
+
53
+ }
54
+
55
+ getJSON(file: string) {
56
+ return this.http.get(`assets/data/${file}`)
57
+ }
58
+
59
+ get today() {
60
+ return new Date().getMilliseconds() / 1000
61
+ }
62
+
63
+ base32ToHex(base32: string): string {
64
+
65
+ const base32chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"
66
+
67
+ const charToValue = (char: string) => base32chars.indexOf(char.toUpperCase())
68
+
69
+ let bits = ''
70
+ let hex = ''
71
+
72
+ for (let i = 0; i < base32.length; i++) {
73
+ const val = charToValue(base32.charAt(i))
74
+ bits += val.toString(2).padStart(5, '0')
75
+ }
76
+
77
+ for (let i = 0; i + 4 <= bits.length; i += 4) {
78
+ const chunk = bits.substr(i, 4)
79
+ hex += parseInt(chunk, 2).toString(16)
80
+ }
81
+
82
+ return hex.toUpperCase()
83
+ }
84
+
85
+ binaryToHex(binary: string): string {
86
+ let hex = '';
87
+ for (let i = 0; i < binary.length; i += 8) {
88
+ const byte = binary.substr(i, 8);
89
+ const decimal = parseInt(byte, 2);
90
+ hex += decimal.toString(16).padStart(2, '0');
91
+ }
92
+ return hex.padStart(32, '0').substr(0, 32);
93
+ }
94
+
95
+ // y = years, m = months, w = weeks, d = days, hr = hours, mn = minutes else seconds
96
+ // returns epoch time corresponding to the expiry type
97
+ expires(str?: string) {
98
+
99
+ if(!str) return undefined
100
+
101
+ const match = str.match(/[^0-9]+$/)
102
+
103
+ const type = (match) ? str.slice(-match[0].length) : 0
104
+
105
+ const now = Math.floor(new Date().getTime() / 1000)
106
+
107
+ let value = 0;
108
+
109
+ switch (type) {
110
+ case
111
+ 'y':
112
+ const years = parseInt(str.slice(0, -1))
113
+ value = now + (years * 31556926)
114
+ break;
115
+ case
116
+ 'm':
117
+ const months = parseInt(str.slice(0, -1))
118
+ value = now + (months * 2629743)
119
+ break;
120
+ case
121
+ 'w':
122
+ const weeks = parseInt(str.slice(0, -1))
123
+ value = now + (weeks * 604800)
124
+ break;
125
+ case
126
+ 'd':
127
+ const days = parseInt(str.slice(0, -1))
128
+ value = now + (days * 86400)
129
+ break;
130
+ case
131
+ 'hr':
132
+ const hrs = parseInt(str.slice(0, -2))
133
+ value = now + (hrs * 3600)
134
+ break;
135
+ case
136
+ 'mn':
137
+ const min = parseInt(str.slice(0, -2))
138
+ value = now + (min * 60)
139
+ break;
140
+ default: //seconds
141
+ const sec = parseInt(str.slice(0, -1))
142
+ value = now + sec
143
+ break;
144
+ }
145
+ return value;
146
+ }
147
+
148
+ hasExpired(expiryDate: number): boolean {
149
+ if (!expiryDate || expiryDate === 0) return false
150
+ const currentTime = Math.floor(new Date().getTime() / 1000)
151
+ return expiryDate < currentTime
152
+ }
153
+
154
+ hasExpiry(setting: any) {
155
+ return (setting?.expires) ? true : false
156
+ }
157
+
158
+ expiresIn(expiryDate: number) {
159
+
160
+ if (!expiryDate) return;
161
+
162
+ const now = Math.floor(new Date().getTime() / 1000);
163
+ let diff = expiryDate - now;
164
+
165
+ if (diff <= 0) return "Expired";
166
+
167
+ const units = [
168
+ { label: 'y', s: 31536000 },
169
+ { label: 'm', s: 2592000 },
170
+ { label: 'w', s: 604800 },
171
+ { label: 'd', s: 86400 },
172
+ { label: 'h', s: 3600 },
173
+ { label: 'min', s: 60 },
174
+ { label: 's', s: 1 },
175
+ ];
176
+
177
+ let result = [];
178
+
179
+ for (const unit of units) {
180
+ if (diff >= unit.s) {
181
+ const value = Math.floor(diff / unit.s);
182
+ diff %= unit.s;
183
+ result.push(`${value}${unit.label}`);
184
+ }
185
+ }
186
+
187
+ return result.join(', ');
188
+ }
189
+
190
+ lc = (str: string) => str.toLowerCase().replace(/[^\w\s]/g, '').replace(/\s+/g, '_')
191
+
192
+ }
@@ -0,0 +1,13 @@
1
+
2
+ export * from "./models/index";
3
+ export * from "./services/websocket.service";
4
+ export * from "./websocket-service/index";
5
+
6
+ export { WebSocketMessageService } from "./services/websocket-message.service";
7
+ export { WebSocketSignalsManagerService } from "./websocket-signals-manager.service";
8
+ export { MessageTrackerSignalsService } from "./message-tracker-signals.service";
9
+ export { StateMessage, StateMessageInterface } from "./models/state-message.model";
10
+ export { PublicMessage, PublicMessageInterface } from "./models/public-message.model";
11
+ export { NotificationMessage, NotificationMessageInterface } from "./models/notification-message.model";
12
+ // ChannelType is already exported from request-manager-state-service to avoid conflicts
13
+
@@ -0,0 +1,147 @@
1
+ import { Injectable, inject, signal, computed, effect } from '@angular/core';
2
+ import { toObservable } from '@angular/core/rxjs-interop';
3
+ import { WebSocketSignalsManagerService } from './websocket-signals-manager.service';
4
+
5
+ /**
6
+ * MessageTrackerSignalsService - Signal-based message tracking
7
+ *
8
+ * Tracks WebSocket messages, channel metadata, and user presence using signals.
9
+ * Provides real-time reactivity for message-driven applications.
10
+ */
11
+ @Injectable({
12
+ providedIn: 'root',
13
+ })
14
+ export class MessageTrackerSignalsService {
15
+
16
+ private wsManager = inject(WebSocketSignalsManagerService);
17
+
18
+ // Signal-based state
19
+ private messagesSignal = signal<any>(null);
20
+ public readonly messages = this.messagesSignal.asReadonly();
21
+ public readonly messages$ = toObservable(this.messagesSignal);
22
+
23
+ private channelMetadataSignal = signal<Map<string, any>>(new Map());
24
+ public readonly channelMetadata = this.channelMetadataSignal.asReadonly();
25
+ public readonly channelMetadata$ = toObservable(this.channelMetadataSignal);
26
+
27
+ private usersInChannelsSignal = signal<Map<string, Set<string>>>(new Map());
28
+ public readonly usersInChannels = this.usersInChannelsSignal.asReadonly();
29
+ public readonly usersInChannels$ = toObservable(this.usersInChannelsSignal);
30
+
31
+ // Computed signals for derived state
32
+ readonly messageCount = computed(() => {
33
+ const metadata = this.channelMetadataSignal();
34
+ let count = 0;
35
+ metadata.forEach(data => count += data.count);
36
+ return count;
37
+ });
38
+
39
+ readonly activeChannels = computed(() => {
40
+ return Array.from(this.channelMetadataSignal().keys());
41
+ });
42
+
43
+ constructor() {
44
+ // Track messages from WebSocket
45
+ effect(() => {
46
+ const message = this.wsManager.messages();
47
+ if (message) {
48
+ this.trackMessage(message);
49
+ }
50
+ });
51
+
52
+ // Track connection status
53
+ effect(() => {
54
+ const connected = this.wsManager.connectionStatus();
55
+ if (!connected) {
56
+ this.onDisconnect();
57
+ }
58
+ });
59
+ }
60
+
61
+ trackMessage(message: any): void {
62
+ // Store message
63
+ this.messagesSignal.set(message);
64
+
65
+ // Update channel metadata
66
+ if (message.channel) {
67
+ this.updateChannelMetadata(message.channel, message);
68
+ }
69
+
70
+ // Update user presence if applicable
71
+ if (message.user && message.channel) {
72
+ this.updateUserPresence(message.channel, message.user);
73
+ }
74
+ }
75
+
76
+ private updateChannelMetadata(channel: string, message: any): void {
77
+ this.channelMetadataSignal.update(metadata => {
78
+ const updated = new Map(metadata);
79
+ const current = updated.get(channel) || { count: 0, lastMessage: null, lastUpdated: 0 };
80
+ updated.set(channel, {
81
+ ...current,
82
+ count: current.count + 1,
83
+ lastMessage: message,
84
+ lastUpdated: Date.now()
85
+ });
86
+ return updated;
87
+ });
88
+ }
89
+
90
+ private updateUserPresence(channel: string, user: string): void {
91
+ this.usersInChannelsSignal.update(users => {
92
+ const updated = new Map(users);
93
+ const channelUsers = new Set(updated.get(channel) || []);
94
+ channelUsers.add(user);
95
+ updated.set(channel, channelUsers);
96
+ return updated;
97
+ });
98
+ }
99
+
100
+ removeUserFromChannel(channel: string, user: string): void {
101
+ this.usersInChannelsSignal.update(users => {
102
+ const updated = new Map(users);
103
+ const channelUsers = updated.get(channel);
104
+ if (channelUsers) {
105
+ channelUsers.delete(user);
106
+ updated.set(channel, channelUsers);
107
+ }
108
+ return updated;
109
+ });
110
+ }
111
+
112
+ subscribeToChannel(channel: string): void {
113
+ this.wsManager.subscribeToChannel(channel);
114
+ }
115
+
116
+ unsubscribeFromChannel(channel: string): void {
117
+ this.wsManager.unsubscribeFromChannel(channel);
118
+ this.removeUserFromChannel(channel, 'current-user');
119
+ }
120
+
121
+ // Selectors
122
+ getMessageCount(channel: string): number {
123
+ const metadata = this.channelMetadataSignal();
124
+ return metadata.get(channel)?.count || 0;
125
+ }
126
+
127
+ getLastMessage(channel: string): any {
128
+ const metadata = this.channelMetadataSignal();
129
+ return metadata.get(channel)?.lastMessage || null;
130
+ }
131
+
132
+ getActiveChannels(): string[] {
133
+ return Array.from(this.channelMetadataSignal().keys());
134
+ }
135
+
136
+ getUsersInChannel(channel: string): string[] {
137
+ const users = this.usersInChannelsSignal().get(channel);
138
+ return users ? Array.from(users) : [];
139
+ }
140
+
141
+ private onDisconnect(): void {
142
+ // Clear state on disconnect
143
+ this.messagesSignal.set(null);
144
+ this.channelMetadataSignal.set(new Map());
145
+ this.usersInChannelsSignal.set(new Map());
146
+ }
147
+ }