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,613 @@
|
|
|
1
|
+
# WebSocket Manager Service
|
|
2
|
+
|
|
3
|
+
The `WebSocketService` provides comprehensive WebSocket connection management with channel-based messaging, real-time communication, and notification support for Angular applications.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
This service offers a robust WebSocket implementation with:
|
|
8
|
+
|
|
9
|
+
- **Channel-Based Messaging** - Subscribe to multiple channels for different use cases
|
|
10
|
+
- **Automatic Reconnection** - Handles connection states and reconnection scenarios
|
|
11
|
+
- **Session Management** - Automatic session ID generation and tracking
|
|
12
|
+
- **Broadcast Messaging** - Send messages to all subscribers or specific users
|
|
13
|
+
- **Notification Channels** - Dedicated notification system with date filtering
|
|
14
|
+
- **Connection Status Tracking** - Real-time connection status observables
|
|
15
|
+
- **JWT Authentication** - Secure WebSocket connections with JWT tokens
|
|
16
|
+
|
|
17
|
+
## Installation
|
|
18
|
+
|
|
19
|
+
This service is automatically available when you import `HttpRequestManagerModule`.
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
import { HttpRequestManagerModule } from 'http-request-manager';
|
|
23
|
+
|
|
24
|
+
@NgModule({
|
|
25
|
+
imports: [HttpRequestManagerModule.forRoot({})]
|
|
26
|
+
})
|
|
27
|
+
export class AppModule { }
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Usage
|
|
31
|
+
|
|
32
|
+
### Basic Connection
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
import { WebsocketService } from 'http-request-manager';
|
|
36
|
+
import { WSOptions } from 'http-request-manager';
|
|
37
|
+
|
|
38
|
+
@Component({
|
|
39
|
+
standalone: true,
|
|
40
|
+
providers: [WebsocketService]
|
|
41
|
+
})
|
|
42
|
+
export class MyComponent {
|
|
43
|
+
constructor(private wsService: WebsocketService) {}
|
|
44
|
+
|
|
45
|
+
connect() {
|
|
46
|
+
const options: WSOptions = {
|
|
47
|
+
wsServer: 'ws://localhost:8080',
|
|
48
|
+
id: 'my-channel',
|
|
49
|
+
user: { userId: 'user123', username: 'john' },
|
|
50
|
+
channels: ['notifications', 'updates']
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const jwtToken = 'your-jwt-token';
|
|
54
|
+
this.wsService.connect(options, jwtToken);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
disconnect() {
|
|
58
|
+
this.wsService.disconnect();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Subscribing to Messages
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
ngOnInit() {
|
|
67
|
+
// Listen to all messages
|
|
68
|
+
this.wsService.messages$.subscribe(message => {
|
|
69
|
+
console.log('Received message:', message);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
// Monitor connection status
|
|
73
|
+
this.wsService.connectionStatus$.subscribe(isConnected => {
|
|
74
|
+
console.log('Connected:', isConnected);
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
// Track subscribed channels
|
|
78
|
+
this.wsService.subscribedChannels$.subscribe(channels => {
|
|
79
|
+
console.log('Subscribed channels:', Array.from(channels));
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## API Reference
|
|
85
|
+
|
|
86
|
+
### Connection Methods
|
|
87
|
+
|
|
88
|
+
#### `connect(options: WSOptions, jwtToken?: string)`
|
|
89
|
+
|
|
90
|
+
Establishes a WebSocket connection.
|
|
91
|
+
|
|
92
|
+
**Parameters:**
|
|
93
|
+
- `options` - WebSocket connection options
|
|
94
|
+
- `wsServer: string` - WebSocket server URL
|
|
95
|
+
- `id: string` - Primary channel name
|
|
96
|
+
- `user: any` - User information object
|
|
97
|
+
- `channels?: string[]` - Additional channels to subscribe to
|
|
98
|
+
- `jwtToken?: string` - Optional JWT token for authentication
|
|
99
|
+
|
|
100
|
+
**Example:**
|
|
101
|
+
```typescript
|
|
102
|
+
const options: WSOptions = {
|
|
103
|
+
wsServer: 'ws://localhost:8080',
|
|
104
|
+
id: 'main-channel',
|
|
105
|
+
user: { userId: '123', name: 'John' },
|
|
106
|
+
channels: ['notifications', 'updates']
|
|
107
|
+
};
|
|
108
|
+
this.wsService.connect(options, 'your-jwt-token');
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
#### `disconnect()`
|
|
112
|
+
|
|
113
|
+
Closes the WebSocket connection and cleans up resources.
|
|
114
|
+
|
|
115
|
+
```typescript
|
|
116
|
+
this.wsService.disconnect();
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Channel Subscription Methods
|
|
120
|
+
|
|
121
|
+
#### `subscribeToChannel(channelName: string)`
|
|
122
|
+
|
|
123
|
+
Subscribe to a specific channel.
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
this.wsService.subscribeToChannel('notifications');
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
#### `subscribeToChannels(channelNames: string[])`
|
|
130
|
+
|
|
131
|
+
Subscribe to multiple channels at once.
|
|
132
|
+
|
|
133
|
+
```typescript
|
|
134
|
+
this.wsService.subscribeToChannels(['notifications', 'updates', 'alerts']);
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
#### `unsubscribeFromChannel(channel: string)`
|
|
138
|
+
|
|
139
|
+
Unsubscribe from a specific channel.
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
this.wsService.unsubscribeFromChannel('notifications');
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
#### `getSubscribedChannels(): Set<string>`
|
|
146
|
+
|
|
147
|
+
Get the currently subscribed channels.
|
|
148
|
+
|
|
149
|
+
```typescript
|
|
150
|
+
const channels = this.wsService.getSubscribedChannels();
|
|
151
|
+
console.log('Channels:', Array.from(channels));
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Messaging Methods
|
|
155
|
+
|
|
156
|
+
#### `sendBroadcast(content: any)`
|
|
157
|
+
|
|
158
|
+
Send a broadcast message to all subscribers.
|
|
159
|
+
|
|
160
|
+
```typescript
|
|
161
|
+
this.wsService.sendBroadcast({ message: 'Hello everyone!', timestamp: Date.now() });
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
#### `sendMessageInChannel(channel: string, content: any)`
|
|
165
|
+
|
|
166
|
+
Send a message to a specific channel (state manager message type).
|
|
167
|
+
|
|
168
|
+
```typescript
|
|
169
|
+
this.wsService.sendMessageInChannel('notifications', {
|
|
170
|
+
type: 'alert',
|
|
171
|
+
message: 'System update available'
|
|
172
|
+
});
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
#### `sendChannelMessage(channel: string, content: any)`
|
|
176
|
+
|
|
177
|
+
Send a message to a specific channel (message type, broadcasts to all subscribers).
|
|
178
|
+
|
|
179
|
+
```typescript
|
|
180
|
+
this.wsService.sendChannelMessage('chat-room', {
|
|
181
|
+
sender: 'John',
|
|
182
|
+
text: 'Hello everyone!'
|
|
183
|
+
});
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
#### `sendMessageToUser(user: string, content: any)`
|
|
187
|
+
|
|
188
|
+
Send a private message to a specific user.
|
|
189
|
+
|
|
190
|
+
```typescript
|
|
191
|
+
this.wsService.sendMessageToUser('user123', {
|
|
192
|
+
message: 'Private message'
|
|
193
|
+
});
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Channel Management Methods
|
|
197
|
+
|
|
198
|
+
#### `createChannel(channel: string)`
|
|
199
|
+
|
|
200
|
+
Create a new channel.
|
|
201
|
+
|
|
202
|
+
```typescript
|
|
203
|
+
this.wsService.createChannel('new-channel');
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
#### `deleteChannel(channel: string)`
|
|
207
|
+
|
|
208
|
+
Delete a channel.
|
|
209
|
+
|
|
210
|
+
```typescript
|
|
211
|
+
this.wsService.deleteChannel('old-channel');
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
#### `getAllChannels()`
|
|
215
|
+
|
|
216
|
+
Request a list of all available channels.
|
|
217
|
+
|
|
218
|
+
```typescript
|
|
219
|
+
this.wsService.getAllChannels();
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
#### `getUsersInChannel(channel: string)`
|
|
223
|
+
|
|
224
|
+
Get the list of users in a specific channel.
|
|
225
|
+
|
|
226
|
+
```typescript
|
|
227
|
+
this.wsService.getUsersInChannel('chat-room');
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### Notification Channel Methods
|
|
231
|
+
|
|
232
|
+
Notification channels use the MES- prefix and provide advanced features like date filtering.
|
|
233
|
+
|
|
234
|
+
#### `createNotificationChannel(channel: string)`
|
|
235
|
+
|
|
236
|
+
Create a notification channel.
|
|
237
|
+
|
|
238
|
+
```typescript
|
|
239
|
+
this.wsService.createNotificationChannel('MES-updates');
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
#### `getNotificationChannels()`
|
|
243
|
+
|
|
244
|
+
Get all notification channels (in-memory).
|
|
245
|
+
|
|
246
|
+
```typescript
|
|
247
|
+
this.wsService.getNotificationChannels();
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
#### `getTodaysNotificationChannels()`
|
|
251
|
+
|
|
252
|
+
Get notification channels that have notifications posted today.
|
|
253
|
+
|
|
254
|
+
```typescript
|
|
255
|
+
this.wsService.getTodaysNotificationChannels();
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
#### `subscribeToNotificationChannel(channel: string, options?, user?)`
|
|
259
|
+
|
|
260
|
+
Subscribe to a notification channel with optional date filters.
|
|
261
|
+
|
|
262
|
+
```typescript
|
|
263
|
+
this.wsService.subscribeToNotificationChannel('MES-updates', {
|
|
264
|
+
startEpoch: 1640995200000, // Jan 1, 2022
|
|
265
|
+
endEpoch: 1641081600000 // Jan 2, 2022
|
|
266
|
+
}, { userId: 'user123' });
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
#### `unsubscribeFromNotificationChannel(channel: string)`
|
|
270
|
+
|
|
271
|
+
Unsubscribe from a notification channel.
|
|
272
|
+
|
|
273
|
+
```typescript
|
|
274
|
+
this.wsService.unsubscribeFromNotificationChannel('MES-updates');
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
#### `sendNotification(channel: string, content: any)`
|
|
278
|
+
|
|
279
|
+
Send a notification to a channel.
|
|
280
|
+
|
|
281
|
+
```typescript
|
|
282
|
+
this.wsService.sendNotification('MES-updates', {
|
|
283
|
+
title: 'New Update',
|
|
284
|
+
message: 'Version 2.0 is now available',
|
|
285
|
+
priority: 'high'
|
|
286
|
+
});
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
## Observables
|
|
290
|
+
|
|
291
|
+
### `messages$: Observable<any>`
|
|
292
|
+
|
|
293
|
+
Observable that emits all incoming WebSocket messages.
|
|
294
|
+
|
|
295
|
+
```typescript
|
|
296
|
+
this.wsService.messages$.subscribe(message => {
|
|
297
|
+
console.log('New message:', message);
|
|
298
|
+
});
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
### `connectionStatus$: Observable<boolean>`
|
|
302
|
+
|
|
303
|
+
Observable that emits the current connection status (true = connected, false = disconnected).
|
|
304
|
+
|
|
305
|
+
```typescript
|
|
306
|
+
this.wsService.connectionStatus$.subscribe(connected => {
|
|
307
|
+
this.isConnected = connected;
|
|
308
|
+
});
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
### `subscribedChannels$: Observable<Set<string>>`
|
|
312
|
+
|
|
313
|
+
Observable that emits the set of currently subscribed channels.
|
|
314
|
+
|
|
315
|
+
```typescript
|
|
316
|
+
this.wsService.subscribedChannels$.subscribe(channels => {
|
|
317
|
+
this.currentChannels = Array.from(channels);
|
|
318
|
+
});
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
## Session Management
|
|
322
|
+
|
|
323
|
+
The service automatically manages WebSocket sessions using sessionStorage:
|
|
324
|
+
|
|
325
|
+
- A unique session ID is generated and stored in `WSID` key
|
|
326
|
+
- The session ID is included in the WebSocket URL as a query parameter
|
|
327
|
+
- The session persists across page refreshes
|
|
328
|
+
|
|
329
|
+
```typescript
|
|
330
|
+
// Session ID is automatically included in the connection URL
|
|
331
|
+
// Format: ws://server?token=xxx&sessionId=xxx
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
## JWT Authentication
|
|
335
|
+
|
|
336
|
+
You can secure your WebSocket connection with JWT tokens:
|
|
337
|
+
|
|
338
|
+
```typescript
|
|
339
|
+
const options: WSOptions = {
|
|
340
|
+
wsServer: 'ws://localhost:8080',
|
|
341
|
+
id: 'main-channel',
|
|
342
|
+
user: { userId: 'user123' }
|
|
343
|
+
};
|
|
344
|
+
|
|
345
|
+
const jwtToken = 'your-jwt-token';
|
|
346
|
+
this.wsService.connect(options, jwtToken);
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
### JWT Validation
|
|
350
|
+
|
|
351
|
+
The service handles JWT validation errors:
|
|
352
|
+
|
|
353
|
+
- If JWT validation fails, the connection is closed
|
|
354
|
+
- An error message is emitted via `messages$` observable
|
|
355
|
+
- The connection status is set to false
|
|
356
|
+
|
|
357
|
+
```typescript
|
|
358
|
+
this.wsService.messages$.subscribe(message => {
|
|
359
|
+
if (message?.error === 'JWT_INVALID') {
|
|
360
|
+
console.error('Authentication failed. Please login again.');
|
|
361
|
+
// Redirect to login or refresh token
|
|
362
|
+
}
|
|
363
|
+
});
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
## Connection State Handling
|
|
367
|
+
|
|
368
|
+
The service intelligently handles different connection states:
|
|
369
|
+
|
|
370
|
+
### Already Open
|
|
371
|
+
```typescript
|
|
372
|
+
// If connection is already open, connect() returns without action
|
|
373
|
+
this.wsService.connect(options, token); // No effect if already connected
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
### Connecting
|
|
377
|
+
```typescript
|
|
378
|
+
// If connection is in progress, connect() returns without action
|
|
379
|
+
// The existing connection process continues
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
### Closing/Closed
|
|
383
|
+
```typescript
|
|
384
|
+
// If connection is closing or closed, the old socket is cleaned up
|
|
385
|
+
// and a new connection is established
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
## Reconnection Behavior
|
|
389
|
+
|
|
390
|
+
The service tracks the last connection options and supports reconnection scenarios:
|
|
391
|
+
|
|
392
|
+
```typescript
|
|
393
|
+
// Initial connection
|
|
394
|
+
this.wsService.connect(options, token);
|
|
395
|
+
|
|
396
|
+
// After disconnection, you can reconnect
|
|
397
|
+
this.wsService.connect(options, token);
|
|
398
|
+
|
|
399
|
+
// The service will:
|
|
400
|
+
// 1. Clean up the old socket
|
|
401
|
+
// 2. Establish a new connection
|
|
402
|
+
// 3. Subscribe to previously subscribed channels
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
## Message Types
|
|
406
|
+
|
|
407
|
+
The service supports several message types:
|
|
408
|
+
|
|
409
|
+
| Message Type | Description |
|
|
410
|
+
|--------------|-------------|
|
|
411
|
+
| `subscribe` | Subscribe to a channel |
|
|
412
|
+
| `unsubscribe` | Unsubscribe from a channel |
|
|
413
|
+
| `broadcast` | Send message to all subscribers |
|
|
414
|
+
| `stateMangerMessage` | Send message to a channel (state manager) |
|
|
415
|
+
| `message` | Send message to a channel (broadcast to all) |
|
|
416
|
+
| `userMessage` | Send private message to a user |
|
|
417
|
+
| `getChannels` | Request list of all channels |
|
|
418
|
+
| `createChannel` | Create a new channel |
|
|
419
|
+
| `deleteChannel` | Delete a channel |
|
|
420
|
+
| `getUsers` | Get users in a channel |
|
|
421
|
+
| `createNotificationChannel` | Create a notification channel |
|
|
422
|
+
| `getNotificationChannels` | Get notification channels |
|
|
423
|
+
| `getTodaysNotificationChannels` | Get today's notification channels |
|
|
424
|
+
| `subscribeNotifications` | Subscribe to notification channel |
|
|
425
|
+
| `unsubscribeNotifications` | Unsubscribe from notification channel |
|
|
426
|
+
| `notification` | Send notification |
|
|
427
|
+
|
|
428
|
+
## Best Practices
|
|
429
|
+
|
|
430
|
+
### 1. Clean Up Connections
|
|
431
|
+
|
|
432
|
+
Always disconnect from WebSocket when the component is destroyed:
|
|
433
|
+
|
|
434
|
+
```typescript
|
|
435
|
+
ngOnDestroy() {
|
|
436
|
+
this.wsService.disconnect();
|
|
437
|
+
}
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
### 2. Handle Connection Errors
|
|
441
|
+
|
|
442
|
+
Monitor connection status and handle errors:
|
|
443
|
+
|
|
444
|
+
```typescript
|
|
445
|
+
this.wsService.connectionStatus$.subscribe(connected => {
|
|
446
|
+
if (!connected) {
|
|
447
|
+
console.warn('WebSocket disconnected. Attempting to reconnect...');
|
|
448
|
+
// Implement reconnection logic
|
|
449
|
+
}
|
|
450
|
+
});
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
### 3. Use Channel-Based Messaging
|
|
454
|
+
|
|
455
|
+
Organize your communication into logical channels:
|
|
456
|
+
|
|
457
|
+
```typescript
|
|
458
|
+
// Different channels for different use cases
|
|
459
|
+
this.wsService.subscribeToChannel('notifications'); // System notifications
|
|
460
|
+
this.wsService.subscribeToChannel('chat-room'); // Chat messages
|
|
461
|
+
this.wsService.subscribeToChannel('updates'); // Real-time updates
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
### 4. Implement Error Handling
|
|
465
|
+
|
|
466
|
+
Handle potential errors in message processing:
|
|
467
|
+
|
|
468
|
+
```typescript
|
|
469
|
+
this.wsService.messages$.pipe(
|
|
470
|
+
catchError(error => {
|
|
471
|
+
console.error('Message processing error:', error);
|
|
472
|
+
return EMPTY;
|
|
473
|
+
})
|
|
474
|
+
).subscribe(message => {
|
|
475
|
+
// Process message
|
|
476
|
+
});
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
### 5. Use Notification Channels for Date-Filtered Data
|
|
480
|
+
|
|
481
|
+
For time-sensitive notifications, use notification channels with date filters:
|
|
482
|
+
|
|
483
|
+
```typescript
|
|
484
|
+
this.wsService.subscribeToNotificationChannel('MES-updates', {
|
|
485
|
+
startEpoch: Date.now() - 24 * 60 * 60 * 1000, // Last 24 hours
|
|
486
|
+
endEpoch: Date.now()
|
|
487
|
+
});
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
## Integration with HTTPManagerStateService
|
|
491
|
+
|
|
492
|
+
The WebSocketService is designed to work seamlessly with HTTPManagerStateService for real-time CRUD operations:
|
|
493
|
+
|
|
494
|
+
```typescript
|
|
495
|
+
// The HTTPManagerStateService automatically integrates with WebSocket
|
|
496
|
+
// to keep local state synchronized with server changes
|
|
497
|
+
|
|
498
|
+
this.httpStateService = httpManagerStateService.updater(
|
|
499
|
+
(state: any) => ({
|
|
500
|
+
...state,
|
|
501
|
+
wsOptions: {
|
|
502
|
+
wsServer: 'ws://localhost:8080',
|
|
503
|
+
id: 'my-channel',
|
|
504
|
+
user: { userId: 'user123' }
|
|
505
|
+
}
|
|
506
|
+
})
|
|
507
|
+
);
|
|
508
|
+
|
|
509
|
+
// WebSocket messages automatically update the state
|
|
510
|
+
// through the HTTPManagerStateService integration
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
## Troubleshooting
|
|
514
|
+
|
|
515
|
+
### Connection Fails
|
|
516
|
+
|
|
517
|
+
- Check if the WebSocket server URL is correct
|
|
518
|
+
- Verify JWT token is valid (if using authentication)
|
|
519
|
+
- Ensure server is running and accessible
|
|
520
|
+
- Check browser console for detailed error messages
|
|
521
|
+
|
|
522
|
+
### Messages Not Received
|
|
523
|
+
|
|
524
|
+
- Verify you're subscribed to the correct channel
|
|
525
|
+
- Check connection status via `connectionStatus$` observable
|
|
526
|
+
- Ensure server is sending messages to the correct channel
|
|
527
|
+
- Check message format matches expected structure
|
|
528
|
+
|
|
529
|
+
### JWT Validation Error
|
|
530
|
+
|
|
531
|
+
- Verify JWT token is not expired
|
|
532
|
+
- Ensure token format is correct
|
|
533
|
+
- Check server-side JWT validation logic
|
|
534
|
+
|
|
535
|
+
## Example: Complete Chat Component
|
|
536
|
+
|
|
537
|
+
```typescript
|
|
538
|
+
import { Component, OnInit, OnDestroy } from '@angular/core';
|
|
539
|
+
import { WebsocketService } from 'http-request-manager';
|
|
540
|
+
|
|
541
|
+
@Component({
|
|
542
|
+
selector: 'app-chat',
|
|
543
|
+
template: `
|
|
544
|
+
<div *ngIf="!isConnected">
|
|
545
|
+
<button (click)="connect()">Connect</button>
|
|
546
|
+
</div>
|
|
547
|
+
<div *ngIf="isConnected">
|
|
548
|
+
<div class="messages">
|
|
549
|
+
<div *ngFor="let msg of messages" class="message">
|
|
550
|
+
{{ msg }}
|
|
551
|
+
</div>
|
|
552
|
+
</div>
|
|
553
|
+
<input [(ngModel)]="newMessage" placeholder="Type a message..." />
|
|
554
|
+
<button (click)="sendMessage()">Send</button>
|
|
555
|
+
<button (click)="disconnect()">Disconnect</button>
|
|
556
|
+
</div>
|
|
557
|
+
`
|
|
558
|
+
})
|
|
559
|
+
export class ChatComponent implements OnInit, OnDestroy {
|
|
560
|
+
messages: string[] = [];
|
|
561
|
+
newMessage: string = '';
|
|
562
|
+
isConnected = false;
|
|
563
|
+
|
|
564
|
+
private subscriptions = [];
|
|
565
|
+
|
|
566
|
+
constructor(private wsService: WebsocketService) {}
|
|
567
|
+
|
|
568
|
+
ngOnInit() {
|
|
569
|
+
this.subscriptions.push(
|
|
570
|
+
this.wsService.messages$.subscribe(message => {
|
|
571
|
+
this.messages.push(message);
|
|
572
|
+
}),
|
|
573
|
+
this.wsService.connectionStatus$.subscribe(connected => {
|
|
574
|
+
this.isConnected = connected;
|
|
575
|
+
})
|
|
576
|
+
);
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
connect() {
|
|
580
|
+
const options = {
|
|
581
|
+
wsServer: 'ws://localhost:8080',
|
|
582
|
+
id: 'chat-room',
|
|
583
|
+
user: { username: 'current-user' }
|
|
584
|
+
};
|
|
585
|
+
this.wsService.connect(options);
|
|
586
|
+
this.wsService.subscribeToChannel('chat-room');
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
sendMessage() {
|
|
590
|
+
this.wsService.sendChannelMessage('chat-room', {
|
|
591
|
+
sender: 'current-user',
|
|
592
|
+
text: this.newMessage,
|
|
593
|
+
timestamp: Date.now()
|
|
594
|
+
});
|
|
595
|
+
this.newMessage = '';
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
disconnect() {
|
|
599
|
+
this.wsService.disconnect();
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
ngOnDestroy() {
|
|
603
|
+
this.subscriptions.forEach(sub => sub.unsubscribe());
|
|
604
|
+
this.wsService.disconnect();
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
```
|
|
608
|
+
|
|
609
|
+
## Related Services
|
|
610
|
+
|
|
611
|
+
- [`HTTPManagerService`](HTTP_MANAGER_README.md) - HTTP request management
|
|
612
|
+
- [`HTTPManagerStateService`](HTTP_STATE_MANAGER_README.md) - State management with WebSocket integration
|
|
613
|
+
- [`RequestSignalsService`](HTTP_SINGNALS_MANAGER_README.md) - Signal-based HTTP requests
|