http-request-manager 15.0.24 → 15.0.26

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 (232) hide show
  1. package/ng-package.json +8 -0
  2. package/package.json +1 -14
  3. package/src/lib/http-request-manager.module.ts +101 -0
  4. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.html +3 -0
  5. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.scss +0 -0
  6. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.ts +105 -0
  7. package/src/lib/http-request-services-demo/http-request-services-demo.component.html +64 -0
  8. package/src/lib/http-request-services-demo/http-request-services-demo.component.scss +6 -0
  9. package/src/lib/http-request-services-demo/http-request-services-demo.component.ts +34 -0
  10. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.html +195 -0
  11. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.scss +17 -0
  12. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.ts +205 -0
  13. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.html +59 -0
  14. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.scss +60 -0
  15. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.ts +71 -0
  16. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.ts +28 -0
  17. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.html +10 -0
  18. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.scss +29 -0
  19. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.ts +99 -0
  20. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.ts +22 -0
  21. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.html +8 -0
  22. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.scss +19 -0
  23. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.ts +25 -0
  24. package/src/lib/http-request-services-demo/request-manager-demo/models/app-session.model.ts +30 -0
  25. package/src/lib/http-request-services-demo/request-manager-demo/models/app.model.ts +19 -0
  26. package/src/lib/http-request-services-demo/request-manager-demo/models/get-sample.model.ts +25 -0
  27. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.ts +19 -0
  28. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-details.ts +24 -0
  29. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.ts +30 -0
  30. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client.model.ts +49 -0
  31. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.ts +33 -0
  32. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.html +336 -0
  33. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.scss +24 -0
  34. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.ts +403 -0
  35. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.html +328 -0
  36. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.scss +24 -0
  37. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.ts +347 -0
  38. package/src/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.ts +88 -0
  39. package/src/lib/index.ts +3 -0
  40. package/src/lib/interceptors/credentials.interceptor.ts +18 -0
  41. package/{lib/interceptors/index.d.ts → src/lib/interceptors/index.ts} +2 -0
  42. package/src/lib/interceptors/models/error-settings.model.ts +22 -0
  43. package/src/lib/interceptors/proxy-debugger.interceptor.ts +46 -0
  44. package/src/lib/interceptors/request-error.interceptor.ts +65 -0
  45. package/src/lib/interceptors/request-header.interceptor.ts +58 -0
  46. package/src/lib/models/config-http-options.model.ts +42 -0
  47. package/src/lib/models/config-local-storage-options.model.ts +27 -0
  48. package/src/lib/models/config-options.model.ts +27 -0
  49. package/{lib/models/config-token.model.d.ts → src/lib/models/config-token.model.ts} +2 -1
  50. package/src/lib/models/data-type.enum.ts +5 -0
  51. package/src/lib/models/database-storage.model.ts +24 -0
  52. package/src/lib/models/index.ts +9 -0
  53. package/src/lib/models/retry-options.model.ts +22 -0
  54. package/src/lib/services/database-manager-services/database.manager.service.ts +193 -0
  55. package/src/lib/services/database-manager-services/db.storage.service.ts +191 -0
  56. package/{lib/services/database-manager-services/index.d.ts → src/lib/services/database-manager-services/index.ts} +1 -0
  57. package/src/lib/services/database-manager-services/models/table-schema.ts +35 -0
  58. package/{lib/services/index.d.ts → src/lib/services/index.ts} +4 -0
  59. package/src/lib/services/local-storage-manager-service/index.ts +2 -0
  60. package/src/lib/services/local-storage-manager-service/local-storage-manager.service.spec.ts +71 -0
  61. package/src/lib/services/local-storage-manager-service/local-storage-manager.service.ts +421 -0
  62. package/src/lib/services/local-storage-manager-service/models/global-store-options.model.ts +30 -0
  63. package/{lib/services/local-storage-manager-service/models/index.d.ts → src/lib/services/local-storage-manager-service/models/index.ts} +2 -1
  64. package/src/lib/services/local-storage-manager-service/models/setting-options.model.ts +30 -0
  65. package/src/lib/services/local-storage-manager-service/models/storage-data.model.ts +24 -0
  66. package/src/lib/services/local-storage-manager-service/models/storage-option.model.ts +29 -0
  67. package/src/lib/services/local-storage-manager-service/models/storage-type.enum.ts +5 -0
  68. package/src/lib/services/request-manager-services/README.md +268 -0
  69. package/src/lib/services/request-manager-services/http-manager.service.spec.ts +230 -0
  70. package/src/lib/services/request-manager-services/http-manager.service.ts +274 -0
  71. package/{lib/services/request-manager-services/index.d.ts → src/lib/services/request-manager-services/index.ts} +2 -0
  72. package/src/lib/services/request-manager-services/request.service.ts +261 -0
  73. package/src/lib/services/request-manager-services/rxjs-operators/countdown.ts +17 -0
  74. package/src/lib/services/request-manager-services/rxjs-operators/delay-retry.ts +16 -0
  75. package/src/lib/services/request-manager-services/rxjs-operators/request-polling.ts +21 -0
  76. package/src/lib/services/request-manager-services/rxjs-operators/request-streaming.ts +32 -0
  77. package/src/lib/services/request-manager-state-service/http-manager-state.store.ts +402 -0
  78. package/{lib/services/request-manager-state-service/index.d.ts → src/lib/services/request-manager-state-service/index.ts} +1 -0
  79. package/src/lib/services/request-manager-state-service/models/api-request.model.ts +50 -0
  80. package/{lib/services/request-manager-state-service/models/index.d.ts → src/lib/services/request-manager-state-service/models/index.ts} +1 -0
  81. package/src/lib/services/request-manager-state-service/models/request-options.model.ts +22 -0
  82. package/src/lib/services/utils/app.service.spec.ts +25 -0
  83. package/src/lib/services/utils/app.service.ts +21 -0
  84. package/src/lib/services/utils/encryption/README.md +79 -0
  85. package/src/lib/services/utils/encryption/asymmetrical-encryption.service.ts +282 -0
  86. package/src/lib/services/utils/encryption/encryption-test.service.ts +39 -0
  87. package/{lib/services/utils/encryption/index.d.ts → src/lib/services/utils/encryption/index.ts} +2 -0
  88. package/src/lib/services/utils/encryption/random.ts +69 -0
  89. package/src/lib/services/utils/encryption/symmetrical-encryption.service.ts +93 -0
  90. package/src/lib/services/utils/headers.service.spec.ts +80 -0
  91. package/src/lib/services/utils/headers.service.ts +18 -0
  92. package/{lib/services/utils/index.d.ts → src/lib/services/utils/index.ts} +2 -0
  93. package/src/lib/services/utils/object-merger.service.spec.ts +16 -0
  94. package/src/lib/services/utils/object-merger.service.ts +60 -0
  95. package/src/lib/services/utils/path-query.service.spec.ts +117 -0
  96. package/src/lib/services/utils/path-query.service.ts +69 -0
  97. package/src/lib/services/utils/utils.service.spec.ts +164 -0
  98. package/src/lib/services/utils/utils.service.ts +192 -0
  99. package/{public-api.d.ts → src/public-api.ts} +7 -0
  100. package/tsconfig.lib.json +32 -0
  101. package/tsconfig.lib.prod.json +10 -0
  102. package/tsconfig.spec.json +14 -0
  103. package/esm2022/http-request-manager.mjs +0 -5
  104. package/esm2022/lib/http-request-manager.module.mjs +0 -146
  105. package/esm2022/lib/http-request-services-demo/database-data-demo/database-data-demo.component.mjs +0 -71
  106. package/esm2022/lib/http-request-services-demo/http-request-services-demo.component.mjs +0 -41
  107. package/esm2022/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.mjs +0 -173
  108. package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.mjs +0 -80
  109. package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.mjs +0 -42
  110. package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.mjs +0 -88
  111. package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.mjs +0 -11
  112. package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.mjs +0 -29
  113. package/esm2022/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.mjs +0 -9
  114. package/esm2022/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.mjs +0 -12
  115. package/esm2022/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.mjs +0 -14
  116. package/esm2022/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.mjs +0 -315
  117. package/esm2022/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.mjs +0 -270
  118. package/esm2022/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.mjs +0 -67
  119. package/esm2022/lib/index.mjs +0 -4
  120. package/esm2022/lib/interceptors/credentials.interceptor.mjs +0 -14
  121. package/esm2022/lib/interceptors/index.mjs +0 -5
  122. package/esm2022/lib/interceptors/models/error-settings.model.mjs +0 -10
  123. package/esm2022/lib/interceptors/proxy-debugger.interceptor.mjs +0 -47
  124. package/esm2022/lib/interceptors/request-error.interceptor.mjs +0 -49
  125. package/esm2022/lib/interceptors/request-header.interceptor.mjs +0 -41
  126. package/esm2022/lib/models/config-http-options.model.mjs +0 -18
  127. package/esm2022/lib/models/config-local-storage-options.model.mjs +0 -12
  128. package/esm2022/lib/models/config-options.model.mjs +0 -12
  129. package/esm2022/lib/models/config-token.model.mjs +0 -8
  130. package/esm2022/lib/models/data-type.enum.mjs +0 -7
  131. package/esm2022/lib/models/database-storage.model.mjs +0 -10
  132. package/esm2022/lib/models/index.mjs +0 -7
  133. package/esm2022/lib/models/retry-options.model.mjs +0 -10
  134. package/esm2022/lib/services/database-manager-services/database.manager.service.mjs +0 -119
  135. package/esm2022/lib/services/database-manager-services/db.storage.service.mjs +0 -143
  136. package/esm2022/lib/services/database-manager-services/index.mjs +0 -4
  137. package/esm2022/lib/services/database-manager-services/models/table-schema.mjs +0 -20
  138. package/esm2022/lib/services/index.mjs +0 -6
  139. package/esm2022/lib/services/local-storage-manager-service/index.mjs +0 -3
  140. package/esm2022/lib/services/local-storage-manager-service/local-storage-manager.service.mjs +0 -302
  141. package/esm2022/lib/services/local-storage-manager-service/models/global-store-options.model.mjs +0 -13
  142. package/esm2022/lib/services/local-storage-manager-service/models/index.mjs +0 -6
  143. package/esm2022/lib/services/local-storage-manager-service/models/setting-options.model.mjs +0 -13
  144. package/esm2022/lib/services/local-storage-manager-service/models/storage-data.model.mjs +0 -10
  145. package/esm2022/lib/services/local-storage-manager-service/models/storage-option.model.mjs +0 -12
  146. package/esm2022/lib/services/local-storage-manager-service/models/storage-type.enum.mjs +0 -7
  147. package/esm2022/lib/services/request-manager-services/http-manager.service.mjs +0 -207
  148. package/esm2022/lib/services/request-manager-services/index.mjs +0 -5
  149. package/esm2022/lib/services/request-manager-services/request.service.mjs +0 -189
  150. package/esm2022/lib/services/request-manager-services/rxjs-operators/countdown.mjs +0 -9
  151. package/esm2022/lib/services/request-manager-services/rxjs-operators/delay-retry.mjs +0 -10
  152. package/esm2022/lib/services/request-manager-services/rxjs-operators/index.mjs +0 -5
  153. package/esm2022/lib/services/request-manager-services/rxjs-operators/request-polling.mjs +0 -14
  154. package/esm2022/lib/services/request-manager-services/rxjs-operators/request-streaming.mjs +0 -19
  155. package/esm2022/lib/services/request-manager-state-service/http-manager-state.store.mjs +0 -267
  156. package/esm2022/lib/services/request-manager-state-service/index.mjs +0 -3
  157. package/esm2022/lib/services/request-manager-state-service/models/api-request.model.mjs +0 -20
  158. package/esm2022/lib/services/request-manager-state-service/models/index.mjs +0 -3
  159. package/esm2022/lib/services/request-manager-state-service/models/request-options.model.mjs +0 -10
  160. package/esm2022/lib/services/utils/app.service.mjs +0 -26
  161. package/esm2022/lib/services/utils/encryption/asymmetrical-encryption.service.mjs +0 -186
  162. package/esm2022/lib/services/utils/encryption/encryption-test.service.mjs +0 -35
  163. package/esm2022/lib/services/utils/encryption/index.mjs +0 -4
  164. package/esm2022/lib/services/utils/encryption/random.mjs +0 -52
  165. package/esm2022/lib/services/utils/encryption/symmetrical-encryption.service.mjs +0 -77
  166. package/esm2022/lib/services/utils/headers.service.mjs +0 -21
  167. package/esm2022/lib/services/utils/index.mjs +0 -6
  168. package/esm2022/lib/services/utils/object-merger.service.mjs +0 -50
  169. package/esm2022/lib/services/utils/path-query.service.mjs +0 -54
  170. package/esm2022/lib/services/utils/utils.service.mjs +0 -155
  171. package/esm2022/public-api.mjs +0 -11
  172. package/fesm2022/http-request-manager.mjs +0 -3444
  173. package/fesm2022/http-request-manager.mjs.map +0 -1
  174. package/http-request-manager-15.0.24.tgz +0 -0
  175. package/index.d.ts +0 -5
  176. package/lib/http-request-manager.module.d.ts +0 -33
  177. package/lib/http-request-services-demo/database-data-demo/database-data-demo.component.d.ts +0 -19
  178. package/lib/http-request-services-demo/http-request-services-demo.component.d.ts +0 -24
  179. package/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.d.ts +0 -56
  180. package/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.d.ts +0 -26
  181. package/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.d.ts +0 -13
  182. package/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.d.ts +0 -27
  183. package/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.d.ts +0 -12
  184. package/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.d.ts +0 -16
  185. package/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.d.ts +0 -8
  186. package/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.d.ts +0 -14
  187. package/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.d.ts +0 -14
  188. package/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.d.ts +0 -107
  189. package/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.d.ts +0 -122
  190. package/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.d.ts +0 -15
  191. package/lib/index.d.ts +0 -3
  192. package/lib/interceptors/credentials.interceptor.d.ts +0 -8
  193. package/lib/interceptors/models/error-settings.model.d.ts +0 -10
  194. package/lib/interceptors/proxy-debugger.interceptor.d.ts +0 -12
  195. package/lib/interceptors/request-error.interceptor.d.ts +0 -10
  196. package/lib/interceptors/request-header.interceptor.d.ts +0 -15
  197. package/lib/models/config-http-options.model.d.ts +0 -21
  198. package/lib/models/config-local-storage-options.model.d.ts +0 -13
  199. package/lib/models/config-options.model.d.ts +0 -12
  200. package/lib/models/data-type.enum.d.ts +0 -5
  201. package/lib/models/database-storage.model.d.ts +0 -10
  202. package/lib/models/index.d.ts +0 -6
  203. package/lib/models/retry-options.model.d.ts +0 -10
  204. package/lib/services/database-manager-services/database.manager.service.d.ts +0 -31
  205. package/lib/services/database-manager-services/db.storage.service.d.ts +0 -26
  206. package/lib/services/database-manager-services/models/table-schema.d.ts +0 -11
  207. package/lib/services/local-storage-manager-service/index.d.ts +0 -2
  208. package/lib/services/local-storage-manager-service/local-storage-manager.service.d.ts +0 -86
  209. package/lib/services/local-storage-manager-service/models/global-store-options.model.d.ts +0 -15
  210. package/lib/services/local-storage-manager-service/models/setting-options.model.d.ts +0 -15
  211. package/lib/services/local-storage-manager-service/models/storage-data.model.d.ts +0 -10
  212. package/lib/services/local-storage-manager-service/models/storage-option.model.d.ts +0 -13
  213. package/lib/services/local-storage-manager-service/models/storage-type.enum.d.ts +0 -5
  214. package/lib/services/request-manager-services/http-manager.service.d.ts +0 -41
  215. package/lib/services/request-manager-services/request.service.d.ts +0 -27
  216. package/lib/services/request-manager-services/rxjs-operators/countdown.d.ts +0 -2
  217. package/lib/services/request-manager-services/rxjs-operators/delay-retry.d.ts +0 -2
  218. package/lib/services/request-manager-services/rxjs-operators/request-polling.d.ts +0 -7
  219. package/lib/services/request-manager-services/rxjs-operators/request-streaming.d.ts +0 -2
  220. package/lib/services/request-manager-state-service/http-manager-state.store.d.ts +0 -51
  221. package/lib/services/request-manager-state-service/models/api-request.model.d.ts +0 -27
  222. package/lib/services/request-manager-state-service/models/request-options.model.d.ts +0 -10
  223. package/lib/services/utils/app.service.d.ts +0 -8
  224. package/lib/services/utils/encryption/asymmetrical-encryption.service.d.ts +0 -17
  225. package/lib/services/utils/encryption/encryption-test.service.d.ts +0 -10
  226. package/lib/services/utils/encryption/random.d.ts +0 -7
  227. package/lib/services/utils/encryption/symmetrical-encryption.service.d.ts +0 -14
  228. package/lib/services/utils/headers.service.d.ts +0 -10
  229. package/lib/services/utils/object-merger.service.d.ts +0 -12
  230. package/lib/services/utils/path-query.service.d.ts +0 -11
  231. package/lib/services/utils/utils.service.d.ts +0 -24
  232. /package/{lib/services/request-manager-services/rxjs-operators/index.d.ts → src/lib/services/request-manager-services/rxjs-operators/index.ts} +0 -0
