http-request-manager 18.15.32 → 18.15.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/TEST_COVERAGE_SUMMARY.md +458 -0
- package/ng-package.json +8 -0
- package/package.json +5 -13
- package/src/docs/ADVANCED_WEBSOCKET.md +633 -0
- package/src/docs/ARCHITECTURE.md +633 -0
- package/src/docs/BATCH_REQUEST_README.md +467 -0
- package/src/docs/COMPLETE_API_REFERENCE.md +1037 -0
- package/src/docs/DATABASE_README.md +1195 -0
- package/src/docs/ENCRYPTION_README.md +403 -0
- package/src/docs/HTTP_MANAGER_README.md +628 -0
- package/src/docs/HTTP_SINGNALS_MANAGER_README.md +654 -0
- package/src/docs/HTTP_STATE_MANAGER_README.md +1391 -0
- package/src/docs/INTERCEPTOR_README.md +549 -0
- package/src/docs/LOCAL_STORAGE_README.md +1056 -0
- package/src/docs/LOCAL_STORAGE_SIGNALS_README.md +338 -0
- package/src/docs/LOGGER_README.md +310 -0
- package/src/docs/MESSAGE_TRACKER_README.md +518 -0
- package/src/docs/MESSAGE_TRACKER_SIGNALS_README.md +563 -0
- package/src/docs/MODELS_README.md +1264 -0
- package/src/docs/SIGNAL_SERVICES_README.md +238 -0
- package/src/docs/SQL_DIXIE_README.md +574 -0
- package/src/docs/STORE_STATE_MANAGER_README.md +556 -0
- package/src/docs/STORE_STATE_SIGNALS_README.md +600 -0
- package/src/docs/UPLOAD_REQUEST_README.md +324 -0
- package/src/docs/UTILS_README.md +1604 -0
- package/src/docs/WEBSOCKET_MESSAGE_SERVICE.md +799 -0
- package/src/docs/WEBSOCKET_SIGNALS_README.md +641 -0
- package/src/docs/WEBSOCKET_SINGLETON_REFACTORING.md +201 -0
- package/src/docs/WS_MANAGER_README.md +613 -0
- package/src/lib/http-request-manager.module.ts +147 -0
- package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.html +116 -0
- 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 +255 -0
- package/src/lib/http-request-services-demo/http-request-services-demo.component.html +123 -0
- package/src/lib/http-request-services-demo/http-request-services-demo.component.scss +6 -0
- package/src/lib/http-request-services-demo/http-request-services-demo.component.ts +53 -0
- package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.html +195 -0
- package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.scss +17 -0
- package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.ts +208 -0
- package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.html +200 -0
- package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.scss +17 -0
- package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.ts +214 -0
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.html +53 -0
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.scss +60 -0
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.ts +72 -0
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-download.module.ts +28 -0
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.html +10 -0
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.scss +29 -0
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.ts +100 -0
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/models/download-labels-model.ts +22 -0
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.html +8 -0
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.scss +19 -0
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.ts +26 -0
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/app-session.model.ts +30 -0
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/app.model.ts +19 -0
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/get-sample.model.ts +25 -0
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-ai-prompt.ts +19 -0
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client-details.ts +24 -0
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client-info.ts +30 -0
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client.model.ts +49 -0
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-mapper-client-info.ts +33 -0
- package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.html +279 -0
- package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.scss +24 -0
- package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.ts +461 -0
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.html +53 -0
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.scss +60 -0
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.ts +72 -0
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.ts +28 -0
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.html +10 -0
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.scss +29 -0
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.ts +100 -0
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.ts +22 -0
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.html +8 -0
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.scss +19 -0
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.ts +26 -0
- package/src/lib/http-request-services-demo/request-manager-demo/models/app-session.model.ts +30 -0
- package/src/lib/http-request-services-demo/request-manager-demo/models/app.model.ts +19 -0
- package/src/lib/http-request-services-demo/request-manager-demo/models/get-sample.model.ts +25 -0
- package/src/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.ts +19 -0
- package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-details.ts +24 -0
- package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.ts +30 -0
- package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client.model.ts +49 -0
- package/src/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.ts +33 -0
- package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.html +622 -0
- package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.scss +106 -0
- package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.ts +687 -0
- package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.html +418 -0
- package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.scss +24 -0
- package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.ts +576 -0
- package/src/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.ts +89 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/services/state-data-request.service.ts +119 -0
- 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 +3 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.ts +16 -0
- 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 +3 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.ts +16 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.css +31 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.html +94 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.scss +41 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.spec.ts +203 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.ts +144 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.css +11 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.html +102 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.spec.ts +40 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.ts +230 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.css +30 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.html +172 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.spec.ts +31 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.ts +239 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/models/oidc-client.model.ts +31 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/models/user-data.model.ts +32 -0
- 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 +84 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.ts +40 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/services/index.ts +3 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/services/jwt-token.service.ts +62 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/services/message-service-demo.service.ts +83 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/services/notification-service-demo.service.ts +147 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/services/state-service-demo.service.ts +168 -0
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.html +53 -0
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.scss +60 -0
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.ts +72 -0
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-download.module.ts +28 -0
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.html +10 -0
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.scss +29 -0
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.ts +100 -0
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/models/download-labels-model.ts +22 -0
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.html +8 -0
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.scss +19 -0
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.ts +26 -0
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app-session.model.ts +30 -0
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app.model.ts +19 -0
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/get-sample.model.ts +25 -0
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-ai-prompt.ts +19 -0
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-details.ts +24 -0
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-info.ts +30 -0
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client.model.ts +49 -0
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-mapper-client-info.ts +33 -0
- package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.html +380 -0
- package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.scss +24 -0
- package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.ts +410 -0
- package/src/lib/http-request-services-demo/store-state-manager-demo/models/settings.model.ts +28 -0
- package/src/lib/http-request-services-demo/store-state-manager-demo/services/settings-state.service.ts +49 -0
- 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 +23 -0
- package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.ts +36 -0
- package/src/lib/http-request-services-demo/store-state-signals-demo/store-state-signals-demo.component.ts +161 -0
- package/src/lib/http-request-services-demo/upload-demo/models/index.ts +1 -0
- package/src/lib/http-request-services-demo/upload-demo/models/upload-state.model.ts +30 -0
- package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.html +89 -0
- package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.scss +160 -0
- package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.spec.ts +101 -0
- package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.ts +136 -0
- package/src/lib/index.ts +3 -0
- package/src/lib/interceptors/credentials.interceptor.ts +16 -0
- package/src/lib/interceptors/index.ts +6 -0
- package/src/lib/interceptors/models/error-settings.model.ts +22 -0
- package/src/lib/interceptors/models/index.ts +2 -0
- package/src/lib/interceptors/proxy-debugger.interceptor.ts +46 -0
- package/src/lib/interceptors/request-error.interceptor.ts +65 -0
- package/src/lib/interceptors/request-header.interceptor.ts +56 -0
- package/src/lib/message-display/README.md +509 -0
- package/src/lib/message-display/index.ts +4 -0
- package/src/lib/message-display/models/action.model.ts +27 -0
- package/src/lib/message-display/models/communication-message.model.ts +77 -0
- package/src/lib/message-display/models/display-config.model.ts +35 -0
- package/src/lib/message-display/models/display-rule.interface.ts +28 -0
- package/src/lib/message-display/models/display-strategy.interface.ts +8 -0
- package/src/lib/message-display/models/index.ts +6 -0
- package/src/lib/message-display/models/slide.model.ts +24 -0
- package/src/lib/message-display/rules/default-display-rules.ts +35 -0
- package/src/lib/message-display/services/message-display-router.service.ts +63 -0
- package/src/lib/message-display/strategies/snackbar.strategy.ts +46 -0
- package/src/lib/models/batch-options.model.ts +33 -0
- package/src/lib/models/batch-progress.model.ts +19 -0
- package/src/lib/models/batch-request-state.model.ts +40 -0
- package/src/lib/models/batch-result.model.ts +30 -0
- package/src/lib/models/config-http-options.model.ts +45 -0
- package/src/lib/models/config-local-storage-options.model.ts +27 -0
- package/src/lib/models/config-options.model.ts +27 -0
- package/src/lib/models/config-token.model.ts +9 -0
- package/src/lib/models/data-type.enum.ts +5 -0
- package/src/lib/models/database-storage.model.ts +24 -0
- package/src/lib/models/index.ts +16 -0
- package/src/lib/models/retry-options.model.ts +22 -0
- package/src/lib/models/upload-validation-error.model.ts +46 -0
- package/src/lib/services/SQL-DixieJS service/dexie-query-executor.ts +246 -0
- package/src/lib/services/SQL-DixieJS service/dexie-sql.service.ts +31 -0
- package/src/lib/services/SQL-DixieJS service/index.ts +4 -0
- package/src/lib/services/SQL-DixieJS service/models/execution-plan.model.ts +52 -0
- package/src/lib/services/SQL-DixieJS service/models/index.ts +3 -0
- package/src/lib/services/SQL-DixieJS service/models/sql-errors.model.ts +13 -0
- package/src/lib/services/SQL-DixieJS service/models/sql-options.model.ts +3 -0
- package/src/lib/services/SQL-DixieJS service/query-planner.ts +284 -0
- package/src/lib/services/SQL-DixieJS service/schema-validator.ts +217 -0
- package/src/lib/services/SQL-DixieJS service/sql-parser.ts +35 -0
- package/src/lib/services/database-manager-service/database.manager.service.ts +384 -0
- package/src/lib/services/database-manager-service/db.storage.service.ts +240 -0
- package/src/lib/services/database-manager-service/index.ts +4 -0
- package/src/lib/services/database-manager-service/models/index.ts +2 -0
- package/src/lib/services/database-manager-service/models/table-schema.ts +33 -0
- package/src/lib/services/index.ts +20 -0
- package/src/lib/services/local-storage-manager-service/index.ts +4 -0
- package/src/lib/services/local-storage-manager-service/local-storage-manager.service.spec.ts +71 -0
- package/src/lib/services/local-storage-manager-service/local-storage-manager.service.ts +567 -0
- package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.spec.ts +67 -0
- package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.ts +437 -0
- package/src/lib/services/local-storage-manager-service/models/global-store-options.model.ts +30 -0
- package/src/lib/services/local-storage-manager-service/models/index.ts +6 -0
- package/src/lib/services/local-storage-manager-service/models/setting-options.model.ts +35 -0
- package/src/lib/services/local-storage-manager-service/models/storage-data.model.ts +24 -0
- package/src/lib/services/local-storage-manager-service/models/storage-option.model.ts +32 -0
- package/src/lib/services/local-storage-manager-service/models/storage-type.enum.ts +5 -0
- package/src/lib/services/request-manager-services/README.md +282 -0
- package/src/lib/services/request-manager-services/http-manager-signals.service.ts +674 -0
- package/src/lib/services/request-manager-services/http-manager.service.spec.ts +353 -0
- package/src/lib/services/request-manager-services/http-manager.service.ts +727 -0
- package/src/lib/services/request-manager-services/index.ts +8 -0
- package/src/lib/services/request-manager-services/request-signals.service.ts +372 -0
- package/src/lib/services/request-manager-services/request.service.ts +435 -0
- package/src/lib/services/request-manager-services/rxjs-operators/countdown.ts +17 -0
- package/src/lib/services/request-manager-services/rxjs-operators/delay-retry.ts +16 -0
- package/src/lib/services/request-manager-services/rxjs-operators/index.ts +4 -0
- package/src/lib/services/request-manager-services/rxjs-operators/request-polling.ts +35 -0
- package/src/lib/services/request-manager-services/rxjs-operators/request-streaming.ts +468 -0
- package/src/lib/services/request-manager-state-service/http-manager-state.store.spec.ts +665 -0
- package/src/lib/services/request-manager-state-service/http-manager-state.store.ts +2395 -0
- package/src/lib/services/request-manager-state-service/index.ts +3 -0
- package/src/lib/services/request-manager-state-service/models/api-request.model.ts +86 -0
- package/src/lib/services/request-manager-state-service/models/index.ts +14 -0
- package/src/lib/services/request-manager-state-service/models/operation-result.model.ts +18 -0
- package/src/lib/services/request-manager-state-service/models/parsing-result.model.ts +21 -0
- package/src/lib/services/request-manager-state-service/models/request-options.model.ts +37 -0
- package/src/lib/services/request-manager-state-service/models/stream-config.model.ts +20 -0
- package/src/lib/services/request-manager-state-service/models/stream-event-metadata.model.ts +23 -0
- package/src/lib/services/request-manager-state-service/models/stream-event.model.ts +23 -0
- package/src/lib/services/request-manager-state-service/models/stream-output.model.ts +23 -0
- package/src/lib/services/request-manager-state-service/models/stream-progress.model.ts +24 -0
- package/src/lib/services/request-manager-state-service/models/stream-type.enum.ts +13 -0
- package/src/lib/services/request-manager-state-service/models/ws-options.model.ts +42 -0
- package/src/lib/services/store-state-manager-service/index.ts +4 -0
- package/src/lib/services/store-state-manager-service/models/index.ts +3 -0
- package/src/lib/services/store-state-manager-service/models/state-operation-result.model.ts +30 -0
- package/src/lib/services/store-state-manager-service/models/state-storage-options.model.ts +24 -0
- package/src/lib/services/store-state-manager-service/store-state-manager-signals.service.ts +169 -0
- package/src/lib/services/store-state-manager-service/store-state-manager.service.ts +153 -0
- package/src/lib/services/utils/app.service.spec.ts +25 -0
- package/src/lib/services/utils/app.service.ts +21 -0
- package/src/lib/services/utils/encryption/README.md +79 -0
- package/src/lib/services/utils/encryption/asymmetrical-encryption.service.ts +282 -0
- package/src/lib/services/utils/encryption/encryption-test.service.ts +39 -0
- package/src/lib/services/utils/encryption/index.ts +5 -0
- package/src/lib/services/utils/encryption/random.ts +81 -0
- package/src/lib/services/utils/encryption/symmetrical-encryption.service.ts +106 -0
- package/src/lib/services/utils/headers.service.spec.ts +80 -0
- package/src/lib/services/utils/headers.service.ts +18 -0
- package/src/lib/services/utils/index.ts +9 -0
- package/src/lib/services/utils/logger.service.ts +90 -0
- package/src/lib/services/utils/models/index.ts +4 -0
- package/src/lib/services/utils/models/normalized-request-options.model.ts +24 -0
- package/src/lib/services/utils/models/path-tracker-state.model.ts +20 -0
- package/src/lib/services/utils/models/query-params-tracker-options.model.ts +24 -0
- package/src/lib/services/utils/models/query-tracker-state.model.ts +23 -0
- package/src/lib/services/utils/object-merger.service.spec.ts +18 -0
- package/src/lib/services/utils/object-merger.service.ts +78 -0
- package/src/lib/services/utils/path-query.service.spec.ts +117 -0
- package/src/lib/services/utils/path-query.service.ts +69 -0
- package/src/lib/services/utils/query-params-tracker.service.ts +442 -0
- package/src/lib/services/utils/random-color.utils.ts +83 -0
- package/src/lib/services/utils/utils.service.spec.ts +165 -0
- package/src/lib/services/utils/utils.service.ts +192 -0
- package/src/lib/services/ws-manager-service/index.ts +13 -0
- package/src/lib/services/ws-manager-service/message-tracker-signals.service.ts +147 -0
- package/src/lib/services/ws-manager-service/message-tracker.service.ts +477 -0
- package/src/lib/services/ws-manager-service/models/channel-info.model.ts +29 -0
- package/src/lib/services/ws-manager-service/models/channel-message-data.model.ts +24 -0
- package/src/lib/services/ws-manager-service/models/channel-message.model.ts +36 -0
- package/src/lib/services/ws-manager-service/models/channel-type.enum.ts +6 -0
- package/src/lib/services/ws-manager-service/models/communication-type.enum.ts +5 -0
- package/src/lib/services/ws-manager-service/models/index.ts +10 -0
- package/src/lib/services/ws-manager-service/models/notification-message.model.ts +29 -0
- package/src/lib/services/ws-manager-service/models/public-message.model.ts +18 -0
- package/src/lib/services/ws-manager-service/models/state-message.model.ts +18 -0
- package/src/lib/services/ws-manager-service/models/ws-user.model.ts +38 -0
- package/src/lib/services/ws-manager-service/services/index.ts +4 -0
- package/src/lib/services/ws-manager-service/services/websocket-message.service.ts +129 -0
- package/src/lib/services/ws-manager-service/services/websocket.service.ts +434 -0
- package/src/lib/services/ws-manager-service/websocket-service/index.ts +1 -0
- package/src/lib/services/ws-manager-service/websocket-service/websocket-manager.service.ts +716 -0
- package/src/lib/services/ws-manager-service/websocket-services-complete.spec.ts +596 -0
- package/src/lib/services/ws-manager-service/websocket-signals-manager.service.ts +141 -0
- package/src/public-api.ts +19 -0
- package/tsconfig.lib.json +34 -0
- package/tsconfig.lib.prod.json +10 -0
- package/tsconfig.spec.json +14 -0
- package/fesm2022/http-request-manager.mjs +0 -13297
- package/fesm2022/http-request-manager.mjs.map +0 -1
- package/http-request-manager-18.15.32.tgz +0 -0
- package/types/http-request-manager.d.ts +0 -3875
|
@@ -0,0 +1,633 @@
|
|
|
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 - extends RequestService)
|
|
85
|
+
├── Location: services/request-manager-services/http-manager.service.ts
|
|
86
|
+
├── Features:
|
|
87
|
+
│ ├── HTTP CRUD Operations (GET, POST, PUT, DELETE)
|
|
88
|
+
│ ├── Loading States (isPending$, error$, data$, countdown$)
|
|
89
|
+
│ ├── Retry Logic with delayedRetry operator
|
|
90
|
+
│ ├── Polling with Countdown (requestPolling operator)
|
|
91
|
+
│ ├── Adapters & Mappers for data transformation
|
|
92
|
+
│ ├── Stream Handling (NDJSON, SSE)
|
|
93
|
+
│ └── File Download with progress tracking
|
|
94
|
+
│
|
|
95
|
+
├── HTTPManagerSignalsService
|
|
96
|
+
│ ├── Location: services/request-manager-services/http-manager-signals.service.ts
|
|
97
|
+
│ └── Same as HTTPManagerService but with Angular Signals
|
|
98
|
+
│ ├── data: Signal<any>
|
|
99
|
+
│ ├── isPending: Signal<boolean>
|
|
100
|
+
│ ├── error: Signal<any>
|
|
101
|
+
│ └── countdown: Signal<number>
|
|
102
|
+
│
|
|
103
|
+
└── HTTPManagerStateService (extends ComponentStore)
|
|
104
|
+
├── Location: services/request-manager-state-service/http-manager-state.store.ts
|
|
105
|
+
├── Inherits all HTTPManagerService features
|
|
106
|
+
├── ComponentStore Integration (NgRx)
|
|
107
|
+
├── CRUD with Auto State Updates
|
|
108
|
+
├── WebSocket Integration (via WebSocketManagerService singleton)
|
|
109
|
+
│ ├── SYS- channels (State sync - private)
|
|
110
|
+
│ ├── PUB- channels (Messaging - public)
|
|
111
|
+
│ └── MES- channels (Notifications - persisted)
|
|
112
|
+
├── IndexedDB Caching (via DatabaseManagerService)
|
|
113
|
+
├── Pagination Support
|
|
114
|
+
├── Real-time Updates
|
|
115
|
+
└── clearDatabase() method for flushing cache
|
|
116
|
+
|
|
117
|
+
StoreStateManagerService (extends ComponentStore)
|
|
118
|
+
├── Location: services/store-state-manager-service/store-state-manager.service.ts
|
|
119
|
+
└── Features:
|
|
120
|
+
├── LocalStorage persistence with ComponentStore
|
|
121
|
+
├── Automatic state synchronization
|
|
122
|
+
├── Configurable model-based state
|
|
123
|
+
└── Reactive updates via localStorage changes
|
|
124
|
+
|
|
125
|
+
LocalStorageManagerService (extends ComponentStore)
|
|
126
|
+
├── Location: services/local-storage-manager-service/local-storage-manager.service.ts
|
|
127
|
+
└── Features:
|
|
128
|
+
├── LocalStorage & SessionStorage management
|
|
129
|
+
├── AES encryption support
|
|
130
|
+
├── Expiration management with auto-cleanup
|
|
131
|
+
├── Reactive store$ observables
|
|
132
|
+
├── Signal-based API (signal(), computed())
|
|
133
|
+
└── Metadata tracking (settings, expires)
|
|
134
|
+
|
|
135
|
+
LocalStorageSignalsManagerService
|
|
136
|
+
├── Location: services/local-storage-manager-service/local-storage-signals-manager.service.ts
|
|
137
|
+
└── Same as LocalStorageManagerService but Signal-optimized
|
|
138
|
+
|
|
139
|
+
DatabaseManagerService (extends DbService/Dexie.js)
|
|
140
|
+
├── Location: services/database-manager-service/database.manager.service.ts
|
|
141
|
+
└── Features:
|
|
142
|
+
├── IndexedDB wrapper via Dexie.js
|
|
143
|
+
├── Observable-based CRUD operations
|
|
144
|
+
├── Table management (create, check, schema inspection)
|
|
145
|
+
├── Bulk operations (bulkPut, bulkDelete)
|
|
146
|
+
├── Query support (where, equals, filter)
|
|
147
|
+
└── clearTable() method for flushing tables
|
|
148
|
+
|
|
149
|
+
WebSocketManagerService (Singleton)
|
|
150
|
+
├── Location: services/ws-manager-service/websocket-service/websocket-manager.service.ts
|
|
151
|
+
└── Features:
|
|
152
|
+
├── Single connection across ALL instances (static)
|
|
153
|
+
├── Connection lifecycle management
|
|
154
|
+
├── Channel subscription tracking
|
|
155
|
+
├── Message broadcasting via BehaviorSubject
|
|
156
|
+
├── Session ID management (UUID per browser session)
|
|
157
|
+
├── JWT authentication support
|
|
158
|
+
├── Automatic reconnection handling
|
|
159
|
+
└── Message replay support (lastSeenId)
|
|
160
|
+
|
|
161
|
+
MessageTrackerService
|
|
162
|
+
├── Location: services/ws-manager-service/message-tracker.service.ts
|
|
163
|
+
└── Features:
|
|
164
|
+
├── Message history tracking
|
|
165
|
+
├── Last-seen message ID persistence
|
|
166
|
+
├── Automatic re-subscription on reconnect
|
|
167
|
+
├── Notification channel management
|
|
168
|
+
└── Historical message retrieval
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Data Flow
|
|
172
|
+
|
|
173
|
+
### HTTP Request Flow
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
Component
|
|
177
|
+
│
|
|
178
|
+
├─> Call Service Method (e.g., fetchRecords())
|
|
179
|
+
│
|
|
180
|
+
▼
|
|
181
|
+
HTTPManagerStateService
|
|
182
|
+
│
|
|
183
|
+
├─> Build ApiRequest
|
|
184
|
+
│ ├─> Apply Mapper (if provided)
|
|
185
|
+
│ └─> Add Headers
|
|
186
|
+
│
|
|
187
|
+
▼
|
|
188
|
+
HTTPManagerService
|
|
189
|
+
│
|
|
190
|
+
├─> Check Polling
|
|
191
|
+
├─> Execute HTTP Request (HttpClient)
|
|
192
|
+
│
|
|
193
|
+
▼
|
|
194
|
+
Interceptors
|
|
195
|
+
│
|
|
196
|
+
├─> RequestHeadersInterceptor (add headers)
|
|
197
|
+
├─> WithCredentialsInterceptor (add credentials)
|
|
198
|
+
└─> RequestErrorInterceptor (handle errors)
|
|
199
|
+
│
|
|
200
|
+
▼
|
|
201
|
+
Backend Server
|
|
202
|
+
│
|
|
203
|
+
├─> Process Request
|
|
204
|
+
└─> Return Response
|
|
205
|
+
│
|
|
206
|
+
▼
|
|
207
|
+
HTTPManagerService
|
|
208
|
+
│
|
|
209
|
+
├─> Apply Adapter (transform data)
|
|
210
|
+
├─> Update isPending$ = false
|
|
211
|
+
├─> Update data$ with new data
|
|
212
|
+
│
|
|
213
|
+
▼
|
|
214
|
+
HTTPManagerStateService
|
|
215
|
+
│
|
|
216
|
+
├─> Update ComponentStore state
|
|
217
|
+
└─> Save to IndexedDB (if configured)
|
|
218
|
+
│
|
|
219
|
+
▼
|
|
220
|
+
Component
|
|
221
|
+
│
|
|
222
|
+
└─> Display updated data via data$ observable
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### WebSocket Message Flow
|
|
226
|
+
|
|
227
|
+
```
|
|
228
|
+
Component
|
|
229
|
+
│
|
|
230
|
+
└─> Send Message (e.g., sendNotification())
|
|
231
|
+
│
|
|
232
|
+
▼
|
|
233
|
+
HTTPManagerStateService
|
|
234
|
+
│
|
|
235
|
+
└─> Add Channel Prefix (MES-, PUB-, or SYS-)
|
|
236
|
+
│
|
|
237
|
+
▼
|
|
238
|
+
WebsocketService
|
|
239
|
+
│
|
|
240
|
+
├─> Format Message
|
|
241
|
+
│ ├─> type: 'notification'
|
|
242
|
+
│ ├─> channel: 'MES-alerts'
|
|
243
|
+
│ ├─> content: { message: '...' }
|
|
244
|
+
│ └─> sessionId: { id, name, email }
|
|
245
|
+
│
|
|
246
|
+
└─> Send via WebSocket
|
|
247
|
+
│
|
|
248
|
+
▼
|
|
249
|
+
Backend WebSocket Server
|
|
250
|
+
│
|
|
251
|
+
├─> Validate Channel & User
|
|
252
|
+
├─> Store in Database (for MES- channels)
|
|
253
|
+
└─> Broadcast to Subscribers
|
|
254
|
+
│
|
|
255
|
+
▼
|
|
256
|
+
All Connected Clients (Subscribers)
|
|
257
|
+
│
|
|
258
|
+
├─> WebsocketService receives message
|
|
259
|
+
│
|
|
260
|
+
▼
|
|
261
|
+
HTTPManagerStateService
|
|
262
|
+
│
|
|
263
|
+
├─> Update ComponentStore
|
|
264
|
+
└─> Emit via notificationMessages$
|
|
265
|
+
│
|
|
266
|
+
▼
|
|
267
|
+
Component
|
|
268
|
+
│
|
|
269
|
+
└─> Display notification in UI
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
## Channel Architecture
|
|
273
|
+
|
|
274
|
+
### Channel Types and Data Flow
|
|
275
|
+
|
|
276
|
+
```
|
|
277
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
278
|
+
│ Client Application │
|
|
279
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
280
|
+
│ |
|
|
281
|
+
│ Component calls: │
|
|
282
|
+
│ ┌──────────────────────────────────────────────────────────┐ │
|
|
283
|
+
│ │ stateService.subscribeToChannel('general') (PUB)│ │
|
|
284
|
+
│ │ stateService.subscribeToNotificationChannel('alerts') (MES)│ │
|
|
285
|
+
│ │ stateService.fetchRecords() (SYS)│ │
|
|
286
|
+
│ └──────────────────────────────────────────────────────────┘ │
|
|
287
|
+
│ │ │
|
|
288
|
+
│ ▼ │
|
|
289
|
+
│ ┌──────────────────────────────────────────────────────────┐ │
|
|
290
|
+
│ │ HTTPManagerStateService │ │
|
|
291
|
+
│ │ - Adds appropriate prefix (PUB-, MES-, SYS-) │ │
|
|
292
|
+
│ │ - Routes to WebsocketService │ │
|
|
293
|
+
│ └──────────────────────────────────────────────────────────┘ │
|
|
294
|
+
│ │ │
|
|
295
|
+
│ ▼ │
|
|
296
|
+
│ ┌──────────────────────────────────────────────────────────┐ │
|
|
297
|
+
│ │ WebsocketService │ │
|
|
298
|
+
│ │ - Manages connection lifecycle │ │
|
|
299
|
+
│ │ - Sends subscription messages │ │
|
|
300
|
+
│ │ - Receives and routes messages │ │
|
|
301
|
+
│ └──────────────────────────────────────────────────────────┘ │
|
|
302
|
+
│ │ │
|
|
303
|
+
└────────────────────────────┼─────────────────────────────────────┘
|
|
304
|
+
│
|
|
305
|
+
▼
|
|
306
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
307
|
+
│ WebSocket Server │
|
|
308
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
309
|
+
│ │
|
|
310
|
+
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
|
311
|
+
│ │ PUB- Channel │ │ MES- Channel │ │ SYS- Channel │ │
|
|
312
|
+
│ │ │ │ │ │ │ │
|
|
313
|
+
│ │ In-Memory │ │ DB Persisted │ │ State Sync │ │
|
|
314
|
+
│ │ Broadcasting │ │ Notifications│ │ Private │ │
|
|
315
|
+
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
|
|
316
|
+
│ │ │ │ │
|
|
317
|
+
│ ▼ ▼ ▼ │
|
|
318
|
+
│ ┌────────────────────────────────────────────────┐ │
|
|
319
|
+
│ │ Channel Subscribers (Set<WebSocket>) │ │
|
|
320
|
+
│ └────────────────────────────────────────────────┘ │
|
|
321
|
+
│ │ │ │ │
|
|
322
|
+
│ └──────────────────┴──────────────────┘ │
|
|
323
|
+
│ │ │
|
|
324
|
+
│ ▼ │
|
|
325
|
+
│ ┌─────────────────────────────────────────────────┐ │
|
|
326
|
+
│ │ Broadcast to All Subscribers │ │
|
|
327
|
+
│ └─────────────────────────────────────────────────┘ │
|
|
328
|
+
│ │
|
|
329
|
+
│ For MES- channels: │
|
|
330
|
+
│ ┌─────────────────────────────────────────────────┐ │
|
|
331
|
+
│ │ 1. Store in SQLite Database │ │
|
|
332
|
+
│ │ 2. Broadcast to current subscribers │ │
|
|
333
|
+
│ │ 3. Retrieve historical data on new subscription│ │
|
|
334
|
+
│ └─────────────────────────────────────────────────┘ │
|
|
335
|
+
│ │
|
|
336
|
+
└───────────────────────────────────────────────────────────────────┘
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
## State Management Flow
|
|
340
|
+
|
|
341
|
+
```
|
|
342
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
343
|
+
│ ComponentStore │
|
|
344
|
+
│ (HTTPManagerStateService extends this) │
|
|
345
|
+
├─────────────────────────────────────────────────────────────┤
|
|
346
|
+
│ │
|
|
347
|
+
│ State Interface: │
|
|
348
|
+
│ { │
|
|
349
|
+
│ records: T[], // Array of entities │
|
|
350
|
+
│ record: T | null, // Single selected entity │
|
|
351
|
+
│ page: number, // Current page │
|
|
352
|
+
│ totalPages: number, // Total pages │
|
|
353
|
+
│ isPending: boolean, // Loading state │
|
|
354
|
+
│ error: any // Error state │
|
|
355
|
+
│ } │
|
|
356
|
+
│ │
|
|
357
|
+
│ Selectors (Observables): │
|
|
358
|
+
│ ├─> data$ (all records) │
|
|
359
|
+
│ ├─> record$ (single record) │
|
|
360
|
+
│ ├─> selectRecord$(id) (specific record) │
|
|
361
|
+
│ ├─> page$ │
|
|
362
|
+
│ └─> totalPages$ │
|
|
363
|
+
│ │
|
|
364
|
+
│ Updaters (State Mutations): │
|
|
365
|
+
│ ├─> updateRecordsState(records[]) │
|
|
366
|
+
│ ├─> addRecordState(record) │
|
|
367
|
+
│ ├─> updateRecordState(record) │
|
|
368
|
+
│ ├─> deleteRecordState(id) │
|
|
369
|
+
│ └─> setError(error) │
|
|
370
|
+
│ │
|
|
371
|
+
│ Effects (Side Effects): │
|
|
372
|
+
│ ├─> fetchRecords() → HTTP GET │
|
|
373
|
+
│ ├─> createRecord() → HTTP POST → addRecordState() │
|
|
374
|
+
│ ├─> updateRecord() → HTTP PUT → updateRecordState() │
|
|
375
|
+
│ ├─> deleteRecord() → HTTP DELETE → deleteRecordState() │
|
|
376
|
+
│ └─> WebSocket messages → auto state updates │
|
|
377
|
+
│ │
|
|
378
|
+
└───────────────────────────────────────────────────────────────┘
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
## Caching Strategy
|
|
382
|
+
|
|
383
|
+
```
|
|
384
|
+
┌────────────────────────────────────────────────────────────┐
|
|
385
|
+
│ Fetch Records Request │
|
|
386
|
+
└──────────────────────┬─────────────────────────────────────┘
|
|
387
|
+
│
|
|
388
|
+
▼
|
|
389
|
+
┌─────────────────────────┐
|
|
390
|
+
│ DatabaseStorage Config? │
|
|
391
|
+
└────────┬────────────────┘
|
|
392
|
+
│
|
|
393
|
+
┌───────┴────────┐
|
|
394
|
+
│ │
|
|
395
|
+
YES NO
|
|
396
|
+
│ │
|
|
397
|
+
▼ ▼
|
|
398
|
+
┌──────────────────┐ ┌──────────────┐
|
|
399
|
+
│Check IndexedDB │ │Fetch from │
|
|
400
|
+
│for cached data │ │Server (HTTP) │
|
|
401
|
+
└────┬─────────────┘ └──────┬───────┘
|
|
402
|
+
│ │
|
|
403
|
+
▼ │
|
|
404
|
+
┌──────────────┐ │
|
|
405
|
+
│Cache Valid? │ │
|
|
406
|
+
└──┬───────────┘ │
|
|
407
|
+
│ │
|
|
408
|
+
┌──┴──┐ │
|
|
409
|
+
│ YES │ NO │
|
|
410
|
+
│ │ │
|
|
411
|
+
▼ ▼ │
|
|
412
|
+
│ ┌──────────────┐ │
|
|
413
|
+
│ │Fetch from │ │
|
|
414
|
+
│ │Server │ │
|
|
415
|
+
│ └──────┬───────┘ │
|
|
416
|
+
│ │ │
|
|
417
|
+
│ ▼ │
|
|
418
|
+
│ ┌──────────────┐ │
|
|
419
|
+
│ │Save to │ │
|
|
420
|
+
│ │IndexedDB │ │
|
|
421
|
+
│ └──────┬───────┘ │
|
|
422
|
+
│ │ │
|
|
423
|
+
└─────────┴──────────────────┘
|
|
424
|
+
│
|
|
425
|
+
▼
|
|
426
|
+
┌──────────────────────────┐
|
|
427
|
+
│Update ComponentStore │
|
|
428
|
+
│and emit via data$ │
|
|
429
|
+
└──────────────────────────┘
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
## File Structure
|
|
433
|
+
|
|
434
|
+
```
|
|
435
|
+
projects/http-request-manager/
|
|
436
|
+
├── src/
|
|
437
|
+
│ ├── lib/
|
|
438
|
+
│ │ ├── services/
|
|
439
|
+
│ │ │ ├── request-manager-services/
|
|
440
|
+
│ │ │ │ ├── http-manager.service.ts # Base HTTP service (Observable)
|
|
441
|
+
│ │ │ │ ├── http-manager-signals.service.ts # HTTP service (Signals)
|
|
442
|
+
│ │ │ │ ├── request.service.ts # Base request service
|
|
443
|
+
│ │ │ │ ├── request-signals.service.ts # Base request service (Signals)
|
|
444
|
+
│ │ │ │ └── rxjs-operators/ # Custom RxJS operators
|
|
445
|
+
│ │ │ │
|
|
446
|
+
│ │ │ ├── request-manager-state-service/
|
|
447
|
+
│ │ │ │ ├── http-manager-state.store.ts # State management (ComponentStore)
|
|
448
|
+
│ │ │ │ └── models/ # Type definitions
|
|
449
|
+
│ │ │ │
|
|
450
|
+
│ │ │ ├── store-state-manager-service/
|
|
451
|
+
│ │ │ │ ├── store-state-manager.service.ts # LocalStorage + ComponentStore
|
|
452
|
+
│ │ │ │ └── models/
|
|
453
|
+
│ │ │ │
|
|
454
|
+
│ │ │ ├── local-storage-manager-service/
|
|
455
|
+
│ │ │ │ ├── local-storage-manager.service.ts # LocalStorage/SessionStorage
|
|
456
|
+
│ │ │ │ ├── local-storage-signals-manager.service.ts # Signals API
|
|
457
|
+
│ │ │ │ └── models/
|
|
458
|
+
│ │ │ │
|
|
459
|
+
│ │ │ ├── database-manager-service/
|
|
460
|
+
│ │ │ │ ├── database.manager.service.ts # IndexedDB (Dexie.js)
|
|
461
|
+
│ │ │ │ ├── db.storage.service.ts # Dexie.js wrapper
|
|
462
|
+
│ │ │ │ └── models/
|
|
463
|
+
│ │ │ │
|
|
464
|
+
│ │ │ ├── ws-manager-service/
|
|
465
|
+
│ │ │ │ ├── websocket-service/
|
|
466
|
+
│ │ │ │ │ └── websocket-manager.service.ts # Singleton WS connection
|
|
467
|
+
│ │ │ │ ├── services/
|
|
468
|
+
│ │ │ │ │ └── websocket.service.ts # Legacy WS service
|
|
469
|
+
│ │ │ │ ├── message-tracker.service.ts # Message history & replay
|
|
470
|
+
│ │ │ │ └── models/
|
|
471
|
+
│ │ │ │
|
|
472
|
+
│ │ │ ├── utils/ # Utility services
|
|
473
|
+
│ │ │ │ ├── utils.service.ts
|
|
474
|
+
│ │ │ │ ├── object-merger.service.ts
|
|
475
|
+
│ │ │ │ ├── encryption/ # Encryption utilities
|
|
476
|
+
│ │ │ │ └── app.service.ts
|
|
477
|
+
│ │ │ │
|
|
478
|
+
│ │ │ └── index.ts # Service exports
|
|
479
|
+
│ │ │
|
|
480
|
+
│ │ ├── interceptors/
|
|
481
|
+
│ │ │ ├── request-error.interceptor.ts # Error handling + toasts
|
|
482
|
+
│ │ │ ├── request-header.interceptor.ts # Auto headers
|
|
483
|
+
│ │ │ ├── credentials.interceptor.ts # withCredentials
|
|
484
|
+
│ │ │ ├── proxy-debugger.interceptor.ts # Debug logging
|
|
485
|
+
│ │ │ └── models/
|
|
486
|
+
│ │ │
|
|
487
|
+
│ │ ├── models/ # Shared models
|
|
488
|
+
│ │ │ ├── api-request.model.ts
|
|
489
|
+
│ │ │ ├── database-storage.model.ts
|
|
490
|
+
│ │ │ ├── data-type.enum.ts
|
|
491
|
+
│ │ │ ├── retry-options.model.ts
|
|
492
|
+
│ │ │ ├── config-options.model.ts
|
|
493
|
+
│ │ │ └── index.ts
|
|
494
|
+
│ │ │
|
|
495
|
+
│ │ ├── http-request-services-demo/ # Demo components
|
|
496
|
+
│ │ │ ├── request-manager-demo/
|
|
497
|
+
│ │ │ ├── request-manager-state-demo/
|
|
498
|
+
│ │ │ ├── request-signals-manager-demo/
|
|
499
|
+
│ │ │ ├── database-data-demo/
|
|
500
|
+
│ │ │ ├── local-storage-demo/
|
|
501
|
+
│ │ │ └── local-storage-signals-demo/
|
|
502
|
+
│ │ │
|
|
503
|
+
│ │ ├── http-request-manager.module.ts # Module definition
|
|
504
|
+
│ │ └── index.ts # Public API
|
|
505
|
+
│ │
|
|
506
|
+
│ └── docs/ # Documentation
|
|
507
|
+
│ ├── HTTP_MANAGER_README.md
|
|
508
|
+
│ ├── HTTP_STATE_MANAGER_README.md
|
|
509
|
+
│ ├── HTTP_SINGNALS_MANAGER_README.md
|
|
510
|
+
│ ├── WS_MANAGER_README.md
|
|
511
|
+
│ ├── DATABASE_README.md
|
|
512
|
+
│ ├── LOCAL_STORAGE_README.md
|
|
513
|
+
│ ├── UTILS_README.md
|
|
514
|
+
│ └── INTERCEPTOR_README.md
|
|
515
|
+
│
|
|
516
|
+
├── ARCHITECTURE.md # This file
|
|
517
|
+
├── README.md # Main documentation
|
|
518
|
+
├── package.json
|
|
519
|
+
└── ng-package.json # ng-packagr config
|
|
520
|
+
```
|
|
521
|
+
|
|
522
|
+
### Backend Requirements
|
|
523
|
+
|
|
524
|
+
For full functionality, the backend server must:
|
|
525
|
+
|
|
526
|
+
1. **HTTP REST API**
|
|
527
|
+
- CRUD endpoints for entities
|
|
528
|
+
- JSON request/response format
|
|
529
|
+
- Support for standard HTTP methods (GET, POST, PUT, DELETE)
|
|
530
|
+
|
|
531
|
+
2. **WebSocket Server**
|
|
532
|
+
- Accept WebSocket connections with optional JWT authentication
|
|
533
|
+
- Handle message types: `subscribe`, `unsubscribe`, `message`, `notification`, etc.
|
|
534
|
+
- Broadcast messages to channel subscribers
|
|
535
|
+
- Maintain channel subscriptions per connection
|
|
536
|
+
|
|
537
|
+
3. **Database (for MES- channels)**
|
|
538
|
+
- Store notifications with: id, channel, user_name, created (epoch), message (JSON)
|
|
539
|
+
- Support queries by channel and date range
|
|
540
|
+
- Provide endpoints for:
|
|
541
|
+
- GET today's notification channels
|
|
542
|
+
- GET previous day's notification channels
|
|
543
|
+
- GET notifications by channel with date filters
|
|
544
|
+
|
|
545
|
+
### Example Backend Structure
|
|
546
|
+
|
|
547
|
+
See `gtlc-websockets` server implementation for reference:
|
|
548
|
+
- `ws-server.js` - Main server with HTTP and WebSocket setup
|
|
549
|
+
- `middleware/websocket-service.js` - WebSocket message handlers
|
|
550
|
+
- `middleware/notification-db.js` - SQLite database operations
|
|
551
|
+
|
|
552
|
+
---
|
|
553
|
+
|
|
554
|
+
## Security Considerations
|
|
555
|
+
|
|
556
|
+
1. **JWT Authentication**: WebSocket connections can require JWT tokens
|
|
557
|
+
2. **Encrypted Storage**: LocalStorage can use AES encryption with APP_ID
|
|
558
|
+
3. **Channel Access Control**: Backend validates user permissions for channels
|
|
559
|
+
4. **HTTPS/WSS**: Production deployments should use secure protocols
|
|
560
|
+
5. **Data Validation**: All inputs are validated on server side
|
|
561
|
+
|
|
562
|
+
---
|
|
563
|
+
|
|
564
|
+
## Performance Optimizations
|
|
565
|
+
|
|
566
|
+
1. **IndexedDB Caching**: Reduces server load and improves offline capability
|
|
567
|
+
2. **Polling with Countdown**: Visual feedback prevents duplicate requests
|
|
568
|
+
3. **Connection Pooling**: WebSocket reuses single connection for all channels
|
|
569
|
+
4. **Debounced Updates**: State updates batched when possible
|
|
570
|
+
5. **Lazy Loading**: Services loaded only when needed
|
|
571
|
+
|
|
572
|
+
---
|
|
573
|
+
|
|
574
|
+
## Migration Guide
|
|
575
|
+
|
|
576
|
+
### From HTTPClient to HTTPManagerService
|
|
577
|
+
|
|
578
|
+
```typescript
|
|
579
|
+
// Before (HttpClient)
|
|
580
|
+
http.get('api/users').subscribe(users => {
|
|
581
|
+
this.users = users;
|
|
582
|
+
this.loading = false;
|
|
583
|
+
});
|
|
584
|
+
|
|
585
|
+
// After (HTTPManagerService)
|
|
586
|
+
httpManager.getRequest(
|
|
587
|
+
ApiRequest.adapt({ path: ['users'] })
|
|
588
|
+
).subscribe();
|
|
589
|
+
|
|
590
|
+
data$ = this.httpManager.data$;
|
|
591
|
+
isLoading$ = this.httpManager.isPending$;
|
|
592
|
+
```
|
|
593
|
+
|
|
594
|
+
### From Manual State to HTTPManagerStateService
|
|
595
|
+
|
|
596
|
+
```typescript
|
|
597
|
+
// Before (Manual State)
|
|
598
|
+
users: User[] = [];
|
|
599
|
+
loading = false;
|
|
600
|
+
|
|
601
|
+
loadUsers() {
|
|
602
|
+
this.loading = true;
|
|
603
|
+
this.http.get('api/users').subscribe(users => {
|
|
604
|
+
this.users = users;
|
|
605
|
+
this.loading = false;
|
|
606
|
+
});
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
addUser(user: User) {
|
|
610
|
+
this.http.post('api/users', user).subscribe(newUser => {
|
|
611
|
+
this.users = [...this.users, newUser];
|
|
612
|
+
});
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
// After (HTTPManagerStateService)
|
|
616
|
+
@Injectable()
|
|
617
|
+
export class UsersStore extends HTTPManagerStateService<User> {
|
|
618
|
+
constructor() {
|
|
619
|
+
super(ApiRequest.adapt({ path: ['users'] }), DataType.ARRAY);
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
loadUsers() { this.fetchRecords(); }
|
|
623
|
+
addUser(user: User) { this.createRecord(user); }
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
// Component
|
|
627
|
+
data$ = this.usersStore.data$;
|
|
628
|
+
isLoading$ = this.usersStore.isPending$;
|
|
629
|
+
```
|
|
630
|
+
|
|
631
|
+
---
|
|
632
|
+
|
|
633
|
+
This architecture provides a scalable, maintainable foundation for Angular applications with comprehensive data management capabilities.
|