http-request-manager 18.15.34 → 18.16.1
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 +13688 -0
- package/fesm2022/http-request-manager.mjs.map +1 -0
- package/http-request-manager-18.16.0.tgz +0 -0
- package/package.json +15 -6
- package/types/http-request-manager.d.ts +3968 -0
- package/TEST_COVERAGE_SUMMARY.md +0 -458
- package/ng-package.json +0 -8
- package/src/docs/ADVANCED_WEBSOCKET.md +0 -633
- package/src/docs/ARCHITECTURE.md +0 -633
- package/src/docs/BATCH_REQUEST_README.md +0 -467
- package/src/docs/COMPLETE_API_REFERENCE.md +0 -1037
- package/src/docs/DATABASE_README.md +0 -1195
- package/src/docs/ENCRYPTION_README.md +0 -403
- package/src/docs/HTTP_MANAGER_README.md +0 -628
- package/src/docs/HTTP_SINGNALS_MANAGER_README.md +0 -654
- package/src/docs/HTTP_STATE_MANAGER_README.md +0 -1391
- package/src/docs/INTERCEPTOR_README.md +0 -549
- package/src/docs/LOCAL_STORAGE_README.md +0 -1056
- package/src/docs/LOCAL_STORAGE_SIGNALS_README.md +0 -338
- package/src/docs/LOGGER_README.md +0 -310
- package/src/docs/MESSAGE_TRACKER_README.md +0 -518
- package/src/docs/MESSAGE_TRACKER_SIGNALS_README.md +0 -563
- package/src/docs/MODELS_README.md +0 -1264
- package/src/docs/SIGNAL_SERVICES_README.md +0 -238
- package/src/docs/SQL_DIXIE_README.md +0 -574
- package/src/docs/STORE_STATE_MANAGER_README.md +0 -556
- package/src/docs/STORE_STATE_SIGNALS_README.md +0 -600
- package/src/docs/UPLOAD_REQUEST_README.md +0 -324
- package/src/docs/UTILS_README.md +0 -1604
- package/src/docs/WEBSOCKET_MESSAGE_SERVICE.md +0 -799
- package/src/docs/WEBSOCKET_SIGNALS_README.md +0 -641
- package/src/docs/WEBSOCKET_SINGLETON_REFACTORING.md +0 -201
- package/src/docs/WS_MANAGER_README.md +0 -613
- package/src/lib/http-request-manager.module.ts +0 -147
- package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.html +0 -116
- 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 -255
- package/src/lib/http-request-services-demo/http-request-services-demo.component.html +0 -123
- 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 -53
- 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 -208
- 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 -214
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.html +0 -53
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.scss +0 -60
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.ts +0 -72
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-download.module.ts +0 -28
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.html +0 -10
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.scss +0 -29
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.ts +0 -100
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/models/download-labels-model.ts +0 -22
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.html +0 -8
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.scss +0 -19
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.ts +0 -26
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/app-session.model.ts +0 -30
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/app.model.ts +0 -19
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/get-sample.model.ts +0 -25
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-ai-prompt.ts +0 -19
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client-details.ts +0 -24
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client-info.ts +0 -30
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client.model.ts +0 -49
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-mapper-client-info.ts +0 -33
- package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.html +0 -279
- package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.scss +0 -24
- package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.ts +0 -461
- 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 -622
- package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.scss +0 -106
- package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.ts +0 -687
- package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.html +0 -418
- 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 -576
- package/src/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.ts +0 -89
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/services/state-data-request.service.ts +0 -119
- 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 -94
- 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 -203
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.ts +0 -144
- 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 -102
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.spec.ts +0 -40
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.ts +0 -230
- 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 -40
- 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/jwt-token.service.ts +0 -62
- 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 -168
- 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 -49
- 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/http-request-services-demo/store-state-signals-demo/store-state-signals-demo.component.ts +0 -161
- package/src/lib/http-request-services-demo/upload-demo/models/index.ts +0 -1
- package/src/lib/http-request-services-demo/upload-demo/models/upload-state.model.ts +0 -30
- package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.html +0 -89
- package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.scss +0 -160
- package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.spec.ts +0 -101
- package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.ts +0 -136
- 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 -56
- package/src/lib/message-display/README.md +0 -509
- package/src/lib/message-display/index.ts +0 -4
- package/src/lib/message-display/models/action.model.ts +0 -27
- package/src/lib/message-display/models/communication-message.model.ts +0 -77
- package/src/lib/message-display/models/display-config.model.ts +0 -35
- package/src/lib/message-display/models/display-rule.interface.ts +0 -28
- package/src/lib/message-display/models/display-strategy.interface.ts +0 -8
- package/src/lib/message-display/models/index.ts +0 -6
- package/src/lib/message-display/models/slide.model.ts +0 -24
- package/src/lib/message-display/rules/default-display-rules.ts +0 -35
- package/src/lib/message-display/services/message-display-router.service.ts +0 -63
- package/src/lib/message-display/strategies/snackbar.strategy.ts +0 -46
- package/src/lib/models/batch-options.model.ts +0 -33
- package/src/lib/models/batch-progress.model.ts +0 -19
- package/src/lib/models/batch-request-state.model.ts +0 -40
- package/src/lib/models/batch-result.model.ts +0 -30
- package/src/lib/models/config-http-options.model.ts +0 -45
- 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 -16
- package/src/lib/models/retry-options.model.ts +0 -22
- package/src/lib/models/upload-validation-error.model.ts +0 -46
- package/src/lib/services/SQL-DixieJS service/dexie-query-executor.ts +0 -246
- package/src/lib/services/SQL-DixieJS service/dexie-sql.service.ts +0 -31
- package/src/lib/services/SQL-DixieJS service/index.ts +0 -4
- package/src/lib/services/SQL-DixieJS service/models/execution-plan.model.ts +0 -52
- package/src/lib/services/SQL-DixieJS service/models/index.ts +0 -3
- package/src/lib/services/SQL-DixieJS service/models/sql-errors.model.ts +0 -13
- package/src/lib/services/SQL-DixieJS service/models/sql-options.model.ts +0 -3
- package/src/lib/services/SQL-DixieJS service/query-planner.ts +0 -284
- package/src/lib/services/SQL-DixieJS service/schema-validator.ts +0 -217
- package/src/lib/services/SQL-DixieJS service/sql-parser.ts +0 -35
- package/src/lib/services/database-manager-service/database.manager.service.ts +0 -384
- package/src/lib/services/database-manager-service/db.storage.service.ts +0 -240
- 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 -20
- 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 -567
- 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 -437
- 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 -282
- package/src/lib/services/request-manager-services/http-manager-signals.service.ts +0 -674
- package/src/lib/services/request-manager-services/http-manager.service.spec.ts +0 -353
- package/src/lib/services/request-manager-services/http-manager.service.ts +0 -727
- package/src/lib/services/request-manager-services/index.ts +0 -8
- package/src/lib/services/request-manager-services/request-signals.service.ts +0 -372
- package/src/lib/services/request-manager-services/request.service.ts +0 -435
- 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 -468
- package/src/lib/services/request-manager-state-service/http-manager-state.store.spec.ts +0 -665
- package/src/lib/services/request-manager-state-service/http-manager-state.store.ts +0 -2395
- 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 -86
- package/src/lib/services/request-manager-state-service/models/index.ts +0 -14
- package/src/lib/services/request-manager-state-service/models/operation-result.model.ts +0 -18
- package/src/lib/services/request-manager-state-service/models/parsing-result.model.ts +0 -21
- package/src/lib/services/request-manager-state-service/models/request-options.model.ts +0 -37
- package/src/lib/services/request-manager-state-service/models/stream-config.model.ts +0 -20
- package/src/lib/services/request-manager-state-service/models/stream-event-metadata.model.ts +0 -23
- package/src/lib/services/request-manager-state-service/models/stream-event.model.ts +0 -23
- package/src/lib/services/request-manager-state-service/models/stream-output.model.ts +0 -23
- package/src/lib/services/request-manager-state-service/models/stream-progress.model.ts +0 -24
- 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 -42
- package/src/lib/services/store-state-manager-service/index.ts +0 -4
- package/src/lib/services/store-state-manager-service/models/index.ts +0 -3
- package/src/lib/services/store-state-manager-service/models/state-operation-result.model.ts +0 -30
- 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-signals.service.ts +0 -169
- package/src/lib/services/store-state-manager-service/store-state-manager.service.ts +0 -153
- 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 -106
- 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 -9
- package/src/lib/services/utils/logger.service.ts +0 -90
- package/src/lib/services/utils/models/index.ts +0 -4
- package/src/lib/services/utils/models/normalized-request-options.model.ts +0 -24
- package/src/lib/services/utils/models/path-tracker-state.model.ts +0 -20
- package/src/lib/services/utils/models/query-params-tracker-options.model.ts +0 -24
- package/src/lib/services/utils/models/query-tracker-state.model.ts +0 -23
- 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/query-params-tracker.service.ts +0 -442
- 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 -13
- package/src/lib/services/ws-manager-service/message-tracker-signals.service.ts +0 -147
- package/src/lib/services/ws-manager-service/message-tracker.service.ts +0 -477
- package/src/lib/services/ws-manager-service/models/channel-info.model.ts +0 -29
- 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 -36
- package/src/lib/services/ws-manager-service/models/channel-type.enum.ts +0 -6
- 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 -10
- package/src/lib/services/ws-manager-service/models/notification-message.model.ts +0 -29
- package/src/lib/services/ws-manager-service/models/public-message.model.ts +0 -18
- package/src/lib/services/ws-manager-service/models/state-message.model.ts +0 -18
- 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 -4
- package/src/lib/services/ws-manager-service/services/websocket-message.service.ts +0 -129
- package/src/lib/services/ws-manager-service/services/websocket.service.ts +0 -434
- package/src/lib/services/ws-manager-service/websocket-service/index.ts +0 -1
- package/src/lib/services/ws-manager-service/websocket-service/websocket-manager.service.ts +0 -716
- package/src/lib/services/ws-manager-service/websocket-services-complete.spec.ts +0 -596
- package/src/lib/services/ws-manager-service/websocket-signals-manager.service.ts +0 -141
- package/src/public-api.ts +0 -19
- package/tsconfig.lib.json +0 -34
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -14
|
@@ -1,628 +0,0 @@
|
|
|
1
|
-
# HTTP Manager Service
|
|
2
|
-
|
|
3
|
-
The `HTTPManagerService` is the core HTTP client service that provides Observable-based request management with comprehensive features for enterprise applications.
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
The HTTPManagerService acts as a wrapper around Angular's HttpClient, providing a centralized way to manage HTTP requests with:
|
|
8
|
-
|
|
9
|
-
- **State Management** - Exposes `data$`, `isPending$`, `error$`, and `countdown$` observables
|
|
10
|
-
- **Polling Support** - Automatic endpoint polling with countdown timers
|
|
11
|
-
- **Retry Logic** - Configurable retry attempts with delays
|
|
12
|
-
- **Adapters & Mappers** - Data transformation for requests and responses
|
|
13
|
-
- **Streaming** - Support for streaming responses (NDJSON, Server-Sent Events)
|
|
14
|
-
- **Error Handling** - Centralized error handling with optional toast notifications
|
|
15
|
-
- **File Downloads** - Progress tracking for file downloads
|
|
16
|
-
- **File Uploads** - Multi-file upload with progress tracking, validation, and form-data configuration ([see Upload Request docs](./UPLOAD_REQUEST_README.md))
|
|
17
|
-
|
|
18
|
-
## Installation
|
|
19
|
-
|
|
20
|
-
This service is automatically available when you import `HttpRequestManagerModule`.
|
|
21
|
-
|
|
22
|
-
```typescript
|
|
23
|
-
import { HttpRequestManagerModule } from 'http-request-manager';
|
|
24
|
-
|
|
25
|
-
@NgModule({
|
|
26
|
-
imports: [HttpRequestManagerModule.forRoot({})]
|
|
27
|
-
})
|
|
28
|
-
export class AppModule { }
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Usage
|
|
32
|
-
|
|
33
|
-
### Basic HTTP Request
|
|
34
|
-
|
|
35
|
-
```typescript
|
|
36
|
-
import { Component, inject } from '@angular/core';
|
|
37
|
-
import { HTTPManagerService, ApiRequest } from 'http-request-manager';
|
|
38
|
-
|
|
39
|
-
@Component({
|
|
40
|
-
selector: 'app-users',
|
|
41
|
-
template: `
|
|
42
|
-
<div *ngIf="isLoading$ | async">Loading...</div>
|
|
43
|
-
<div *ngFor="let user of data$ | async">
|
|
44
|
-
{{ user.name }}
|
|
45
|
-
</div>
|
|
46
|
-
`
|
|
47
|
-
})
|
|
48
|
-
export class UsersComponent {
|
|
49
|
-
httpManager = inject(HTTPManagerService);
|
|
50
|
-
|
|
51
|
-
data$ = this.httpManager.data$;
|
|
52
|
-
isLoading$ = this.httpManager.isPending$;
|
|
53
|
-
|
|
54
|
-
ngOnInit() {
|
|
55
|
-
this.httpManager.getRequest(
|
|
56
|
-
ApiRequest.adapt({ path: ['users'] })
|
|
57
|
-
).subscribe();
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
### Service Extension Pattern
|
|
63
|
-
|
|
64
|
-
```typescript
|
|
65
|
-
import { Injectable } from '@angular/core';
|
|
66
|
-
import { HTTPManagerService, ApiRequest } from 'http-request-manager';
|
|
67
|
-
import { BehaviorSubject, EMPTY } from 'rxjs';
|
|
68
|
-
import { catchError } from 'rxjs/operators';
|
|
69
|
-
|
|
70
|
-
@Injectable()
|
|
71
|
-
export class UserService extends HTTPManagerService<any> {
|
|
72
|
-
|
|
73
|
-
private errorRetry$ = new BehaviorSubject<{ func: Function, message: string } | null>(null);
|
|
74
|
-
errorRetryMessage$ = this.errorRetry$.asObservable();
|
|
75
|
-
|
|
76
|
-
private apiRequest = ApiRequest.adapt({
|
|
77
|
-
server: 'api/users',
|
|
78
|
-
adapter: User.adapt
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
private params = { type: 'ACTIVE' };
|
|
82
|
-
|
|
83
|
-
fetchUsers(params = this.params) {
|
|
84
|
-
return this.httpManagerService.getRequest(this.apiRequest, [params])
|
|
85
|
-
.pipe(
|
|
86
|
-
catchError((error: HttpErrorResponse) => {
|
|
87
|
-
const func = this.fetchUsers.bind(this);
|
|
88
|
-
const message = error.message;
|
|
89
|
-
this.errorRetry$.next({ func, message });
|
|
90
|
-
return EMPTY;
|
|
91
|
-
})
|
|
92
|
-
);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
## API Reference
|
|
98
|
-
|
|
99
|
-
### ApiRequest Configuration
|
|
100
|
-
|
|
101
|
-
| Option | Type | Description | Default |
|
|
102
|
-
|--------|------|-------------|---------|
|
|
103
|
-
| `server` | `string` | Base URL for the request | `''` |
|
|
104
|
-
| `path` | `any[]` | Path segments to append to URL | `[]` |
|
|
105
|
-
| `headers` | `any` | Custom headers for request | `{}` |
|
|
106
|
-
| `adapter` | `function` | Transform incoming response data | `undefined` |
|
|
107
|
-
| `mapper` | `function` | Transform outgoing request payload | `undefined` |
|
|
108
|
-
| `polling` | `number` | Polling interval in seconds (0 = disabled) | `0` |
|
|
109
|
-
| `retry` | `RetryOptions` | Retry configuration | `{ times: 0, delay: 3 }` |
|
|
110
|
-
| `stream` | `boolean` | Enable streaming response handling | `false` |
|
|
111
|
-
| `streamType` | `StreamType` | Streaming format: `NDJSON`, `SSE`, or `AI_STREAMING` | `AI_STREAMING` |
|
|
112
|
-
| `displayError` | `boolean` | Show toast notification on error | `false` |
|
|
113
|
-
| `displaySuccess` | `boolean` | Show toast notification on success | `false` |
|
|
114
|
-
| `successMessage` | `string` | Custom success toast message | `undefined` |
|
|
115
|
-
| `errorMessage` | `string` | Custom error toast message | `undefined` |
|
|
116
|
-
| `saveAs` | `string` | Filename for file downloads | `undefined` |
|
|
117
|
-
| `fileContentHeader` | `string` | Content-Disposition header for downloads | `undefined` |
|
|
118
|
-
| `ws` | `WSOptions` | WebSocket configuration for real-time sync | `undefined` |
|
|
119
|
-
| `env` | `string` | Environment for WebSocket channel naming | `'dev'` |
|
|
120
|
-
| `uploadFieldName` | `string` | Form-data field name for uploads | `undefined` |
|
|
121
|
-
| `uploadHttpMethod` | `'POST' \| 'PUT'` | HTTP method for upload requests | `undefined` |
|
|
122
|
-
| `allowedTypes` | `string[]` | Allowed MIME types for upload validation | `[]` |
|
|
123
|
-
| `maxFileSize` | `number` | Maximum per-file size in bytes | `undefined` |
|
|
124
|
-
| `maxTotalSize` | `number` | Maximum total upload size in bytes | `undefined` |
|
|
125
|
-
|
|
126
|
-
### State-Only Request Tracking Options
|
|
127
|
-
|
|
128
|
-
The following request options are not part of HTTPManagerService base ApiRequest options.
|
|
129
|
-
They are handled by HTTPManagerStateService request methods (fetchRecords/fetchStream):
|
|
130
|
-
|
|
131
|
-
- `ignoreQueryParams` — Query parameter keys to exclude from request-change tracking
|
|
132
|
-
- `queryParamsExpiresIn` — Expiry duration for tracked query values (e.g., `'10s'`, `'5mn'`, `'1h'`)
|
|
133
|
-
- `watchParams` — Specific query keys to watch for change detection (variation mode)
|
|
134
|
-
- `watchExpiresAt` — Epoch timestamp when tracked values expire
|
|
135
|
-
- `forceRefresh` — Bypass tracking and always make the API request
|
|
136
|
-
|
|
137
|
-
Important scope:
|
|
138
|
-
|
|
139
|
-
- Database enabled (DatabaseStorage configured in HTTPManagerStateService): tracking and expiry behavior are active.
|
|
140
|
-
- Database disabled: tracking is bypassed and API calls proceed normally.
|
|
141
|
-
|
|
142
|
-
If you need this behavior, use HTTPManagerStateService docs:
|
|
143
|
-
|
|
144
|
-
- ./HTTP_STATE_MANAGER_README.md
|
|
145
|
-
|
|
146
|
-
### Observable Properties
|
|
147
|
-
|
|
148
|
-
| Property | Type | Description |
|
|
149
|
-
|----------|------|-------------|
|
|
150
|
-
| `data$` | `Observable<any>` | Response data from requests |
|
|
151
|
-
| `isPending$` | `Observable<boolean>` | Loading state indicator |
|
|
152
|
-
| `error$` | `Observable<any>` | Error state |
|
|
153
|
-
| `countdown$` | `Observable<number>` | Countdown for polling (if active) |
|
|
154
|
-
|
|
155
|
-
### HTTP Methods
|
|
156
|
-
|
|
157
|
-
#### getRequest(options: ApiRequest, params?: any[])
|
|
158
|
-
|
|
159
|
-
Make a GET request with the specified options.
|
|
160
|
-
|
|
161
|
-
```typescript
|
|
162
|
-
this.httpManager.getRequest(
|
|
163
|
-
ApiRequest.adapt({
|
|
164
|
-
path: ['users', '123'],
|
|
165
|
-
retry: { times: 3, delay: 1 }
|
|
166
|
-
})
|
|
167
|
-
).subscribe();
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
#### postRequest(data: T, options: ApiRequest, params?: any[])
|
|
171
|
-
|
|
172
|
-
Make a POST request with data payload.
|
|
173
|
-
|
|
174
|
-
```typescript
|
|
175
|
-
this.httpManager.postRequest(
|
|
176
|
-
{ name: 'John Doe', email: 'john@example.com' },
|
|
177
|
-
ApiRequest.adapt({ path: ['users'] })
|
|
178
|
-
).subscribe();
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
#### putRequest(data: T, options: ApiRequest, params?: any[])
|
|
182
|
-
|
|
183
|
-
Make a PUT request with data payload.
|
|
184
|
-
|
|
185
|
-
```typescript
|
|
186
|
-
this.httpManager.putRequest(
|
|
187
|
-
{ name: 'Jane Doe', email: 'jane@example.com' },
|
|
188
|
-
ApiRequest.adapt({ path: ['users', '123'] })
|
|
189
|
-
).subscribe();
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
#### deleteRequest(options: ApiRequest, params?: any[])
|
|
193
|
-
|
|
194
|
-
Make a DELETE request.
|
|
195
|
-
|
|
196
|
-
```typescript
|
|
197
|
-
this.httpManager.deleteRequest(
|
|
198
|
-
ApiRequest.adapt({ path: ['users', '123'] })
|
|
199
|
-
).subscribe();
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
#### downloadRequest(options: ApiRequest, params?: any[], saveAs?: string)
|
|
203
|
-
|
|
204
|
-
Download a file with progress tracking.
|
|
205
|
-
|
|
206
|
-
```typescript
|
|
207
|
-
this.httpManager.downloadRequest(
|
|
208
|
-
ApiRequest.adapt({
|
|
209
|
-
server: 'assets',
|
|
210
|
-
path: ['report.pdf']
|
|
211
|
-
}),
|
|
212
|
-
[],
|
|
213
|
-
'monthly-report.pdf'
|
|
214
|
-
).subscribe();
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
#### uploadRequest(files: File | File[], options: ApiRequest, params?: any[])
|
|
218
|
-
|
|
219
|
-
Upload one or more files with progress tracking and validation. See [Upload Request docs](./UPLOAD_REQUEST_README.md) for full details.
|
|
220
|
-
|
|
221
|
-
```typescript
|
|
222
|
-
this.httpManager.uploadRequest(
|
|
223
|
-
selectedFiles,
|
|
224
|
-
ApiRequest.adapt({
|
|
225
|
-
path: ['uploader'],
|
|
226
|
-
allowedTypes: ['image/jpeg', 'image/png'],
|
|
227
|
-
maxFileSize: 40 * 1024 * 1024
|
|
228
|
-
})
|
|
229
|
-
).subscribe();
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
## Advanced Features
|
|
233
|
-
|
|
234
|
-
### Polling
|
|
235
|
-
|
|
236
|
-
Enable automatic polling of endpoints with countdown display:
|
|
237
|
-
|
|
238
|
-
```typescript
|
|
239
|
-
this.httpManager.getRequest(
|
|
240
|
-
ApiRequest.adapt({
|
|
241
|
-
path: ['server-status'],
|
|
242
|
-
polling: 10 // Poll every 10 seconds
|
|
243
|
-
})
|
|
244
|
-
).subscribe();
|
|
245
|
-
|
|
246
|
-
// Countdown display
|
|
247
|
-
countdown$ = this.httpManager.countdown$; // 10, 9, 8, 7...
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
### Streaming Responses
|
|
251
|
-
|
|
252
|
-
Handle streaming responses for real-time data:
|
|
253
|
-
|
|
254
|
-
```typescript
|
|
255
|
-
// NDJSON Streaming
|
|
256
|
-
this.httpManager.getRequest(
|
|
257
|
-
ApiRequest.adapt({
|
|
258
|
-
path: ['stream', 'data'],
|
|
259
|
-
stream: true,
|
|
260
|
-
adapter: StreamingData.adapt
|
|
261
|
-
})
|
|
262
|
-
).subscribe();
|
|
263
|
-
|
|
264
|
-
// AI Streaming
|
|
265
|
-
this.httpManager.postRequest(
|
|
266
|
-
ApiRequest.adapt({
|
|
267
|
-
path: ['ai', 'chat'],
|
|
268
|
-
stream: true,
|
|
269
|
-
streamType: 'ai_streaming'
|
|
270
|
-
}),
|
|
271
|
-
{ message: 'Hello AI' }
|
|
272
|
-
).subscribe();
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
### Retry Logic
|
|
276
|
-
|
|
277
|
-
Configure automatic retry for failed requests:
|
|
278
|
-
|
|
279
|
-
```typescript
|
|
280
|
-
this.httpManager.getRequest(
|
|
281
|
-
ApiRequest.adapt({
|
|
282
|
-
path: ['unreliable-endpoint'],
|
|
283
|
-
retry: { times: 5, delay: 2 }, // Retry 5 times with 2s delay
|
|
284
|
-
displayError: true // Show toast on final failure
|
|
285
|
-
})
|
|
286
|
-
).subscribe();
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
### Data Adapters
|
|
290
|
-
|
|
291
|
-
Transform incoming data using adapter functions:
|
|
292
|
-
|
|
293
|
-
```typescript
|
|
294
|
-
// Define adapter
|
|
295
|
-
export class User {
|
|
296
|
-
constructor(
|
|
297
|
-
public id: number = 0,
|
|
298
|
-
public name: string = '',
|
|
299
|
-
public email: string = ''
|
|
300
|
-
) {}
|
|
301
|
-
|
|
302
|
-
static adapt(item: any): User {
|
|
303
|
-
return new User(
|
|
304
|
-
item.id,
|
|
305
|
-
item.fullName, // Map fullName to name
|
|
306
|
-
item.emailAddress // Map emailAddress to email
|
|
307
|
-
);
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
// Use adapter
|
|
312
|
-
this.httpManager.getRequest(
|
|
313
|
-
ApiRequest.adapt({
|
|
314
|
-
path: ['users'],
|
|
315
|
-
adapter: User.adapt
|
|
316
|
-
})
|
|
317
|
-
).subscribe();
|
|
318
|
-
|
|
319
|
-
// Data is automatically transformed using User.adapt
|
|
320
|
-
data$ = this.httpManager.data$; // Observable<User[]>
|
|
321
|
-
```
|
|
322
|
-
|
|
323
|
-
### Data Mappers
|
|
324
|
-
|
|
325
|
-
Transform outgoing data before sending to API:
|
|
326
|
-
|
|
327
|
-
```typescript
|
|
328
|
-
// Define mapper
|
|
329
|
-
export class UserMapper {
|
|
330
|
-
static adapt(user: User): any {
|
|
331
|
-
return {
|
|
332
|
-
id: user.id,
|
|
333
|
-
fullName: user.name, // Map name to fullName
|
|
334
|
-
emailAddress: user.email, // Map email to emailAddress
|
|
335
|
-
active: true
|
|
336
|
-
};
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
// Use mapper
|
|
341
|
-
this.httpManager.postRequest(
|
|
342
|
-
ApiRequest.adapt({
|
|
343
|
-
path: ['users'],
|
|
344
|
-
mapper: UserMapper.adapt
|
|
345
|
-
}),
|
|
346
|
-
new User(1, 'John Doe', 'john@example.com')
|
|
347
|
-
).subscribe();
|
|
348
|
-
```
|
|
349
|
-
|
|
350
|
-
## Demo Examples
|
|
351
|
-
|
|
352
|
-
### Complete HTTP Service Example
|
|
353
|
-
|
|
354
|
-
```typescript
|
|
355
|
-
import { Component, inject } from '@angular/core';
|
|
356
|
-
import { FormBuilder, Validators } from '@angular/forms';
|
|
357
|
-
import { HTTPManagerService, ApiRequest } from 'http-request-manager';
|
|
358
|
-
|
|
359
|
-
@Component({
|
|
360
|
-
selector: 'app-api-client',
|
|
361
|
-
template: `
|
|
362
|
-
<form [formGroup]="requestForm" (ngSubmit)="makeRequest()">
|
|
363
|
-
<input formControlName="endpoint" placeholder="API endpoint">
|
|
364
|
-
<button type="submit">Make Request</button>
|
|
365
|
-
</form>
|
|
366
|
-
|
|
367
|
-
<div *ngIf="isLoading$ | async">Loading...</div>
|
|
368
|
-
|
|
369
|
-
<div *ngIf="error$ | async as error" class="error">
|
|
370
|
-
Error: {{ error }}
|
|
371
|
-
</div>
|
|
372
|
-
|
|
373
|
-
<pre *ngIf="data$ | async as data">
|
|
374
|
-
{{ data | json }}
|
|
375
|
-
</pre>
|
|
376
|
-
|
|
377
|
-
<div *ngIf="countdown$ | async as countdown">
|
|
378
|
-
Next request in: {{ countdown }}s
|
|
379
|
-
</div>
|
|
380
|
-
`
|
|
381
|
-
})
|
|
382
|
-
export class ApiClientComponent {
|
|
383
|
-
private fb = inject(FormBuilder);
|
|
384
|
-
private httpManager = inject(HTTPManagerService);
|
|
385
|
-
|
|
386
|
-
data$ = this.httpManager.data$;
|
|
387
|
-
isLoading$ = this.httpManager.isPending$;
|
|
388
|
-
error$ = this.httpManager.error$;
|
|
389
|
-
countdown$ = this.httpManager.countdown$;
|
|
390
|
-
|
|
391
|
-
requestForm = this.fb.group({
|
|
392
|
-
endpoint: ['users', Validators.required],
|
|
393
|
-
method: ['GET', Validators.required],
|
|
394
|
-
polling: [0],
|
|
395
|
-
retry: this.fb.group({
|
|
396
|
-
times: [3],
|
|
397
|
-
delay: [2],
|
|
398
|
-
})
|
|
399
|
-
});
|
|
400
|
-
|
|
401
|
-
makeRequest() {
|
|
402
|
-
const formValue = this.requestForm.value;
|
|
403
|
-
|
|
404
|
-
this.httpManager.getRequest(
|
|
405
|
-
ApiRequest.adapt({
|
|
406
|
-
path: [formValue.endpoint],
|
|
407
|
-
polling: formValue.polling,
|
|
408
|
-
retry: formValue.retry,
|
|
409
|
-
displayError: true
|
|
410
|
-
})
|
|
411
|
-
).subscribe();
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
```
|
|
415
|
-
|
|
416
|
-
### Error Handling with Retry
|
|
417
|
-
|
|
418
|
-
```typescript
|
|
419
|
-
export class RobustApiService {
|
|
420
|
-
private errorRetry$ = new BehaviorSubject<{ func: Function, message: string } | null>(null);
|
|
421
|
-
errorRetryMessage$ = this.errorRetry$.asObservable();
|
|
422
|
-
|
|
423
|
-
makeRequestWithRetry(endpoint: string) {
|
|
424
|
-
return this.httpManager.getRequest(
|
|
425
|
-
ApiRequest.adapt({
|
|
426
|
-
path: [endpoint],
|
|
427
|
-
retry: { times: 3, delay: 2 },
|
|
428
|
-
displayError: true
|
|
429
|
-
})
|
|
430
|
-
).pipe(
|
|
431
|
-
catchError((error: HttpErrorResponse) => {
|
|
432
|
-
this.errorRetry$.next({
|
|
433
|
-
func: () => this.makeRequestWithRetry(endpoint),
|
|
434
|
-
message: error.message
|
|
435
|
-
});
|
|
436
|
-
return EMPTY;
|
|
437
|
-
})
|
|
438
|
-
);
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
retry() {
|
|
442
|
-
const retryAction = this.errorRetry$.value;
|
|
443
|
-
if (retryAction) {
|
|
444
|
-
retryAction.func();
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
```
|
|
449
|
-
|
|
450
|
-
## Integration with Other Services
|
|
451
|
-
|
|
452
|
-
The HTTPManagerService can be extended and used with other services:
|
|
453
|
-
|
|
454
|
-
### With State Management
|
|
455
|
-
|
|
456
|
-
```typescript
|
|
457
|
-
@Injectable()
|
|
458
|
-
export class UserStateService extends HTTPManagerStateService<User> {
|
|
459
|
-
constructor() {
|
|
460
|
-
super(
|
|
461
|
-
ApiRequest.adapt({
|
|
462
|
-
path: ['users'],
|
|
463
|
-
adapter: User.adapt
|
|
464
|
-
}),
|
|
465
|
-
DataType.ARRAY
|
|
466
|
-
);
|
|
467
|
-
}
|
|
468
|
-
|
|
469
|
-
loadUsers() {
|
|
470
|
-
this.fetchRecords(); // Uses HTTPManagerService internally
|
|
471
|
-
}
|
|
472
|
-
}
|
|
473
|
-
```
|
|
474
|
-
|
|
475
|
-
### With WebSocket
|
|
476
|
-
|
|
477
|
-
```typescript
|
|
478
|
-
@Injectable()
|
|
479
|
-
export class ChatService extends HTTPManagerStateService<Message> {
|
|
480
|
-
constructor() {
|
|
481
|
-
super(
|
|
482
|
-
ApiRequest.adapt({
|
|
483
|
-
path: ['messages'],
|
|
484
|
-
adapter: Message.adapt,
|
|
485
|
-
ws: {
|
|
486
|
-
id: 'CHAT_WS',
|
|
487
|
-
wsServer: 'ws://localhost:8080'
|
|
488
|
-
}
|
|
489
|
-
}),
|
|
490
|
-
DataType.ARRAY
|
|
491
|
-
);
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
// HTTP + WebSocket combined
|
|
495
|
-
sendMessage(content: string) {
|
|
496
|
-
// HTTP POST to save message
|
|
497
|
-
this.createRecord({ content, timestamp: Date.now() });
|
|
498
|
-
|
|
499
|
-
// WebSocket broadcast
|
|
500
|
-
this.wsMessaging(
|
|
501
|
-
{ content: { message: content } },
|
|
502
|
-
['chat-room']
|
|
503
|
-
);
|
|
504
|
-
}
|
|
505
|
-
}
|
|
506
|
-
```
|
|
507
|
-
|
|
508
|
-
## Best Practices
|
|
509
|
-
|
|
510
|
-
### 1. Service Layer Pattern
|
|
511
|
-
|
|
512
|
-
Always create dedicated services that extend or use HTTPManagerService:
|
|
513
|
-
|
|
514
|
-
```typescript
|
|
515
|
-
// ✅ Good
|
|
516
|
-
@Injectable()
|
|
517
|
-
export class UserService {
|
|
518
|
-
constructor(private http: HTTPManagerService) {}
|
|
519
|
-
|
|
520
|
-
getUsers() {
|
|
521
|
-
return this.http.getRequest(
|
|
522
|
-
ApiRequest.adapt({ path: ['users'] })
|
|
523
|
-
);
|
|
524
|
-
}
|
|
525
|
-
}
|
|
526
|
-
|
|
527
|
-
// ❌ Avoid
|
|
528
|
-
@Component({
|
|
529
|
-
template: `<div *ngFor="let user of http.data$ | async">`
|
|
530
|
-
})
|
|
531
|
-
export class BadComponent {
|
|
532
|
-
constructor(private http: HTTPManagerService) {}
|
|
533
|
-
}
|
|
534
|
-
```
|
|
535
|
-
|
|
536
|
-
### 2. Error Handling
|
|
537
|
-
|
|
538
|
-
Implement comprehensive error handling:
|
|
539
|
-
|
|
540
|
-
```typescript
|
|
541
|
-
fetchData() {
|
|
542
|
-
this.data$ = this.httpManager.getRequest(
|
|
543
|
-
ApiRequest.adapt({
|
|
544
|
-
path: ['data'],
|
|
545
|
-
retry: { times: 3, delay: 2 },
|
|
546
|
-
displayError: true
|
|
547
|
-
})
|
|
548
|
-
);
|
|
549
|
-
}
|
|
550
|
-
```
|
|
551
|
-
|
|
552
|
-
### 3. Adapter Usage
|
|
553
|
-
|
|
554
|
-
Use adapters for type safety:
|
|
555
|
-
|
|
556
|
-
```typescript
|
|
557
|
-
// ✅ Good
|
|
558
|
-
ApiRequest.adapt({
|
|
559
|
-
path: ['users'],
|
|
560
|
-
adapter: User.adapt // Ensures type safety
|
|
561
|
-
});
|
|
562
|
-
|
|
563
|
-
// ❌ Avoid
|
|
564
|
-
ApiRequest.adapt({
|
|
565
|
-
path: ['users']
|
|
566
|
-
// No adapter = loose typing
|
|
567
|
-
});
|
|
568
|
-
```
|
|
569
|
-
|
|
570
|
-
### 4. Cleanup
|
|
571
|
-
|
|
572
|
-
Always clean up subscriptions:
|
|
573
|
-
|
|
574
|
-
```typescript
|
|
575
|
-
@Component({ template: '...' })
|
|
576
|
-
export class MyComponent implements OnDestroy {
|
|
577
|
-
private destroy$ = new Subject<void>();
|
|
578
|
-
|
|
579
|
-
ngOnInit() {
|
|
580
|
-
this.httpManager.getRequest(
|
|
581
|
-
ApiRequest.adapt({ path: ['data'] })
|
|
582
|
-
).pipe(takeUntil(this.destroy$)).subscribe();
|
|
583
|
-
}
|
|
584
|
-
|
|
585
|
-
ngOnDestroy() {
|
|
586
|
-
this.destroy$.next();
|
|
587
|
-
this.destroy$.complete();
|
|
588
|
-
}
|
|
589
|
-
}
|
|
590
|
-
```
|
|
591
|
-
|
|
592
|
-
## Troubleshooting
|
|
593
|
-
|
|
594
|
-
### Common Issues
|
|
595
|
-
|
|
596
|
-
#### 1. CORS Errors
|
|
597
|
-
```typescript
|
|
598
|
-
// Enable CORS in ApiRequest
|
|
599
|
-
ApiRequest.adapt({
|
|
600
|
-
server: 'https://api.example.com',
|
|
601
|
-
headers: { 'Access-Control-Allow-Origin': '*' }
|
|
602
|
-
});
|
|
603
|
-
```
|
|
604
|
-
|
|
605
|
-
#### 2. Authentication Headers
|
|
606
|
-
```typescript
|
|
607
|
-
// Add auth headers
|
|
608
|
-
ApiRequest.adapt({
|
|
609
|
-
headers: {
|
|
610
|
-
'Authorization': `Bearer ${this.authToken}`,
|
|
611
|
-
'Content-Type': 'application/json'
|
|
612
|
-
}
|
|
613
|
-
});
|
|
614
|
-
```
|
|
615
|
-
|
|
616
|
-
#### 3. Polling Not Stopping
|
|
617
|
-
```typescript
|
|
618
|
-
ngOnDestroy() {
|
|
619
|
-
this.httpManager.stopPolling(); // Important!
|
|
620
|
-
}
|
|
621
|
-
```
|
|
622
|
-
|
|
623
|
-
## Related Documentation
|
|
624
|
-
|
|
625
|
-
- [Architecture Overview](../architecture/README.md)
|
|
626
|
-
- [HTTP State Service](http-state/README.md)
|
|
627
|
-
- [HTTP Signals Service](http-signals/README.md)
|
|
628
|
-
- [Demo Examples](../demos/README.md)
|