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,30 @@
1
+ export interface UploadStateInterface {
2
+ selectedFiles: File[]
3
+ isUploading: boolean
4
+ progress: number
5
+ currentFile: string | null
6
+ errorMessage: string | null
7
+ successMessage: string | null
8
+ }
9
+
10
+ export class UploadStateModel implements UploadStateInterface {
11
+ constructor(
12
+ public selectedFiles: File[] = [],
13
+ public isUploading: boolean = false,
14
+ public progress: number = 0,
15
+ public currentFile: string | null = null,
16
+ public errorMessage: string | null = null,
17
+ public successMessage: string | null = null
18
+ ) {}
19
+
20
+ static adapt(item?: any): UploadStateModel {
21
+ return new UploadStateModel(
22
+ Array.isArray(item?.selectedFiles) ? item.selectedFiles : [],
23
+ item?.isUploading ?? false,
24
+ item?.progress ?? 0,
25
+ item?.currentFile ?? null,
26
+ item?.errorMessage ?? null,
27
+ item?.successMessage ?? null
28
+ )
29
+ }
30
+ }
@@ -0,0 +1,89 @@
1
+ <div class="upload-demo-container">
2
+ <h2>File Upload Demo</h2>
3
+ <p class="demo-description">Upload multiple JPG or PNG files with progress tracking</p>
4
+
5
+ <!-- Upload Button & File Input -->
6
+ <div class="upload-controls">
7
+ <button
8
+ mat-raised-button
9
+ color="primary"
10
+ (click)="fileInput.click()"
11
+ [disabled]="uploadState.isUploading"
12
+ class="upload-button">
13
+ <span class="material-icons">upload_file</span>
14
+ Select Files
15
+ </button>
16
+ <input
17
+ #fileInput
18
+ type="file"
19
+ multiple
20
+ accept="image/jpeg,image/png"
21
+ (change)="onFileSelected($event)"
22
+ [disabled]="uploadState.isUploading"
23
+ hidden>
24
+
25
+ <button
26
+ mat-button
27
+ color="warn"
28
+ (click)="clearSelection()"
29
+ [disabled]="uploadState.selectedFiles.length === 0 || uploadState.isUploading"
30
+ class="clear-button">
31
+ Clear
32
+ </button>
33
+ </div>
34
+
35
+ <!-- Selected Files Display -->
36
+ <div class="selected-files" *ngIf="uploadState.selectedFiles.length > 0">
37
+ <h3>Selected Files ({{uploadState.selectedFiles.length}})</h3>
38
+ <ul class="file-list">
39
+ <li *ngFor="let file of uploadState.selectedFiles" class="file-item">
40
+ <span class="file-icon">
41
+ <span class="material-icons">insert_drive_file</span>
42
+ </span>
43
+ <span class="file-name">{{file.name}}</span>
44
+ <span class="file-size">{{getFileSizeString(file.size)}}</span>
45
+ <span class="file-status valid">✓</span>
46
+ </li>
47
+ </ul>
48
+ </div>
49
+
50
+ <!-- Validation Errors -->
51
+ <div class="error-message" *ngIf="uploadState.errorMessage && !uploadState.isUploading">
52
+ <span class="material-icons">error</span>
53
+ <span>{{uploadState.errorMessage}}</span>
54
+ </div>
55
+
56
+ <!-- Progress Bar -->
57
+ <div class="progress-container" *ngIf="uploadState.isUploading">
58
+ <div class="progress-header">
59
+ <span>Uploading...</span>
60
+ <span class="progress-percentage">{{uploadState.progress}}%</span>
61
+ </div>
62
+ <mat-progress-bar
63
+ mode="determinate"
64
+ [value]="uploadState.progress"
65
+ color="primary">
66
+ </mat-progress-bar>
67
+ <div class="current-file" *ngIf="uploadState.currentFile">
68
+ Current: {{uploadState.currentFile}}
69
+ </div>
70
+ </div>
71
+
72
+ <!-- Success Message -->
73
+ <div class="success-message" *ngIf="uploadState.successMessage">
74
+ <span class="material-icons">check_circle</span>
75
+ <span>{{uploadState.successMessage}}</span>
76
+ </div>
77
+
78
+ <!-- Upload Action Button -->
79
+ <div class="upload-actions" *ngIf="uploadState.selectedFiles.length > 0 && !uploadState.isUploading">
80
+ <button
81
+ mat-raised-button
82
+ color="primary"
83
+ (click)="startUpload()"
84
+ [disabled]="uploadState.selectedFiles.length === 0 || uploadState.errorMessage !== null"
85
+ class="start-upload-button">
86
+ Upload {{uploadState.selectedFiles.length}} File{{uploadState.selectedFiles.length > 1 ? 's' : ''}}
87
+ </button>
88
+ </div>
89
+ </div>
@@ -0,0 +1,160 @@
1
+ .upload-demo-container {
2
+ padding: 1rem;
3
+ max-width: 60rem;
4
+ margin: 0 auto;
5
+
6
+ h2 {
7
+ font-size: 2rem;
8
+ font-weight: 700;
9
+ color: #333;
10
+ margin-bottom: 0.75rem;
11
+ }
12
+
13
+ .demo-description {
14
+ font-size: 1rem;
15
+ color: #666;
16
+ margin-bottom: 1.5rem;
17
+ }
18
+
19
+ .upload-controls {
20
+ display: flex;
21
+ gap: 1rem;
22
+ margin-bottom: 1.5rem;
23
+ align-items: center;
24
+
25
+ .upload-button,
26
+ .clear-button {
27
+ min-width: 10rem;
28
+ }
29
+ }
30
+
31
+ .selected-files {
32
+ background-color: #fbfbfb;
33
+ border: 1px solid #ccc;
34
+ border-radius: 0.25rem;
35
+ padding: 1rem;
36
+ margin-bottom: 1.5rem;
37
+
38
+ h3 {
39
+ font-size: 1.125rem;
40
+ font-weight: 500;
41
+ color: #333;
42
+ margin-bottom: 0.5rem;
43
+ }
44
+
45
+ .file-list {
46
+ list-style: none;
47
+ padding: 0;
48
+ margin: 0;
49
+
50
+ .file-item {
51
+ display: flex;
52
+ align-items: center;
53
+ gap: 0.5rem;
54
+ padding: 0.25rem 0;
55
+ border-bottom: 1px solid #e5e5e5;
56
+
57
+ &:last-child {
58
+ border-bottom: none;
59
+ }
60
+
61
+ .file-icon {
62
+ color: #286fad;
63
+ display: flex;
64
+ align-items: center;
65
+ }
66
+
67
+ .file-name {
68
+ flex: 1;
69
+ font-size: 0.875rem;
70
+ color: #333;
71
+ font-weight: 500;
72
+ }
73
+
74
+ .file-size {
75
+ font-size: 0.875rem;
76
+ color: #666;
77
+ }
78
+
79
+ .file-status.valid {
80
+ color: #1c8150;
81
+ font-weight: 700;
82
+ }
83
+ }
84
+ }
85
+ }
86
+
87
+ .error-message {
88
+ display: flex;
89
+ align-items: center;
90
+ gap: 0.5rem;
91
+ padding: 1rem;
92
+ background-color: rgba(212, 0, 3, 0.1);
93
+ border: 1px solid #d40003;
94
+ border-radius: 0.25rem;
95
+ color: #d40003;
96
+ margin-bottom: 1.5rem;
97
+ font-size: 0.875rem;
98
+
99
+ .material-icons {
100
+ font-size: 2.5rem;
101
+ }
102
+ }
103
+
104
+ .progress-container {
105
+ margin-bottom: 1.5rem;
106
+
107
+ .progress-header {
108
+ display: flex;
109
+ justify-content: space-between;
110
+ align-items: center;
111
+ margin-bottom: 0.25rem;
112
+
113
+ span:first-child {
114
+ font-size: 0.875rem;
115
+ font-weight: 500;
116
+ color: #333;
117
+ }
118
+
119
+ .progress-percentage {
120
+ font-size: 0.875rem;
121
+ font-weight: 700;
122
+ color: #286fad;
123
+ }
124
+ }
125
+
126
+ .current-file {
127
+ font-size: 0.875rem;
128
+ color: #666;
129
+ margin-top: 0.25rem;
130
+ font-style: italic;
131
+ }
132
+ }
133
+
134
+ .success-message {
135
+ display: flex;
136
+ align-items: center;
137
+ gap: 0.5rem;
138
+ padding: 1rem;
139
+ background-color: rgba(28, 129, 80, 0.1);
140
+ border: 1px solid #1c8150;
141
+ border-radius: 0.25rem;
142
+ color: #1c8150;
143
+ margin-bottom: 1.5rem;
144
+ font-size: 0.875rem;
145
+
146
+ .material-icons {
147
+ font-size: 2.5rem;
148
+ }
149
+ }
150
+
151
+ .upload-actions {
152
+ text-align: center;
153
+ margin-top: 1.5rem;
154
+
155
+ .start-upload-button {
156
+ min-width: 15rem;
157
+ padding: 0.5rem 1.5rem;
158
+ }
159
+ }
160
+ }
@@ -0,0 +1,101 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing'
2
+ import { UploadDemoComponent } from './upload-demo.component'
3
+ import { HTTPManagerService, } from '../../'
4
+ import { ToastMessageDisplayService } from 'toast-message-display'
5
+ import { FormBuilder } from '@angular/forms'
6
+ import { provideHttpClient } from '@angular/common/http'
7
+ import { provideHttpClientTesting } from '@angular/common/http/testing'
8
+
9
+ describe('UploadDemoComponent', () => {
10
+ let component: UploadDemoComponent
11
+ let fixture: ComponentFixture<UploadDemoComponent>
12
+ let httpManagerService: HTTPManagerService<any>
13
+ let toastService: ToastMessageDisplayService
14
+
15
+ beforeEach(async () => {
16
+ await TestBed.configureTestingModule({
17
+ declarations: [UploadDemoComponent],
18
+ providers: [
19
+ HTTPManagerService,
20
+ ToastMessageDisplayService,
21
+ FormBuilder,
22
+ provideHttpClient(),
23
+ provideHttpClientTesting()
24
+ ]
25
+ })
26
+ .compileComponents()
27
+
28
+ fixture = TestBed.createComponent(UploadDemoComponent)
29
+ component = fixture.componentInstance
30
+ httpManagerService = TestBed.inject(HTTPManagerService)
31
+ toastService = TestBed.inject(ToastMessageDisplayService)
32
+ fixture.detectChanges()
33
+ })
34
+
35
+ it('should create', () => {
36
+ expect(component).toBeTruthy()
37
+ })
38
+
39
+ it('should initialize with empty state', () => {
40
+ expect(component.uploadState.selectedFiles).toEqual([])
41
+ expect(component.uploadState.isUploading).toBe(false)
42
+ expect(component.uploadState.progress).toBe(0)
43
+ expect(component.uploadState.errorMessage).toBeNull()
44
+ expect(component.uploadState.successMessage).toBeNull()
45
+ })
46
+
47
+ it('should accept valid file types (JPG)', () => {
48
+ const file = new File(['test'], 'test.jpg', { type: 'image/jpeg' })
49
+ const error = component.validateFile(file)
50
+ expect(error).toBeNull()
51
+ })
52
+
53
+ it('should accept valid file types (PNG)', () => {
54
+ const file = new File(['test'], 'test.png', { type: 'image/png' })
55
+ const error = component.validateFile(file)
56
+ expect(error).toBeNull()
57
+ })
58
+
59
+ it('should reject invalid file types', () => {
60
+ const file = new File(['test'], 'test.pdf', { type: 'application/pdf' })
61
+ const error = component.validateFile(file)
62
+ expect(error).toContain('not a valid type')
63
+ })
64
+
65
+ it('should reject files exceeding max size', () => {
66
+ const largeFile = new File(['x'.repeat(41 * 1024 * 1024)], 'large.jpg', { type: 'image/jpeg' })
67
+ const error = component.validateFile(largeFile)
68
+ expect(error).toContain('exceeds maximum size')
69
+ })
70
+
71
+ it('should clear selection', () => {
72
+ component.uploadState.selectedFiles = [new File(['test'], 'test.jpg', { type: 'image/jpeg' })]
73
+ component.uploadState.errorMessage = 'Test error'
74
+ component.uploadState.successMessage = 'Test success'
75
+ component.uploadState.progress = 50
76
+
77
+ component.clearSelection()
78
+
79
+ expect(component.uploadState.selectedFiles).toEqual([])
80
+ expect(component.uploadState.errorMessage).toBeNull()
81
+ expect(component.uploadState.successMessage).toBeNull()
82
+ expect(component.uploadState.progress).toBe(0)
83
+ })
84
+
85
+ it('should prevent upload with no files', () => {
86
+ component.startUpload()
87
+ expect(component.uploadState.errorMessage).toContain('Please select at least one file')
88
+ })
89
+
90
+ it('should format file size correctly (bytes)', () => {
91
+ expect(component.getFileSizeString(512)).toBe('512 bytes')
92
+ })
93
+
94
+ it('should format file size correctly (KB)', () => {
95
+ expect(component.getFileSizeString(2048)).toBe('2.0 KB')
96
+ })
97
+
98
+ it('should format file size correctly (MB)', () => {
99
+ expect(component.getFileSizeString(2 * 1024 * 1024)).toBe('2.0 MB')
100
+ })
101
+ })
@@ -0,0 +1,136 @@
1
+ import { Component, OnInit, OnDestroy, inject } from '@angular/core'
2
+ import { ApiRequest, HTTPManagerService } from '../../'
3
+ import { ToastMessageDisplayService } from 'toast-message-display'
4
+ import { ToastColors } from 'toast-message-display'
5
+ import { UploadStateModel } from './models/upload-state.model'
6
+
7
+ @Component({
8
+ selector: 'lib-upload-demo',
9
+ templateUrl: './upload-demo.component.html',
10
+ styleUrls: ['./upload-demo.component.scss'],
11
+ standalone: false
12
+ })
13
+ export class UploadDemoComponent implements OnInit, OnDestroy {
14
+
15
+ private httpManager = inject(HTTPManagerService)
16
+ private toastService = inject(ToastMessageDisplayService)
17
+
18
+ uploadState = UploadStateModel.adapt()
19
+
20
+ allowedTypes = ['image/jpeg', 'image/png']
21
+ maxFileSize = 40 * 1024 * 1024 // 40MB
22
+
23
+ ngOnInit(): void {
24
+ // Initialize component
25
+ }
26
+
27
+ ngOnDestroy(): void {
28
+ // Clean up subscriptions
29
+ }
30
+
31
+ onFileSelected(event: Event): void {
32
+ const input = event.target as HTMLInputElement
33
+ const files = input.files
34
+
35
+ if (!files || files.length === 0) {
36
+ return
37
+ }
38
+
39
+ this.uploadState.selectedFiles = []
40
+ this.uploadState.errorMessage = null
41
+
42
+ for (let i = 0; i < files.length; i++) {
43
+ const file = files[i]
44
+ const validationError = this.validateFile(file)
45
+
46
+ if (validationError) {
47
+ this.uploadState.errorMessage = validationError
48
+ continue
49
+ }
50
+
51
+ this.uploadState.selectedFiles.push(file)
52
+ }
53
+
54
+ if (this.uploadState.selectedFiles.length === 0 && !this.uploadState.errorMessage) {
55
+ this.uploadState.errorMessage = 'Please select at least one valid file (JPG or PNG)'
56
+ }
57
+ }
58
+
59
+ validateFile(file: File): string | null {
60
+ // Check file type
61
+ if (!this.allowedTypes.includes(file.type)) {
62
+ return `File "${file.name}" is not a valid type. Only JPG and PNG files are allowed.`
63
+ }
64
+
65
+ // Check file size
66
+ if (file.size > this.maxFileSize) {
67
+ return `File "${file.name}" exceeds maximum size of 10MB.`
68
+ }
69
+
70
+ return null
71
+ }
72
+
73
+ clearSelection(): void {
74
+ this.uploadState.selectedFiles = []
75
+ this.uploadState.errorMessage = null
76
+ this.uploadState.successMessage = null
77
+ this.uploadState.progress = 0
78
+ this.uploadState.currentFile = null
79
+ }
80
+
81
+ startUpload(): void {
82
+ if (this.uploadState.selectedFiles.length === 0) {
83
+ this.uploadState.errorMessage = 'Please select at least one file to upload'
84
+ return
85
+ }
86
+
87
+ if (this.uploadState.errorMessage) {
88
+ return
89
+ }
90
+
91
+ this.uploadState.isUploading = true
92
+ this.uploadState.progress = 0
93
+ this.uploadState.errorMessage = null
94
+ this.uploadState.successMessage = null
95
+
96
+ const options = ApiRequest.adapt({
97
+ server: 'gtlcApi',
98
+ path: ['uploader'],
99
+ uploadFieldName: 'files',
100
+ allowedTypes: this.allowedTypes,
101
+ maxFileSize: this.maxFileSize
102
+ })
103
+
104
+ this.httpManager.uploadRequest<any>(this.uploadState.selectedFiles, options, ['upload'])
105
+ .subscribe({
106
+ next: (response) => {
107
+ this.uploadState.progress = 100
108
+ this.uploadState.successMessage = `Successfully uploaded ${this.uploadState.selectedFiles.length} file(s)`
109
+ this.toastService.toastMessage({
110
+ message: this.uploadState.successMessage || '',
111
+ color: ToastColors.SUCCESS
112
+ })
113
+ this.uploadState.isUploading = false
114
+ },
115
+ error: (error: any) => {
116
+ this.uploadState.errorMessage = error.message || 'Upload failed. Please try again.'
117
+ this.toastService.toastMessage({
118
+ message: this.uploadState.errorMessage || '',
119
+ color: ToastColors.ERROR
120
+ })
121
+ this.uploadState.isUploading = false
122
+ this.uploadState.progress = 0
123
+ }
124
+ })
125
+ }
126
+
127
+ getFileSizeString(size: number): string {
128
+ if (size < 1024) {
129
+ return `${size} bytes`
130
+ } else if (size < 1024 * 1024) {
131
+ return `${(size / 1024).toFixed(1)} KB`
132
+ } else {
133
+ return `${(size / (1024 * 1024)).toFixed(1)} MB`
134
+ }
135
+ }
136
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./services/index"
2
+ export * from "./interceptors/index"
3
+ export * from "./models/index"
@@ -0,0 +1,16 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';
3
+
4
+ import { Observable } from 'rxjs';
5
+
6
+ @Injectable()
7
+ export class WithCredentialsInterceptor implements HttpInterceptor {
8
+
9
+ intercept(req: HttpRequest<any>, next: HttpHandler):
10
+ Observable<HttpEvent<any>> {
11
+
12
+ req = req.clone({ withCredentials: true })
13
+
14
+ return next.handle(req);
15
+ }
16
+ }
@@ -0,0 +1,6 @@
1
+
2
+ export * from "./models/index";
3
+
4
+ export * from "./credentials.interceptor";
5
+ export * from "./request-header.interceptor";
6
+ export * from "./request-error.interceptor";
@@ -0,0 +1,22 @@
1
+ export interface ErrorDisplaySettingsInterface {
2
+ displayTime: number
3
+ position: string
4
+ }
5
+
6
+ export class ErrorDisplaySettings implements ErrorDisplaySettingsInterface {
7
+
8
+ constructor(
9
+ public displayTime = 3 * 1000,
10
+ public position = 'top'
11
+ ) {}
12
+
13
+ static adapt(item?: any): ErrorDisplaySettings {
14
+
15
+ return new ErrorDisplaySettings(
16
+ (item?.displayTime) ? item.displayTime * 1000 : 3 * 1000,
17
+ item?.position,
18
+ )
19
+
20
+ }
21
+
22
+ }
@@ -0,0 +1,2 @@
1
+
2
+ export * from "./error-settings.model";
@@ -0,0 +1,46 @@
1
+ import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';
2
+ import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';
3
+ import { Observable } from 'rxjs';
4
+
5
+ export const PROXY_CONFIG = new InjectionToken<Record<string, any>>('PROXY_CONFIG');
6
+
7
+ @Injectable()
8
+ export class ProxyDebuggerInterceptor implements HttpInterceptor {
9
+
10
+ constructor(@Optional() @Inject(PROXY_CONFIG) private proxyConfig: Record<string, any>) {}
11
+
12
+ intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
13
+
14
+ if (!this.proxyConfig) {
15
+ return next.handle(req);
16
+ }
17
+
18
+ const headers = req.headers.keys().reduce((acc, key) => {
19
+ acc[key] = req.headers.get(key) || '';
20
+ return acc;
21
+ }, {} as Record<string, string>);
22
+
23
+ for (const proxyPath in this.proxyConfig) {
24
+ if (this.proxyConfig.hasOwnProperty(proxyPath)) {
25
+ const proxyDetails = this.proxyConfig[proxyPath];
26
+ const regex = new RegExp('^' + proxyPath.replace('/', '').replace('*', '(.*)'));
27
+
28
+ if (regex.test(req.url)) {
29
+ const target = proxyDetails.target;
30
+ const endpoint = req.url.replace(regex, '$1');
31
+ const actualPath = target + '/' + endpoint;
32
+
33
+ console.log('Request Proxied:', {
34
+ requestUrl: req.url,
35
+ requestPayload: req.body,
36
+ headers: headers,
37
+ proxyPath: proxyPath,
38
+ actualPath: actualPath,
39
+ });
40
+ }
41
+ }
42
+ }
43
+
44
+ return next.handle(req);
45
+ }
46
+ }
@@ -0,0 +1,65 @@
1
+ import { inject, Injectable } from '@angular/core'
2
+ import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpErrorResponse } from '@angular/common/http'
3
+ import { Observable, catchError, throwError } from 'rxjs'
4
+
5
+ import { ToastMessageDisplayService, ToastDisplay, ToastColors } from 'toast-message-display'
6
+
7
+ @Injectable()
8
+ export class RequestErrorInterceptor implements HttpInterceptor {
9
+
10
+ toastMessage = inject(ToastMessageDisplayService)
11
+
12
+ intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
13
+
14
+ return next.handle(req).pipe(
15
+
16
+ catchError((error: HttpErrorResponse) => {
17
+
18
+ const displayError = ToastDisplay.adapt({
19
+ message: 'This is a toast message. This is an Error!!',
20
+ action: 'OK',
21
+ color: ToastColors.SUCCESS,
22
+ icon: 'info',
23
+ duration: 5 * 1000, //5 seconds
24
+ })
25
+
26
+ if (error.status >= 400 && error.status < 500) {
27
+
28
+ displayError.color = ToastColors.WARN
29
+ displayError.message = error.error || `${error.status}: ${error.statusText}`
30
+
31
+ console.error('Client Error:', {
32
+ status: error.status,
33
+ message: error.message,
34
+ error: error.error,
35
+ text: error.statusText,
36
+ })
37
+
38
+ this.toastMessage.toastMessage(displayError)
39
+
40
+ } else if (error.status >= 500) {
41
+
42
+ displayError.color = ToastColors.ERROR
43
+ displayError.message = error.error || `${error.status}: ${error.statusText}`
44
+
45
+ console.error('Server Error:', {
46
+ status: error.status,
47
+ message: error.message,
48
+ error: error.error,
49
+ text: error.statusText,
50
+ })
51
+
52
+ this.toastMessage.toastMessage(displayError)
53
+
54
+ }
55
+
56
+ return throwError(() => error)
57
+
58
+ })
59
+
60
+ )
61
+ }
62
+
63
+ }
64
+
65
+