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,106 @@
1
+ import { Injectable, inject } from '@angular/core';
2
+ import * as CryptoJS from 'crypto-js';
3
+
4
+ import { RandomSignature } from './random';
5
+ import { AppService } from '../app.service';
6
+
7
+ @Injectable({
8
+ providedIn: 'root'
9
+ })
10
+ export class SymmetricalEncryptionService {
11
+
12
+ appID: string; // APP SERVICE TO MANAGER ENCRYPTION KEY
13
+
14
+ private appService = inject(AppService)
15
+
16
+ constructor() {
17
+ // TODO: The APP ID is not a string, it is a function
18
+ this.appID = (this.appService.appID) ? this.appService.appID : ''
19
+ if(this.appID === '') console.warn('No App Key has been define')
20
+ }
21
+
22
+ generateCipherKey() {
23
+ return (RandomSignature().toString() + RandomSignature().toString()).substring(0, 8)
24
+ }
25
+
26
+ encrypt(str: any, key = this.appID) {
27
+
28
+ if(!str || key === '') return ''
29
+
30
+ let _key = CryptoJS.enc.Utf8.parse(key)
31
+ let _iv = CryptoJS.enc.Utf8.parse(key)
32
+
33
+ try {
34
+
35
+ const encrypted = CryptoJS.AES.encrypt(
36
+ JSON.stringify(str), _key, {
37
+ keySize: 16,
38
+ iv: _iv,
39
+ mode: CryptoJS.mode.ECB,
40
+ padding: CryptoJS.pad.Pkcs7
41
+ });
42
+
43
+ return encrypted.toString()
44
+
45
+ } catch(error: any) {
46
+ console.log(error)
47
+ }
48
+
49
+ return
50
+ }
51
+
52
+ decrypt(str: string, key = this.appID) {
53
+
54
+ if(!str || key === '') return null
55
+
56
+ let _key = CryptoJS.enc.Utf8.parse(key)
57
+ let _iv = CryptoJS.enc.Utf8.parse(key)
58
+
59
+ try {
60
+
61
+ const decrypted = CryptoJS.AES.decrypt(
62
+ str, _key, {
63
+ keySize: 16,
64
+ iv: _iv,
65
+ mode: CryptoJS.mode.ECB,
66
+ padding: CryptoJS.pad.Pkcs7
67
+ });
68
+
69
+ // Check if the decrypted data is valid before converting to UTF-8
70
+ const decryptedStr = decrypted.toString(CryptoJS.enc.Utf8);
71
+ if (!decryptedStr) {
72
+ console.warn('Decryption resulted in empty string');
73
+ return null;
74
+ }
75
+
76
+ return decryptedStr;
77
+
78
+ } catch(error: any) {
79
+ const message = String(error?.message || '');
80
+ if (message && !message.includes('Malformed UTF-8 data')) {
81
+ console.warn('Decryption failed');
82
+ }
83
+ return null;
84
+ }
85
+
86
+ return null;
87
+ }
88
+
89
+ createSignature(url: string, len = 16) {
90
+ const sig = CryptoJS.SHA256(url).toString(CryptoJS.enc.Hex)
91
+ return sig.substring(0, len).toUpperCase()
92
+ }
93
+
94
+ normalizeURL(url: string) {
95
+ const normalizedURL = url.replace(/(https?:\/\/)?(www\.)?/, '').replace(/\/+$/, '');
96
+ return normalizedURL;
97
+ }
98
+
99
+ generateSignature(url: string) {
100
+ const normalizedURL = this.normalizeURL(url)
101
+ const hash = CryptoJS.SHA256(normalizedURL)
102
+ const signature = hash.toString(CryptoJS.enc.Hex)
103
+ return signature;
104
+ }
105
+
106
+ }
@@ -0,0 +1,80 @@
1
+ import { TestBed } from '@angular/core/testing';
2
+ import { HttpHeaders } from '@angular/common/http';
3
+ import { HeadersService } from './headers.service';
4
+
5
+ describe('HeadersService', () => {
6
+ let service: HeadersService;
7
+
8
+ beforeEach(() => {
9
+ TestBed.configureTestingModule({
10
+ providers: [HeadersService]
11
+ });
12
+ service = TestBed.inject(HeadersService);
13
+ });
14
+
15
+ it('should be created', () => {
16
+ expect(service).toBeTruthy();
17
+ });
18
+
19
+ it('should generate headers correctly', () => {
20
+ service.headers = { 'Content-Type': 'application/json' };
21
+ const customHeaders = { 'Authorization': 'Bearer token' };
22
+ const result = service.generateHeaders(customHeaders);
23
+ expect(result.headers.get('Content-Type')).toBe('application/json');
24
+ expect(result.headers.get('Authorization')).toBe('Bearer token');
25
+ });
26
+
27
+ it('should override default headers with custom headers', () => {
28
+ service.headers = { 'Content-Type': 'application/json' };
29
+ const customHeaders = { 'Content-Type': 'text/plain' };
30
+ const result = service.generateHeaders(customHeaders);
31
+ expect(result.headers.get('Content-Type')).toBe('text/plain');
32
+ });
33
+
34
+ it('should handle empty custom headers', () => {
35
+ service.headers = { 'Content-Type': 'application/json' };
36
+ const customHeaders = {};
37
+ const result = service.generateHeaders(customHeaders);
38
+ expect(result.headers.get('Content-Type')).toBe('application/json');
39
+ });
40
+
41
+ it('should handle empty default headers', () => {
42
+ service.headers = {};
43
+ const customHeaders = { 'Content-Type': 'text/plain' };
44
+ const result = service.generateHeaders(customHeaders);
45
+ expect(result.headers.get('Content-Type')).toBe('text/plain');
46
+ });
47
+
48
+ it('should merge multiple headers correctly', () => {
49
+ service.headers = { 'Content-Type': 'application/json', 'Accept': 'application/json' };
50
+ const customHeaders = { 'Authorization': 'Bearer token', 'Accept': 'text/plain' };
51
+ const result = service.generateHeaders(customHeaders);
52
+ expect(result.headers.get('Content-Type')).toBe('application/json');
53
+ expect(result.headers.get('Authorization')).toBe('Bearer token');
54
+ expect(result.headers.get('Accept')).toBe('text/plain');
55
+ });
56
+
57
+ it('should handle no headers', () => {
58
+ service.headers = {};
59
+ const customHeaders = {};
60
+ const result = service.generateHeaders(customHeaders);
61
+ expect(result.headers.keys().length).toBe(0);
62
+ });
63
+
64
+ it('should prioritize custom headers over default headers', () => {
65
+ service.headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer defaultToken' };
66
+ const customHeaders = { 'Authorization': 'Bearer customToken' };
67
+ const result = service.generateHeaders(customHeaders);
68
+ expect(result.headers.get('Content-Type')).toBe('application/json');
69
+ expect(result.headers.get('Authorization')).toBe('Bearer customToken');
70
+ });
71
+
72
+ it('should add new custom headers to default headers', () => {
73
+ service.headers = { 'Content-Type': 'application/json' };
74
+ const customHeaders = { 'Authorization': 'Bearer token', 'Accept': 'application/xml' };
75
+ const result = service.generateHeaders(customHeaders);
76
+ expect(result.headers.get('Content-Type')).toBe('application/json');
77
+ expect(result.headers.get('Authorization')).toBe('Bearer token');
78
+ expect(result.headers.get('Accept')).toBe('application/xml');
79
+ });
80
+ });
@@ -0,0 +1,18 @@
1
+ import { HttpHeaders } from '@angular/common/http';
2
+ import { Injectable } from '@angular/core';
3
+
4
+ @Injectable({
5
+ providedIn: 'root'
6
+ })
7
+ export class HeadersService {
8
+
9
+ headers = {}
10
+
11
+ generateHeaders(headers?: Record<string, string>): { headers: HttpHeaders } {
12
+
13
+ const allHeaders = headers ? { ...this.headers, ...headers } : {}
14
+ return { headers: new HttpHeaders(allHeaders) }
15
+
16
+ }
17
+
18
+ }
@@ -0,0 +1,9 @@
1
+ export * from './app.service';
2
+ export * from './headers.service';
3
+ export * from './path-query.service';
4
+ export * from './utils.service';
5
+ export * from './random-color.utils';
6
+ export * from './encryption/index';
7
+ export * from './logger.service';
8
+ export * from './models/index';
9
+
@@ -0,0 +1,90 @@
1
+ import { Injectable, isDevMode } from '@angular/core';
2
+
3
+ /**
4
+ * LoggerService for http-request-manager library
5
+ *
6
+ * Automatically enables debug logging in development mode,
7
+ * disables it in production mode.
8
+ *
9
+ * Usage:
10
+ * ```typescript
11
+ * constructor(private logger: LoggerService) {}
12
+ *
13
+ * this.logger.debug('WebSocket', 'Connected successfully');
14
+ * this.logger.info('HTTP', 'Request completed', { status: 200 });
15
+ * this.logger.warn('State', 'Cache miss for key', { key: 'user' });
16
+ * this.logger.error('Database', 'Connection failed', error);
17
+ * ```
18
+ */
19
+ @Injectable({
20
+ providedIn: 'root'
21
+ })
22
+ export class LoggerService {
23
+ private static readonly DEBUG_FLAG_KEY = 'HTTP_MGR_DEBUG';
24
+ private debugMode: boolean;
25
+
26
+ constructor() {
27
+ this.debugMode = isDevMode() && this.isDebugFlagEnabled();
28
+ }
29
+
30
+ /**
31
+ * Debug level logging - only shown in development mode
32
+ * Use for: Detailed diagnostic information, state changes, connection events
33
+ */
34
+ debug(context: string, message: string, data?: any): void {
35
+ if (this.debugMode) {
36
+ console.log(`[HTTP-MGR DEBUG] ${context}: ${message}`, data ?? '');
37
+ }
38
+ }
39
+
40
+ /**
41
+ * Info level logging - only shown in development mode
42
+ * Use for: Important operational messages, successful operations
43
+ */
44
+ info(context: string, message: string, data?: any): void {
45
+ if (this.debugMode) {
46
+ console.info(`[HTTP-MGR INFO] ${context}: ${message}`, data ?? '');
47
+ }
48
+ }
49
+
50
+ /**
51
+ * Warning level logging - always shown
52
+ * Use for: Potential issues, deprecated usage, recoverable errors
53
+ */
54
+ warn(context: string, message: string, data?: any): void {
55
+ console.warn(`[HTTP-MGR WARN] ${context}: ${message}`, data ?? '');
56
+ }
57
+
58
+ /**
59
+ * Error level logging - always shown
60
+ * Use for: Actual errors, failures, exceptions
61
+ */
62
+ error(context: string, message: string, data?: any): void {
63
+ console.error(`[HTTP-MGR ERROR] ${context}: ${message}`, data ?? '');
64
+ }
65
+
66
+ /**
67
+ * Check if debug mode is enabled (development mode)
68
+ */
69
+ isDebugEnabled(): boolean {
70
+ return this.debugMode;
71
+ }
72
+
73
+ private isDebugFlagEnabled(): boolean {
74
+ try {
75
+ if (typeof globalThis === 'undefined' || !globalThis.localStorage) {
76
+ return true;
77
+ }
78
+
79
+ const value = globalThis.localStorage.getItem(LoggerService.DEBUG_FLAG_KEY);
80
+ if (value === null) {
81
+ return true;
82
+ }
83
+
84
+ const normalized = value.trim().toLowerCase();
85
+ return !['0', 'false', 'off', 'no'].includes(normalized);
86
+ } catch {
87
+ return true;
88
+ }
89
+ }
90
+ }
@@ -0,0 +1,4 @@
1
+ export * from './normalized-request-options.model';
2
+ export * from './path-tracker-state.model';
3
+ export * from './query-tracker-state.model';
4
+ export * from './query-params-tracker-options.model';
@@ -0,0 +1,24 @@
1
+ export type QueryValue = string;
2
+ export type NormalizedQueryParams = Record<string, QueryValue>;
3
+
4
+ export interface NormalizedRequestOptionsInterface {
5
+ pathKey: string;
6
+ query: NormalizedQueryParams;
7
+ hasQuery: boolean;
8
+ }
9
+
10
+ export class NormalizedRequestOptionsModel implements NormalizedRequestOptionsInterface {
11
+ constructor(
12
+ public pathKey: string = '',
13
+ public query: NormalizedQueryParams = {},
14
+ public hasQuery: boolean = false
15
+ ) {}
16
+
17
+ static adapt(item?: any): NormalizedRequestOptionsModel {
18
+ return new NormalizedRequestOptionsModel(
19
+ item?.pathKey,
20
+ item?.query,
21
+ item?.hasQuery
22
+ );
23
+ }
24
+ }
@@ -0,0 +1,20 @@
1
+ import { QueryValue } from './normalized-request-options.model';
2
+
3
+ export interface PathTrackerStateInterface {
4
+ watchExpiresAt?: number;
5
+ consumedValuesByKey: Record<string, QueryValue[]>;
6
+ }
7
+
8
+ export class PathTrackerStateModel implements PathTrackerStateInterface {
9
+ constructor(
10
+ public consumedValuesByKey: Record<string, QueryValue[]> = {},
11
+ public watchExpiresAt?: number
12
+ ) {}
13
+
14
+ static adapt(item?: any): PathTrackerStateModel {
15
+ return new PathTrackerStateModel(
16
+ item?.consumedValuesByKey && typeof item.consumedValuesByKey === 'object' ? item.consumedValuesByKey : {},
17
+ item?.watchExpiresAt
18
+ );
19
+ }
20
+ }
@@ -0,0 +1,24 @@
1
+ export interface QueryParamsTrackerOptionsInterface {
2
+ mode?: 'exact' | 'variation';
3
+ watchParams?: string[];
4
+ watchExpiresAt?: string | number;
5
+ watchParamsExpire?: string | number;
6
+ }
7
+
8
+ export class QueryParamsTrackerOptionsModel implements QueryParamsTrackerOptionsInterface {
9
+ constructor(
10
+ public mode?: 'exact' | 'variation',
11
+ public watchParams?: string[],
12
+ public watchExpiresAt?: string | number,
13
+ public watchParamsExpire?: string | number
14
+ ) {}
15
+
16
+ static adapt(item?: any): QueryParamsTrackerOptionsModel {
17
+ return new QueryParamsTrackerOptionsModel(
18
+ item?.mode,
19
+ Array.isArray(item?.watchParams) ? item.watchParams : [],
20
+ item?.watchExpiresAt,
21
+ item?.watchParamsExpire
22
+ );
23
+ }
24
+ }
@@ -0,0 +1,23 @@
1
+ import { PathTrackerStateInterface, PathTrackerStateModel } from './path-tracker-state.model';
2
+
3
+ export interface QueryTrackerStateInterface {
4
+ paths: Record<string, PathTrackerStateInterface>;
5
+ }
6
+
7
+ export class QueryTrackerStateModel implements QueryTrackerStateInterface {
8
+ constructor(
9
+ public paths: Record<string, PathTrackerStateInterface> = {}
10
+ ) {}
11
+
12
+ static adapt(item?: any): QueryTrackerStateModel {
13
+ const paths: Record<string, PathTrackerStateInterface> = {};
14
+
15
+ if (item?.paths && typeof item.paths === 'object') {
16
+ Object.keys(item.paths).forEach((key) => {
17
+ paths[key] = PathTrackerStateModel.adapt(item.paths[key]);
18
+ });
19
+ }
20
+
21
+ return new QueryTrackerStateModel(paths);
22
+ }
23
+ }
@@ -0,0 +1,18 @@
1
+ /* tslint:disable:no-unused-variable */
2
+
3
+ import { TestBed, inject } from '@angular/core/testing';
4
+ import { HttpClientTestingModule } from '@angular/common/http/testing';
5
+ import { ObjectMergerService } from './object-merger.service';
6
+
7
+ describe('Service: ObjectMerger', () => {
8
+ beforeEach(() => {
9
+ TestBed.configureTestingModule({
10
+ imports: [HttpClientTestingModule],
11
+ providers: [ObjectMergerService]
12
+ });
13
+ });
14
+
15
+ it('should ...', inject([ObjectMergerService], (service: ObjectMergerService) => {
16
+ expect(service).toBeTruthy();
17
+ }));
18
+ });
@@ -0,0 +1,78 @@
1
+ import { Inject, Injectable, Optional, inject } from '@angular/core';
2
+
3
+ import { ApiRequest } from '../request-manager-state-service/models';
4
+ import { SettingOptions } from '../local-storage-manager-service';
5
+ import { UtilsService } from './utils.service';
6
+
7
+ import { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';
8
+ import { ConfigHTTPOptions, ConfigOptions, LocalStorageOptions } from '../request-manager-services';
9
+
10
+ @Injectable({
11
+ providedIn: 'root'
12
+ })
13
+ export class ObjectMergerService {
14
+
15
+ utils = inject(UtilsService);
16
+
17
+ constructor(@Inject(CONFIG_SETTINGS_TOKEN) @Optional() private configOptions?: ConfigOptions) {
18
+ if (!this.configOptions) this.configOptions = ConfigOptions.adapt()
19
+ }
20
+
21
+ mergeOptions(options = ApiRequest.adapt()) {
22
+
23
+ const configForRoot = (this.configOptions?.httpRequestOptions) ? this.configOptions.httpRequestOptions : ConfigHTTPOptions.adapt()
24
+ const mergedOptions = ApiRequest.adapt(options)
25
+
26
+ mergedOptions.server = (options && options.server === '') ? configForRoot?.server || '' : options.server
27
+
28
+ mergedOptions.path = [ ...options.path || [], ...configForRoot?.path || [] ]
29
+
30
+ mergedOptions.headers = { ...options.headers || {}, ...configForRoot?.headers || {} }
31
+
32
+ mergedOptions.retry = (options && (options?.retry?.times !== 0 || options?.retry?.delay !== 3)) ? options.retry : configForRoot?.retry || { times: 0, delay: 3 };
33
+
34
+ mergedOptions.polling = (options && options?.polling !== 0) ? options.polling : configForRoot?.polling || 0;
35
+
36
+ mergedOptions.displayError = (options && options?.displayError) ? options.displayError : configForRoot?.displayError || false;
37
+
38
+ mergedOptions.stream = (options && options?.stream) ? options.stream : configForRoot?.stream || false;
39
+
40
+ return mergedOptions;
41
+
42
+ }
43
+
44
+ mergeStorageOptions(options = SettingOptions.adapt()) {
45
+
46
+ const configForRoot = (this.configOptions?.LocalStorageOptions) ? this.configOptions.LocalStorageOptions : LocalStorageOptions.adapt()
47
+ const configForRootOptions = configForRoot.options || LocalStorageOptions.adapt().options
48
+
49
+ const mergedOptions = SettingOptions.adapt(options)
50
+
51
+ // storage type
52
+ mergedOptions.storage = (options && (typeof options.storage !== 'undefined')) ? options.storage : (configForRootOptions?.storage ?? 0)
53
+
54
+ // expires: prefer explicit numeric expires; if not provided, compute from expiresIn string; otherwise use config default
55
+ // if an explicit, non-zero numeric expires is provided, use it
56
+ if (options && (typeof options.expires !== 'undefined') && options.expires !== null && Number(options.expires) > 0) {
57
+ mergedOptions.expires = Number(options.expires);
58
+ } else if (options && options.expiresIn) {
59
+ // compute numeric epoch from expiresIn string using UtilsService if available
60
+ try {
61
+ mergedOptions.expires = this.utils ? this.utils.expires(options.expiresIn) : 0;
62
+ } catch {
63
+ mergedOptions.expires = 0;
64
+ }
65
+ } else {
66
+ mergedOptions.expires = configForRootOptions?.expires ?? 0;
67
+ }
68
+
69
+ // keep expiresIn string if explicitly provided, otherwise use config default
70
+ mergedOptions.expiresIn = (options && (typeof options.expiresIn !== 'undefined')) ? options.expiresIn : (configForRootOptions?.expiresIn || '')
71
+
72
+ mergedOptions.encrypted = (options && (typeof options.encrypted !== 'undefined')) ? options.encrypted : (configForRootOptions?.encrypted || false)
73
+
74
+ return mergedOptions;
75
+
76
+ }
77
+
78
+ }
@@ -0,0 +1,117 @@
1
+ import { TestBed } from '@angular/core/testing';
2
+ import { PathQueryService } from './path-query.service';
3
+
4
+ describe('PathQueryService', () => {
5
+ let service: PathQueryService;
6
+
7
+ beforeEach(() => {
8
+ TestBed.configureTestingModule({
9
+ providers: [PathQueryService]
10
+ });
11
+ service = TestBed.inject(PathQueryService);
12
+ });
13
+
14
+ it('should be created', () => {
15
+ expect(service).toBeTruthy();
16
+ });
17
+
18
+ it('should build API path with only server', () => {
19
+ const result = service.buildAPIPath('http://example.com');
20
+ expect(result).toBe('http://example.com');
21
+ });
22
+
23
+ it('should build API path with server and path params', () => {
24
+ const result = service.buildAPIPath('http://example.com', ['path', 'to', 'resource']);
25
+ expect(result).toBe('http://example.com/path/to/resource');
26
+ });
27
+
28
+ it('should build API path with server, path params, and query params', () => {
29
+ const result = service.buildAPIPath('http://example.com', ['path', 'to', 'resource', { query: 'value' }]);
30
+ expect(result).toBe('http://example.com/path/to/resource?query=value');
31
+ });
32
+
33
+ it('should build API path with server and query params', () => {
34
+ const result = service.buildAPIPath('http://example.com', [{ query: 'value' }]);
35
+ expect(result).toBe('http://example.com?query=value');
36
+ });
37
+
38
+ it('should handle empty query params', () => {
39
+ const result = service.buildAPIPath('http://example.com', ['path', 'to', 'resource', {}]);
40
+ expect(result).toBe('http://example.com/path/to/resource');
41
+ });
42
+
43
+ it('should remove empty query params', () => {
44
+ const result = service.buildAPIPath('http://example.com', ['path', 'to', 'resource', { query: '' }]);
45
+ expect(result).toBe('http://example.com/path/to/resource');
46
+ });
47
+
48
+ it('should clean URL path', () => {
49
+ const result = service.buildAPIPath('http://example.com', ['path', '', 'to', 'resource']);
50
+ expect(result).toBe('http://example.com/path/to/resource');
51
+ });
52
+
53
+ it('should handle null query params', () => {
54
+ const result = service.buildAPIPath('http://example.com', ['path', 'to', 'resource', null]);
55
+ expect(result).toBe('http://example.com/path/to/resource');
56
+ });
57
+
58
+ it('should handle undefined query params', () => {
59
+ const result = service.buildAPIPath('http://example.com', ['path', 'to', 'resource', undefined]);
60
+ expect(result).toBe('http://example.com/path/to/resource');
61
+ });
62
+
63
+ it('should build API path with server as string array and path params', () => {
64
+ const result = service.buildAPIPath(['http://example.com', 'api', 'v1'], ['path', 'to', 'resource']);
65
+ expect(result).toBe('http://example.com/api/v1/path/to/resource');
66
+ });
67
+
68
+ it('should build API path with server as string array, path params, and query params', () => {
69
+ const result = service.buildAPIPath(['http://example.com', 'api', 'v1'], ['path', 'to', 'resource', { query: 'value' }]);
70
+ expect(result).toBe('http://example.com/api/v1/path/to/resource?query=value');
71
+ });
72
+
73
+ it('should build API path with server as string array and query params', () => {
74
+ const result = service.buildAPIPath(['http://example.com', 'api', 'v1'], [{ query: 'value' }]);
75
+ expect(result).toBe('http://example.com/api/v1?query=value');
76
+ });
77
+
78
+ it('should handle empty query params with server as string array', () => {
79
+ const result = service.buildAPIPath(['http://example.com', 'api', 'v1'], ['path', 'to', 'resource', {}]);
80
+ expect(result).toBe('http://example.com/api/v1/path/to/resource');
81
+ });
82
+
83
+ it('should remove empty query params with server as string array', () => {
84
+ const result = service.buildAPIPath(['http://example.com', 'api', 'v1'], ['path', 'to', 'resource', { query: '' }]);
85
+ expect(result).toBe('http://example.com/api/v1/path/to/resource');
86
+ });
87
+
88
+ it('should clean URL path with server as string array', () => {
89
+ const result = service.buildAPIPath(['http://example.com', 'api', 'v1'], ['path', '', 'to', 'resource']);
90
+ expect(result).toBe('http://example.com/api/v1/path/to/resource');
91
+ });
92
+
93
+ it('should handle null query params with server as string array', () => {
94
+ const result = service.buildAPIPath(['http://example.com', 'api', 'v1'], ['path', 'to', 'resource', null]);
95
+ expect(result).toBe('http://example.com/api/v1/path/to/resource');
96
+ });
97
+
98
+ it('should handle undefined query params with server as string array', () => {
99
+ const result = service.buildAPIPath(['http://example.com', 'api', 'v1'], ['path', 'to', 'resource', undefined]);
100
+ expect(result).toBe('http://example.com/api/v1/path/to/resource');
101
+ });
102
+
103
+ it('should handle multiple query params with server as string array', () => {
104
+ const result = service.buildAPIPath(['http://example.com', 'api', 'v1'], ['path', 'to', 'resource', { query1: 'value1', query2: 'value2' }]);
105
+ expect(result).toBe('http://example.com/api/v1/path/to/resource?query1=value1&query2=value2');
106
+ });
107
+
108
+ it('should handle array query params with server as string array', () => {
109
+ const result = service.buildAPIPath(['http://example.com', 'api', 'v1'], ['path', 'to', 'resource', { query: ['value1', 'value2'] }]);
110
+ expect(result).toBe('http://example.com/api/v1/path/to/resource?query=value1%2Cvalue2');
111
+ });
112
+
113
+ it('should handle mixed path and query params with server as string array', () => {
114
+ const result = service.buildAPIPath(['http://example.com', 'api', 'v1'], ['path', { query: 'value' }, 'to', 'resource']);
115
+ expect(result).toBe('http://example.com/api/v1/path/to/resource?query=value');
116
+ });
117
+ });