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,153 @@
1
+ import { LocalStorageManagerService } from '../local-storage-manager-service/local-storage-manager.service';
2
+ import { inject, Injectable } from '@angular/core';
3
+ import { ComponentStore } from '@ngrx/component-store';
4
+ import { StateStorageOptions } from './models/state-storage-options.model';
5
+ import { StateOperationResult } from './models/state-operation-result.model';
6
+ import { BehaviorSubject, Observable, Subscription, take } from 'rxjs';
7
+
8
+ export interface StateStoreManagerData<T> {}
9
+
10
+ @Injectable({
11
+ providedIn: 'root'
12
+ })
13
+ export class StoreStateManagerService<T extends object = StateStoreManagerData<any>> extends ComponentStore<T> {
14
+
15
+ localStorageManagerService = inject(LocalStorageManagerService)
16
+
17
+ subscriptions = new Subscription
18
+ settings: any = null
19
+
20
+ private isRestoring = false
21
+
22
+ private operationResult = new BehaviorSubject<StateOperationResult | null>(null)
23
+ operationResult$: Observable<StateOperationResult | null> = this.operationResult.asObservable()
24
+
25
+ constructor(
26
+ private options: StateStorageOptions = StateStorageOptions.adapt()
27
+ ) {
28
+ super(StoreStateManagerService.init(options))
29
+ this.init(options)
30
+ }
31
+
32
+ private static init(options: StateStorageOptions): any {
33
+
34
+ const model = options?.model
35
+ return (model) ? (model as () => any)() : {}
36
+
37
+ }
38
+
39
+ init(options?: StateStorageOptions) {
40
+
41
+ this.settings = options
42
+
43
+ this.localStorageManagerService.createStore({
44
+ name: this.settings?.store,
45
+ data: this.settings?.model(),
46
+ options: this.settings?.options,
47
+ })
48
+
49
+ this.localStorageManagerService.store$(this.settings?.store)
50
+ .subscribe(data => this.setState(data))
51
+
52
+ }
53
+
54
+ restoreState(): Subscription {
55
+
56
+ return this.localStorageManagerService.store$(this.settings?.store)
57
+ .pipe(take(1))
58
+ .subscribe(data => {
59
+ this.updateData(data)
60
+ })
61
+
62
+ }
63
+
64
+ updateState(state: any) {
65
+ if(this.isRestoring) return
66
+ this.localStorageManagerService.updateStore({
67
+ name: this.settings?.store,
68
+ data: state
69
+ })
70
+
71
+ }
72
+
73
+ // Selectors
74
+ readonly data$ = this.select((state: any) => {
75
+ const model = this.options.model;
76
+ return (typeof model === 'function' && !model.prototype) ? model(state) : state
77
+ });
78
+
79
+ // Updaters
80
+ readonly updateData = this.updater((state, data: any) => {
81
+
82
+ const key = Object.keys(data)[0]
83
+ const hasKey = Object.keys(state).includes(key)
84
+
85
+ if (!hasKey) return state
86
+ const newState = { ...state, [key]: data[key] }
87
+ this.updateState(newState)
88
+ return { ...state, ...newState }
89
+
90
+ })
91
+
92
+ createRecord(key: string, value: any) {
93
+ try {
94
+ this.updateData({ [key]: value })
95
+ this.operationResult.next(StateOperationResult.adapt({
96
+ success: true,
97
+ operation: 'CREATE',
98
+ key,
99
+ value,
100
+ }))
101
+ } catch (error: any) {
102
+ this.operationResult.next(StateOperationResult.adapt({
103
+ success: false,
104
+ operation: 'CREATE',
105
+ key,
106
+ error: error?.message || 'Create failed',
107
+ }))
108
+ }
109
+ }
110
+
111
+ updateRecord(key: string, value: any) {
112
+ try {
113
+ this.updateData({ [key]: value })
114
+ this.operationResult.next(StateOperationResult.adapt({
115
+ success: true,
116
+ operation: 'UPDATE',
117
+ key,
118
+ value,
119
+ }))
120
+ } catch (error: any) {
121
+ this.operationResult.next(StateOperationResult.adapt({
122
+ success: false,
123
+ operation: 'UPDATE',
124
+ key,
125
+ error: error?.message || 'Update failed',
126
+ }))
127
+ }
128
+ }
129
+
130
+ deleteRecord(key: string) {
131
+ try {
132
+ const currentState = this.get()
133
+ if (currentState && key in currentState) {
134
+ const { [key]: removed, ...rest } = currentState as any
135
+ this.setState(rest as T)
136
+ this.updateState(rest)
137
+ }
138
+ this.operationResult.next(StateOperationResult.adapt({
139
+ success: true,
140
+ operation: 'DELETE',
141
+ key,
142
+ }))
143
+ } catch (error: any) {
144
+ this.operationResult.next(StateOperationResult.adapt({
145
+ success: false,
146
+ operation: 'DELETE',
147
+ key,
148
+ error: error?.message || 'Delete failed',
149
+ }))
150
+ }
151
+ }
152
+
153
+ }
@@ -0,0 +1,25 @@
1
+ import { TestBed } from '@angular/core/testing';
2
+ import { APP_ID } from '@angular/core';
3
+ import { AppService } from './app.service';
4
+
5
+ describe('AppService', () => {
6
+ let service: AppService;
7
+
8
+ beforeEach(() => {
9
+ TestBed.configureTestingModule({
10
+ providers: [
11
+ AppService,
12
+ { provide: APP_ID, useValue: 'test-app-id' }
13
+ ]
14
+ });
15
+ service = TestBed.inject(AppService);
16
+ });
17
+
18
+ it('should be created', () => {
19
+ expect(service).toBeTruthy();
20
+ });
21
+
22
+ it('should have appID assigned from APP_ID', () => {
23
+ expect(service.appID).toBe('test-app-id');
24
+ });
25
+ });
@@ -0,0 +1,21 @@
1
+ import { APP_ID, Inject, Injectable } from '@angular/core';
2
+
3
+ // Must provide a value for APP_ID in AppModule->Providers
4
+ // providers: [
5
+ // {
6
+ // provide: APP_ID,
7
+ // useValue: "056991ac-3537-43ab-b5b9-83edf6554eff",
8
+ // },
9
+
10
+ @Injectable({
11
+ providedIn: 'root'
12
+ })
13
+ export class AppService {
14
+
15
+ appID: string
16
+
17
+ constructor(@Inject(APP_ID) private id: string) {
18
+ this.appID = this.id
19
+ }
20
+
21
+ }
@@ -0,0 +1,79 @@
1
+ # Generate a Key Pair on Mac
2
+
3
+ To generate a key pair on a Mac, you can use the built-in openssl command-line tool. This tool is available on most Unix-like operating systems, including macOS. Below are the steps to generate an RSA key pair using openssl:
4
+
5
+ ### Step 1: Open Terminal
6
+
7
+ Open the Terminal application on your Mac. You can find it in the Utilities folder within the Applications folder, or you can use Spotlight to search for "Terminal".
8
+
9
+ ### Step 2: Generate the Private Key
10
+
11
+ Run the following command to generate a 2048-bit RSA private key:
12
+
13
+ ```sh
14
+ openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048
15
+ ```
16
+
17
+ ### Step 3: Generate the Public Key
18
+
19
+ Run the following command to extract the public key from the private key:
20
+
21
+ ```sh
22
+ openssl rsa -pubout -in private_key.pem -out public_key.pem
23
+ ```
24
+
25
+ ### Step 4: View the Keys (Optional)
26
+
27
+ You can view the contents of the generated key files using the cat command:
28
+
29
+ To view the private key:
30
+
31
+ ```sh
32
+ cat private_key.pem
33
+ ```
34
+
35
+ To view the public key:
36
+
37
+ ```sh
38
+ cat public_key.pem
39
+ ```
40
+
41
+ -----BEGIN PRIVATE KEY-----
42
+ MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC2mvvEWn/aMikX
43
+ A8+/Po2R4+PHwC9wxa10fr75sR9Wbuq8NY/yY174JHR4rRmyV8EnKEfyoTzfsvTO
44
+ 858lPD4DuUKESh+NDKiLNUdY4isrR060rxzJn+30OzKkZIHWhIZY3jqEw7C+glMV
45
+ Fmphtci4WQqPYwi1rX3YswE0MJhF/a+HCZ5erDmET/PFZJtTSsx47zbeck2Mnfta
46
+ KpF/wS9jYtpUFrf/vSuTo4Q0libauiFwPgCeYTGEBGGbKVnbAbM71qqmjOxT0ItW
47
+ TbsrGWG54G6vTxg/mnzxpJfMNlVOogv9u2YcG0lEQ/xo9P88WBWPdE0TK5V37GOq
48
+ 3twvUruHAgMBAAECggEAThZZqr6OpQbFRofFO8GqtaQQAJghUWbfRY176ngBcCtP
49
+ azu2ek9fSdsBCafwcLERMscJeWrVBs5W3PcWa8xmsp3zIXI3KtCqdJlMkOhq0H+W
50
+ WzL1Kw2eqs3z2pP2Z/9VGkSyHps2hklh8QccZ/teQeMl3mpZy6NMyTHHRoOvYmIg
51
+ TBhDPL+WWJXPVlgKle3RRDVeD1JVo5XmsOW4I8FRyp5f7BZE1IwPTNDUATAtwC8u
52
+ dHHo1rTkWIk2gxVPRcH61w8ceij4VPv7Sk7iFobcLkscTwbTzondU3YssSYEmayW
53
+ 5+qhIbHXWnn4FVMPVrDUORVAW8naCrVVBCYGWFDnQQKBgQDcsQ07EaYWDnRQ0xcq
54
+ 5hTQUnd137CKNQcLXJ8T+ghuj5v0ZhPpu3YZDjm+rX52mrFN4+kEMKkCjFJAeKaI
55
+ omqKb/i57t7tcQKsbGdtUyRt7PirnHed7dlEo0ElwBWr58hTcUuTnoIiQM3sgmpn
56
+ VrlntlWpVWr0hoJMxRS6Pb6xQQKBgQDT0gVdNm0+ZrBKDWWKkeaQHHyxdva8Dt6C
57
+ NEjP+uU16hF6CsPGCvDuNA9PMIqGHR914aeEwYWtma6/zI1T74jhlUiyAHkpW373
58
+ +xNWmruq8k3UlVBK8JIjH/LOXNV5Gw85yLJwokhl6A8m4DSMkDJZTLVXfYQ24su1
59
+ TMDz0yhyxwKBgA/jNx6fgKNp2vnOmIZgFfOBXFRCDEWG18D7pAAeKek7sXCAwMI8
60
+ 2p2nJoURnF8Rd94xoB7LGf+y9mDpzqNbfewFb5SDG81gK18aVr/KEn9PZf+Evh/C
61
+ dbe5QQFkuKqtfwBy0YwJBzlMDQcPxHU4CxTqTXRpT8/Wtx6ruXhG5amBAoGANXmC
62
+ 8ypHYAaKoNdK+DWnMGCQtjijR4y1bceHTkI31WmXKelHzVp7wpcP+lz1y6/Ufm0O
63
+ XnyAo/f1XuRkFXmWY+TNKmrmK6O2pSIUmruLfzeWoIFleNXM/uMU6DYVinJjYKIj
64
+ Mj416swv7w+RFJ9epp6v9Ttxwm11IfsThzqarocCgYAPbtk6kqJwxq5I49NoC3Nm
65
+ WozUs31UywHJLS4JeudityA7ZTD8kULyhCig+Mrupiu3qLAmFtJzYFFIoP4msIOC
66
+ xMQ2qHvUyX9BwpONDwZ6fjwQYa8/kt22MelVICKqDpyYlOipV/YRKMNXsaQJd6xB
67
+ pkaCFGUW4xoRwTR/So/RnQ==
68
+ -----END PRIVATE KEY-----
69
+ (base) mike.boni@Mikes-MacBook-Pro ~ % cat public_key.pem
70
+
71
+ -----BEGIN PUBLIC KEY-----
72
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtpr7xFp/2jIpFwPPvz6N
73
+ kePjx8AvcMWtdH6++bEfVm7qvDWP8mNe+CR0eK0ZslfBJyhH8qE837L0zvOfJTw+
74
+ A7lChEofjQyoizVHWOIrK0dOtK8cyZ/t9DsypGSB1oSGWN46hMOwvoJTFRZqYbXI
75
+ uFkKj2MIta192LMBNDCYRf2vhwmeXqw5hE/zxWSbU0rMeO823nJNjJ37WiqRf8Ev
76
+ Y2LaVBa3/70rk6OENJYm2rohcD4AnmExhARhmylZ2wGzO9aqpozsU9CLVk27Kxlh
77
+ ueBur08YP5p88aSXzDZVTqIL/btmHBtJREP8aPT/PFgVj3RNEyuVd+xjqt7cL1K7
78
+ hwIDAQAB
79
+ -----END PUBLIC KEY-----
@@ -0,0 +1,282 @@
1
+ import { Injectable } from '@angular/core';
2
+
3
+ import { BehaviorSubject, EMPTY, Observable, from, of } from 'rxjs';
4
+ import { map, catchError } from 'rxjs/operators';
5
+
6
+ @Injectable({
7
+ providedIn: 'root'
8
+ })
9
+ export class AsymmetricalEncryptionService {
10
+
11
+ constructor() {}
12
+
13
+ generateKeyPair(modulusLength = 2048): Observable<CryptoKeyPair> {
14
+
15
+ // modulusLength - 1024, 2048, 4096
16
+ // hash - SHA-256
17
+
18
+ return from(crypto.subtle.generateKey(
19
+ {
20
+ name: "RSA-OAEP",
21
+ modulusLength,
22
+ publicExponent: new Uint8Array([1, 0, 1]), // 65537
23
+ hash: { name: "SHA-256" }
24
+ },
25
+ true, // Extractable keys
26
+ ["encrypt", "decrypt"]
27
+ ))
28
+
29
+ }
30
+
31
+ encryptData(publicKey: CryptoKey, data: string) {
32
+
33
+ const encodedData = new TextEncoder().encode(data)
34
+
35
+ return from(crypto.subtle.encrypt(
36
+ {
37
+ name: "RSA-OAEP"
38
+ },
39
+ publicKey,
40
+ encodedData
41
+ )).pipe(
42
+ map(enc => this.arrayBufferToBase64(enc))
43
+ )
44
+
45
+ }
46
+
47
+ decryptData(privateKey: CryptoKey, encryptedData: string) {
48
+
49
+ const encStr = this.base64ToArrayBuffer(encryptedData)
50
+
51
+ return from(crypto.subtle.decrypt(
52
+ {
53
+ name: "RSA-OAEP"
54
+ },
55
+ privateKey,
56
+ encStr
57
+ ).then(decryptedData => {
58
+ return new TextDecoder().decode(decryptedData)
59
+ }))
60
+
61
+ }
62
+
63
+ pemToArrayBuffer(pem: string): ArrayBuffer {
64
+
65
+ const b64 = pem.replace(/(-----BEGIN (RSA )?(PRIVATE|PUBLIC) KEY-----|-----END (RSA )?(PRIVATE|PUBLIC) KEY-----|\n)/g, '')
66
+ const binaryString = atob(b64)
67
+ const len = binaryString.length
68
+ const buffer = new ArrayBuffer(len)
69
+ const view = new Uint8Array(buffer)
70
+
71
+ for (let i = 0; i < len; i++) {
72
+ view[i] = binaryString.charCodeAt(i)
73
+ }
74
+
75
+ return buffer
76
+
77
+ }
78
+
79
+ base64ToArrayBuffer(base64: string): ArrayBuffer {
80
+
81
+ const binaryString = atob(base64);
82
+ const len = binaryString.length;
83
+ const buffer = new ArrayBuffer(len);
84
+ const view = new Uint8Array(buffer);
85
+
86
+ for (let i = 0; i < len; i++) {
87
+ view[i] = binaryString.charCodeAt(i);
88
+ }
89
+
90
+ return buffer;
91
+ }
92
+
93
+ arrayBufferToBase64(buffer: ArrayBuffer): string {
94
+
95
+ let binary = '';
96
+ const bytes = new Uint8Array(buffer);
97
+ const len = bytes.byteLength;
98
+
99
+ for (let i = 0; i < len; i++) {
100
+ binary += String.fromCharCode(bytes[i]);
101
+ }
102
+
103
+ return window.btoa(binary)
104
+
105
+ }
106
+
107
+ base64ToPEM(base64Key: string, publicKey = true) {
108
+
109
+ const keyType = (publicKey) ? 'PUBLIC' : 'PRIVATE'
110
+
111
+ const header = `-----BEGIN ${keyType} KEY-----\n`
112
+ const footer = `\n-----END ${keyType} KEY-----`
113
+
114
+ const keyBody = base64Key.match(/.{1,64}/g)?.join("\n") || ""
115
+
116
+ return header + keyBody + footer
117
+
118
+ }
119
+
120
+ pemToCryptoKey(
121
+ pem: string,
122
+ algorithm: RsaHashedKeyGenParams,
123
+ extractable: boolean,
124
+ keyUsages: KeyUsage[],
125
+ format: any = "pkcs8" //"raw" | "pkcs8" | "spki"
126
+ ) {
127
+
128
+ const buffer = this.pemToArrayBuffer(pem);
129
+
130
+ console.log('buffer found ', buffer);
131
+
132
+ return from(crypto.subtle.importKey(
133
+ format,
134
+ buffer,
135
+ algorithm,
136
+ extractable,
137
+ keyUsages
138
+ ))
139
+
140
+ }
141
+
142
+ // TESTING
143
+
144
+ testGenerateKeys(): Observable<string> {
145
+ const testSequence: BehaviorSubject<string> = new BehaviorSubject<string>("");
146
+ const testSequence$: Observable<string> = testSequence.asObservable();
147
+ testSequence.next("Test Generating Keys");
148
+
149
+ // GENERATE KEYS
150
+ this.generateKeyPair().subscribe((data) => {
151
+
152
+ console.log("GEN-GENERATED KEYS: ", data)
153
+
154
+ crypto.subtle.exportKey('spki', data.publicKey)
155
+ .then(key => {
156
+ const publicKeyBase64 = this.arrayBufferToBase64(key);
157
+ console.log("GEN-EXPORT PUBLIC KEY: ", this.base64ToPEM(publicKeyBase64, true));
158
+ })
159
+
160
+ crypto.subtle.exportKey('pkcs8', data.privateKey)
161
+ .then(key => {
162
+ const privateKeyBase64 = this.arrayBufferToBase64(key);
163
+ console.log("GEN-EXPORT PRIVATE KEY: ", this.base64ToPEM(privateKeyBase64, false));
164
+ });
165
+
166
+ // TEST WITH GENERATED KEYS
167
+ this.encryptData(data.publicKey, "Sample Data here - Mike Bonifacio")
168
+ .subscribe((enc) => {
169
+
170
+ console.log("GEN-ENCRYPT==>: ", enc)
171
+
172
+ this.decryptData(data.privateKey, enc).subscribe((dec) => {
173
+ testSequence.next('Test Passed');
174
+ testSequence.complete();
175
+ })
176
+
177
+ })
178
+
179
+ })
180
+ return testSequence$;
181
+
182
+ }
183
+
184
+ testDecryptionWithKeys(): Observable<string> {
185
+ const testSequence: BehaviorSubject<string> = new BehaviorSubject<string>("");
186
+ const testSequence$: Observable<string> = testSequence.asObservable();
187
+ testSequence.next("Test Generating Keys");
188
+
189
+ const privateKey = `-----BEGIN PRIVATE KEY-----
190
+ MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDKVBkCWNb9eHVF
191
+ twAA5mdAyvXFix3WavdrsoYRkvtCl8ogDBQf8f6N0bRkDF1zcVHRrNAEyozXDtuD
192
+ kFgSiivBFREI7fiS3sOvduq6FaGXzX0IY6oaVMu8oOPgDvC0yvoohR+0Qxq2d6lP
193
+ SPyHeKQaxP4KxzCJJzB1XAcbd2eFzUUDv25mNlwdVkmW8FI/sAxnJLgPTW78dzfX
194
+ Ddfk+nxdIqxVKSLATnL0kMN7aGJx24UozioAIpzvvvF5/+7HTd1gi6NeCqrAYr3g
195
+ iP364AE26CFwFvHnafO9uNQhlQ+uiNnOoInXByfFGVP+RidSpfLzaxDjs6RDwpol
196
+ h098btONAgMBAAECggEAAVhHM2OD5IkUtuowwcKNaCTKGmrClRE3gMuzJeBsSJEy
197
+ uAReUFILZylcnhegDytSti2vDA9T7xqtO6CU0p3V8LpU89JMOPRb/deirI4UXSpx
198
+ xbNyjirOO6bnrNlOWfKexdQQsikYPzF2iM1Scpr1u9ZDCHZOl1ZYSrkve5My4coP
199
+ 3Gx6tTBqL0jQBfcpf4ES8BH3JSawR/MgqzDS74+bI2VH+kvuPAC1L4fBgaV3VUv0
200
+ nFzim5A3s5VaXPgJbEIghP9BkYGFkeT9ma3nliEZWc96AzsmowFn1ayCvrNVPo9R
201
+ ECD2NnttBiCJZt3H93sR9+OTeA8Bls+aZGlKd5mLAQKBgQDpf8nIYUm/Zmls7/lQ
202
+ QBUSGHEYrbjNsEejQsPgNDtg2EVSxdUkvTn7Wb+HExTk09Z5bNvhaO2532/FH9y8
203
+ ahSXafiMXpfR2olwXdOB9yXXl4F5C0LGnmzGim4OSeWzAX0JCL470KaS0QN3EmoG
204
+ 9F0YCfMnZXNTweSSx4xvlO6ggQKBgQDd01uIolm7z1DIWCwNERAXP2GDwcvxyzYK
205
+ YqJfKDeHt2t6yIzZMMotnPDy+OlcdGspIIHkB5a+SZN5Nt7DUKg/MnyOZ3KbVq41
206
+ k7dR4Ka3LRnGkesy7lSr7ef1rfquyR75OXJQcPWvkFcLu0TMiQhvptatZ8VN+F4n
207
+ fDQELRotDQKBgQCgN+AUT7VT0QjcCBnRV/ddUEoiPenFsYSmYMSYzh5ESIHg1wB2
208
+ 0iS79Iw4Of6nOTg8X1bM57vfQ5Kk90T2P+/bKYqzfqC8DTErWiYsUpKzyTC9Bt4N
209
+ /Vz0Kr5zrX8ggg/yp/4oevYhXav8AzWfigNq4EDpMnKc8TlPAf+5/L50gQKBgQC2
210
+ mLPhPhr1gUszD3l7bA89w7uGlLFHoQoj9FtKTzWervp3QLzIT+QtNeIVb5XQuDg5
211
+ y3uAdEq+6pvNjMBEMJG+K9Xh9v+dJPYUPjsJ2A4D/MkZ7qWX8B2cxSJK1uLim8W2
212
+ S3ZxBvsGgJ9WldmlMCvUlJZkeWYtr4P5psC+q02/xQKBgQCDII/jcV2+lRM2iNTe
213
+ vBijZSaNMEWOK/Y+/HFK8GYKXnB+xNWhrm8rKgWGzpDJAUPMh9Tt+leW9LKEBuzF
214
+ Y1bGblmGm1zsPWpIx05Fdtv9eOJmFnXbGzIsYyhadZnPcQOWhqxtpVxSuul0Jc7Q
215
+ XNq4qPaPXhbQAshgtyBt75DMkw==
216
+ -----END PRIVATE KEY-----`
217
+
218
+ const pubKey = `-----BEGIN PUBLIC KEY-----
219
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylQZAljW/Xh1RbcAAOZn
220
+ QMr1xYsd1mr3a7KGEZL7QpfKIAwUH/H+jdG0ZAxdc3FR0azQBMqM1w7bg5BYEoor
221
+ wRURCO34kt7Dr3bquhWhl819CGOqGlTLvKDj4A7wtMr6KIUftEMatnepT0j8h3ik
222
+ GsT+CscwiScwdVwHG3dnhc1FA79uZjZcHVZJlvBSP7AMZyS4D01u/Hc31w3X5Pp8
223
+ XSKsVSkiwE5y9JDDe2hicduFKM4qACKc777xef/ux03dYIujXgqqwGK94Ij9+uAB
224
+ NughcBbx52nzvbjUIZUProjZzqCJ1wcnxRlT/kYnUqXy82sQ47OkQ8KaJYdPfG7T
225
+ jQIDAQAB
226
+ -----END PUBLIC KEY-----`
227
+
228
+ const algorithm: RsaHashedKeyGenParams = {
229
+ name: "RSA-OAEP",
230
+ modulusLength: 2048,
231
+ publicExponent: new Uint8Array([1, 0, 1]),
232
+ hash: "SHA-256"
233
+ };
234
+
235
+ // ENCRYPT
236
+ this.pemToCryptoKey(
237
+ pubKey,
238
+ algorithm,
239
+ true,
240
+ ["encrypt"],
241
+ "spki"
242
+ ).subscribe((keyPublic) => {
243
+
244
+ // console.log("PUBLIC KEY: ", keyPublic)
245
+
246
+ this.encryptData(keyPublic, "Sample Data here - Mike Bonifacio")
247
+ .subscribe((str) => {
248
+ console.log("ENCRYPTED STRING: ", str);
249
+ testSequence.next('encrypted string success');
250
+ })
251
+
252
+ })
253
+
254
+ const enc = "r7UOuEGBZ6jbVTOIBuv9jFOEtRiedmS27hfW40k7XKCTsQ5VhWup0qu2BA2ANZaGKii/uehJ/RSPiyfGbJ6leJrat0mA1hPqH/XodaBzLMDigvdYM1NSXFZMDa40OpLUIXbPlAvybjcGu7Bal+LMA8htHrFu/OmM/fHI66xOzzpuXSYx0OkWjtY81rUQ1FFkvrkx2jGFPZ0p+Nw/v3Q4cJnet6V63vCueFlD749VMcVXo7pvz4AIPpB+IOy3kbxaYTPakLVioJERU6GFMXWkECuRvohhS9CETcORZtRVRkvhcHk3lxgIhfqojUKYgD6K5dDELDPsWIS+iTG1XIQIlg==";
255
+
256
+ // DECRYPTION
257
+ this.pemToCryptoKey(
258
+ privateKey,
259
+ algorithm,
260
+ false,
261
+ ["decrypt"],
262
+ "pkcs8"
263
+ ).subscribe((key) => {
264
+
265
+ // console.log("DECRYPT ===", key)
266
+
267
+ this.decryptData(key, enc)
268
+ .pipe(
269
+ catchError(err => {
270
+ console.log("ERROR: ", err);
271
+ return EMPTY
272
+ })
273
+ ).subscribe((str) => {
274
+ console.log("DECRYPTED STRING: ", str);
275
+ testSequence.next('decrypted string success');
276
+ })
277
+
278
+ })
279
+
280
+ return testSequence$;
281
+ };
282
+ }
@@ -0,0 +1,39 @@
1
+ import { Injectable } from '@angular/core';
2
+
3
+ @Injectable({
4
+ providedIn: 'root'
5
+ })
6
+ export class EncryptionTestService {
7
+
8
+ constructor() { }
9
+
10
+ private isBase64(str: string): boolean {
11
+ const base64Pattern = /^(?:[A-Z0-9+/]{4})*(?:[A-Z0-9+/]{2}==|[A-Z0-9+/]{3}=)?$/i;
12
+ return base64Pattern.test(str);
13
+ }
14
+
15
+ private isHexadecimal(str: string): boolean {
16
+ const hexPattern = /^[0-9a-fA-F]+$/;
17
+ return hexPattern.test(str) && (str.length % 2 === 0);
18
+ }
19
+
20
+ private hasHighEntropy(str: string): boolean {
21
+ const uniqueChars = new Set(str).size;
22
+ return uniqueChars > str.length * 0.6;
23
+ }
24
+
25
+ isEncrypted(str: string): boolean {
26
+
27
+ if (typeof str !== 'string') {
28
+ return false;
29
+ }
30
+
31
+ if (this.isBase64(str) || this.isHexadecimal(str)) {
32
+ return true;
33
+ }
34
+
35
+ return this.hasHighEntropy(str);
36
+
37
+ }
38
+
39
+ }
@@ -0,0 +1,5 @@
1
+ export * from "./asymmetrical-encryption.service";
2
+ export * from './symmetrical-encryption.service';
3
+
4
+ export * from './random';
5
+
@@ -0,0 +1,81 @@
1
+ export const Random = () => {
2
+ const typedArray = new Uint8Array(1)
3
+ const randomValue = crypto.getRandomValues(typedArray)[0]
4
+ const randomFloat = randomValue / Math.pow(2, 8)
5
+ return randomFloat
6
+ }
7
+
8
+ export const RandomNumber = (min: number, max: number) => {
9
+ return Math.floor(Random() * max) + min
10
+ }
11
+
12
+ export const RandomNumbers = (min: number, max: number, length: number) => {
13
+ const numbers: number[] = []
14
+ for (let i = 0; i < length; i++) numbers.push(Math.floor(Random() * max) + min)
15
+ return numbers
16
+ }
17
+
18
+ export const RandomNumbersUnique = (min: number, max: number, length: number) => {
19
+ let count = 0;
20
+
21
+ // Adjust the length if it exceeds the number of unique numbers possible in the range
22
+ if (length > (max - min + 1)) {
23
+ console.error('error encountered');
24
+ length = max - min + 1;
25
+ }
26
+
27
+ console.log('length', length);
28
+ const numbers: number[] = [];
29
+ const maxAttempts = length * 100 ; // Safeguard to prevent infinite loops
30
+
31
+ while (numbers.length < length && count < maxAttempts) {
32
+
33
+ const num = Math.floor(Random() * max) + min;
34
+
35
+ if (!numbers.includes(num)) {
36
+ numbers.push(num);
37
+ }
38
+ }
39
+
40
+ if (count >= maxAttempts) {
41
+ throw new Error('Maximum attempts exceeded while generating unique numbers');
42
+ }
43
+
44
+ return numbers;
45
+ };
46
+
47
+ export const RandomStr = () => {
48
+
49
+ const typedArray = new Uint8Array(8)
50
+ const array = new Uint32Array(1)
51
+ crypto.getRandomValues(array)
52
+ return array[0].toString(36)
53
+
54
+ }
55
+
56
+ export const RandomSignature = () => {
57
+
58
+ const typedArray = new Uint8Array(8)
59
+ const array = new Uint32Array(1)
60
+ crypto.getRandomValues(array)
61
+ return array[0]
62
+
63
+ }
64
+
65
+ export const UUID = () => {
66
+ return self.crypto.randomUUID()
67
+ }
68
+
69
+ /**
70
+ * Generate a UUID string (legacy format)
71
+ */
72
+ export const UUID_STR = (): string => {
73
+ const s4 = () => {
74
+ return Math.floor((1 + Random()) * 0x10000)
75
+ .toString(16)
76
+ .substring(1);
77
+ };
78
+ return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
79
+ };
80
+
81
+