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,53 @@
1
+ import { Component, Inject, Input, OnInit } from '@angular/core';
2
+
3
+ import { CONFIG_SETTINGS_TOKEN } from '../models/config-token.model';
4
+ import { ConfigOptions } from '../models/config-options.model';
5
+ import { UserData } from './request-manager-ws-demo/models/user-data.model';
6
+
7
+ @Component({
8
+ selector: 'app-http-request-services-demo',
9
+ templateUrl: './http-request-services-demo.component.html',
10
+ styleUrls: ['./http-request-services-demo.component.scss'],
11
+ standalone: false
12
+ })
13
+ export class HttpRequestServicesDemoComponent implements OnInit {
14
+
15
+ @Input() wsServer = 'ws:'
16
+ @Input() jwtToken = ''
17
+ @Input() server = 'http:'
18
+ @Input() user?: UserData
19
+ @Input() path: string[] = ['ai','tests'];
20
+
21
+ @Input() adapter?: Function
22
+ @Input() mapper?: Function
23
+
24
+ requestTypes = [
25
+ { name: "Http Service", value: 'http_service' },
26
+ // { name: "Http Signals Service", value: 'http_signals_service', new: true },
27
+ { name: "Http State Service", value: 'http_state_service' },
28
+ { name: "Http State Service - Websockets", value: 'http_state_service_ws', new: false },
29
+ { name: "File Upload Demo", value: 'file_upload_demo', new: true, divider: true },
30
+ { name: "Database Service", value: 'database_service', divider: true, disabled: false },
31
+ { name: "Local Storage Service", value: 'local_storage_service' },
32
+ // { name: "Local Signals Storage Service", value: 'local_storage_signals_service', new: true },
33
+ { name: "Store State Manager Service", value: 'store_state_manager', new: true },
34
+ { name: "Basic Http Service", value: 'basic_http_service', divider: true },
35
+ ]
36
+
37
+ selectedService = this.requestTypes[1].value //menu selection default
38
+
39
+ injectionOptions?: ConfigOptions
40
+
41
+ constructor(
42
+ @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions
43
+ ) { }
44
+
45
+ ngOnInit() {
46
+ if(this.configOptions) this.injectionOptions = this.configOptions
47
+ }
48
+
49
+ onSelected(type: number) {
50
+ this.selectedService = this.requestTypes[type].value
51
+ }
52
+
53
+ }
@@ -0,0 +1,195 @@
1
+ <div style="margin: 2rem;">
2
+
3
+ <div style="display: flex; gap: 1rem">
4
+ <h2 style="padding-top: .5rem; display: flex;">
5
+ <div style="padding-top: .5rem;">Local Storage Manager</div>
6
+ <div>
7
+ <button mat-icon-button [matMenuTriggerFor]="menu">
8
+ <mat-icon>info</mat-icon>
9
+ </button>
10
+ </div>
11
+ </h2>
12
+ <span style="flex:1"></span>
13
+ <div style="padding-top: .25rem;">
14
+ <mat-button-toggle-group name="storage" [formControl]="typeControl" (change)="onCancel()">
15
+ <mat-button-toggle value="0">Local Storage</mat-button-toggle>
16
+ <mat-button-toggle value="1">Session Storage</mat-button-toggle>
17
+ </mat-button-toggle-group>
18
+ </div>
19
+ <div style="margin-top: .25rem;">
20
+ <button mat-icon-button (click)="onCreate()">
21
+ <mat-icon>add</mat-icon>
22
+ </button>
23
+ </div>
24
+ </div>
25
+
26
+ <ng-container *ngIf="storeProps?.storageName || storeProps?.storageSettingsName">
27
+ <div style="display: flex; gap: .5rem; flex-direction: column; border: gray solid thin; background-color: whitesmoke; padding: 1rem;"
28
+ >
29
+ <div style="display: flex;">
30
+ <div *ngIf="storeProps?.storageSettingsName" style="flex:1">
31
+ Database: <b>{{ storeProps?.storageSettingsName }}</b>
32
+ </div>
33
+ <div *ngIf="storeProps?.storageName" style="flex:1">
34
+ Data: <b>{{ storeProps?.storageName }}</b>
35
+ </div>
36
+ </div>
37
+ </div>
38
+ </ng-container>
39
+
40
+ <div style="margin-top: 2rem;" [formGroup]="newStoreForm" *ngIf="create; else LIST">
41
+
42
+ <h2>Create Store</h2>
43
+
44
+ <div style="display: flex; gap: 1rem;">
45
+ <div style="flex:1">
46
+ <mat-form-field appearance="outline">
47
+ <mat-label>Store Name</mat-label>
48
+ <input matInput placeholder="sample" formControlName="name">
49
+ </mat-form-field>
50
+ </div>
51
+ <div>
52
+ <mat-form-field appearance="outline">
53
+ <mat-label>Expires In...</mat-label>
54
+ <mat-select formControlName="expiresIn">
55
+ <mat-option value="0">None</mat-option>
56
+ <mat-option value="30s">30 Seconds</mat-option>
57
+ <mat-option value="1mn">1 Minute</mat-option>
58
+ <mat-option value="1hr">1 Hour</mat-option>
59
+ <mat-option value="1d">1 Day</mat-option>
60
+ </mat-select>
61
+ </mat-form-field>
62
+ </div>
63
+ <div style="margin-top: 1rem;">
64
+ <mat-slide-toggle formControlName="encrypted">Encrypted</mat-slide-toggle>
65
+ </div>
66
+ </div>
67
+
68
+ <div style="display: flex;">
69
+ <mat-form-field appearance="outline" style="flex: 1;">
70
+ <mat-label>Data (Must be an Object or Array of any)</mat-label>
71
+ <textarea matInput placeholder="[]" formControlName="data" #json></textarea>
72
+ </mat-form-field>
73
+ </div>
74
+ <mat-error *ngIf="!isValidJSON(json.value)">Not Valid Data</mat-error>
75
+
76
+ <div style="display: flex;">
77
+ <span style="flex:1"></span>
78
+ <button mat-stroked-button (click)="onCreateStore()" [disabled]="!(isValid && isValidJSON(json.value))">
79
+ Save Store
80
+ </button>
81
+ </div>
82
+
83
+ </div>
84
+
85
+ <ng-template #LIST>
86
+
87
+ <div style="margin-top: 1rem;">
88
+ <mat-divider></mat-divider>
89
+ </div>
90
+ {{ settings$ | async | json }}
91
+ <div *ngIf="filterData(settings$ | async) as data">
92
+ <ng-container *ngIf="data.length > 0; else NO_DATA">
93
+ <table mat-table [dataSource]="data">
94
+ <ng-container matColumnDef="name">
95
+ <th mat-header-cell *matHeaderCellDef> Store </th>
96
+ <td mat-cell *matCellDef="let element" style="font-weight: bold; text-transform: uppercase;"> {{element.name}} </td>
97
+ </ng-container>
98
+
99
+ <ng-container matColumnDef="id">
100
+ <th mat-header-cell *matHeaderCellDef> ID </th>
101
+ <td mat-cell *matCellDef="let element"> {{element.id}} </td>
102
+ </ng-container>
103
+
104
+ <ng-container matColumnDef="encrypted">
105
+ <th mat-header-cell *matHeaderCellDef style="text-align: center;"> Encrypted </th>
106
+ <td mat-cell *matCellDef="let element" style="text-align: center;">
107
+ <ng-container *ngIf="element.options.encrypted; else NO">YES</ng-container>
108
+ <ng-template #NO><span style="color:gray">NO</span></ng-template>
109
+ </td>
110
+ </ng-container>
111
+
112
+ <ng-container matColumnDef="expires">
113
+ <th mat-header-cell *matHeaderCellDef style="text-align: center;"> Expires </th>
114
+ <td mat-cell *matCellDef="let element" style="text-align: center;">
115
+ <ng-container *ngIf="element.options.expires !== 0; else NO_DATA">
116
+ {{expiresIn(element.options.expires)}}
117
+ </ng-container>
118
+ <ng-template #NO_DATA>
119
+
120
+ </ng-template>
121
+ </td>
122
+ </ng-container>
123
+
124
+ <ng-container matColumnDef="option">
125
+ <th mat-header-cell *matHeaderCellDef></th>
126
+ <td mat-cell *matCellDef="let element" style="padding-right: 0;">
127
+ <div style="display: flex;justify-content: flex-end;">
128
+ <button mat-icon-button color="warn" (click)="onDelete(element); $event.stopPropagation()">
129
+ <mat-icon>close</mat-icon>
130
+ </button>
131
+ </div>
132
+ </td>
133
+ </ng-container>
134
+
135
+ <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
136
+ <tr mat-row *matRowDef="let row; columns: displayedColumns;" (click)="onSelectedRow(row)"></tr>
137
+ </table>
138
+ </ng-container>
139
+
140
+ <ng-template #NO_DATA>
141
+ <h3 style="margin-top: 1rem;">No Data</h3>
142
+ </ng-template>
143
+
144
+ <div *ngIf="(data$ | async) as data" style="margin-top: 2rem;">
145
+ <div style="margin-bottom: 1rem;">
146
+ <mat-divider></mat-divider>
147
+ </div>
148
+
149
+ <h3>STORE: <span style="font-weight: bold;">{{ store.name | uppercase }}</span></h3>
150
+ <h3>SETTINGS: {{ setting$(store.name) | async | json }}</h3>
151
+ <div style="display: flex;">
152
+ <mat-form-field appearance="outline" style="flex: 1;">
153
+ <mat-label>Data (Must be an Object or Array of any)</mat-label>
154
+ <textarea matInput placeholder="[]" #json [value]="data"></textarea>
155
+ </mat-form-field>
156
+ </div>
157
+ <mat-error *ngIf="!isValidJSON(json.value)">Not Valid Data</mat-error>
158
+
159
+ <div style="display: flex; gap: .5rem;">
160
+ <span style="flex:1"></span>
161
+ <button mat-stroked-button (click)="onCancel()">Cancel</button>
162
+ <button mat-stroked-button (click)="onUpdate(store, json.value)" [disabled]="!(isValidJSON(json.value))">Update</button>
163
+ </div>
164
+ </div>
165
+ </div>
166
+
167
+ </ng-template>
168
+
169
+ <div style="margin-top: 1rem;">
170
+ <mat-divider></mat-divider>
171
+ </div>
172
+
173
+ <div style="margin-top: 1rem;">
174
+ <button mat-stroked-button (click)="onReset()">Delete All Stores</button>
175
+ </div>
176
+
177
+ </div>
178
+
179
+
180
+ <mat-menu #menu="matMenu">
181
+ <div style="padding: 1rem;">
182
+ <p>Please note that the LocalStorage (encryption) and management of data is dependant on initializing the APP_ID</p>
183
+ <p>Must provide a value for <b>APP_ID</b> in AppModule->Providers</p>
184
+ <mat-divider></mat-divider>
185
+ <div style="font-size: smaller; margin-top: .5rem;">
186
+ <p>Example: UUID (self.crypto.randomUUID() to generate)</p>
187
+ <div style="background-color: whitesmoke; padding: 1rem;">
188
+ &#123;<br>
189
+ provide: APP_ID,<br>
190
+ useValue: "056991ac-3537-43ab-b5b9-83edf6554eff",<br>
191
+ &#125;
192
+ </div>
193
+ </div>
194
+ </div>
195
+ </mat-menu>
@@ -0,0 +1,17 @@
1
+ .mat-mdc-row .mat-mdc-cell {
2
+ border-bottom: 1px solid transparent;
3
+ border-top: 1px solid transparent;
4
+ cursor: pointer;
5
+ }
6
+
7
+ .mat-mdc-row:hover .mat-mdc-cell {
8
+ border-color: currentColor;
9
+ }
10
+
11
+ .demo-row-is-clicked {
12
+ font-weight: bold;
13
+ }
14
+
15
+ .mat-mdc-menu-panel.mat-mdc-menu-panel {
16
+ max-width: 280px !important;
17
+ }
@@ -0,0 +1,208 @@
1
+ import { Component, Inject, inject, OnInit, ViewEncapsulation } from '@angular/core';
2
+ import { LocalStorageManagerService, SettingOptions, StorageOption, StorageType } from '../../services/local-storage-manager-service';
3
+ import { FormBuilder, Validators } from '@angular/forms';
4
+ import { BehaviorSubject, EMPTY, Observable, of } from 'rxjs';
5
+ import { ConfigOptions } from '../../models/config-options.model';
6
+ import { LocalStorageOptions } from '../../models/config-local-storage-options.model';
7
+ import { UtilsService } from '../../services/utils/utils.service';
8
+ import { switchMap, tap, map } from 'rxjs/operators';
9
+ import { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';
10
+
11
+ @Component({
12
+ selector: 'app-local-storage-demo',
13
+ templateUrl: './local-storage-demo.component.html',
14
+ styleUrls: ['./local-storage-demo.component.scss'],
15
+ encapsulation: ViewEncapsulation.None,
16
+ standalone: false
17
+ })
18
+ export class LocalStorageDemoComponent implements OnInit {
19
+
20
+ fb = inject(FormBuilder)
21
+ utils = inject(UtilsService)
22
+
23
+ type$ = new BehaviorSubject(StorageType.GLOBAL)
24
+ get type() {
25
+ return (this.typeControl.value) ? +this.typeControl.value : 0
26
+ }
27
+
28
+ typeControl = this.fb.control(StorageType.GLOBAL.toString())
29
+
30
+ localStorageManagerService = inject(LocalStorageManagerService)
31
+
32
+ settings$: Observable<any> = this.localStorageManagerService.settings$
33
+
34
+ setting$ = (store: string) => this.localStorageManagerService.setting$(store)
35
+
36
+ storageForm = this.fb.group({
37
+ store: this.fb.control<string|null>(null),
38
+ type: 'local',
39
+ settingType: 'local',
40
+ encrypted: false,
41
+ data: this.fb.control<string>('', Validators.required),
42
+ })
43
+
44
+ newStoreForm = this.fb.group({
45
+ name: this.fb.control<string|null>(null, Validators.required),
46
+ storage: 'local',
47
+ encrypted: false,
48
+ data: this.fb.control<string>('', Validators.required),
49
+ expiresIn: this.fb.control('0')
50
+ })
51
+
52
+ store$?: Observable<any>
53
+
54
+ storeData$ = this.storageForm.get('store')?.valueChanges
55
+ .pipe(
56
+ switchMap((data: any) => {
57
+ return data
58
+ ? this.localStorageManagerService.store$(data.name)
59
+ : of('')
60
+ }),
61
+ tap(data => {
62
+ this.storageForm.get('data')?.patchValue(data, { emitEvent: false })
63
+ })
64
+ )
65
+
66
+ expiresIn = (epoch: number) => this.utils.expiresIn(epoch)
67
+
68
+ get isValid() {
69
+ return this.newStoreForm.valid
70
+ }
71
+
72
+ get isValidData() {
73
+ return this.storageForm.valid
74
+ }
75
+
76
+ isValidJSON = (str: string) => {
77
+ try {
78
+ JSON.parse(str)
79
+ return true
80
+ } catch (e) {
81
+ return false
82
+ }
83
+ }
84
+
85
+ displayedColumns: string[] = ['name', 'id', 'encrypted', 'expires', "option"];
86
+
87
+ filterData = (values: SettingOptions[]) => {
88
+ if(!values) return []
89
+ return values.filter((item: any) => item.options.storage === +this.type)
90
+ }
91
+
92
+ data$?: Observable<any>
93
+
94
+ store: any
95
+
96
+ create = false
97
+
98
+ storeProps?: LocalStorageOptions
99
+ options?: SettingOptions
100
+
101
+ constructor(@Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) { }
102
+
103
+ ngOnInit() {
104
+
105
+ this.storeProps = this.configOptions?.LocalStorageOptions
106
+ this.options = this.storeProps?.options
107
+
108
+ if(this.options?.storage) {
109
+ this.typeControl.patchValue(this.options.storage.toString())
110
+ this.typeControl.disable()
111
+ } else {
112
+ this.typeControl.enable()
113
+ }
114
+
115
+ if(this.options?.expiresIn) {
116
+ this.newStoreForm.get('expiresIn')?.patchValue(this.options.expiresIn)
117
+ this.newStoreForm.get('expiresIn')?.disable()
118
+ } else {
119
+ this.newStoreForm.get('expiresIn')?.enable()
120
+ }
121
+
122
+ if(this.options?.encrypted) {
123
+ this.newStoreForm.get('encrypted')?.patchValue(this.options.encrypted)
124
+ this.newStoreForm.get('encrypted')?.disable()
125
+ } else {
126
+ this.newStoreForm.get('encrypted')?.enable()
127
+ }
128
+
129
+ }
130
+
131
+ onCreateStore() {
132
+
133
+ if(!this.isValid) return
134
+
135
+ const store = this.newStoreForm.value
136
+ if(!store.name || store.name === '') return
137
+
138
+ const options = { storage: this.type, encrypted: store.encrypted, expiresIn: store.expiresIn }
139
+
140
+ this.localStorageManagerService.createStore({
141
+ name: store.name,
142
+ data: store.data,
143
+ options: SettingOptions.adapt(options)
144
+ })
145
+
146
+ this.newStoreForm.reset()
147
+ this.create = false
148
+ }
149
+
150
+ onUpdateStore(store: any) {
151
+
152
+ if(!this.storageForm.valid) return
153
+
154
+ const storeData = this.storageForm.value
155
+
156
+ const data = JSON.parse(storeData.data || '')
157
+
158
+ const type = (storeData.type === 'local') ? StorageType.GLOBAL : StorageType.SESSION
159
+
160
+ this.localStorageManagerService.updateStore({
161
+ name: store.name,
162
+ data
163
+ })
164
+
165
+ }
166
+
167
+ onSelectedRow(store: any) {
168
+ this.store = store
169
+ this.data$ = this.localStorageManagerService.store$(store.name).pipe(map(item => JSON.stringify(item)))
170
+ this.create = false
171
+ }
172
+
173
+ onCreate() {
174
+ this.onCancel()
175
+ this.create = true
176
+ }
177
+
178
+ onDelete(store: StorageOption) {
179
+
180
+ this.localStorageManagerService.deleteStore({
181
+ name: store.name,
182
+ })
183
+
184
+ this.onCancel()
185
+ }
186
+
187
+ onCancel() {
188
+ this.data$ = EMPTY
189
+ this.store = null
190
+ this.create = false
191
+ }
192
+
193
+ onUpdate(store: StorageOption, data: any) {
194
+
195
+ this.localStorageManagerService.updateStore({
196
+ name: store.name,
197
+ data: JSON.parse(data)
198
+ })
199
+
200
+ this.onCancel()
201
+
202
+ }
203
+
204
+ onReset() {
205
+ this.localStorageManagerService.resetStore()
206
+ }
207
+
208
+ }
@@ -0,0 +1,200 @@
1
+ <div style="margin: 2rem;">
2
+
3
+ <div style="display: flex; gap: 1rem">
4
+ <h2 style="padding-top: .5rem; display: flex;">
5
+ <div style="padding-top: .5rem;">
6
+ <span>Local Storage Manager</span>
7
+ <span style="margin-left: .5rem;">
8
+ <mat-icon color="accent">fiber_new</mat-icon>
9
+ </span>
10
+ </div>
11
+ <div>
12
+ <button mat-icon-button [matMenuTriggerFor]="menu">
13
+ <mat-icon>info</mat-icon>
14
+ </button>
15
+ </div>
16
+ </h2>
17
+ <span style="flex:1"></span>
18
+ <div style="padding-top: .25rem;">
19
+ <mat-button-toggle-group name="storage" [formControl]="typeControl" (change)="onCancel()">
20
+ <mat-button-toggle value="0">Local Storage</mat-button-toggle>
21
+ <mat-button-toggle value="1">Session Storage</mat-button-toggle>
22
+ </mat-button-toggle-group>
23
+ </div>
24
+ <div style="margin-top: .25rem;">
25
+ <button mat-icon-button (click)="onCreate()">
26
+ <mat-icon>add</mat-icon>
27
+ </button>
28
+ </div>
29
+ </div>
30
+
31
+ <ng-container *ngIf="storeProps?.storageName || storeProps?.storageSettingsName">
32
+ <div style="display: flex; gap: .5rem; flex-direction: column; border: gray solid thin; background-color: whitesmoke; padding: 1rem;"
33
+ >
34
+ <div style="display: flex;">
35
+ <div *ngIf="storeProps?.storageSettingsName" style="flex:1">
36
+ Database: <b>{{ storeProps?.storageSettingsName }}</b>
37
+ </div>
38
+ <div *ngIf="storeProps?.storageName" style="flex:1">
39
+ Data: <b>{{ storeProps?.storageName }}</b>
40
+ </div>
41
+ </div>
42
+ </div>
43
+ </ng-container>
44
+
45
+ <div style="margin-top: 2rem;" [formGroup]="newStoreForm" *ngIf="create; else LIST">
46
+
47
+ <h2>Create Store</h2>
48
+
49
+ <div style="display: flex; gap: 1rem;">
50
+ <div style="flex:1">
51
+ <mat-form-field appearance="outline">
52
+ <mat-label>Store Name</mat-label>
53
+ <input matInput placeholder="sample" formControlName="name">
54
+ </mat-form-field>
55
+ </div>
56
+ <div>
57
+ <mat-form-field appearance="outline">
58
+ <mat-label>Expires In...</mat-label>
59
+ <mat-select formControlName="expiresIn">
60
+ <mat-option value="0">None</mat-option>
61
+ <mat-option value="30s">30 Seconds</mat-option>
62
+ <mat-option value="1mn">1 Minute</mat-option>
63
+ <mat-option value="1hr">1 Hour</mat-option>
64
+ <mat-option value="1d">1 Day</mat-option>
65
+ </mat-select>
66
+ </mat-form-field>
67
+ </div>
68
+ <div style="margin-top: 1rem;">
69
+ <mat-slide-toggle formControlName="encrypted">Encrypted</mat-slide-toggle>
70
+ </div>
71
+ </div>
72
+
73
+ <div style="display: flex;">
74
+ <mat-form-field appearance="outline" style="flex: 1;">
75
+ <mat-label>Data (Must be an Object or Array of any)</mat-label>
76
+ <textarea matInput placeholder="[]" formControlName="data" #json></textarea>
77
+ </mat-form-field>
78
+ </div>
79
+ <mat-error *ngIf="!isValidJSON(json.value)">Not Valid Data</mat-error>
80
+
81
+ <div style="display: flex;">
82
+ <span style="flex:1"></span>
83
+ <button mat-stroked-button (click)="onCreateStore()" [disabled]="!(isValid && isValidJSON(json.value))">
84
+ Save Store
85
+ </button>
86
+ </div>
87
+
88
+ </div>
89
+
90
+ <ng-template #LIST>
91
+
92
+ <div style="margin-top: 1rem;">
93
+ <mat-divider></mat-divider>
94
+ </div>
95
+ {{ settings() | json }}
96
+ <div *ngIf="filterData(settings()) as data">
97
+ <ng-container *ngIf="data.length > 0; else NO_DATA">
98
+ <table mat-table [dataSource]="data">
99
+ <ng-container matColumnDef="name">
100
+ <th mat-header-cell *matHeaderCellDef> Store </th>
101
+ <td mat-cell *matCellDef="let element" style="font-weight: bold; text-transform: uppercase;"> {{element.name}} </td>
102
+ </ng-container>
103
+
104
+ <ng-container matColumnDef="id">
105
+ <th mat-header-cell *matHeaderCellDef> ID </th>
106
+ <td mat-cell *matCellDef="let element"> {{element.id}} </td>
107
+ </ng-container>
108
+
109
+ <ng-container matColumnDef="encrypted">
110
+ <th mat-header-cell *matHeaderCellDef style="text-align: center;"> Encrypted </th>
111
+ <td mat-cell *matCellDef="let element" style="text-align: center;">
112
+ <ng-container *ngIf="element.options.encrypted; else NO">YES</ng-container>
113
+ <ng-template #NO><span style="color:gray">NO</span></ng-template>
114
+ </td>
115
+ </ng-container>
116
+
117
+ <ng-container matColumnDef="expires">
118
+ <th mat-header-cell *matHeaderCellDef style="text-align: center;"> Expires </th>
119
+ <td mat-cell *matCellDef="let element" style="text-align: center;">
120
+ <ng-container *ngIf="element.options.expires !== 0; else NO_DATA">
121
+ {{expiresIn(element.options.expires)}}
122
+ </ng-container>
123
+ <ng-template #NO_DATA>
124
+
125
+ </ng-template>
126
+ </td>
127
+ </ng-container>
128
+
129
+ <ng-container matColumnDef="option">
130
+ <th mat-header-cell *matHeaderCellDef></th>
131
+ <td mat-cell *matCellDef="let element" style="padding-right: 0;">
132
+ <div style="display: flex;justify-content: flex-end;">
133
+ <button mat-icon-button color="warn" (click)="onDelete(element); $event.stopPropagation()">
134
+ <mat-icon>close</mat-icon>
135
+ </button>
136
+ </div>
137
+ </td>
138
+ </ng-container>
139
+
140
+ <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
141
+ <tr mat-row *matRowDef="let row; columns: displayedColumns;" (click)="onSelectedRow(row)"></tr>
142
+ </table>
143
+ </ng-container>
144
+
145
+ <ng-template #NO_DATA>
146
+ <h3 style="margin-top: 1rem;">No Data</h3>
147
+ </ng-template>
148
+
149
+ <div *ngIf="storeSelected() as selectedStore" style="margin-top: 2rem;">
150
+ <div style="margin-bottom: 1rem;">
151
+ <mat-divider></mat-divider>
152
+ </div>
153
+
154
+ <h3>STORE: <span style="font-weight: bold;">{{ selectedStore.name | uppercase }}</span></h3>
155
+ <h3>SETTINGS: {{ localStorageManagerService.setting(selectedStore.name) ? (localStorageManagerService.setting(selectedStore.name)() | json) : '{}' }}</h3>
156
+ <div style="display: flex;">
157
+ <mat-form-field appearance="outline" style="flex: 1;">
158
+ <mat-label>Data (Must be an Object or Array of any)</mat-label>
159
+ <textarea matInput placeholder="[]" #json [value]="selectedStoreData()"></textarea>
160
+ </mat-form-field>
161
+ </div>
162
+ <mat-error *ngIf="!isValidJSON(json.value)">Not Valid Data</mat-error>
163
+
164
+ <div style="display: flex; gap: .5rem;">
165
+ <span style="flex:1"></span>
166
+ <button mat-stroked-button (click)="onCancel()">Cancel</button>
167
+ <button mat-stroked-button (click)="onUpdate(selectedStore, json.value)" [disabled]="!(isValidJSON(json.value))">Update</button>
168
+ </div>
169
+ </div>
170
+ </div>
171
+
172
+ </ng-template>
173
+
174
+ <div style="margin-top: 1rem;">
175
+ <mat-divider></mat-divider>
176
+ </div>
177
+
178
+ <div style="margin-top: 1rem;">
179
+ <button mat-stroked-button (click)="onReset()">Delete All Stores</button>
180
+ </div>
181
+
182
+ </div>
183
+
184
+
185
+ <mat-menu #menu="matMenu">
186
+ <div style="padding: 1rem;">
187
+ <p>Please note that the LocalStorage (encryption) and management of data is dependant on initializing the APP_ID</p>
188
+ <p>Must provide a value for <b>APP_ID</b> in AppModule->Providers</p>
189
+ <mat-divider></mat-divider>
190
+ <div style="font-size: smaller; margin-top: .5rem;">
191
+ <p>Example: UUID (self.crypto.randomUUID() to generate)</p>
192
+ <div style="background-color: whitesmoke; padding: 1rem;">
193
+ &#123;<br>
194
+ provide: APP_ID,<br>
195
+ useValue: "056991ac-3537-43ab-b5b9-83edf6554eff",<br>
196
+ &#125;
197
+ </div>
198
+ </div>
199
+ </div>
200
+ </mat-menu>