@@ -0,0 +1,328 @@
1
+ <div style="margin: 2rem;">
2
+
3
+ <h2>
4
+ HTTP Request State Manager
5
+ </h2>
6
+
7
+ <div [formGroup]="requestForm" style="margin-top: 2rem;">
8
+ <div style="display: flex; gap: .5rem">
9
+ <mat-form-field appearance="outline">
10
+ <mat-label>State Data Type</mat-label>
11
+ <mat-select formControlName="datatype">
12
+ <mat-option value="ARRAY">Array</mat-option>
13
+ <mat-option value="OBJECT">Object</mat-option>
14
+ </mat-select>
15
+ </mat-form-field>
16
+ </div>
17
+ <div style="display: flex; gap: .5rem">
18
+ <mat-form-field appearance="outline">
19
+ <mat-label>Adapter (Model)</mat-label>
20
+ <mat-select formControlName="adapter" #adapterSelect>
21
+ <mat-option>None</mat-option>
22
+ <mat-option *ngFor="let adapter of sampleAdaptors" [value]="adapter.value">
23
+ {{adapter.label}}
24
+ </mat-option>
25
+ </mat-select>
26
+ </mat-form-field>
27
+ <mat-form-field appearance="outline">
28
+ <mat-label>Mapper (Model)</mat-label>
29
+ <mat-select formControlName="mapper" #mapperSelect>
30
+ <mat-option>None</mat-option>
31
+ <mat-option *ngFor="let mapper of sampleMappers" [value]="mapper.value">
32
+ {{mapper.label}}
33
+ </mat-option>
34
+ </mat-select>
35
+ </mat-form-field>
36
+ </div>
37
+
38
+ <div style="display: flex; margin-bottom: 2rem;" *ngIf="adapterSelect.value || mapperSelect.value">
39
+ <div style="flex:1" class="box">
40
+ <h3>Adapter (Incoming)</h3>
41
+ <div *ngIf="adapterSelect.value; else NO_ADAPTER">
42
+ {{ props(adapterSelect.value) | json }}
43
+ </div>
44
+ <ng-template #NO_ADAPTER>No Transformation</ng-template>
45
+ </div>
46
+ <div style="flex:1" class="box">
47
+ <h3>Mapper (Outgoing)</h3>
48
+ <div *ngIf="mapperSelect.value; else NO_MAPPER">
49
+ {{ props(mapperSelect.value) | json }}
50
+ </div>
51
+ <ng-template #NO_MAPPER>No Transformation</ng-template>
52
+ </div>
53
+ </div>
54
+
55
+ <div>
56
+ <mat-form-field appearance="outline">
57
+ <mat-label>RestPath (/ delimited)</mat-label>
58
+ <input matInput placeholder="clients/list" formControlName="path">
59
+ </mat-form-field>
60
+ </div>
61
+ <div>
62
+ <div formArrayName="headers">
63
+ <div *ngFor="let task of headers.controls; let i = index" [formGroupName]="i">
64
+ <div style="display: flex; gap: .5rem">
65
+ <mat-form-field appearance="outline">
66
+ <mat-label>Key</mat-label>
67
+ <input matInput placeholder="authentication" formControlName="key">
68
+ </mat-form-field>
69
+ <mat-form-field appearance="outline" style="flex:1">
70
+ <mat-label>Value</mat-label>
71
+ <input matInput placeholder="sample" formControlName="value">
72
+ </mat-form-field>
73
+ <div style="margin-top: .5rem;">
74
+ <button mat-icon-button (click)="removeHeader(i)">
75
+ <mat-icon>close</mat-icon>
76
+ </button>
77
+ </div>
78
+ </div>
79
+ </div>
80
+ </div>
81
+ <button mat-stroked-button (click)="addHeader()">Add Header</button>
82
+ </div>
83
+ <div style="margin-top: 2rem; display: flex; flex-direction:column; gap: 1rem;">
84
+ <div>
85
+ <mat-slide-toggle #failedState>Retry on Failed</mat-slide-toggle>
86
+ <div *ngIf="failedState.checked" style="display: flex; gap: .5rem; margin-top: 1rem;" formGroupName="retry">
87
+ <mat-form-field appearance="outline">
88
+ <mat-label>#of Times</mat-label>
89
+ <input matInput placeholder="3" formControlName="times" value="3">
90
+ </mat-form-field>
91
+ <mat-form-field appearance="outline">
92
+ <mat-label>Delay Until Next</mat-label>
93
+ <input matInput placeholder="3" formControlName="delay" value="3">
94
+ </mat-form-field>
95
+ </div>
96
+ </div>
97
+ <div>
98
+ <mat-slide-toggle #pollingState>Polling</mat-slide-toggle>
99
+ <div *ngIf="pollingState.checked">
100
+ <mat-form-field appearance="outline" style="margin-top: 1rem">
101
+ <mat-label>#of Seconds</mat-label>
102
+ <input matInput placeholder="3" formControlName="polling" value="3">
103
+ </mat-form-field>
104
+ </div>
105
+ </div>
106
+ <div>
107
+ <mat-slide-toggle #DBState>Database Storage</mat-slide-toggle>
108
+ <div *ngIf="DBState.checked" style="display: flex; gap: .5rem; margin-top: 1rem" formGroupName="database">
109
+ <mat-form-field appearance="outline">
110
+ <mat-label>Table Name</mat-label>
111
+ <input matInput placeholder="table" formControlName="table" value="">
112
+ </mat-form-field>
113
+ <div>
114
+ <mat-form-field appearance="outline">
115
+ <mat-label>Expires In</mat-label>
116
+ <mat-select formControlName="expiresIn">
117
+ <mat-option value="1m">One Minute</mat-option>
118
+ <mat-option value="1h">One Hour</mat-option>
119
+ <mat-option value="1d">One Day</mat-option>
120
+ </mat-select>
121
+ </mat-form-field>
122
+ </div>
123
+ </div>
124
+ </div>
125
+ <div style="margin-top: 1rem; display: flex;">
126
+ <span style="flex:1"></span>
127
+ <button mat-stroked-button (click)="onSetStateOptions()" [disabled]="!hasChanged">
128
+ Set API Request Options
129
+ </button>
130
+ </div>
131
+ <div>
132
+ <mat-error *ngIf="(error$ | async) as error">
133
+ {{ error }}
134
+ </mat-error>
135
+ </div>
136
+ </div>
137
+ </div>
138
+
139
+ <div style="margin-bottom: 1rem; margin-top: 2rem;">
140
+ <mat-progress-bar mode="indeterminate"
141
+ *ngIf="(isPending$ | async)"
142
+ ></mat-progress-bar>
143
+ <div *ngIf="pollingState.checked">
144
+ <mat-progress-bar mode="determinate"
145
+ *ngIf="!(isPending$ | async) && (this.countdown$ | async) || -1 > 0"
146
+ [value]="(this.countdown$ | async)"
147
+ ></mat-progress-bar>
148
+ </div>
149
+
150
+ </div>
151
+
152
+ <div style="margin-top: 2rem" *ngIf="(GET$ | async) as data">
153
+ <div style="display: flex;">
154
+ <h2 style="flex:1;">CURRENT STATE ({{ dataType }})</h2>
155
+ </div>
156
+ <div *ngIf="data.length > 1">
157
+ <mat-form-field appearance="outline">
158
+ <mat-label>Records</mat-label>
159
+ <mat-select [formControl]="selectedRecord" [disabled]="data === null && data?.length === 0">
160
+ <mat-option [value]="">None</mat-option>
161
+ <mat-option *ngFor="let item of data" [value]="item">
162
+ {{item.name || (item.first_name) | titlecase}}
163
+ </mat-option>
164
+ </mat-select>
165
+ </mat-form-field>
166
+ </div>
167
+ <div *ngIf="(dataObservable$ | async) as dataRecord">
168
+ <div *ngIf="(selectedRecord$ | async) as record; else NO_RECORD">
169
+ {{ record | json }}
170
+ </div>
171
+ <ng-template #NO_RECORD>No Record Selected from State</ng-template>
172
+
173
+ </div>
174
+ <div style="margin-top: 1rem;">
175
+ <span *ngIf="data !== null && data?.length > 0; else NO_DATA">
176
+ State contains a Total of {{ data.length }} Records
177
+ </span>
178
+ <ng-template #NO_DATA>No Records</ng-template>
179
+ <div style="display: flex; gap: .5rem; text-align: end; justify-content: flex-end;">
180
+ <button class="btn" mat-stroked-button (click)="onClearRecords()">Clear</button>
181
+ <button class="btn" mat-stroked-button (click)="onRefreshRecords()" [disabled]="hasChanged">Refresh</button>
182
+ </div>
183
+ </div>
184
+ </div>
185
+
186
+
187
+
188
+
189
+ <div style="margin-top: 1rem">
190
+ <mat-divider></mat-divider>
191
+ </div>
192
+
193
+ <div style="margin-top: 2rem">
194
+ <div style="display: flex;">
195
+ <h2 style="flex:1">GET Request ({{ dataType }})</h2>
196
+ <div>
197
+ <button mat-raised-button (click)="onGetRequest()" [disabled]="hasChanged" class="btn">Request</button>
198
+ </div>
199
+ </div>
200
+
201
+ <div *ngIf="(GET_error$ | async) as get_error" style="margin-top: .5rem;">
202
+ <mat-error>{{ get_error }}</mat-error>
203
+ </div>
204
+
205
+ <div style="margin-top: 1rem;">
206
+ <!-- <div [innerHTML]="(GET$ | async) | jsonv"></div> -->
207
+ <div *ngIf="(GET$ | async) as getData">{{ getData | json }}</div>
208
+ </div>
209
+
210
+ </div>
211
+
212
+ <div style="margin-top: 2rem">
213
+ <mat-divider></mat-divider>
214
+ </div>
215
+
216
+ <div style="margin-top: 2rem">
217
+ <div style="display: flex;">
218
+ <h2 style="flex:1">POST Request</h2>
219
+ <div>
220
+ <button mat-raised-button (click)="onCreateRequest()" [disabled]="hasChanged" class="btn">Request</button>
221
+ </div>
222
+ </div>
223
+
224
+ <div *ngIf="(POST_error$ | async) as post_error" style="margin-top: .5rem;">
225
+ <mat-error>{{ post_error }}</mat-error>
226
+ </div>
227
+
228
+ <div style="margin-top: 1rem;">
229
+ <!-- <div [innerHTML]="(POST$ | async) | jsonv"></div> -->
230
+ <div *ngIf="(POST$ | async) as postData">{{ postData | json }}</div>
231
+ </div>
232
+
233
+ </div>
234
+
235
+ <div style="margin-top: 2rem">
236
+ <mat-divider></mat-divider>
237
+ </div>
238
+
239
+ <div style="margin-top: 2rem">
240
+ <div style="display: flex;">
241
+ <h2 style="flex:1">PUT Request</h2>
242
+ <div>
243
+ <button mat-raised-button (click)="onUpdateRequest()" [disabled]="hasChanged" class="btn">Request</button>
244
+ </div>
245
+ </div>
246
+
247
+ <div *ngIf="(PUT_error$ | async) as put_error" style="margin-top: .5rem;">
248
+ <mat-error>{{ put_error }}</mat-error>
249
+ </div>
250
+
251
+ <div style="margin-top: 1rem;">
252
+ <!-- <div [innerHTML]="(PUT$ | async) | jsonv"></div> -->
253
+ <div *ngIf="(PUT$ | async) as putData">{{ putData | json }}</div>
254
+ </div>
255
+
256
+ </div>
257
+
258
+ <div style="margin-top: 2rem">
259
+ <mat-divider></mat-divider>
260
+ </div>
261
+
262
+ <div style="margin-top: 2rem">
263
+ <div style="display: flex;">
264
+ <h2 style="flex:1">DELETE Request</h2>
265
+ <div>
266
+ <button mat-raised-button (click)="onDeleteRequest()" [disabled]="hasChanged" class="btn">Request</button>
267
+ </div>
268
+ </div>
269
+
270
+ <div *ngIf="(DELETE_error$ | async) as delete_error" style="margin-top: .5rem;">
271
+ <mat-error>{{ delete_error }}</mat-error>
272
+ </div>
273
+
274
+ <div style="margin-top: 1rem;">
275
+ <!-- <div [innerHTML]="(DELETE$ | async) | jsonv"></div> -->
276
+ <div *ngIf="(DELETE$ | async) as deleteData">{{ deleteData | json }}</div>
277
+ </div>
278
+
279
+ </div>
280
+
281
+ <div style="margin-top: 2rem">
282
+ <mat-divider></mat-divider>
283
+ </div>
284
+
285
+ <div style="margin-top: 2rem">
286
+ <div style="display: flex;">
287
+ <h2 style="flex:1">Streaming GET Request</h2>
288
+ <div>
289
+ <button mat-raised-button (click)="onStreamRequest()" class="btn" [disabled]="hasChanged">Request</button>
290
+ </div>
291
+ </div>
292
+
293
+ <div *ngIf="(STREAM_error$ | async) as stream_error" style="margin-top: .5rem;">
294
+ <mat-error>{{ stream_error }}</mat-error>
295
+ </div>
296
+
297
+ <div style="margin-top: 1rem;">
298
+ <div *ngIf="(STREAM$ | async) as data" class="container">
299
+ <table mat-table [dataSource]="data">
300
+ <ng-container matColumnDef="id">
301
+ <th mat-header-cell *matHeaderCellDef> ID </th>
302
+ <td mat-cell *matCellDef="let element"> {{element.id}} </td>
303
+ </ng-container>
304
+
305
+ <ng-container matColumnDef="name">
306
+ <th mat-header-cell *matHeaderCellDef> First Name </th>
307
+ <td mat-cell *matCellDef="let element"> {{element.name}} </td>
308
+ </ng-container>
309
+
310
+ <ng-container matColumnDef="lastName">
311
+ <th mat-header-cell *matHeaderCellDef> Last Name </th>
312
+ <td mat-cell *matCellDef="let element"> {{element.lastName}} </td>
313
+ </ng-container>
314
+
315
+ <ng-container matColumnDef="age">
316
+ <th mat-header-cell *matHeaderCellDef> Age </th>
317
+ <td mat-cell *matCellDef="let element"> {{element.age}} </td>
318
+ </ng-container>
319
+
320
+ <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
321
+ <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
322
+ </table>
323
+ </div>
324
+ </div>
325
+
326
+ </div>
327
+
328
+ </div>
@@ -0,0 +1,24 @@
1
+ .btn {
2
+ min-width: 120px;
3
+ }
4
+
5
+ .mat-mdc-row .mat-mdc-cell {
6
+ border-bottom: 1px solid transparent;
7
+ border-top: 1px solid transparent;
8
+ cursor: pointer;
9
+ }
10
+
11
+ .mat-mdc-row:hover .mat-mdc-cell {
12
+ border-color: currentColor;
13
+ background-color: whitesmoke;
14
+ }
15
+
16
+ .container {
17
+ height: 400px;
18
+ overflow: auto;
19
+ }
20
+
21
+ .box {
22
+ padding: 10px;
23
+ border: 1px solid #ccc;
24
+ }
@@ -0,0 +1,347 @@
1
+ import { Component, OnInit, ViewChild, inject } from '@angular/core';
2
+
3
+ import { StateManagerDemoService } from './services/state-manager-demo.service';
4
+ import { FormBuilder, Validators, FormArray } from '@angular/forms';
5
+
6
+ import { Observable, BehaviorSubject, EMPTY, map, tap, catchError, throwError } from 'rxjs';
7
+
8
+ import { ClientInfo } from '../request-manager-demo/models/sample-client-info';
9
+ import { ClientInfoMapper } from '../request-manager-demo/models/sample-mapper-client-info';
10
+ import { AIPrompt } from '../request-manager-demo/models/sample-ai-prompt';
11
+
12
+ import { DataType } from '../../models';
13
+ import { DatabaseStorage } from '../../models/database-storage.model';
14
+ import { HTTPManagerService, ApiRequest } from '../../services';
15
+
16
+
17
+ @Component({
18
+ selector: 'app-request-manager-state-demo',
19
+ templateUrl: './request-manager-state-demo.component.html',
20
+ styleUrls: ['./request-manager-state-demo.component.scss'],
21
+ })
22
+ export class RequestManagerStateDemoComponent implements OnInit {
23
+
24
+ stateManagerDemoService = inject(StateManagerDemoService)
25
+
26
+ displayedColumns = ['id','name', 'lastName', 'age']
27
+
28
+ selectedRecord$?: Observable<ClientInfo|null>
29
+
30
+ fb = inject(FormBuilder)
31
+
32
+ httpManagerService = inject(HTTPManagerService)
33
+
34
+ isPending$ = this.stateManagerDemoService.isPending$
35
+ error$ = this.stateManagerDemoService.error$
36
+
37
+ countdown$ = this.httpManagerService.countdown$
38
+
39
+ GET_error$ = new BehaviorSubject<string>('')
40
+ POST_error$ = new BehaviorSubject<string>('')
41
+ PUT_error$ = new BehaviorSubject<string>('')
42
+ DELETE_error$ = new BehaviorSubject<string>('')
43
+
44
+ STREAM_error$ = new BehaviorSubject<string>('')
45
+ STREAM_AI_error$ = new BehaviorSubject<string>('')
46
+
47
+ GET$ = new BehaviorSubject<any>(null)
48
+ POST$ = new BehaviorSubject(null)
49
+ PUT$ = new BehaviorSubject(null)
50
+ DELETE$ = new BehaviorSubject(null)
51
+
52
+ STREAM = new BehaviorSubject(null)
53
+ STREAM$ = this.STREAM.asObservable()
54
+
55
+ STREAM_AI = new BehaviorSubject<{response: string}[]>([])
56
+ STREAM_AI$ = this.STREAM_AI.asObservable()
57
+ .pipe(
58
+ map((items: any) => (items) ? items.map((item: any) => item.response) : []),
59
+ map((items: any) => items.join('\n').trim()),
60
+ )
61
+
62
+ @ViewChild("failedState", { static: true }) failedState: any
63
+ @ViewChild("pollingState", { static: true }) pollingState: any
64
+
65
+ questionControl = this.fb.control("", [Validators.required])
66
+
67
+ requestType = ''
68
+
69
+ prompts: string[] = []
70
+
71
+ AIType = 0
72
+
73
+ get dataObservable$() {
74
+
75
+ switch (this.requestType) {
76
+ case 'GET':
77
+ return this.GET$
78
+
79
+ case 'PUT':
80
+ return this.PUT$
81
+
82
+ case 'POST':
83
+ return this.POST$
84
+
85
+ case 'DELETE':
86
+ return this.DELETE$
87
+
88
+ case 'STREAM':
89
+ return this.STREAM
90
+
91
+ case 'STREAM_AI':
92
+ return this.STREAM_AI
93
+
94
+ default:
95
+ return this.GET$
96
+ break;
97
+ }
98
+
99
+ }
100
+
101
+ sampleClientData = {
102
+ id: 0,
103
+ name: "Old School Dates",
104
+ domain: "osd.com",
105
+ service: "osd",
106
+ spiffe: "osd.com/osd",
107
+ secret: "SMOPECXP-OS4P-USOG-X2II-3XMD1FQDR3IJX",
108
+ created: 1693003138,
109
+ modified: 1693003138,
110
+ icon: "",
111
+ imageFile: "",
112
+ }
113
+
114
+ selectedRecord = this.fb.control(null)
115
+
116
+ requestForm = this.fb.group({
117
+ datatype: this.fb.control('ARRAY'),
118
+ path: this.fb.control<string>("ai/"),
119
+ headers: this.fb.array([]),
120
+ adapter: [null],
121
+ mapper: [null],
122
+ retry: this.fb.group({
123
+ times: [3],
124
+ delay: [3],
125
+ }),
126
+ polling: [3],
127
+ database: this.fb.group({
128
+ table: [''],
129
+ expiresIn: ['1m'],
130
+ })
131
+ })
132
+
133
+ get hasChanged() {
134
+ return this.requestForm.dirty || this.requestForm.untouched
135
+ }
136
+
137
+ get dataType() {
138
+ return this.requestForm.get("datatype")?.value
139
+ }
140
+
141
+ get database() {
142
+ return this.requestForm.get("database")?.value
143
+ }
144
+
145
+ get retry() {
146
+ return this.requestForm.get("retry")?.value
147
+ }
148
+
149
+ sampleAdaptors = [
150
+ { label: "ClientInfo Basic", value: ClientInfo.adapt },
151
+ { label: "AI Prompt", value: AIPrompt.adapt },
152
+ ]
153
+
154
+ sampleMappers = [
155
+ { label: "Mapper Basic", value: ClientInfoMapper.adapt },
156
+ { label: "AI Prompt", value: AIPrompt.adapt },
157
+ ]
158
+
159
+ get headers(): FormArray {
160
+ return this.requestForm.get('headers') as FormArray
161
+ }
162
+
163
+ get isValid() {
164
+ this.requestForm.markAllAsTouched()
165
+ return this.requestForm.valid
166
+ }
167
+
168
+ // server = `http://sample-endpoint/as/authorization.oauth2`
169
+
170
+ arrayObjectsToObjects = (arr: any[]) => {
171
+ return Array.isArray(arr) ? arr.reduce((obj, item) => Object.assign(obj, { [item.key]: item.value }), {}) : {}
172
+ }
173
+
174
+ props = (adapter: any) => {
175
+ return (adapter) ? adapter() : null
176
+ }
177
+
178
+ constructor() { }
179
+
180
+ ngOnInit() {
181
+
182
+ this.stateManagerDemoService.data$.pipe(
183
+ tap((data) => console.log("API STREAM_AI response", data)),
184
+ )
185
+
186
+ this.error$.pipe(
187
+ tap((data) => {
188
+ debugger
189
+ console.log("API STREAM response", data)
190
+ }),
191
+ catchError(error => {
192
+ return throwError(() => this.errorHandling(error, 'STREAM'))
193
+ })
194
+ )
195
+
196
+ this.selectedRecord.valueChanges
197
+ .subscribe((data: ClientInfo|null) => {
198
+ this.selectedRecord$ = (data) ? this.stateManagerDemoService.selectRecord$(data.id) : EMPTY
199
+ })
200
+
201
+ this.stateManagerDemoService.data$
202
+ .pipe(
203
+ tap((data) => {
204
+
205
+ switch (this.requestType) {
206
+ case 'GET':
207
+ this.GET$.next(data)
208
+ break;
209
+
210
+ case 'PUT':
211
+ this.PUT$.next(data)
212
+ break;
213
+
214
+ case 'POST':
215
+ this.POST$.next(data)
216
+ break;
217
+
218
+ case 'DELETE':
219
+ this.DELETE$.next(data)
220
+ break;
221
+
222
+ case 'STREAM':
223
+ this.STREAM.next(data)
224
+ break;
225
+
226
+ case 'STREAM_AI':
227
+ this.STREAM_AI.next(data)
228
+ break;
229
+
230
+ default:
231
+ break;
232
+ }
233
+
234
+ })
235
+ ).subscribe()
236
+
237
+ }
238
+
239
+ addHeader() {
240
+ const header = this.fb.group({
241
+ key: ['', Validators.required],
242
+ value: ['']
243
+ });
244
+ this.headers.push(header)
245
+ }
246
+
247
+ removeHeader(index: number) {
248
+ this.headers.removeAt(index)
249
+ }
250
+
251
+ compileRequest() {
252
+
253
+ const requestParams = this.requestForm.value
254
+
255
+ requestParams.headers = this.arrayObjectsToObjects(
256
+ requestParams.headers || []
257
+ )
258
+
259
+ const pathReq = (requestParams.path === "") ? [] : (requestParams.path || "").split("/")
260
+
261
+ if (!this.pollingState.checked) requestParams.polling = 0
262
+
263
+ if (!this.failedState.checked) {
264
+ requestParams.retry = { times: 0,delay: 0 }
265
+ }
266
+
267
+ const currentOptions = ApiRequest.adapt(requestParams)
268
+ currentOptions.path = []
269
+ const apiOptions = ApiRequest.adapt({ ...currentOptions, path: pathReq })
270
+
271
+ return { apiOptions: apiOptions, path: pathReq }
272
+
273
+ }
274
+
275
+ onSetStateOptions() {
276
+
277
+ if(!this.isValid) return
278
+
279
+ const reqParams = this.compileRequest()
280
+
281
+ const db = DatabaseStorage.adapt(this.database)
282
+ const type = this.dataType === "ARRAY" ? DataType.ARRAY : DataType.OBJECT
283
+ this.stateManagerDemoService.setAPIOptions(reqParams.apiOptions, type, db)
284
+
285
+ this.requestForm.markAsPristine()
286
+ }
287
+
288
+ onClearRecords() {
289
+ this.stateManagerDemoService.clearRecords()
290
+ }
291
+
292
+ onRefreshRecords() {
293
+ this.stateManagerDemoService.refreshData()
294
+ }
295
+
296
+ onGetRequest() {
297
+ this.requestType = 'GET'
298
+ this.stateManagerDemoService.getClients()
299
+ }
300
+
301
+ onCreateRequest() {
302
+ this.requestType = 'POST'
303
+ this.stateManagerDemoService.createClient(this.sampleClientData)
304
+ }
305
+
306
+ onUpdateRequest() {
307
+ this.requestType = 'PUT'
308
+ this.stateManagerDemoService.updateClient(this.sampleClientData)
309
+ }
310
+
311
+ onDeleteRequest() {
312
+ this.requestType = 'DELETE'
313
+ this.stateManagerDemoService.deleteClient(this.sampleClientData)
314
+ }
315
+
316
+ onStreamRequest() {
317
+
318
+ if(!this.isValid) return
319
+
320
+ const reqParams = this.compileRequest()
321
+
322
+ reqParams.apiOptions.stream = true
323
+
324
+ this.requestType = 'STREAM'
325
+
326
+ this.stateManagerDemoService.streamRequest()
327
+
328
+ }
329
+
330
+ errorHandling(err: any, type: string) { console.log(err, type)
331
+ if(type === 'GET') this.GET_error$.next(err.message)
332
+ if(type === 'POST') this.POST_error$.next(err.message)
333
+ if(type === 'PUT') this.PUT_error$.next(err.message)
334
+ if(type === 'DELETE') this.DELETE_error$.next(err.message)
335
+ if(type === 'STREAM') this.STREAM_error$.next(err.message)
336
+ if(type === 'STREAM_AI') this.STREAM_AI_error$.next(err.message)
337
+ }
338
+
339
+ onSelectAIType(type: number) {
340
+ this.AIType = type
341
+ }
342
+
343
+ onClearHistory() {
344
+ this.prompts = []
345
+ }
346
+
347
+ }