http-request-manager 18.7.21 → 18.7.24

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 (198) hide show
  1. package/fesm2022/http-request-manager.mjs +7633 -0
  2. package/fesm2022/http-request-manager.mjs.map +1 -0
  3. package/http-request-manager-18.7.24.tgz +0 -0
  4. package/package.json +16 -5
  5. package/types/http-request-manager.d.ts +2277 -0
  6. package/ARCHITECTURE.md +0 -483
  7. package/DATABASE_README.md +0 -1176
  8. package/HTTP_MANAGER_README.md +0 -579
  9. package/HTTP_SINGNALS_MANAGER_README.md +0 -654
  10. package/HTTP_STATE_MANAGER_README.md +0 -948
  11. package/INTERCEPTOR_README.md +0 -549
  12. package/LOCAL_STORAGE_README.md +0 -1056
  13. package/STORE_STATE_MANAGER_README.md +0 -1322
  14. package/UTILS_README.md +0 -1186
  15. package/WS_MANAGER_README.md +0 -613
  16. package/ng-package.json +0 -8
  17. package/src/lib/http-request-manager.module.ts +0 -132
  18. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.html +0 -65
  19. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.scss +0 -0
  20. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.ts +0 -224
  21. package/src/lib/http-request-services-demo/http-request-services-demo.component.html +0 -114
  22. package/src/lib/http-request-services-demo/http-request-services-demo.component.scss +0 -6
  23. package/src/lib/http-request-services-demo/http-request-services-demo.component.ts +0 -52
  24. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.html +0 -195
  25. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.scss +0 -17
  26. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.ts +0 -206
  27. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.html +0 -200
  28. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.scss +0 -17
  29. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.ts +0 -212
  30. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.html +0 -53
  31. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.scss +0 -60
  32. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.ts +0 -72
  33. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.ts +0 -28
  34. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.html +0 -10
  35. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.scss +0 -29
  36. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.ts +0 -100
  37. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.ts +0 -22
  38. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.html +0 -8
  39. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.scss +0 -19
  40. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.ts +0 -26
  41. package/src/lib/http-request-services-demo/request-manager-demo/models/app-session.model.ts +0 -30
  42. package/src/lib/http-request-services-demo/request-manager-demo/models/app.model.ts +0 -19
  43. package/src/lib/http-request-services-demo/request-manager-demo/models/get-sample.model.ts +0 -25
  44. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.ts +0 -19
  45. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-details.ts +0 -24
  46. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.ts +0 -30
  47. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client.model.ts +0 -49
  48. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.ts +0 -33
  49. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.html +0 -392
  50. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.scss +0 -24
  51. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.ts +0 -461
  52. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.html +0 -393
  53. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.scss +0 -24
  54. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.ts +0 -421
  55. package/src/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.ts +0 -87
  56. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/services/state-data-request.service.ts +0 -120
  57. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.css +0 -0
  58. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.html +0 -3
  59. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.ts +0 -16
  60. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.css +0 -0
  61. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.html +0 -3
  62. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.ts +0 -16
  63. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.css +0 -31
  64. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.html +0 -72
  65. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.scss +0 -41
  66. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.spec.ts +0 -205
  67. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.ts +0 -77
  68. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.css +0 -11
  69. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.html +0 -96
  70. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.spec.ts +0 -31
  71. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.ts +0 -229
  72. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.css +0 -30
  73. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.html +0 -172
  74. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.spec.ts +0 -31
  75. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.ts +0 -239
  76. package/src/lib/http-request-services-demo/request-manager-ws-demo/models/oidc-client.model.ts +0 -31
  77. package/src/lib/http-request-services-demo/request-manager-ws-demo/models/user-data.model.ts +0 -32
  78. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.css +0 -0
  79. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.html +0 -84
  80. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.ts +0 -41
  81. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/index.ts +0 -3
  82. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/message-service-demo.service.ts +0 -83
  83. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/notification-service-demo.service.ts +0 -147
  84. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/state-service-demo.service.ts +0 -158
  85. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.html +0 -53
  86. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.scss +0 -60
  87. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.ts +0 -72
  88. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-download.module.ts +0 -28
  89. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.html +0 -10
  90. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.scss +0 -29
  91. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.ts +0 -100
  92. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/models/download-labels-model.ts +0 -22
  93. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.html +0 -8
  94. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.scss +0 -19
  95. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.ts +0 -26
  96. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app-session.model.ts +0 -30
  97. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app.model.ts +0 -19
  98. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/get-sample.model.ts +0 -25
  99. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-ai-prompt.ts +0 -19
  100. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-details.ts +0 -24
  101. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-info.ts +0 -30
  102. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client.model.ts +0 -49
  103. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-mapper-client-info.ts +0 -33
  104. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.html +0 -380
  105. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.scss +0 -24
  106. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.ts +0 -410
  107. package/src/lib/http-request-services-demo/store-state-manager-demo/models/settings.model.ts +0 -28
  108. package/src/lib/http-request-services-demo/store-state-manager-demo/services/settings-state.service.ts +0 -48
  109. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.css +0 -0
  110. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.html +0 -23
  111. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.ts +0 -36
  112. package/src/lib/index.ts +0 -3
  113. package/src/lib/interceptors/credentials.interceptor.ts +0 -16
  114. package/src/lib/interceptors/index.ts +0 -6
  115. package/src/lib/interceptors/models/error-settings.model.ts +0 -22
  116. package/src/lib/interceptors/models/index.ts +0 -2
  117. package/src/lib/interceptors/proxy-debugger.interceptor.ts +0 -46
  118. package/src/lib/interceptors/request-error.interceptor.ts +0 -65
  119. package/src/lib/interceptors/request-header.interceptor.ts +0 -53
  120. package/src/lib/models/config-http-options.model.ts +0 -42
  121. package/src/lib/models/config-local-storage-options.model.ts +0 -27
  122. package/src/lib/models/config-options.model.ts +0 -27
  123. package/src/lib/models/config-token.model.ts +0 -9
  124. package/src/lib/models/data-type.enum.ts +0 -5
  125. package/src/lib/models/database-storage.model.ts +0 -24
  126. package/src/lib/models/index.ts +0 -12
  127. package/src/lib/models/retry-options.model.ts +0 -22
  128. package/src/lib/services/database-manager-service/database.manager.service.ts +0 -262
  129. package/src/lib/services/database-manager-service/db.storage.service.ts +0 -207
  130. package/src/lib/services/database-manager-service/index.ts +0 -4
  131. package/src/lib/services/database-manager-service/models/index.ts +0 -2
  132. package/src/lib/services/database-manager-service/models/table-schema.ts +0 -33
  133. package/src/lib/services/index.ts +0 -12
  134. package/src/lib/services/local-storage-manager-service/index.ts +0 -4
  135. package/src/lib/services/local-storage-manager-service/local-storage-manager.service.spec.ts +0 -71
  136. package/src/lib/services/local-storage-manager-service/local-storage-manager.service.ts +0 -426
  137. package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.spec.ts +0 -67
  138. package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.ts +0 -345
  139. package/src/lib/services/local-storage-manager-service/models/global-store-options.model.ts +0 -30
  140. package/src/lib/services/local-storage-manager-service/models/index.ts +0 -6
  141. package/src/lib/services/local-storage-manager-service/models/setting-options.model.ts +0 -35
  142. package/src/lib/services/local-storage-manager-service/models/storage-data.model.ts +0 -24
  143. package/src/lib/services/local-storage-manager-service/models/storage-option.model.ts +0 -32
  144. package/src/lib/services/local-storage-manager-service/models/storage-type.enum.ts +0 -5
  145. package/src/lib/services/request-manager-services/README.md +0 -268
  146. package/src/lib/services/request-manager-services/http-manager-signals.service.ts +0 -246
  147. package/src/lib/services/request-manager-services/http-manager.service.spec.ts +0 -232
  148. package/src/lib/services/request-manager-services/http-manager.service.ts +0 -274
  149. package/src/lib/services/request-manager-services/index.ts +0 -8
  150. package/src/lib/services/request-manager-services/request-signals.service.ts +0 -214
  151. package/src/lib/services/request-manager-services/request.service.ts +0 -309
  152. package/src/lib/services/request-manager-services/rxjs-operators/countdown.ts +0 -17
  153. package/src/lib/services/request-manager-services/rxjs-operators/delay-retry.ts +0 -16
  154. package/src/lib/services/request-manager-services/rxjs-operators/index.ts +0 -4
  155. package/src/lib/services/request-manager-services/rxjs-operators/request-polling.ts +0 -35
  156. package/src/lib/services/request-manager-services/rxjs-operators/request-streaming.ts +0 -436
  157. package/src/lib/services/request-manager-state-service/http-manager-state.store.ts +0 -1321
  158. package/src/lib/services/request-manager-state-service/index.ts +0 -3
  159. package/src/lib/services/request-manager-state-service/models/api-request.model.ts +0 -61
  160. package/src/lib/services/request-manager-state-service/models/index.ts +0 -6
  161. package/src/lib/services/request-manager-state-service/models/request-options.model.ts +0 -22
  162. package/src/lib/services/request-manager-state-service/models/stream-type.enum.ts +0 -13
  163. package/src/lib/services/request-manager-state-service/models/ws-options.model.ts +0 -39
  164. package/src/lib/services/store-state-manager-service/index.ts +0 -3
  165. package/src/lib/services/store-state-manager-service/models/index.ts +0 -2
  166. package/src/lib/services/store-state-manager-service/models/state-storage-options.model.ts +0 -24
  167. package/src/lib/services/store-state-manager-service/store-state-manager.service.ts +0 -88
  168. package/src/lib/services/utils/app.service.spec.ts +0 -25
  169. package/src/lib/services/utils/app.service.ts +0 -21
  170. package/src/lib/services/utils/encryption/README.md +0 -79
  171. package/src/lib/services/utils/encryption/asymmetrical-encryption.service.ts +0 -282
  172. package/src/lib/services/utils/encryption/encryption-test.service.ts +0 -39
  173. package/src/lib/services/utils/encryption/index.ts +0 -5
  174. package/src/lib/services/utils/encryption/random.ts +0 -81
  175. package/src/lib/services/utils/encryption/symmetrical-encryption.service.ts +0 -93
  176. package/src/lib/services/utils/headers.service.spec.ts +0 -80
  177. package/src/lib/services/utils/headers.service.ts +0 -18
  178. package/src/lib/services/utils/index.ts +0 -7
  179. package/src/lib/services/utils/object-merger.service.spec.ts +0 -18
  180. package/src/lib/services/utils/object-merger.service.ts +0 -78
  181. package/src/lib/services/utils/path-query.service.spec.ts +0 -117
  182. package/src/lib/services/utils/path-query.service.ts +0 -69
  183. package/src/lib/services/utils/random-color.utils.ts +0 -83
  184. package/src/lib/services/utils/utils.service.spec.ts +0 -165
  185. package/src/lib/services/utils/utils.service.ts +0 -192
  186. package/src/lib/services/ws-manager-service/index.ts +0 -4
  187. package/src/lib/services/ws-manager-service/models/channel-info.model.ts +0 -24
  188. package/src/lib/services/ws-manager-service/models/channel-message-data.model.ts +0 -24
  189. package/src/lib/services/ws-manager-service/models/channel-message.model.ts +0 -24
  190. package/src/lib/services/ws-manager-service/models/communication-type.enum.ts +0 -5
  191. package/src/lib/services/ws-manager-service/models/index.ts +0 -5
  192. package/src/lib/services/ws-manager-service/models/ws-user.model.ts +0 -38
  193. package/src/lib/services/ws-manager-service/services/index.ts +0 -3
  194. package/src/lib/services/ws-manager-service/services/websocket.service.ts +0 -392
  195. package/src/public-api.ts +0 -14
  196. package/tsconfig.lib.json +0 -32
  197. package/tsconfig.lib.prod.json +0 -10
  198. package/tsconfig.spec.json +0 -14
