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,410 @@
1
+ import { Component, OnInit, ViewChild, inject } from '@angular/core'
2
+
3
+ import { FormArray, FormBuilder, Validators } from '@angular/forms'
4
+
5
+ import { ClientInfo } from './models/sample-client-info'
6
+ import { ClientInfoMapper } from './models/sample-mapper-client-info'
7
+ import { AIPrompt } from './models/sample-ai-prompt'
8
+ import { ApiRequest, HTTPManagerSignalsService } from '../..'
9
+
10
+ import { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display'
11
+
12
+ @Component({
13
+ selector: 'app-request-signals-manager-demo',
14
+ templateUrl: './request-signals-manager-demo.component.html',
15
+ styleUrls: ['./request-signals-manager-demo.component.scss'],
16
+ standalone: false
17
+ })
18
+ export class RequestSignalsManagerDemoComponent implements OnInit {
19
+
20
+ displayedColumns = ['id','name', 'lastName', 'age']
21
+
22
+ private fb = inject(FormBuilder)
23
+ private toastMessage = inject(ToastMessageDisplayService)
24
+
25
+ httpManagerSignalsService = inject(HTTPManagerSignalsService)
26
+
27
+ // Using signals service: signals are callable in templates (e.g. isPending())
28
+ isPending = this.httpManagerSignalsService.isPending
29
+ countdown = this.httpManagerSignalsService.countdown
30
+
31
+ // per-operation plain results and error messages (no rxjs in component)
32
+ GET_result: any = null
33
+ POST_result: any = null
34
+ PUT_result: any = null
35
+ DELETE_result: any = null
36
+
37
+ STREAM_result: any = null
38
+ STREAM_AI_result: any = null
39
+
40
+ GET_error: string = ''
41
+ POST_error: string = ''
42
+ PUT_error: string = ''
43
+ DELETE_error: string = ''
44
+ STREAM_error: string = ''
45
+ STREAM_AI_error: string = ''
46
+
47
+ requestParams = {
48
+ GET: ApiRequest.adapt(),
49
+ POST: ApiRequest.adapt(),
50
+ PUT: ApiRequest.adapt(),
51
+ DELETE: ApiRequest.adapt(),
52
+ STREAM: ApiRequest.adapt(),
53
+ }
54
+
55
+ @ViewChild("failedState", { static: true }) failedState: any
56
+ @ViewChild("pollingState", { static: true }) pollingState: any
57
+
58
+ questionControl = this.fb.control("", [Validators.required])
59
+
60
+ downloadRequest = ApiRequest.adapt({
61
+ server: 'assets/images',
62
+ path: ['lego.png'],
63
+ // saveAs: 'john.jpg' // Optional
64
+ })
65
+
66
+ // downloadRequest = ApiRequest.adapt({
67
+ // server: 'oidc/ai/file'
68
+ // })
69
+
70
+ sampleClientData = {
71
+ id: 0,
72
+ name: "Old School Dates",
73
+ domain: "osd.com",
74
+ service: "osd",
75
+ spiffe: "osd.com/osd",
76
+ secret: "SMOPECXP-OS4P-USOG-X2II-3XMD1FQDR3IJX",
77
+ created: 1693003138,
78
+ modified: 1693003138,
79
+ icon: "",
80
+ imageFile: "",
81
+ email: "wavecoders@gmail.com"
82
+ }
83
+
84
+ requestForm = this.fb.group({
85
+ path: this.fb.control<string>("ai/"),
86
+ headers: this.fb.array([]),
87
+ adapter: [null],
88
+ mapper: [null],
89
+ retry: this.fb.group({
90
+ times: [3],
91
+ delay: [3],
92
+ }),
93
+ polling: [3],
94
+ })
95
+
96
+ AIType = 0
97
+
98
+ sampleAdaptors = [
99
+ { label: "ClientInfo Basic", value: ClientInfo.adapt },
100
+ { label: "AI Prompt", value: AIPrompt.adapt },
101
+ ]
102
+
103
+ sampleMappers = [
104
+ { label: "Mapper Basic", value: ClientInfoMapper.adapt },
105
+ { label: "AI Prompt", value: AIPrompt.adapt },
106
+ ]
107
+
108
+ get retry() {
109
+ return this.requestForm.get('retry')?.value
110
+ }
111
+
112
+ get headers(): FormArray {
113
+ return this.requestForm.get('headers') as FormArray
114
+ }
115
+
116
+ get isValid() {
117
+ this.requestForm.markAllAsTouched()
118
+ return this.requestForm.valid
119
+ }
120
+
121
+ hasId = (arr: any[]) => {
122
+ if (arr.length === 0) return false
123
+ return !isNaN(arr[arr.length - 1])
124
+ }
125
+
126
+ props = (adapter: any) => {
127
+ return (adapter) ? adapter() : null
128
+ }
129
+
130
+ // server = `http://sample-endpoint/as/authorization.oauth2`
131
+
132
+ arrayObjectsToObjects = (arr: any[]) => {
133
+ return Array.isArray(arr) ? arr.reduce((obj, item) => Object.assign(obj, { [item.key]: item.value }), {}) : {}
134
+ }
135
+
136
+ constructor() { }
137
+
138
+ ngOnInit() {
139
+
140
+ // const reqGet2 = ApiRequest.adapt({
141
+ // server,
142
+ // path: ['clients'],
143
+ // headers: { authentication: "Bearer <KEY>" },
144
+ // adapter: ClientInfo,
145
+ // dataType: DataType.OBJECT,
146
+ // // concurrent: false,
147
+ // // polling: 3, //seconds
148
+ // })
149
+
150
+ // const req2 = [1024,1025,1026].map(item => {
151
+ // return this.httpManagerService.getRequest<ClientInfo[]>(reqGet2, [item])
152
+ // .pipe(
153
+ // catchError(error => {
154
+ // return throwError(() => new Error(error.error.message))
155
+ // })
156
+ // )
157
+ // })
158
+
159
+ // forkJoin(req2)
160
+ // .subscribe(res => console.log(res))
161
+
162
+ }
163
+
164
+ addHeader() {
165
+ const header = this.fb.group({
166
+ key: ['', Validators.required],
167
+ value: ['']
168
+ })
169
+ this.headers.push(header)
170
+ }
171
+
172
+ removeHeader(index: number) {
173
+ this.headers.removeAt(index)
174
+ }
175
+
176
+ compileRequest() {
177
+
178
+ const requestParams = this.requestForm.value
179
+
180
+ requestParams.headers = this.arrayObjectsToObjects(
181
+ requestParams.headers || []
182
+ )
183
+
184
+ const pathReq = (requestParams.path === "") ? [] : (requestParams.path || "").split("/")
185
+
186
+ if (!this.pollingState.checked) requestParams.polling = 0
187
+
188
+ if (!this.failedState.checked) {
189
+ requestParams.retry = { times: 0,delay: 0 }
190
+ }
191
+
192
+ const apiOptions = ApiRequest.adapt(requestParams)
193
+ apiOptions.path = []
194
+
195
+ return { apiOptions: apiOptions, path: pathReq }
196
+
197
+ }
198
+
199
+ onGetRequest() {
200
+
201
+ if(!this.isValid) return
202
+
203
+ const reqParams = this.compileRequest()
204
+
205
+ this.requestParams.GET = reqParams.apiOptions
206
+
207
+ // reset local state
208
+ this.GET_result = null
209
+ this.GET_error = ''
210
+
211
+ this.httpManagerSignalsService.getRequest<ClientInfo[]>(reqParams.apiOptions, reqParams.path)
212
+ .subscribe({
213
+ next: (res) => this.GET_result = res,
214
+ error: (err) => this.errorHandling(err, 'GET')
215
+ })
216
+
217
+ }
218
+
219
+ onCreateRequest() {
220
+
221
+ if(!this.isValid) return
222
+
223
+ const reqParams = this.compileRequest()
224
+ this.requestParams.POST = reqParams.apiOptions
225
+
226
+ // reset local state
227
+ this.POST_result = null
228
+ this.POST_error = ''
229
+
230
+ this.httpManagerSignalsService.postRequest<ClientInfo>(this.sampleClientData, reqParams.apiOptions, reqParams.path)
231
+ .subscribe({
232
+ next: (res) => this.POST_result = res,
233
+ error: (err) => this.errorHandling(err, 'POST')
234
+ })
235
+
236
+ }
237
+
238
+ onUpdateRequest() {
239
+
240
+ if(!this.isValid) return
241
+
242
+ const reqParams = this.compileRequest()
243
+
244
+ if(!this.hasId(reqParams.path)) {
245
+ console.log("Missing ID")
246
+ return
247
+ }
248
+
249
+ this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length-1])
250
+ this.requestParams.PUT = reqParams.apiOptions
251
+
252
+ // reset local state
253
+ this.PUT_result = null
254
+ this.PUT_error = ''
255
+
256
+ this.httpManagerSignalsService.putRequest<any>(this.sampleClientData, reqParams.apiOptions, reqParams.path)
257
+ .subscribe({
258
+ next: (res) => this.PUT_result = res,
259
+ error: (err) => this.errorHandling(err, 'PUT')
260
+ })
261
+
262
+ }
263
+
264
+ onDeleteRequest() {
265
+
266
+ if(!this.isValid) return
267
+
268
+ const reqParams = this.compileRequest()
269
+ this.requestParams.DELETE = reqParams.apiOptions
270
+
271
+ if(!this.hasId(reqParams.path)) {
272
+ console.log("Missing ID")
273
+ return
274
+ }
275
+
276
+ this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length-1])
277
+ this.requestParams.DELETE = reqParams.apiOptions
278
+
279
+ // reset local state
280
+ this.DELETE_result = null
281
+ this.DELETE_error = ''
282
+
283
+ this.httpManagerSignalsService.deleteRequest<ClientInfo>(reqParams.apiOptions, reqParams.path)
284
+ .subscribe({
285
+ next: (res) => this.DELETE_result = res,
286
+ error: (err) => this.errorHandling(err, 'DELETE')
287
+ })
288
+
289
+ }
290
+
291
+ onStreamPostRequest() {
292
+
293
+ if (!this.isValid) return
294
+
295
+ const reqParams = this.compileRequest()
296
+
297
+ let payload = {}
298
+ let apiPath: string[] = reqParams.path
299
+ let apiOptions = reqParams.apiOptions
300
+ let responseMapper: (items: any) => any = (items) => items.response
301
+
302
+ if (this.AIType === 0) {
303
+
304
+ // API request
305
+ payload = { prompt: this.questionControl.value }
306
+
307
+ } else {
308
+
309
+ // Local Ollama request
310
+ apiOptions.server = "api"
311
+ apiPath = ["generate"]
312
+ apiOptions.stream = true
313
+ payload = {
314
+ model: "phi3:latest",
315
+ prompt: this.questionControl.value,
316
+ stream: true,
317
+ }
318
+
319
+ responseMapper = (items) => items.map((word: any) => word.response).flat().join('')
320
+
321
+ }
322
+
323
+ this.requestParams.STREAM = apiOptions
324
+ this.STREAM_AI_result = null
325
+ this.STREAM_AI_error = ''
326
+
327
+ this.httpManagerSignalsService.postRequest<any>(payload, apiOptions, apiPath)
328
+ .subscribe({
329
+ next: (res) => {
330
+ try {
331
+ this.STREAM_AI_result = responseMapper(res)
332
+ } catch (e) {
333
+ this.STREAM_AI_result = res
334
+ }
335
+ this.questionControl.reset()
336
+ },
337
+ error: (err) => this.errorHandling(err, 'STREAM')
338
+ })
339
+
340
+ }
341
+
342
+
343
+ onStreamRequest() {
344
+
345
+ if(!this.isValid) return
346
+
347
+ const reqParams = this.compileRequest()
348
+
349
+ reqParams.apiOptions.stream = true
350
+
351
+ this.requestParams.GET = reqParams.apiOptions
352
+ this.STREAM_result = null
353
+ this.STREAM_error = ''
354
+
355
+ this.httpManagerSignalsService.getRequest<ClientInfo[]>(reqParams.apiOptions, reqParams.path)
356
+ .subscribe({
357
+ next: (res) => this.STREAM_result = res,
358
+ error: (err) => this.errorHandling(err, 'STREAM')
359
+ })
360
+
361
+ }
362
+
363
+ onDownloadCompleted() {
364
+
365
+ const message = "Download Completed"
366
+
367
+ const display = ToastDisplay.adapt({
368
+ message,
369
+ action: 'Ok',
370
+ color: ToastColors.SUCCESS,
371
+ icon: 'sentiment_satisfied_alt',
372
+ })
373
+
374
+ this.toastMessage.toastMessage(display)
375
+ }
376
+
377
+ onDownloadFailed(err: string) {
378
+
379
+ const message = "Download Failed"
380
+
381
+ const display = ToastDisplay.adapt({
382
+ message,
383
+ action: 'Ok',
384
+ color: ToastColors.ERROR,
385
+ icon: 'warning',
386
+ })
387
+
388
+ this.toastMessage.toastMessage(display)
389
+ }
390
+
391
+ errorHandling(err: any, type: string) {
392
+ const message = err?.message || String(err)
393
+ // set local error state
394
+ if (type === 'GET') this.GET_error = message
395
+ if (type === 'POST') this.POST_error = message
396
+ if (type === 'PUT') this.PUT_error = message
397
+ if (type === 'DELETE') this.DELETE_error = message
398
+ if (type === 'STREAM') this.STREAM_error = message
399
+
400
+ // also set the shared service error signal
401
+ this.httpManagerSignalsService.error.set(message)
402
+
403
+ return err
404
+ }
405
+
406
+ onSelectAIType(type: number) {
407
+ this.AIType = type
408
+ }
409
+
410
+ }
@@ -0,0 +1,28 @@
1
+ export interface SettingsInterface {
2
+ enum_1: any
3
+ enum_2: any
4
+ enum_3: any
5
+ enum_4: any
6
+ }
7
+
8
+ export class Settings implements SettingsInterface {
9
+
10
+ constructor(
11
+ public enum_1 = [],
12
+ public enum_2 = [],
13
+ public enum_3 = [],
14
+ public enum_4 = [],
15
+ ) {}
16
+
17
+ static adapt(item?: any): Settings {
18
+
19
+ return new Settings(
20
+ item?.enum_1,
21
+ item?.enum_2,
22
+ item?.enum_3,
23
+ item?.enum_4,
24
+ )
25
+
26
+ }
27
+
28
+ }
@@ -0,0 +1,49 @@
1
+ import { Injectable } from '@angular/core';
2
+
3
+ import { map } from 'rxjs';
4
+
5
+ import { SettingOptions } from '../../../services/local-storage-manager-service/models/setting-options.model';
6
+ import { StorageType } from '../../../services/local-storage-manager-service/models/storage-type.enum';
7
+ import { StoreStateManagerService, StateStorageOptions } from '../../../services/store-state-manager-service';
8
+ import { Settings } from '../models/settings.model';
9
+
10
+
11
+ @Injectable()
12
+ export class SettingsStateService extends StoreStateManagerService {
13
+
14
+ constructor() {
15
+
16
+ super(
17
+ StateStorageOptions.adapt({
18
+ store: 'sampleStore',
19
+ options: SettingOptions.adapt({
20
+ storage: StorageType.SESSION,
21
+ encrypted: false
22
+ }),
23
+ model: Settings.adapt,
24
+ }
25
+ ))
26
+
27
+ }
28
+
29
+ updateEnum_1(value: any) {
30
+ this.updateData(value)
31
+ }
32
+
33
+ updateEnum_2(value: any) {
34
+ this.updateData(value)
35
+ }
36
+
37
+ getEnum(key: string) {
38
+ return this.data$.pipe(
39
+ map(item => item[key])
40
+ )
41
+ }
42
+
43
+ getEnum_1() {
44
+ return this.data$.pipe(
45
+ map(item => item?.enum_1)
46
+ )
47
+ }
48
+
49
+ }
@@ -0,0 +1,23 @@
1
+ <div style="margin: 2rem;">
2
+
3
+ <h2>
4
+ <span>Store State Manager</span>
5
+ <span style="margin-left: .5rem;">
6
+ <mat-icon color="accent">fiber_new</mat-icon>
7
+ </span>
8
+ </h2>
9
+
10
+ {{ dataState$ | async | json}}
11
+
12
+ <div style="display: flex; gap:.5rem; margin-top: 1rem; margin-bottom: 1rem;">
13
+ <button mat-stroked-button (click)="onUpdateEnum_1()">Update Start</button>
14
+ <button mat-stroked-button (click)="onUpdateEnum_2()">Update End</button>
15
+ <button mat-stroked-button (click)="onGetEnum_1()">Dump</button>
16
+ </div>
17
+
18
+ <div>
19
+ <h3 style="margin: 0;">Enum 1</h3>
20
+ {{ dataEnum$ | async | json}}
21
+ </div>
22
+
23
+ </div>
@@ -0,0 +1,36 @@
1
+ import { Component, inject, OnInit } from '@angular/core';
2
+ import { RandomNumber } from '../../services/utils/encryption/random';
3
+ import { SettingsStateService } from './services/settings-state.service';
4
+
5
+ @Component({
6
+ selector: 'app-store-state-manager-demo',
7
+ templateUrl: './store-state-manager-demo.component.html',
8
+ styleUrls: ['./store-state-manager-demo.component.css'],
9
+ providers: [SettingsStateService],
10
+ standalone: false
11
+ })
12
+ export class StoreStateManagerDemoComponent implements OnInit {
13
+
14
+ settingsStateService = inject(SettingsStateService)
15
+ dataState$ = this.settingsStateService.data$
16
+
17
+ dataEnum$ = this.settingsStateService.getEnum_1()
18
+
19
+ ngOnInit() {
20
+ }
21
+
22
+ onUpdateEnum_1() {
23
+ const rnd = RandomNumber(1000, 9999)
24
+ this.settingsStateService.updateEnum_1({enum_1: [{ users: [1,2,3, rnd], random: rnd }]})
25
+ }
26
+
27
+ onUpdateEnum_2() {
28
+ const rnd = RandomNumber(1000, 9999)
29
+ this.settingsStateService.updateEnum_2({enum_2: [{ users: [1,2,3, rnd], random: rnd }]})
30
+ }
31
+
32
+ onGetEnum_1() {
33
+ this.settingsStateService.getEnum_1().subscribe(data => console.log('DUMP:', data))
34
+ }
35
+
36
+ }
@@ -0,0 +1,161 @@
1
+ import { Component, OnInit, signal, computed } from '@angular/core';
2
+ import { StoreStateManagerSignalsService } from '../../services/store-state-manager-service/store-state-manager-signals.service';
3
+ import { StateStorageOptions } from '../../services/store-state-manager-service/models/state-storage-options.model';
4
+
5
+ interface CounterState {
6
+ count: number;
7
+ lastUpdated: string;
8
+ history: number[];
9
+ }
10
+
11
+ const defaultCounterState: () => CounterState = () => ({
12
+ count: 0,
13
+ lastUpdated: new Date().toISOString(),
14
+ history: []
15
+ });
16
+
17
+ @Component({
18
+ selector: 'app-store-state-signals-demo',
19
+ template: `
20
+ <div class="demo-container">
21
+ <h2>Store State Manager Signals Demo</h2>
22
+ <p>Signal-based state management with localStorage persistence</p>
23
+
24
+ <div class="state-display">
25
+ <h3>Current State (Signal)</h3>
26
+ <pre>{{ stateJson() }}</pre>
27
+ </div>
28
+
29
+ <div class="actions">
30
+ <button (click)="increment()">Increment</button>
31
+ <button (click)="decrement()">Decrement</button>
32
+ <button (click)="reset()">Reset</button>
33
+ <button (click)="addToHistory()">Add to History</button>
34
+ </div>
35
+
36
+ <div class="history">
37
+ <h3>History: {{ historyLength() }} items</h3>
38
+ <ul>
39
+ @for (item of history(); track item; let i = $index) {
40
+ <li>{{ i + 1 }}. {{ item }}</li>
41
+ }
42
+ </ul>
43
+ </div>
44
+ </div>
45
+ `,
46
+ styles: [`
47
+ .demo-container {
48
+ padding: 20px;
49
+ max-width: 600px;
50
+ margin: 0 auto;
51
+ }
52
+ .state-display {
53
+ background: #f5f5f5;
54
+ padding: 15px;
55
+ border-radius: 5px;
56
+ margin: 20px 0;
57
+ }
58
+ pre {
59
+ background: #fff;
60
+ padding: 10px;
61
+ border: 1px solid #ddd;
62
+ border-radius: 3px;
63
+ }
64
+ .actions {
65
+ display: flex;
66
+ gap: 10px;
67
+ margin: 20px 0;
68
+ }
69
+ button {
70
+ padding: 10px 20px;
71
+ background: #007bff;
72
+ color: white;
73
+ border: none;
74
+ border-radius: 4px;
75
+ cursor: pointer;
76
+ }
77
+ button:hover {
78
+ background: #0056b3;
79
+ }
80
+ .history {
81
+ margin-top: 20px;
82
+ }
83
+ ul {
84
+ max-height: 200px;
85
+ overflow-y: auto;
86
+ }
87
+ `]
88
+ })
89
+ export class StoreStateSignalsDemoComponent implements OnInit {
90
+
91
+ private stateManager!: StoreStateManagerSignalsService<CounterState>;
92
+
93
+ // Signals from service
94
+ stateJson = signal<string>('');
95
+ historyLength = signal<number>(0);
96
+ history = signal<number[]>([]);
97
+
98
+ ngOnInit() {
99
+ const options = StateStorageOptions.adapt({
100
+ store: 'counter-state',
101
+ model: defaultCounterState,
102
+ options: {
103
+ storage: 'global',
104
+ encrypted: false
105
+ }
106
+ });
107
+
108
+ this.stateManager = new StoreStateManagerSignalsService<CounterState>();
109
+ this.stateManager.init(options);
110
+
111
+ // Update signals when state changes
112
+ this.updateSignals();
113
+ }
114
+
115
+ private updateSignals() {
116
+ const state = this.stateManager.data();
117
+ if (state) {
118
+ this.stateJson.set(JSON.stringify(state, null, 2));
119
+ this.historyLength.set(state.history.length);
120
+ this.history.set([...state.history]);
121
+ }
122
+ }
123
+
124
+ increment() {
125
+ const current = this.stateManager.data();
126
+ if (current) {
127
+ this.stateManager.updateState({
128
+ count: current.count + 1,
129
+ lastUpdated: new Date().toISOString()
130
+ });
131
+ this.updateSignals();
132
+ }
133
+ }
134
+
135
+ decrement() {
136
+ const current = this.stateManager.data();
137
+ if (current) {
138
+ this.stateManager.updateState({
139
+ count: current.count - 1,
140
+ lastUpdated: new Date().toISOString()
141
+ });
142
+ this.updateSignals();
143
+ }
144
+ }
145
+
146
+ reset() {
147
+ this.stateManager.resetState();
148
+ this.updateSignals();
149
+ }
150
+
151
+ addToHistory() {
152
+ const current = this.stateManager.data();
153
+ if (current) {
154
+ this.stateManager.updateState({
155
+ history: [...current.history, current.count],
156
+ lastUpdated: new Date().toISOString()
157
+ });
158
+ this.updateSignals();
159
+ }
160
+ }
161
+ }
@@ -0,0 +1 @@
1
+ export * from './upload-state.model'