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.
- package/fesm2022/http-request-manager.mjs +7633 -0
- package/fesm2022/http-request-manager.mjs.map +1 -0
- package/http-request-manager-18.7.24.tgz +0 -0
- package/package.json +16 -5
- package/types/http-request-manager.d.ts +2277 -0
- package/ARCHITECTURE.md +0 -483
- package/DATABASE_README.md +0 -1176
- package/HTTP_MANAGER_README.md +0 -579
- package/HTTP_SINGNALS_MANAGER_README.md +0 -654
- package/HTTP_STATE_MANAGER_README.md +0 -948
- package/INTERCEPTOR_README.md +0 -549
- package/LOCAL_STORAGE_README.md +0 -1056
- package/STORE_STATE_MANAGER_README.md +0 -1322
- package/UTILS_README.md +0 -1186
- package/WS_MANAGER_README.md +0 -613
- package/ng-package.json +0 -8
- package/src/lib/http-request-manager.module.ts +0 -132
- package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.html +0 -65
- package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.scss +0 -0
- package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.ts +0 -224
- package/src/lib/http-request-services-demo/http-request-services-demo.component.html +0 -114
- package/src/lib/http-request-services-demo/http-request-services-demo.component.scss +0 -6
- package/src/lib/http-request-services-demo/http-request-services-demo.component.ts +0 -52
- package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.html +0 -195
- package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.scss +0 -17
- package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.ts +0 -206
- package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.html +0 -200
- package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.scss +0 -17
- package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.ts +0 -212
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.html +0 -53
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.scss +0 -60
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.ts +0 -72
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.ts +0 -28
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.html +0 -10
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.scss +0 -29
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.ts +0 -100
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.ts +0 -22
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.html +0 -8
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.scss +0 -19
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.ts +0 -26
- package/src/lib/http-request-services-demo/request-manager-demo/models/app-session.model.ts +0 -30
- package/src/lib/http-request-services-demo/request-manager-demo/models/app.model.ts +0 -19
- package/src/lib/http-request-services-demo/request-manager-demo/models/get-sample.model.ts +0 -25
- package/src/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.ts +0 -19
- package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-details.ts +0 -24
- package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.ts +0 -30
- package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client.model.ts +0 -49
- package/src/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.ts +0 -33
- package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.html +0 -392
- package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.scss +0 -24
- package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.ts +0 -461
- package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.html +0 -393
- package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.scss +0 -24
- package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.ts +0 -421
- package/src/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.ts +0 -87
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/services/state-data-request.service.ts +0 -120
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.css +0 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.html +0 -3
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.ts +0 -16
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.css +0 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.html +0 -3
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.ts +0 -16
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.css +0 -31
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.html +0 -72
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.scss +0 -41
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.spec.ts +0 -205
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.ts +0 -77
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.css +0 -11
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.html +0 -96
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.spec.ts +0 -31
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.ts +0 -229
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.css +0 -30
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.html +0 -172
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.spec.ts +0 -31
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.ts +0 -239
- package/src/lib/http-request-services-demo/request-manager-ws-demo/models/oidc-client.model.ts +0 -31
- package/src/lib/http-request-services-demo/request-manager-ws-demo/models/user-data.model.ts +0 -32
- package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.css +0 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.html +0 -84
- package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.ts +0 -41
- package/src/lib/http-request-services-demo/request-manager-ws-demo/services/index.ts +0 -3
- package/src/lib/http-request-services-demo/request-manager-ws-demo/services/message-service-demo.service.ts +0 -83
- package/src/lib/http-request-services-demo/request-manager-ws-demo/services/notification-service-demo.service.ts +0 -147
- package/src/lib/http-request-services-demo/request-manager-ws-demo/services/state-service-demo.service.ts +0 -158
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.html +0 -53
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.scss +0 -60
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.ts +0 -72
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-download.module.ts +0 -28
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.html +0 -10
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.scss +0 -29
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.ts +0 -100
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/models/download-labels-model.ts +0 -22
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.html +0 -8
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.scss +0 -19
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.ts +0 -26
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app-session.model.ts +0 -30
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app.model.ts +0 -19
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/get-sample.model.ts +0 -25
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-ai-prompt.ts +0 -19
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-details.ts +0 -24
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-info.ts +0 -30
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client.model.ts +0 -49
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-mapper-client-info.ts +0 -33
- package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.html +0 -380
- package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.scss +0 -24
- package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.ts +0 -410
- package/src/lib/http-request-services-demo/store-state-manager-demo/models/settings.model.ts +0 -28
- package/src/lib/http-request-services-demo/store-state-manager-demo/services/settings-state.service.ts +0 -48
- package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.css +0 -0
- package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.html +0 -23
- package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.ts +0 -36
- package/src/lib/index.ts +0 -3
- package/src/lib/interceptors/credentials.interceptor.ts +0 -16
- package/src/lib/interceptors/index.ts +0 -6
- package/src/lib/interceptors/models/error-settings.model.ts +0 -22
- package/src/lib/interceptors/models/index.ts +0 -2
- package/src/lib/interceptors/proxy-debugger.interceptor.ts +0 -46
- package/src/lib/interceptors/request-error.interceptor.ts +0 -65
- package/src/lib/interceptors/request-header.interceptor.ts +0 -53
- package/src/lib/models/config-http-options.model.ts +0 -42
- package/src/lib/models/config-local-storage-options.model.ts +0 -27
- package/src/lib/models/config-options.model.ts +0 -27
- package/src/lib/models/config-token.model.ts +0 -9
- package/src/lib/models/data-type.enum.ts +0 -5
- package/src/lib/models/database-storage.model.ts +0 -24
- package/src/lib/models/index.ts +0 -12
- package/src/lib/models/retry-options.model.ts +0 -22
- package/src/lib/services/database-manager-service/database.manager.service.ts +0 -262
- package/src/lib/services/database-manager-service/db.storage.service.ts +0 -207
- package/src/lib/services/database-manager-service/index.ts +0 -4
- package/src/lib/services/database-manager-service/models/index.ts +0 -2
- package/src/lib/services/database-manager-service/models/table-schema.ts +0 -33
- package/src/lib/services/index.ts +0 -12
- package/src/lib/services/local-storage-manager-service/index.ts +0 -4
- package/src/lib/services/local-storage-manager-service/local-storage-manager.service.spec.ts +0 -71
- package/src/lib/services/local-storage-manager-service/local-storage-manager.service.ts +0 -426
- package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.spec.ts +0 -67
- package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.ts +0 -345
- package/src/lib/services/local-storage-manager-service/models/global-store-options.model.ts +0 -30
- package/src/lib/services/local-storage-manager-service/models/index.ts +0 -6
- package/src/lib/services/local-storage-manager-service/models/setting-options.model.ts +0 -35
- package/src/lib/services/local-storage-manager-service/models/storage-data.model.ts +0 -24
- package/src/lib/services/local-storage-manager-service/models/storage-option.model.ts +0 -32
- package/src/lib/services/local-storage-manager-service/models/storage-type.enum.ts +0 -5
- package/src/lib/services/request-manager-services/README.md +0 -268
- package/src/lib/services/request-manager-services/http-manager-signals.service.ts +0 -246
- package/src/lib/services/request-manager-services/http-manager.service.spec.ts +0 -232
- package/src/lib/services/request-manager-services/http-manager.service.ts +0 -274
- package/src/lib/services/request-manager-services/index.ts +0 -8
- package/src/lib/services/request-manager-services/request-signals.service.ts +0 -214
- package/src/lib/services/request-manager-services/request.service.ts +0 -309
- package/src/lib/services/request-manager-services/rxjs-operators/countdown.ts +0 -17
- package/src/lib/services/request-manager-services/rxjs-operators/delay-retry.ts +0 -16
- package/src/lib/services/request-manager-services/rxjs-operators/index.ts +0 -4
- package/src/lib/services/request-manager-services/rxjs-operators/request-polling.ts +0 -35
- package/src/lib/services/request-manager-services/rxjs-operators/request-streaming.ts +0 -436
- package/src/lib/services/request-manager-state-service/http-manager-state.store.ts +0 -1321
- package/src/lib/services/request-manager-state-service/index.ts +0 -3
- package/src/lib/services/request-manager-state-service/models/api-request.model.ts +0 -61
- package/src/lib/services/request-manager-state-service/models/index.ts +0 -6
- package/src/lib/services/request-manager-state-service/models/request-options.model.ts +0 -22
- package/src/lib/services/request-manager-state-service/models/stream-type.enum.ts +0 -13
- package/src/lib/services/request-manager-state-service/models/ws-options.model.ts +0 -39
- package/src/lib/services/store-state-manager-service/index.ts +0 -3
- package/src/lib/services/store-state-manager-service/models/index.ts +0 -2
- package/src/lib/services/store-state-manager-service/models/state-storage-options.model.ts +0 -24
- package/src/lib/services/store-state-manager-service/store-state-manager.service.ts +0 -88
- package/src/lib/services/utils/app.service.spec.ts +0 -25
- package/src/lib/services/utils/app.service.ts +0 -21
- package/src/lib/services/utils/encryption/README.md +0 -79
- package/src/lib/services/utils/encryption/asymmetrical-encryption.service.ts +0 -282
- package/src/lib/services/utils/encryption/encryption-test.service.ts +0 -39
- package/src/lib/services/utils/encryption/index.ts +0 -5
- package/src/lib/services/utils/encryption/random.ts +0 -81
- package/src/lib/services/utils/encryption/symmetrical-encryption.service.ts +0 -93
- package/src/lib/services/utils/headers.service.spec.ts +0 -80
- package/src/lib/services/utils/headers.service.ts +0 -18
- package/src/lib/services/utils/index.ts +0 -7
- package/src/lib/services/utils/object-merger.service.spec.ts +0 -18
- package/src/lib/services/utils/object-merger.service.ts +0 -78
- package/src/lib/services/utils/path-query.service.spec.ts +0 -117
- package/src/lib/services/utils/path-query.service.ts +0 -69
- package/src/lib/services/utils/random-color.utils.ts +0 -83
- package/src/lib/services/utils/utils.service.spec.ts +0 -165
- package/src/lib/services/utils/utils.service.ts +0 -192
- package/src/lib/services/ws-manager-service/index.ts +0 -4
- package/src/lib/services/ws-manager-service/models/channel-info.model.ts +0 -24
- package/src/lib/services/ws-manager-service/models/channel-message-data.model.ts +0 -24
- package/src/lib/services/ws-manager-service/models/channel-message.model.ts +0 -24
- package/src/lib/services/ws-manager-service/models/communication-type.enum.ts +0 -5
- package/src/lib/services/ws-manager-service/models/index.ts +0 -5
- package/src/lib/services/ws-manager-service/models/ws-user.model.ts +0 -38
- package/src/lib/services/ws-manager-service/services/index.ts +0 -3
- package/src/lib/services/ws-manager-service/services/websocket.service.ts +0 -392
- package/src/public-api.ts +0 -14
- package/tsconfig.lib.json +0 -32
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -14
package/ARCHITECTURE.md
DELETED
|
@@ -1,483 +0,0 @@
|
|
|
1
|
-
# HTTP Request Manager - Architecture Overview
|
|
2
|
-
|
|
3
|
-
## System Architecture
|
|
4
|
-
|
|
5
|
-
```
|
|
6
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
7
|
-
│ Angular Application │
|
|
8
|
-
├─────────────────────────────────────────────────────────────────┤
|
|
9
|
-
│ │
|
|
10
|
-
│ ┌────────────────┐ ┌────────────────┐ ┌──────────────────┐ │
|
|
11
|
-
│ │ Components │ │ Components │ │ Components │ │
|
|
12
|
-
│ │ (Signals) │ │ (Observables) │ │ (State Store) │ │
|
|
13
|
-
│ └───────┬────────┘ └───────┬────────┘ └────────┬─────────┘ │
|
|
14
|
-
│ │ │ │ │
|
|
15
|
-
│ ▼ ▼ ▼ │
|
|
16
|
-
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │
|
|
17
|
-
│ │HTTPManager │ │HTTPManager │ │HTTPManager │ │
|
|
18
|
-
│ │SignalsService│ │Service │ │StateService │ │
|
|
19
|
-
│ └──────┬───────┘ └──────┬───────┘ └────────┬─────────┘ │
|
|
20
|
-
│ │ │ │ │
|
|
21
|
-
│ └───────────────────┴──────────────────────┘ │
|
|
22
|
-
│ │ │
|
|
23
|
-
│ ▼ │
|
|
24
|
-
│ ┌─────────────────┐ │
|
|
25
|
-
│ │ HttpClient │ │
|
|
26
|
-
│ │ (Angular) │ │
|
|
27
|
-
│ └────────┬────────┘ │
|
|
28
|
-
│ │ │
|
|
29
|
-
├─────────────────────────────┼────────────────────────────────────┤
|
|
30
|
-
│ │ │
|
|
31
|
-
│ ┌──────────────────────────┼──────────────────────┐ │
|
|
32
|
-
│ │ Local Storage Layer │ │
|
|
33
|
-
│ ├──────────────────────────┼──────────────────────┤ │
|
|
34
|
-
│ │ │ │ │
|
|
35
|
-
│ │ ┌────────────────┐ │ ┌─────────────┐│ │
|
|
36
|
-
│ │ │LocalStorage │ │ │IndexedDB ││ │
|
|
37
|
-
│ │ │Manager Service │ │ │(Dexie.js) ││ │
|
|
38
|
-
│ │ └────────────────┘ │ └─────────────┘│ │
|
|
39
|
-
│ │ │ │ │
|
|
40
|
-
│ └──────────────────────────┼──────────────────────┘ │
|
|
41
|
-
│ │ │
|
|
42
|
-
│ ┌──────────────────────────┼──────────────────────┐ │
|
|
43
|
-
│ │ WebSocket Layer │ │
|
|
44
|
-
│ ├──────────────────────────┼──────────────────────┤ │
|
|
45
|
-
│ │ │ │ │
|
|
46
|
-
│ │ ┌─────────────────────────────────────┐ │ │
|
|
47
|
-
│ │ │ WebsocketService │ │ │
|
|
48
|
-
│ │ │ - Connection Management │ │ │
|
|
49
|
-
│ │ │ - Channel Subscriptions │ │ │
|
|
50
|
-
│ │ │ - Message Routing │ │ │
|
|
51
|
-
│ │ │ - Authentication (JWT) │ │ │
|
|
52
|
-
│ │ └─────────────────────────────────────┘ │ │
|
|
53
|
-
│ │ │ │
|
|
54
|
-
│ └─────────────────────────────────────────────────┘ │
|
|
55
|
-
│ │ │
|
|
56
|
-
└─────────────────────────────┼────────────────────────────────────┘
|
|
57
|
-
│
|
|
58
|
-
▼
|
|
59
|
-
┌──────────────────────────────┐
|
|
60
|
-
│ Backend Server │
|
|
61
|
-
├──────────────────────────────┤
|
|
62
|
-
│ │
|
|
63
|
-
│ ┌────────────────────────┐ │
|
|
64
|
-
│ │ HTTP REST API │ │
|
|
65
|
-
│ │ (Express/Node.js) │ │
|
|
66
|
-
│ └────────────────────────┘ │
|
|
67
|
-
│ │
|
|
68
|
-
│ ┌────────────────────────┐ │
|
|
69
|
-
│ │ WebSocket Server │ │
|
|
70
|
-
│ │ (ws library) │ │
|
|
71
|
-
│ └────────────────────────┘ │
|
|
72
|
-
│ │
|
|
73
|
-
│ ┌────────────────────────┐ │
|
|
74
|
-
│ │ SQLite Database │ │
|
|
75
|
-
│ │ (Notifications) │ │
|
|
76
|
-
│ └────────────────────────┘ │
|
|
77
|
-
│ │
|
|
78
|
-
└───────────────────────────────┘
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
## Service Hierarchy
|
|
82
|
-
|
|
83
|
-
```
|
|
84
|
-
HTTPManagerService (Base)
|
|
85
|
-
├── Features:
|
|
86
|
-
│ ├── HTTP CRUD Operations
|
|
87
|
-
│ ├── Loading States (isPending$, error$, data$)
|
|
88
|
-
│ ├── Retry Logic
|
|
89
|
-
│ ├── Polling with Countdown
|
|
90
|
-
│ ├── Adapters & Mappers
|
|
91
|
-
│ └── Stream Handling
|
|
92
|
-
│
|
|
93
|
-
├── HTTPManagerSignalsService
|
|
94
|
-
│ └── Same as HTTPManagerService but with Angular Signals
|
|
95
|
-
│
|
|
96
|
-
└── HTTPManagerStateService (extends ComponentStore)
|
|
97
|
-
├── Inherits all HTTPManagerService features
|
|
98
|
-
├── ComponentStore Integration
|
|
99
|
-
├── CRUD with Auto State Updates
|
|
100
|
-
├── WebSocket Integration
|
|
101
|
-
│ ├── SYS- channels (State sync)
|
|
102
|
-
│ ├── PUB- channels (Messaging)
|
|
103
|
-
│ └── MES- channels (Notifications)
|
|
104
|
-
├── IndexedDB Caching
|
|
105
|
-
├── Pagination Support
|
|
106
|
-
└── Real-time Updates
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
## Data Flow
|
|
110
|
-
|
|
111
|
-
### HTTP Request Flow
|
|
112
|
-
|
|
113
|
-
```
|
|
114
|
-
Component
|
|
115
|
-
│
|
|
116
|
-
├─> Call Service Method (e.g., fetchRecords())
|
|
117
|
-
│
|
|
118
|
-
▼
|
|
119
|
-
HTTPManagerStateService
|
|
120
|
-
│
|
|
121
|
-
├─> Build ApiRequest
|
|
122
|
-
│ ├─> Apply Mapper (if provided)
|
|
123
|
-
│ └─> Add Headers
|
|
124
|
-
│
|
|
125
|
-
▼
|
|
126
|
-
HTTPManagerService
|
|
127
|
-
│
|
|
128
|
-
├─> Check Polling
|
|
129
|
-
├─> Execute HTTP Request (HttpClient)
|
|
130
|
-
│
|
|
131
|
-
▼
|
|
132
|
-
Interceptors
|
|
133
|
-
│
|
|
134
|
-
├─> RequestHeadersInterceptor (add headers)
|
|
135
|
-
├─> WithCredentialsInterceptor (add credentials)
|
|
136
|
-
└─> RequestErrorInterceptor (handle errors)
|
|
137
|
-
│
|
|
138
|
-
▼
|
|
139
|
-
Backend Server
|
|
140
|
-
│
|
|
141
|
-
├─> Process Request
|
|
142
|
-
└─> Return Response
|
|
143
|
-
│
|
|
144
|
-
▼
|
|
145
|
-
HTTPManagerService
|
|
146
|
-
│
|
|
147
|
-
├─> Apply Adapter (transform data)
|
|
148
|
-
├─> Update isPending$ = false
|
|
149
|
-
├─> Update data$ with new data
|
|
150
|
-
│
|
|
151
|
-
▼
|
|
152
|
-
HTTPManagerStateService
|
|
153
|
-
│
|
|
154
|
-
├─> Update ComponentStore state
|
|
155
|
-
└─> Save to IndexedDB (if configured)
|
|
156
|
-
│
|
|
157
|
-
▼
|
|
158
|
-
Component
|
|
159
|
-
│
|
|
160
|
-
└─> Display updated data via data$ observable
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
### WebSocket Message Flow
|
|
164
|
-
|
|
165
|
-
```
|
|
166
|
-
Component
|
|
167
|
-
│
|
|
168
|
-
└─> Send Message (e.g., sendNotification())
|
|
169
|
-
│
|
|
170
|
-
▼
|
|
171
|
-
HTTPManagerStateService
|
|
172
|
-
│
|
|
173
|
-
└─> Add Channel Prefix (MES-, PUB-, or SYS-)
|
|
174
|
-
│
|
|
175
|
-
▼
|
|
176
|
-
WebsocketService
|
|
177
|
-
│
|
|
178
|
-
├─> Format Message
|
|
179
|
-
│ ├─> type: 'notification'
|
|
180
|
-
│ ├─> channel: 'MES-alerts'
|
|
181
|
-
│ ├─> content: { message: '...' }
|
|
182
|
-
│ └─> sessionId: { id, name, email }
|
|
183
|
-
│
|
|
184
|
-
└─> Send via WebSocket
|
|
185
|
-
│
|
|
186
|
-
▼
|
|
187
|
-
Backend WebSocket Server
|
|
188
|
-
│
|
|
189
|
-
├─> Validate Channel & User
|
|
190
|
-
├─> Store in Database (for MES- channels)
|
|
191
|
-
└─> Broadcast to Subscribers
|
|
192
|
-
│
|
|
193
|
-
▼
|
|
194
|
-
All Connected Clients (Subscribers)
|
|
195
|
-
│
|
|
196
|
-
├─> WebsocketService receives message
|
|
197
|
-
│
|
|
198
|
-
▼
|
|
199
|
-
HTTPManagerStateService
|
|
200
|
-
│
|
|
201
|
-
├─> Update ComponentStore
|
|
202
|
-
└─> Emit via notificationMessages$
|
|
203
|
-
│
|
|
204
|
-
▼
|
|
205
|
-
Component
|
|
206
|
-
│
|
|
207
|
-
└─> Display notification in UI
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
## Channel Architecture
|
|
211
|
-
|
|
212
|
-
### Channel Types and Data Flow
|
|
213
|
-
|
|
214
|
-
```
|
|
215
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
216
|
-
│ Client Application │
|
|
217
|
-
├─────────────────────────────────────────────────────────────────┤
|
|
218
|
-
│ │
|
|
219
|
-
│ Component calls: │
|
|
220
|
-
│ ┌──────────────────────────────────────────────────────────┐ │
|
|
221
|
-
│ │ stateService.subscribeToChannel('general') (PUB)│ │
|
|
222
|
-
│ │ stateService.subscribeToNotificationChannel('alerts') (MES)│ │
|
|
223
|
-
│ │ stateService.fetchRecords() (SYS)│ │
|
|
224
|
-
│ └──────────────────────────────────────────────────────────┘ │
|
|
225
|
-
│ │ │
|
|
226
|
-
│ ▼ │
|
|
227
|
-
│ ┌──────────────────────────────────────────────────────────┐ │
|
|
228
|
-
│ │ HTTPManagerStateService │ │
|
|
229
|
-
│ │ - Adds appropriate prefix (PUB-, MES-, SYS-) │ │
|
|
230
|
-
│ │ - Routes to WebsocketService │ │
|
|
231
|
-
│ └──────────────────────────────────────────────────────────┘ │
|
|
232
|
-
│ │ │
|
|
233
|
-
│ ▼ │
|
|
234
|
-
│ ┌──────────────────────────────────────────────────────────┐ │
|
|
235
|
-
│ │ WebsocketService │ │
|
|
236
|
-
│ │ - Manages connection lifecycle │ │
|
|
237
|
-
│ │ - Sends subscription messages │ │
|
|
238
|
-
│ │ - Receives and routes messages │ │
|
|
239
|
-
│ └──────────────────────────────────────────────────────────┘ │
|
|
240
|
-
│ │ │
|
|
241
|
-
└────────────────────────────┼─────────────────────────────────────┘
|
|
242
|
-
│
|
|
243
|
-
▼
|
|
244
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
245
|
-
│ WebSocket Server │
|
|
246
|
-
├─────────────────────────────────────────────────────────────────┤
|
|
247
|
-
│ │
|
|
248
|
-
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
|
249
|
-
│ │ PUB- Channel │ │ MES- Channel │ │ SYS- Channel │ │
|
|
250
|
-
│ │ │ │ │ │ │ │
|
|
251
|
-
│ │ In-Memory │ │ DB Persisted │ │ State Sync │ │
|
|
252
|
-
│ │ Broadcasting │ │ Notifications│ │ Private │ │
|
|
253
|
-
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
|
|
254
|
-
│ │ │ │ │
|
|
255
|
-
│ ▼ ▼ ▼ │
|
|
256
|
-
│ ┌────────────────────────────────────────────────┐ │
|
|
257
|
-
│ │ Channel Subscribers (Set<WebSocket>) │ │
|
|
258
|
-
│ └────────────────────────────────────────────────┘ │
|
|
259
|
-
│ │ │ │ │
|
|
260
|
-
│ └──────────────────┴──────────────────┘ │
|
|
261
|
-
│ │ │
|
|
262
|
-
│ ▼ │
|
|
263
|
-
│ ┌─────────────────────────────────────────────────┐ │
|
|
264
|
-
│ │ Broadcast to All Subscribers │ │
|
|
265
|
-
│ └─────────────────────────────────────────────────┘ │
|
|
266
|
-
│ │
|
|
267
|
-
│ For MES- channels: │
|
|
268
|
-
│ ┌─────────────────────────────────────────────────┐ │
|
|
269
|
-
│ │ 1. Store in SQLite Database │ │
|
|
270
|
-
│ │ 2. Broadcast to current subscribers │ │
|
|
271
|
-
│ │ 3. Retrieve historical data on new subscription│ │
|
|
272
|
-
│ └─────────────────────────────────────────────────┘ │
|
|
273
|
-
│ │
|
|
274
|
-
└───────────────────────────────────────────────────────────────────┘
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
## State Management Flow
|
|
278
|
-
|
|
279
|
-
```
|
|
280
|
-
┌─────────────────────────────────────────────────────────────┐
|
|
281
|
-
│ ComponentStore │
|
|
282
|
-
│ (HTTPManagerStateService extends this) │
|
|
283
|
-
├─────────────────────────────────────────────────────────────┤
|
|
284
|
-
│ │
|
|
285
|
-
│ State Interface: │
|
|
286
|
-
│ { │
|
|
287
|
-
│ records: T[], // Array of entities │
|
|
288
|
-
│ record: T | null, // Single selected entity │
|
|
289
|
-
│ page: number, // Current page │
|
|
290
|
-
│ totalPages: number, // Total pages │
|
|
291
|
-
│ isPending: boolean, // Loading state │
|
|
292
|
-
│ error: any // Error state │
|
|
293
|
-
│ } │
|
|
294
|
-
│ │
|
|
295
|
-
│ Selectors (Observables): │
|
|
296
|
-
│ ├─> data$ (all records) │
|
|
297
|
-
│ ├─> record$ (single record) │
|
|
298
|
-
│ ├─> selectRecord$(id) (specific record) │
|
|
299
|
-
│ ├─> page$ │
|
|
300
|
-
│ └─> totalPages$ │
|
|
301
|
-
│ │
|
|
302
|
-
│ Updaters (State Mutations): │
|
|
303
|
-
│ ├─> updateRecordsState(records[]) │
|
|
304
|
-
│ ├─> addRecordState(record) │
|
|
305
|
-
│ ├─> updateRecordState(record) │
|
|
306
|
-
│ ├─> deleteRecordState(id) │
|
|
307
|
-
│ └─> setError(error) │
|
|
308
|
-
│ │
|
|
309
|
-
│ Effects (Side Effects): │
|
|
310
|
-
│ ├─> fetchRecords() → HTTP GET │
|
|
311
|
-
│ ├─> createRecord() → HTTP POST → addRecordState() │
|
|
312
|
-
│ ├─> updateRecord() → HTTP PUT → updateRecordState() │
|
|
313
|
-
│ ├─> deleteRecord() → HTTP DELETE → deleteRecordState() │
|
|
314
|
-
│ └─> WebSocket messages → auto state updates │
|
|
315
|
-
│ │
|
|
316
|
-
└───────────────────────────────────────────────────────────────┘
|
|
317
|
-
```
|
|
318
|
-
|
|
319
|
-
## Caching Strategy
|
|
320
|
-
|
|
321
|
-
```
|
|
322
|
-
┌────────────────────────────────────────────────────────────┐
|
|
323
|
-
│ Fetch Records Request │
|
|
324
|
-
└──────────────────────┬─────────────────────────────────────┘
|
|
325
|
-
│
|
|
326
|
-
▼
|
|
327
|
-
┌─────────────────────────┐
|
|
328
|
-
│ DatabaseStorage Config? │
|
|
329
|
-
└────────┬────────────────┘
|
|
330
|
-
│
|
|
331
|
-
┌───────┴────────┐
|
|
332
|
-
│ │
|
|
333
|
-
YES NO
|
|
334
|
-
│ │
|
|
335
|
-
▼ ▼
|
|
336
|
-
┌──────────────────┐ ┌──────────────┐
|
|
337
|
-
│Check IndexedDB │ │Fetch from │
|
|
338
|
-
│for cached data │ │Server (HTTP) │
|
|
339
|
-
└────┬─────────────┘ └──────┬───────┘
|
|
340
|
-
│ │
|
|
341
|
-
▼ │
|
|
342
|
-
┌──────────────┐ │
|
|
343
|
-
│Cache Valid? │ │
|
|
344
|
-
└──┬───────────┘ │
|
|
345
|
-
│ │
|
|
346
|
-
┌──┴──┐ │
|
|
347
|
-
│ YES │ NO │
|
|
348
|
-
│ │ │
|
|
349
|
-
▼ ▼ │
|
|
350
|
-
│ ┌──────────────┐ │
|
|
351
|
-
│ │Fetch from │ │
|
|
352
|
-
│ │Server │ │
|
|
353
|
-
│ └──────┬───────┘ │
|
|
354
|
-
│ │ │
|
|
355
|
-
│ ▼ │
|
|
356
|
-
│ ┌──────────────┐ │
|
|
357
|
-
│ │Save to │ │
|
|
358
|
-
│ │IndexedDB │ │
|
|
359
|
-
│ └──────┬───────┘ │
|
|
360
|
-
│ │ │
|
|
361
|
-
└─────────┴──────────────────┘
|
|
362
|
-
│
|
|
363
|
-
▼
|
|
364
|
-
┌──────────────────────────┐
|
|
365
|
-
│Update ComponentStore │
|
|
366
|
-
│and emit via data$ │
|
|
367
|
-
└──────────────────────────┘
|
|
368
|
-
```
|
|
369
|
-
|
|
370
|
-
## Integration Points
|
|
371
|
-
|
|
372
|
-
### Backend Requirements
|
|
373
|
-
|
|
374
|
-
For full functionality, the backend server must:
|
|
375
|
-
|
|
376
|
-
1. **HTTP REST API**
|
|
377
|
-
- CRUD endpoints for entities
|
|
378
|
-
- JSON request/response format
|
|
379
|
-
- Support for standard HTTP methods (GET, POST, PUT, DELETE)
|
|
380
|
-
|
|
381
|
-
2. **WebSocket Server**
|
|
382
|
-
- Accept WebSocket connections with optional JWT authentication
|
|
383
|
-
- Handle message types: `subscribe`, `unsubscribe`, `message`, `notification`, etc.
|
|
384
|
-
- Broadcast messages to channel subscribers
|
|
385
|
-
- Maintain channel subscriptions per connection
|
|
386
|
-
|
|
387
|
-
3. **Database (for MES- channels)**
|
|
388
|
-
- Store notifications with: id, channel, user_name, created (epoch), message (JSON)
|
|
389
|
-
- Support queries by channel and date range
|
|
390
|
-
- Provide endpoints for:
|
|
391
|
-
- GET today's notification channels
|
|
392
|
-
- GET previous day's notification channels
|
|
393
|
-
- GET notifications by channel with date filters
|
|
394
|
-
|
|
395
|
-
### Example Backend Structure
|
|
396
|
-
|
|
397
|
-
See `gtlc-websockets` server implementation for reference:
|
|
398
|
-
- `ws-server.js` - Main server with HTTP and WebSocket setup
|
|
399
|
-
- `middleware/websocket-service.js` - WebSocket message handlers
|
|
400
|
-
- `middleware/notification-db.js` - SQLite database operations
|
|
401
|
-
|
|
402
|
-
---
|
|
403
|
-
|
|
404
|
-
## Security Considerations
|
|
405
|
-
|
|
406
|
-
1. **JWT Authentication**: WebSocket connections can require JWT tokens
|
|
407
|
-
2. **Encrypted Storage**: LocalStorage can use AES encryption with APP_ID
|
|
408
|
-
3. **Channel Access Control**: Backend validates user permissions for channels
|
|
409
|
-
4. **HTTPS/WSS**: Production deployments should use secure protocols
|
|
410
|
-
5. **Data Validation**: All inputs are validated on server side
|
|
411
|
-
|
|
412
|
-
---
|
|
413
|
-
|
|
414
|
-
## Performance Optimizations
|
|
415
|
-
|
|
416
|
-
1. **IndexedDB Caching**: Reduces server load and improves offline capability
|
|
417
|
-
2. **Polling with Countdown**: Visual feedback prevents duplicate requests
|
|
418
|
-
3. **Connection Pooling**: WebSocket reuses single connection for all channels
|
|
419
|
-
4. **Debounced Updates**: State updates batched when possible
|
|
420
|
-
5. **Lazy Loading**: Services loaded only when needed
|
|
421
|
-
|
|
422
|
-
---
|
|
423
|
-
|
|
424
|
-
## Migration Guide
|
|
425
|
-
|
|
426
|
-
### From HTTPClient to HTTPManagerService
|
|
427
|
-
|
|
428
|
-
```typescript
|
|
429
|
-
// Before (HttpClient)
|
|
430
|
-
http.get('api/users').subscribe(users => {
|
|
431
|
-
this.users = users;
|
|
432
|
-
this.loading = false;
|
|
433
|
-
});
|
|
434
|
-
|
|
435
|
-
// After (HTTPManagerService)
|
|
436
|
-
httpManager.getRequest(
|
|
437
|
-
ApiRequest.adapt({ path: ['users'] })
|
|
438
|
-
).subscribe();
|
|
439
|
-
|
|
440
|
-
data$ = this.httpManager.data$;
|
|
441
|
-
isLoading$ = this.httpManager.isPending$;
|
|
442
|
-
```
|
|
443
|
-
|
|
444
|
-
### From Manual State to HTTPManagerStateService
|
|
445
|
-
|
|
446
|
-
```typescript
|
|
447
|
-
// Before (Manual State)
|
|
448
|
-
users: User[] = [];
|
|
449
|
-
loading = false;
|
|
450
|
-
|
|
451
|
-
loadUsers() {
|
|
452
|
-
this.loading = true;
|
|
453
|
-
this.http.get('api/users').subscribe(users => {
|
|
454
|
-
this.users = users;
|
|
455
|
-
this.loading = false;
|
|
456
|
-
});
|
|
457
|
-
}
|
|
458
|
-
|
|
459
|
-
addUser(user: User) {
|
|
460
|
-
this.http.post('api/users', user).subscribe(newUser => {
|
|
461
|
-
this.users = [...this.users, newUser];
|
|
462
|
-
});
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
// After (HTTPManagerStateService)
|
|
466
|
-
@Injectable()
|
|
467
|
-
export class UsersStore extends HTTPManagerStateService<User> {
|
|
468
|
-
constructor() {
|
|
469
|
-
super(ApiRequest.adapt({ path: ['users'] }), DataType.ARRAY);
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
loadUsers() { this.fetchRecords(); }
|
|
473
|
-
addUser(user: User) { this.createRecord(user); }
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
// Component
|
|
477
|
-
data$ = this.usersStore.data$;
|
|
478
|
-
isLoading$ = this.usersStore.isPending$;
|
|
479
|
-
```
|
|
480
|
-
|
|
481
|
-
---
|
|
482
|
-
|
|
483
|
-
This architecture provides a scalable, maintainable foundation for Angular applications with comprehensive data management capabilities.
|