@@ -1,72 +0,0 @@
1
- @if ((data$ | async); as data) {
2
- <div style="margin: 1rem;">
3
- @if ((users$ |async); as users) {
4
- <div>
5
- @if (users.length > 0) {
6
- <h3 style="margin: 0;">Connected Users</h3>
7
- } @else {
8
- <h3 style="margin: 0;">No Users</h3>
9
- }
10
- <mat-chip-set>
11
- @for (user of users; track user.sessionId) {
12
- <mat-chip
13
- [class.user-chip--primary]="isUser(user, (user$ | async))"
14
- [style.color]="isUser(user, (user$ | async)) ? '#fff' : null"
15
- [disableRipple]="true"
16
- >
17
- {{ user.name }}
18
- </mat-chip>
19
- }
20
- </mat-chip-set>
21
- </div>
22
- }
23
- <div style="margin-top: 1rem; margin-bottom: 1rem;">
24
- <mat-divider></mat-divider>
25
- </div>
26
-
27
- <div class="box" style="margin-bottom: 1rem;" *ngIf="(userAction$ | async) as userAction">
28
- {{ userAction?.content?.user?.name }} has {{ userAction?.content?.method }}
29
- </div>
30
-
31
- <h3 style="margin: 0;">Data Actions</h3>
32
- <div style="display: flex; gap: 1rem; margin-bottom: 1rem;">
33
- <button mat-stroked-button (click)="onGetData()">Get Data</button>
34
- <div style="flex:1"></div>
35
- <button mat-stroked-button color="accent" (click)="onUpdateData(data)">Update Data</button>
36
- <button mat-stroked-button color="warn" (click)="onRemoveData(data)">Remove Data</button>
37
- <button mat-stroked-button color="primary" (click)="onAddData()">Add Data</button>
38
- </div>
39
- @if (data.length > 0) {
40
- <div>
41
- <table mat-table [dataSource]="data" style="border: 1px solid grey;">
42
- <ng-container matColumnDef="id">
43
- <th mat-header-cell *matHeaderCellDef> ID </th>
44
- <td mat-cell *matCellDef="let element"> {{element.id}} </td>
45
- </ng-container>
46
- <ng-container matColumnDef="spiffe">
47
- <th mat-header-cell *matHeaderCellDef> Spiffe </th>
48
- <td mat-cell *matCellDef="let element"> {{element.spiffe}} </td>
49
- </ng-container>
50
- <ng-container matColumnDef="name">
51
- <th mat-header-cell *matHeaderCellDef> Name </th>
52
- <td mat-cell *matCellDef="let element"> {{element.first_name}} {{element.last_name}}</td>
53
- </ng-container>
54
- <ng-container matColumnDef="email">
55
- <th mat-header-cell *matHeaderCellDef> Email </th>
56
- <td mat-cell *matCellDef="let element"> {{element.email}} </td>
57
- </ng-container>
58
- <tr mat-header-row *matHeaderRowDef="['id', 'spiffe', 'name', 'email']"></tr>
59
- <tr mat-row *matRowDef="let row; columns: ['id', 'spiffe', 'name', 'email'];"></tr>
60
- </table>
61
- <div style="border: 1px solid grey; padding: .5rem; border-top: none;">
62
- <h3 style="margin: 0;">Total Records {{ data.length }}</h3>
63
- </div>
64
- </div>
65
- } @else {
66
- <div style="margin-top: 1rem; font-style: italic;">
67
- No Data Available
68
- </div>
69
- }
70
- </div>
71
- }
72
-
@@ -1,41 +0,0 @@
1
- .user-chip--primary {
2
- background-color: var(--mdc-theme-primary, var(--md-sys-color-primary, #3f51b5)) !important;
3
- color: #fff !important;
4
- --mdc-evolution-chip-container-color: var(--mdc-theme-primary, var(--md-sys-color-primary, #3f51b5));
5
- --mdc-evolution-chip-label-text-color: #fff;
6
- }
7
-
8
- .user-chip--primary :is(
9
- .mdc-evolution-chip__text-label,
10
- .mdc-evolution-chip__action,
11
- .mdc-evolution-chip__cell,
12
- .mat-mdc-chip-action-label
13
- ) {
14
- color: #fff !important;
15
- }
16
-
17
- .user-chip--primary,
18
- .user-chip--primary * {
19
- color: #fff !important;
20
- }
21
-
22
- :host ::ng-deep .user-chip--primary {
23
- background-color: var(--mdc-theme-primary, var(--md-sys-color-primary, #3f51b5)) !important;
24
- color: #fff !important;
25
- --mdc-evolution-chip-container-color: var(--mdc-theme-primary, var(--md-sys-color-primary, #3f51b5));
26
- --mdc-evolution-chip-label-text-color: #fff;
27
-
28
- .mdc-evolution-chip__text-label,
29
- .mdc-evolution-chip__action,
30
- .mdc-evolution-chip__cell,
31
- .mat-mdc-chip-action-label,
32
- * {
33
- color: #fff !important;
34
- }
35
- }
36
-
37
- .box {
38
- padding: .5rem;
39
- border: 1px solid rgb(174, 174, 13);
40
- background-color: rgb(236, 236, 175);
41
- }
@@ -1,205 +0,0 @@
1
- import { ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing';
2
- import { WsDataControlComponent } from './ws-data-control.component';
3
- import { StateDataRequestService } from '../services/state-data-request.service';
4
- import { BehaviorSubject } from 'rxjs';
5
- import { MatChipsModule } from '@angular/material/chips';
6
- import { MatTableModule } from '@angular/material/table';
7
- import { MatButtonModule } from '@angular/material/button';
8
- import { MatDividerModule } from '@angular/material/divider';
9
- import { NoopAnimationsModule } from '@angular/platform-browser/animations';
10
- import { CommonModule } from '@angular/common';
11
-
12
- describe('WsDataControlComponent', () => {
13
- let component: WsDataControlComponent;
14
- let fixture: ComponentFixture<WsDataControlComponent>;
15
-
16
- // Mock Data
17
- const mockUser = { sessionId: 'session-123', name: 'Mike Boni' };
18
- const mockUsers = [mockUser, { sessionId: 'session-456', name: 'Other User' }];
19
- const mockData = [
20
- { id: 1, spiffe: 'wavecoders.com/developer/1111', first_name: 'John', last_name: 'Doe', email: 'john@test.com' },
21
- { id: 63, spiffe: 'wavecoders.com/developer/2222', first_name: 'mike', last_name: 'boni', email: 'mikeboni@hotmail.com' }
22
- ];
23
- const mockAction = { content: { user: mockUser, method: 'updated data' } };
24
-
25
- // Subjects to control the observables in the mock service
26
- const userSubject = new BehaviorSubject<any>(mockUser);
27
- const usersSubject = new BehaviorSubject<any[]>(mockUsers);
28
- const userActionSubject = new BehaviorSubject<any>(mockAction);
29
- const dataSubject = new BehaviorSubject<any[]>(mockData);
30
-
31
- // Mock Service Class
32
- class MockStateDataRequestService {
33
- user$ = userSubject.asObservable();
34
- userList$ = usersSubject.asObservable();
35
- userAction$ = userActionSubject.asObservable();
36
- data$ = dataSubject.asObservable();
37
-
38
- updateConnection(server: string, wsServer: string, jwtToken: string, user: any, path: string[], wsChannel: string) {}
39
- getData() {}
40
- addData() {}
41
- updateData(data: any) {}
42
- deleteData(data: any) {}
43
- }
44
-
45
- let mockServiceInstance: MockStateDataRequestService;
46
-
47
- beforeEach(async () => {
48
- // Ensure mock data is available immediately
49
- dataSubject.next(mockData);
50
- userSubject.next(mockUser);
51
- usersSubject.next(mockUsers);
52
- userActionSubject.next(mockAction);
53
-
54
- // Create mock service instance
55
- mockServiceInstance = new MockStateDataRequestService();
56
-
57
- // Spy on methods
58
- spyOn(mockServiceInstance, 'updateConnection');
59
- spyOn(mockServiceInstance, 'getData');
60
- spyOn(mockServiceInstance, 'addData');
61
- spyOn(mockServiceInstance, 'updateData');
62
- spyOn(mockServiceInstance, 'deleteData');
63
-
64
- await TestBed.configureTestingModule({
65
- declarations: [WsDataControlComponent],
66
- imports: [
67
- CommonModule,
68
- MatChipsModule,
69
- MatTableModule,
70
- MatButtonModule,
71
- MatDividerModule,
72
- NoopAnimationsModule
73
- ],
74
- providers: [
75
- { provide: StateDataRequestService, useValue: mockServiceInstance }
76
- ]
77
- }).compileComponents();
78
-
79
- fixture = TestBed.createComponent(WsDataControlComponent);
80
- component = fixture.componentInstance;
81
-
82
- // Set required @Input properties
83
- component.server = 'http://api.test.com';
84
- component.wsServer = 'ws://ws.test.com';
85
- component.jwtToken = 'mock-jwt-token';
86
- component.user = mockUser;
87
- component.path = ['ai', 'tests'];
88
- component.wsChannel = 'demo-channel';
89
-
90
- // Ensure initial data is available for table rendering test
91
- fixture.detectChanges();
92
- });
93
-
94
- it('should create the component', () => {
95
- expect(component).toBeTruthy();
96
- });
97
-
98
- it('should call updateConnection and getData during initialization', () => {
99
- expect(mockServiceInstance.updateConnection).toHaveBeenCalledWith(
100
- component.server,
101
- component.wsServer,
102
- component.jwtToken,
103
- component.user,
104
- component.path,
105
- component.wsChannel
106
- );
107
- expect(mockServiceInstance.getData).toHaveBeenCalled();
108
- });
109
-
110
- it('should call getData when onGetData is triggered', () => {
111
- component.onGetData();
112
- // once during init, once during manual call
113
- expect(mockServiceInstance.getData).toHaveBeenCalledTimes(2);
114
- });
115
-
116
- it('should call addData when onAddData is triggered', () => {
117
- component.onAddData();
118
- expect(mockServiceInstance.addData).toHaveBeenCalled();
119
- });
120
-
121
- it('should call updateData with generated random spiffe when onUpdateData is triggered', () => {
122
- // Call the method - we can't easily mock RandomNumber, so we just verify updateData is called
123
- component.onUpdateData(mockData);
124
-
125
- expect(mockServiceInstance.updateData).toHaveBeenCalled();
126
-
127
- // Verify the data structure passed to updateData
128
- const callArgs = (mockServiceInstance.updateData as any).calls.mostRecent().args[0];
129
- expect(callArgs).toBeDefined();
130
- expect(callArgs.spiffe).toBeDefined();
131
- expect(callArgs.spiffe).toMatch(/^wavecoders\.com\/developer\/\d{4,5}$/);
132
- expect(callArgs.id).toBe(63);
133
- expect(callArgs.first_name).toBe('mike');
134
- expect(callArgs.last_name).toBe('boni');
135
- expect(callArgs.email).toBe('mikeboni@hotmail.com');
136
- });
137
-
138
- it('should call deleteData with the last record when onRemoveData is triggered', () => {
139
- component.onRemoveData(mockData);
140
- const lastRecord = mockData[mockData.length - 1];
141
- expect(mockServiceInstance.deleteData).toHaveBeenCalledWith(lastRecord);
142
- });
143
-
144
- it('should correctly verify if a user is the current user via isUser', () => {
145
- const userA = { sessionId: 'AAA' };
146
- const userB = { sessionId: 'AAA' };
147
- const userC = { sessionId: 'CCC' };
148
-
149
- expect(component.isUser(userA, userB)).toBeTrue();
150
- expect(component.isUser(userA, userC)).toBeFalse();
151
- });
152
-
153
- it('should handle userAction$ timing logic (reset after 3 seconds)', fakeAsync(() => {
154
- let currentAction: any;
155
- const sub = component.userAction$.subscribe(val => currentAction = val);
156
-
157
- // 1. Initial state (from BehaviorSubject)
158
- expect(currentAction).toEqual(mockAction);
159
-
160
- // 2. Push new action
161
- const newAction = { content: { user: mockUser, method: 'added data' } };
162
- userActionSubject.next(newAction);
163
- tick(); // process the pipe
164
- expect(currentAction).toEqual(newAction);
165
-
166
- // 3. Wait 3 seconds
167
- tick(3000);
168
- expect(currentAction).toBeNull();
169
-
170
- sub.unsubscribe();
171
- }));
172
-
173
- it('should render the table when data is available', fakeAsync(() => {
174
- // Initial setup
175
- fixture.detectChanges();
176
- tick();
177
-
178
- const compiled = fixture.nativeElement as HTMLElement;
179
-
180
- // Multiple rounds of change detection to ensure async pipes resolve
181
- for (let i = 0; i < 3; i++) {
182
- fixture.detectChanges();
183
- tick();
184
- }
185
-
186
- const table = compiled.querySelector('table');
187
- expect(table).toBeTruthy();
188
-
189
- // Give Angular Material table more time to render
190
- fixture.detectChanges();
191
- tick();
192
-
193
- // Check for table rows (header + data rows)
194
- const rows = compiled.querySelectorAll('tr');
195
- expect(rows.length).toBeGreaterThan(1);
196
- }));
197
-
198
- it('should display "No Data Available" when data list is empty', () => {
199
- dataSubject.next([]);
200
- fixture.detectChanges();
201
-
202
- const compiled = fixture.nativeElement as HTMLElement;
203
- expect(compiled.textContent).toContain('No Data Available');
204
- });
205
- });
@@ -1,77 +0,0 @@
1
- import { Component, inject, Input, OnInit } from '@angular/core';
2
- import { RandomNumber } from '../../../../services/utils/encryption/random';
3
-
4
- import { StateDataRequestService } from '../services/state-data-request.service';
5
- import { switchMap, timer, map, startWith } from 'rxjs';
6
-
7
- @Component({
8
- selector: 'app-ws-data-control',
9
- templateUrl: './ws-data-control.component.html',
10
- styleUrls: ['./ws-data-control.component.scss'],
11
- standalone: false
12
- })
13
- export class WsDataControlComponent implements OnInit {
14
-
15
- @Input() server!: string;
16
- @Input() wsServer!: string;
17
- @Input() jwtToken!: string;
18
- @Input() user!: any;
19
- @Input() path: string[] = ['ai','tests'];
20
- @Input() wsChannel: string = '';
21
-
22
- stateDataRequestService = inject(StateDataRequestService)
23
-
24
- user$ = this.stateDataRequestService.user$
25
- users$ = this.stateDataRequestService.userList$
26
-
27
- userAction$ = this.stateDataRequestService.userAction$
28
- .pipe(
29
- switchMap((action) =>
30
- timer(3 * 1000).pipe(
31
- map(() => null),
32
- startWith(action)
33
- )
34
- )
35
- );
36
-
37
- data$ = this.stateDataRequestService.data$;
38
-
39
- isUser = (user: any, userItem: any) => {
40
- return user.sessionId === userItem.sessionId
41
- }
42
-
43
- ngOnInit() {
44
- this.stateDataRequestService.updateConnection(this.server, this.wsServer, this.jwtToken, this.user, this.path, this.wsChannel);
45
- this.stateDataRequestService.getData()
46
- }
47
-
48
- onGetData() {
49
- this.stateDataRequestService.getData()
50
- }
51
-
52
- onAddData() {
53
- this.stateDataRequestService.addData()
54
- }
55
-
56
- onUpdateData(data: any[]) {
57
-
58
- const num = RandomNumber(1000, 9999)
59
-
60
- const newData = {
61
- "spiffe": `wavecoders.com/developer/${num}`,
62
- "id": 63,
63
- "last_name": "boni",
64
- "email": "mikeboni@hotmail.com",
65
- "first_name": "mike"
66
- }
67
-
68
- this.stateDataRequestService.updateData(newData)
69
-
70
- }
71
-
72
- onRemoveData(data: any) {
73
- const lastRec = data[data.length -1]
74
- this.stateDataRequestService.deleteData(lastRec)
75
- }
76
-
77
- }
@@ -1,11 +0,0 @@
1
- button[mat-raised-button],
2
- button[mat-stroked-button] {
3
- min-width: 120px;
4
- }
5
-
6
- mat-chip-option {
7
- min-width: 120px;
8
- justify-content: center;
9
- border-radius: 4px !important;
10
- padding: 0.25rem !important;
11
- }
@@ -1,96 +0,0 @@
1
-
2
- @if ((data$ | async); as data) {
3
- @if ((user$ | async); as user) {
4
- <div style="display: flex; gap: 1rem; flex-direction: column; margin-top: 1rem;">
5
-
6
- <!-- Channel Creation Section -->
7
- <div style="padding: 1rem; background: #e3f2fd; border-radius: 4px;">
8
- <strong>Create New Channel</strong>
9
- <div style="display: flex; flex-direction: column; margin-top: 0.5rem;">
10
- <mat-form-field appearance="outline" style="width: 100%;">
11
- <mat-label>Channel Name</mat-label>
12
- <input matInput [formControl]="newChannelName" placeholder="Enter channel name"
13
- (keydown.enter)="onCreateChannel()">
14
- </mat-form-field>
15
- <div style="display: flex; justify-content: flex-end; margin-top: -0.5rem;">
16
- <button mat-raised-button color="primary" (click)="onCreateChannel()"
17
- [disabled]="newChannelName.invalid">
18
- Create Channel
19
- </button>
20
- </div>
21
- </div>
22
- </div>
23
-
24
- <!-- Messaging Section - only show when subscribed to channels -->
25
- @if ((subscribedChannels$ | async); as subscribedChannels) {
26
- @if (subscribedChannels.length > 0) {
27
- <div style="padding: 1rem; background: #fff3e0; border-radius: 4px;" [formGroup]="messages">
28
- <strong>Send Message</strong>
29
-
30
- <!-- Channel Selection with Checkboxes -->
31
- <div style="margin-top: 0.5rem;">
32
- <mat-form-field appearance="outline" style="width: 100%;">
33
- <mat-label>Select Channels</mat-label>
34
- <mat-select formControlName="selectedChannels" multiple>
35
- <mat-select-trigger>
36
- @if (selectedChannels.value?.length === 1) {
37
- {{ selectedChannels.value[0] }}
38
- } @else if (selectedChannels.value?.length > 1) {
39
- {{ selectedChannels.value[0] }} (+{{ selectedChannels.value.length - 1 }} {{ selectedChannels.value.length === 2 ? 'other' : 'others' }})
40
- }
41
- </mat-select-trigger>
42
- @for (channel of subscribedChannels; track channel) {
43
- <mat-option [value]="channel">{{ channel }}</mat-option>
44
- }
45
- </mat-select>
46
- </mat-form-field>
47
- </div>
48
-
49
- <!-- Message Input -->
50
- <div style="display: flex; flex-direction: column;">
51
- <mat-form-field style="width: 100%;" appearance="outline">
52
- <mat-label>Message</mat-label>
53
- <textarea
54
- matInput placeholder="Type your message..."
55
- formControlName="content"
56
- (keydown.enter)="onSendMessage(user); $event.preventDefault()"
57
- ></textarea>
58
- </mat-form-field>
59
- <div style="display: flex; justify-content: flex-end; margin-top: -0.5rem;">
60
- <button mat-raised-button color="primary" (click)="onSendMessage(user)"
61
- [disabled]="messages.invalid">
62
- Send
63
- </button>
64
- </div>
65
- </div>
66
- </div>
67
- }
68
- }
69
-
70
- </div>
71
- }
72
- }
73
-
74
- <!-- Channel List with Subscription Controls using Chips -->
75
- @if ((channels$ | async); as channels) {
76
- @if ((subscribedChannels$ | async); as subscribedChannels) {
77
- <div style="padding: 1rem; background: #f5f5f5; border-radius: 4px; margin-top: 1rem;">
78
- <strong>Subscribe to Channel(s)</strong>
79
- <div style="margin-top: 0.5rem;">
80
- @if (channels.length === 0) {
81
- <div style="color: #666; font-style: italic;">No channels available. Create one above.</div>
82
- } @else {
83
- <mat-chip-listbox aria-label="Channel selection" [multiple]="true">
84
- @for (channel of channels; track channel) {
85
- <mat-chip-option
86
- [selected]="isSubscribed(channel, subscribedChannels)"
87
- (click)="onChipClick(channel, subscribedChannels)">
88
- {{ channel }}
89
- </mat-chip-option>
90
- }
91
- </mat-chip-listbox>
92
- }
93
- </div>
94
- </div>
95
- }
96
- }
@@ -1,31 +0,0 @@
1
- /* tslint:disable:no-unused-variable */
2
- import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
3
- import { HttpClientTestingModule } from '@angular/common/http/testing';
4
- import { By } from '@angular/platform-browser';
5
- import { DebugElement, NO_ERRORS_SCHEMA } from '@angular/core';
6
-
7
- import { WsMessagingComponent } from './ws-messaging.component';
8
-
9
- describe('WsMessagingComponent', () => {
10
- let component: WsMessagingComponent;
11
- let fixture: ComponentFixture<WsMessagingComponent>;
12
-
13
- beforeEach(waitForAsync(() => {
14
- TestBed.configureTestingModule({
15
- imports: [ HttpClientTestingModule ],
16
- declarations: [ WsMessagingComponent ],
17
- schemas: [ NO_ERRORS_SCHEMA ]
18
- })
19
- .compileComponents();
20
- }));
21
-
22
- beforeEach(() => {
23
- fixture = TestBed.createComponent(WsMessagingComponent);
24
- component = fixture.componentInstance;
25
- fixture.detectChanges();
26
- });
27
-
28
- it('should create', () => {
29
- expect(component).toBeTruthy();
30
- });
31
- });