http-request-manager 18.15.34 → 18.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/http-request-manager.mjs +13688 -0
- package/fesm2022/http-request-manager.mjs.map +1 -0
- package/http-request-manager-18.16.0.tgz +0 -0
- package/package.json +15 -6
- package/types/http-request-manager.d.ts +3968 -0
- package/TEST_COVERAGE_SUMMARY.md +0 -458
- package/ng-package.json +0 -8
- package/src/docs/ADVANCED_WEBSOCKET.md +0 -633
- package/src/docs/ARCHITECTURE.md +0 -633
- package/src/docs/BATCH_REQUEST_README.md +0 -467
- package/src/docs/COMPLETE_API_REFERENCE.md +0 -1037
- package/src/docs/DATABASE_README.md +0 -1195
- package/src/docs/ENCRYPTION_README.md +0 -403
- package/src/docs/HTTP_MANAGER_README.md +0 -628
- package/src/docs/HTTP_SINGNALS_MANAGER_README.md +0 -654
- package/src/docs/HTTP_STATE_MANAGER_README.md +0 -1391
- package/src/docs/INTERCEPTOR_README.md +0 -549
- package/src/docs/LOCAL_STORAGE_README.md +0 -1056
- package/src/docs/LOCAL_STORAGE_SIGNALS_README.md +0 -338
- package/src/docs/LOGGER_README.md +0 -310
- package/src/docs/MESSAGE_TRACKER_README.md +0 -518
- package/src/docs/MESSAGE_TRACKER_SIGNALS_README.md +0 -563
- package/src/docs/MODELS_README.md +0 -1264
- package/src/docs/SIGNAL_SERVICES_README.md +0 -238
- package/src/docs/SQL_DIXIE_README.md +0 -574
- package/src/docs/STORE_STATE_MANAGER_README.md +0 -556
- package/src/docs/STORE_STATE_SIGNALS_README.md +0 -600
- package/src/docs/UPLOAD_REQUEST_README.md +0 -324
- package/src/docs/UTILS_README.md +0 -1604
- package/src/docs/WEBSOCKET_MESSAGE_SERVICE.md +0 -799
- package/src/docs/WEBSOCKET_SIGNALS_README.md +0 -641
- package/src/docs/WEBSOCKET_SINGLETON_REFACTORING.md +0 -201
- package/src/docs/WS_MANAGER_README.md +0 -613
- package/src/lib/http-request-manager.module.ts +0 -147
- package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.html +0 -116
- package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.scss +0 -0
- package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.ts +0 -255
- package/src/lib/http-request-services-demo/http-request-services-demo.component.html +0 -123
- package/src/lib/http-request-services-demo/http-request-services-demo.component.scss +0 -6
- package/src/lib/http-request-services-demo/http-request-services-demo.component.ts +0 -53
- package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.html +0 -195
- package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.scss +0 -17
- package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.ts +0 -208
- package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.html +0 -200
- package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.scss +0 -17
- package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.ts +0 -214
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.html +0 -53
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.scss +0 -60
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.ts +0 -72
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-download.module.ts +0 -28
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.html +0 -10
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.scss +0 -29
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.ts +0 -100
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/models/download-labels-model.ts +0 -22
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.html +0 -8
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.scss +0 -19
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.ts +0 -26
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/app-session.model.ts +0 -30
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/app.model.ts +0 -19
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/get-sample.model.ts +0 -25
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-ai-prompt.ts +0 -19
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client-details.ts +0 -24
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client-info.ts +0 -30
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client.model.ts +0 -49
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-mapper-client-info.ts +0 -33
- package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.html +0 -279
- package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.scss +0 -24
- package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.ts +0 -461
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.html +0 -53
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.scss +0 -60
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.ts +0 -72
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.ts +0 -28
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.html +0 -10
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.scss +0 -29
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.ts +0 -100
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.ts +0 -22
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.html +0 -8
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.scss +0 -19
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.ts +0 -26
- package/src/lib/http-request-services-demo/request-manager-demo/models/app-session.model.ts +0 -30
- package/src/lib/http-request-services-demo/request-manager-demo/models/app.model.ts +0 -19
- package/src/lib/http-request-services-demo/request-manager-demo/models/get-sample.model.ts +0 -25
- package/src/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.ts +0 -19
- package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-details.ts +0 -24
- package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.ts +0 -30
- package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client.model.ts +0 -49
- package/src/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.ts +0 -33
- package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.html +0 -622
- package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.scss +0 -106
- package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.ts +0 -687
- package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.html +0 -418
- package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.scss +0 -24
- package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.ts +0 -576
- package/src/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.ts +0 -89
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/services/state-data-request.service.ts +0 -119
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.css +0 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.html +0 -3
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.ts +0 -16
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.css +0 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.html +0 -3
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.ts +0 -16
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.css +0 -31
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.html +0 -94
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.scss +0 -41
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.spec.ts +0 -203
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.ts +0 -144
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.css +0 -11
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.html +0 -102
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.spec.ts +0 -40
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.ts +0 -230
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.css +0 -30
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.html +0 -172
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.spec.ts +0 -31
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.ts +0 -239
- package/src/lib/http-request-services-demo/request-manager-ws-demo/models/oidc-client.model.ts +0 -31
- package/src/lib/http-request-services-demo/request-manager-ws-demo/models/user-data.model.ts +0 -32
- package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.css +0 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.html +0 -84
- package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.ts +0 -40
- package/src/lib/http-request-services-demo/request-manager-ws-demo/services/index.ts +0 -3
- package/src/lib/http-request-services-demo/request-manager-ws-demo/services/jwt-token.service.ts +0 -62
- package/src/lib/http-request-services-demo/request-manager-ws-demo/services/message-service-demo.service.ts +0 -83
- package/src/lib/http-request-services-demo/request-manager-ws-demo/services/notification-service-demo.service.ts +0 -147
- package/src/lib/http-request-services-demo/request-manager-ws-demo/services/state-service-demo.service.ts +0 -168
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.html +0 -53
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.scss +0 -60
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.ts +0 -72
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-download.module.ts +0 -28
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.html +0 -10
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.scss +0 -29
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.ts +0 -100
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/models/download-labels-model.ts +0 -22
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.html +0 -8
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.scss +0 -19
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.ts +0 -26
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app-session.model.ts +0 -30
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app.model.ts +0 -19
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/get-sample.model.ts +0 -25
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-ai-prompt.ts +0 -19
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-details.ts +0 -24
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-info.ts +0 -30
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client.model.ts +0 -49
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-mapper-client-info.ts +0 -33
- package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.html +0 -380
- package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.scss +0 -24
- package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.ts +0 -410
- package/src/lib/http-request-services-demo/store-state-manager-demo/models/settings.model.ts +0 -28
- package/src/lib/http-request-services-demo/store-state-manager-demo/services/settings-state.service.ts +0 -49
- package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.css +0 -0
- package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.html +0 -23
- package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.ts +0 -36
- package/src/lib/http-request-services-demo/store-state-signals-demo/store-state-signals-demo.component.ts +0 -161
- package/src/lib/http-request-services-demo/upload-demo/models/index.ts +0 -1
- package/src/lib/http-request-services-demo/upload-demo/models/upload-state.model.ts +0 -30
- package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.html +0 -89
- package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.scss +0 -160
- package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.spec.ts +0 -101
- package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.ts +0 -136
- package/src/lib/index.ts +0 -3
- package/src/lib/interceptors/credentials.interceptor.ts +0 -16
- package/src/lib/interceptors/index.ts +0 -6
- package/src/lib/interceptors/models/error-settings.model.ts +0 -22
- package/src/lib/interceptors/models/index.ts +0 -2
- package/src/lib/interceptors/proxy-debugger.interceptor.ts +0 -46
- package/src/lib/interceptors/request-error.interceptor.ts +0 -65
- package/src/lib/interceptors/request-header.interceptor.ts +0 -56
- package/src/lib/message-display/README.md +0 -509
- package/src/lib/message-display/index.ts +0 -4
- package/src/lib/message-display/models/action.model.ts +0 -27
- package/src/lib/message-display/models/communication-message.model.ts +0 -77
- package/src/lib/message-display/models/display-config.model.ts +0 -35
- package/src/lib/message-display/models/display-rule.interface.ts +0 -28
- package/src/lib/message-display/models/display-strategy.interface.ts +0 -8
- package/src/lib/message-display/models/index.ts +0 -6
- package/src/lib/message-display/models/slide.model.ts +0 -24
- package/src/lib/message-display/rules/default-display-rules.ts +0 -35
- package/src/lib/message-display/services/message-display-router.service.ts +0 -63
- package/src/lib/message-display/strategies/snackbar.strategy.ts +0 -46
- package/src/lib/models/batch-options.model.ts +0 -33
- package/src/lib/models/batch-progress.model.ts +0 -19
- package/src/lib/models/batch-request-state.model.ts +0 -40
- package/src/lib/models/batch-result.model.ts +0 -30
- package/src/lib/models/config-http-options.model.ts +0 -45
- package/src/lib/models/config-local-storage-options.model.ts +0 -27
- package/src/lib/models/config-options.model.ts +0 -27
- package/src/lib/models/config-token.model.ts +0 -9
- package/src/lib/models/data-type.enum.ts +0 -5
- package/src/lib/models/database-storage.model.ts +0 -24
- package/src/lib/models/index.ts +0 -16
- package/src/lib/models/retry-options.model.ts +0 -22
- package/src/lib/models/upload-validation-error.model.ts +0 -46
- package/src/lib/services/SQL-DixieJS service/dexie-query-executor.ts +0 -246
- package/src/lib/services/SQL-DixieJS service/dexie-sql.service.ts +0 -31
- package/src/lib/services/SQL-DixieJS service/index.ts +0 -4
- package/src/lib/services/SQL-DixieJS service/models/execution-plan.model.ts +0 -52
- package/src/lib/services/SQL-DixieJS service/models/index.ts +0 -3
- package/src/lib/services/SQL-DixieJS service/models/sql-errors.model.ts +0 -13
- package/src/lib/services/SQL-DixieJS service/models/sql-options.model.ts +0 -3
- package/src/lib/services/SQL-DixieJS service/query-planner.ts +0 -284
- package/src/lib/services/SQL-DixieJS service/schema-validator.ts +0 -217
- package/src/lib/services/SQL-DixieJS service/sql-parser.ts +0 -35
- package/src/lib/services/database-manager-service/database.manager.service.ts +0 -384
- package/src/lib/services/database-manager-service/db.storage.service.ts +0 -240
- package/src/lib/services/database-manager-service/index.ts +0 -4
- package/src/lib/services/database-manager-service/models/index.ts +0 -2
- package/src/lib/services/database-manager-service/models/table-schema.ts +0 -33
- package/src/lib/services/index.ts +0 -20
- package/src/lib/services/local-storage-manager-service/index.ts +0 -4
- package/src/lib/services/local-storage-manager-service/local-storage-manager.service.spec.ts +0 -71
- package/src/lib/services/local-storage-manager-service/local-storage-manager.service.ts +0 -567
- package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.spec.ts +0 -67
- package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.ts +0 -437
- package/src/lib/services/local-storage-manager-service/models/global-store-options.model.ts +0 -30
- package/src/lib/services/local-storage-manager-service/models/index.ts +0 -6
- package/src/lib/services/local-storage-manager-service/models/setting-options.model.ts +0 -35
- package/src/lib/services/local-storage-manager-service/models/storage-data.model.ts +0 -24
- package/src/lib/services/local-storage-manager-service/models/storage-option.model.ts +0 -32
- package/src/lib/services/local-storage-manager-service/models/storage-type.enum.ts +0 -5
- package/src/lib/services/request-manager-services/README.md +0 -282
- package/src/lib/services/request-manager-services/http-manager-signals.service.ts +0 -674
- package/src/lib/services/request-manager-services/http-manager.service.spec.ts +0 -353
- package/src/lib/services/request-manager-services/http-manager.service.ts +0 -727
- package/src/lib/services/request-manager-services/index.ts +0 -8
- package/src/lib/services/request-manager-services/request-signals.service.ts +0 -372
- package/src/lib/services/request-manager-services/request.service.ts +0 -435
- package/src/lib/services/request-manager-services/rxjs-operators/countdown.ts +0 -17
- package/src/lib/services/request-manager-services/rxjs-operators/delay-retry.ts +0 -16
- package/src/lib/services/request-manager-services/rxjs-operators/index.ts +0 -4
- package/src/lib/services/request-manager-services/rxjs-operators/request-polling.ts +0 -35
- package/src/lib/services/request-manager-services/rxjs-operators/request-streaming.ts +0 -468
- package/src/lib/services/request-manager-state-service/http-manager-state.store.spec.ts +0 -665
- package/src/lib/services/request-manager-state-service/http-manager-state.store.ts +0 -2395
- package/src/lib/services/request-manager-state-service/index.ts +0 -3
- package/src/lib/services/request-manager-state-service/models/api-request.model.ts +0 -86
- package/src/lib/services/request-manager-state-service/models/index.ts +0 -14
- package/src/lib/services/request-manager-state-service/models/operation-result.model.ts +0 -18
- package/src/lib/services/request-manager-state-service/models/parsing-result.model.ts +0 -21
- package/src/lib/services/request-manager-state-service/models/request-options.model.ts +0 -37
- package/src/lib/services/request-manager-state-service/models/stream-config.model.ts +0 -20
- package/src/lib/services/request-manager-state-service/models/stream-event-metadata.model.ts +0 -23
- package/src/lib/services/request-manager-state-service/models/stream-event.model.ts +0 -23
- package/src/lib/services/request-manager-state-service/models/stream-output.model.ts +0 -23
- package/src/lib/services/request-manager-state-service/models/stream-progress.model.ts +0 -24
- package/src/lib/services/request-manager-state-service/models/stream-type.enum.ts +0 -13
- package/src/lib/services/request-manager-state-service/models/ws-options.model.ts +0 -42
- package/src/lib/services/store-state-manager-service/index.ts +0 -4
- package/src/lib/services/store-state-manager-service/models/index.ts +0 -3
- package/src/lib/services/store-state-manager-service/models/state-operation-result.model.ts +0 -30
- package/src/lib/services/store-state-manager-service/models/state-storage-options.model.ts +0 -24
- package/src/lib/services/store-state-manager-service/store-state-manager-signals.service.ts +0 -169
- package/src/lib/services/store-state-manager-service/store-state-manager.service.ts +0 -153
- package/src/lib/services/utils/app.service.spec.ts +0 -25
- package/src/lib/services/utils/app.service.ts +0 -21
- package/src/lib/services/utils/encryption/README.md +0 -79
- package/src/lib/services/utils/encryption/asymmetrical-encryption.service.ts +0 -282
- package/src/lib/services/utils/encryption/encryption-test.service.ts +0 -39
- package/src/lib/services/utils/encryption/index.ts +0 -5
- package/src/lib/services/utils/encryption/random.ts +0 -81
- package/src/lib/services/utils/encryption/symmetrical-encryption.service.ts +0 -106
- package/src/lib/services/utils/headers.service.spec.ts +0 -80
- package/src/lib/services/utils/headers.service.ts +0 -18
- package/src/lib/services/utils/index.ts +0 -9
- package/src/lib/services/utils/logger.service.ts +0 -90
- package/src/lib/services/utils/models/index.ts +0 -4
- package/src/lib/services/utils/models/normalized-request-options.model.ts +0 -24
- package/src/lib/services/utils/models/path-tracker-state.model.ts +0 -20
- package/src/lib/services/utils/models/query-params-tracker-options.model.ts +0 -24
- package/src/lib/services/utils/models/query-tracker-state.model.ts +0 -23
- package/src/lib/services/utils/object-merger.service.spec.ts +0 -18
- package/src/lib/services/utils/object-merger.service.ts +0 -78
- package/src/lib/services/utils/path-query.service.spec.ts +0 -117
- package/src/lib/services/utils/path-query.service.ts +0 -69
- package/src/lib/services/utils/query-params-tracker.service.ts +0 -442
- package/src/lib/services/utils/random-color.utils.ts +0 -83
- package/src/lib/services/utils/utils.service.spec.ts +0 -165
- package/src/lib/services/utils/utils.service.ts +0 -192
- package/src/lib/services/ws-manager-service/index.ts +0 -13
- package/src/lib/services/ws-manager-service/message-tracker-signals.service.ts +0 -147
- package/src/lib/services/ws-manager-service/message-tracker.service.ts +0 -477
- package/src/lib/services/ws-manager-service/models/channel-info.model.ts +0 -29
- package/src/lib/services/ws-manager-service/models/channel-message-data.model.ts +0 -24
- package/src/lib/services/ws-manager-service/models/channel-message.model.ts +0 -36
- package/src/lib/services/ws-manager-service/models/channel-type.enum.ts +0 -6
- package/src/lib/services/ws-manager-service/models/communication-type.enum.ts +0 -5
- package/src/lib/services/ws-manager-service/models/index.ts +0 -10
- package/src/lib/services/ws-manager-service/models/notification-message.model.ts +0 -29
- package/src/lib/services/ws-manager-service/models/public-message.model.ts +0 -18
- package/src/lib/services/ws-manager-service/models/state-message.model.ts +0 -18
- package/src/lib/services/ws-manager-service/models/ws-user.model.ts +0 -38
- package/src/lib/services/ws-manager-service/services/index.ts +0 -4
- package/src/lib/services/ws-manager-service/services/websocket-message.service.ts +0 -129
- package/src/lib/services/ws-manager-service/services/websocket.service.ts +0 -434
- package/src/lib/services/ws-manager-service/websocket-service/index.ts +0 -1
- package/src/lib/services/ws-manager-service/websocket-service/websocket-manager.service.ts +0 -716
- package/src/lib/services/ws-manager-service/websocket-services-complete.spec.ts +0 -596
- package/src/lib/services/ws-manager-service/websocket-signals-manager.service.ts +0 -141
- package/src/public-api.ts +0 -19
- package/tsconfig.lib.json +0 -34
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -14
|
@@ -1,799 +0,0 @@
|
|
|
1
|
-
# WebSocket Message Service
|
|
2
|
-
|
|
3
|
-
A unified, type-safe service for sending WebSocket messages with automatic prefix management and concrete message models.
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
The `WebSocketMessageService` provides a simplified API for sending WebSocket messages across different channel types. It automatically handles channel prefixes, message validation, and provides compile-time type safety.
|
|
8
|
-
|
|
9
|
-
## Key Features
|
|
10
|
-
|
|
11
|
-
✅ **Type-Safe Messages** - Concrete models with TypeScript validation
|
|
12
|
-
✅ **Automatic Prefix Management** - SYS-, PUB-, MES- prefixes handled automatically
|
|
13
|
-
✅ **Runtime Validation** - Checks required fields before sending
|
|
14
|
-
✅ **Boolean Return Values** - Simple success/failure indication
|
|
15
|
-
✅ **Silent Failure** - Console errors without exceptions
|
|
16
|
-
✅ **Single Service** - One injection point for all WebSocket messaging
|
|
17
|
-
|
|
18
|
-
## Installation
|
|
19
|
-
|
|
20
|
-
The service is automatically available when you import `HttpRequestManagerModule`:
|
|
21
|
-
|
|
22
|
-
```typescript
|
|
23
|
-
import { HttpRequestManagerModule } from 'http-request-manager';
|
|
24
|
-
|
|
25
|
-
@NgModule({
|
|
26
|
-
imports: [HttpRequestManagerModule.forRoot({})]
|
|
27
|
-
})
|
|
28
|
-
export class AppModule { }
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Usage
|
|
32
|
-
|
|
33
|
-
### Import the Service
|
|
34
|
-
|
|
35
|
-
```typescript
|
|
36
|
-
import { Component, inject } from '@angular/core';
|
|
37
|
-
import {
|
|
38
|
-
WebSocketMessageService,
|
|
39
|
-
StateMessage,
|
|
40
|
-
PublicMessage,
|
|
41
|
-
NotificationMessage
|
|
42
|
-
} from 'http-request-manager';
|
|
43
|
-
|
|
44
|
-
@Component({
|
|
45
|
-
selector: 'app-messaging',
|
|
46
|
-
template: `...`
|
|
47
|
-
})
|
|
48
|
-
export class MessagingComponent {
|
|
49
|
-
private wsMessageService = inject(WebSocketMessageService);
|
|
50
|
-
}
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
---
|
|
54
|
-
|
|
55
|
-
## Message Types
|
|
56
|
-
|
|
57
|
-
The service supports three message types, each with its own channel prefix:
|
|
58
|
-
|
|
59
|
-
| Type | Prefix | Use Case | Model |
|
|
60
|
-
|------|--------|----------|-------|
|
|
61
|
-
| **State** | `SYS-` | CRUD operations, state synchronization | `StateMessage` |
|
|
62
|
-
| **Public** | `PUB-` | Chat, broadcast, general messaging | `PublicMessage` |
|
|
63
|
-
| **Notification** | `MES-` | Persistent notifications with history | `NotificationMessage` |
|
|
64
|
-
|
|
65
|
-
---
|
|
66
|
-
|
|
67
|
-
## API Reference
|
|
68
|
-
|
|
69
|
-
### `sendStateMessage(path, payload)`
|
|
70
|
-
|
|
71
|
-
Send a state message for CRUD operations and state synchronization.
|
|
72
|
-
|
|
73
|
-
**Parameters:**
|
|
74
|
-
- `path: (string|number)[]` - Path array (e.g., `['ai', 'tests']`)
|
|
75
|
-
- `payload: StateMessage` - Message with sessionId and content
|
|
76
|
-
|
|
77
|
-
**Returns:** `boolean` - `true` if sent successfully, `false` otherwise
|
|
78
|
-
|
|
79
|
-
**Channel:** `SYS-{path.join('/')}` (e.g., `SYS-ai/tests`)
|
|
80
|
-
|
|
81
|
-
**Example:**
|
|
82
|
-
|
|
83
|
-
```typescript
|
|
84
|
-
const message = StateMessage.adapt({
|
|
85
|
-
sessionId: { id: 'user123', name: 'John', email: 'john@example.com' },
|
|
86
|
-
content: {
|
|
87
|
-
action: 'create',
|
|
88
|
-
data: { name: 'New Item', value: 42 }
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
const success = this.wsMessageService.sendStateMessage(
|
|
93
|
-
['ai', 'tests'],
|
|
94
|
-
message
|
|
95
|
-
);
|
|
96
|
-
|
|
97
|
-
if (!success) {
|
|
98
|
-
console.warn('Failed to send state message');
|
|
99
|
-
}
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
**Validation:**
|
|
103
|
-
- ✅ `sessionId.id` is required
|
|
104
|
-
- ✅ `content` can be any object
|
|
105
|
-
- ✅ WebSocket must be connected
|
|
106
|
-
|
|
107
|
-
---
|
|
108
|
-
|
|
109
|
-
### `sendPublicMessage(channel, payload)`
|
|
110
|
-
|
|
111
|
-
Send a public message for chat, broadcast, or general messaging.
|
|
112
|
-
|
|
113
|
-
**Parameters:**
|
|
114
|
-
- `channel: string` - Channel name (without prefix)
|
|
115
|
-
- `payload: PublicMessage` - Message with sessionId and content.message
|
|
116
|
-
|
|
117
|
-
**Returns:** `boolean` - `true` if sent successfully, `false` otherwise
|
|
118
|
-
|
|
119
|
-
**Channel:** `PUB-{channel}` (e.g., `PUB-chat`)
|
|
120
|
-
|
|
121
|
-
**Example:**
|
|
122
|
-
|
|
123
|
-
```typescript
|
|
124
|
-
const chatMessage = PublicMessage.adapt({
|
|
125
|
-
sessionId: { id: 'user123', name: 'John' },
|
|
126
|
-
content: {
|
|
127
|
-
message: 'Hello everyone!',
|
|
128
|
-
timestamp: Date.now()
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
const success = this.wsMessageService.sendPublicMessage('chat', chatMessage);
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
**Validation:**
|
|
136
|
-
- ✅ `sessionId.id` is required
|
|
137
|
-
- ✅ `content.message` is required (string)
|
|
138
|
-
- ✅ `content` can have additional properties
|
|
139
|
-
- ✅ WebSocket must be connected
|
|
140
|
-
|
|
141
|
-
---
|
|
142
|
-
|
|
143
|
-
### `sendNotification(channel, payload)`
|
|
144
|
-
|
|
145
|
-
Send a persistent notification with history support.
|
|
146
|
-
|
|
147
|
-
**Parameters:**
|
|
148
|
-
- `channel: string` - Channel name (without prefix)
|
|
149
|
-
- `payload: NotificationMessage` - Message with sessionId and message
|
|
150
|
-
|
|
151
|
-
**Returns:** `boolean` - `true` if sent successfully, `false` otherwise
|
|
152
|
-
|
|
153
|
-
**Channel:** `MES-{channel}` (e.g., `MES-alerts`)
|
|
154
|
-
|
|
155
|
-
**Example:**
|
|
156
|
-
|
|
157
|
-
```typescript
|
|
158
|
-
const notification = NotificationMessage.adapt({
|
|
159
|
-
sessionId: { id: 'user123', name: 'John', color: '#FF0000' },
|
|
160
|
-
message: 'New item created!',
|
|
161
|
-
timestamp: Date.now(),
|
|
162
|
-
priority: 'high'
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
const success = this.wsMessageService.sendNotification('alerts', notification);
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
**Validation:**
|
|
169
|
-
- ✅ `sessionId.id` is required
|
|
170
|
-
- ✅ `message` is required (string)
|
|
171
|
-
- ✅ Additional properties allowed (index signature)
|
|
172
|
-
- ✅ WebSocket must be connected
|
|
173
|
-
|
|
174
|
-
---
|
|
175
|
-
|
|
176
|
-
### `sendToCustomChannel(channel, payload)`
|
|
177
|
-
|
|
178
|
-
Send to a custom channel without automatic prefix.
|
|
179
|
-
|
|
180
|
-
**Parameters:**
|
|
181
|
-
- `channel: string` - Full channel name (as-is)
|
|
182
|
-
- `payload: any` - Any message payload
|
|
183
|
-
|
|
184
|
-
**Returns:** `boolean` - `true` if sent successfully, `false` otherwise
|
|
185
|
-
|
|
186
|
-
**Channel:** Raw channel name (no prefix added)
|
|
187
|
-
|
|
188
|
-
**Example:**
|
|
189
|
-
|
|
190
|
-
```typescript
|
|
191
|
-
const success = this.wsMessageService.sendToCustomChannel(
|
|
192
|
-
'CUSTOM-my-channel',
|
|
193
|
-
{ custom: 'data', value: 123 }
|
|
194
|
-
);
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
**Validation:**
|
|
198
|
-
- ✅ WebSocket must be connected
|
|
199
|
-
- ✅ No payload validation (accepts any data)
|
|
200
|
-
|
|
201
|
-
---
|
|
202
|
-
|
|
203
|
-
## Message Models
|
|
204
|
-
|
|
205
|
-
All message models follow the data-model pattern with `Interface` + `Class` + `adapt()` method.
|
|
206
|
-
|
|
207
|
-
### StateMessage
|
|
208
|
-
|
|
209
|
-
Used for state synchronization and CRUD operations.
|
|
210
|
-
|
|
211
|
-
```typescript
|
|
212
|
-
export interface StateMessageInterface {
|
|
213
|
-
sessionId: { id: string; ldap?: string; name?: string; email?: string };
|
|
214
|
-
content: any;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
export class StateMessage implements StateMessageInterface {
|
|
218
|
-
constructor(
|
|
219
|
-
public sessionId: { id: string; ldap?: string; name?: string; email?: string } = { id: '' },
|
|
220
|
-
public content: any = {}
|
|
221
|
-
) {}
|
|
222
|
-
|
|
223
|
-
static adapt(item?: any): StateMessage {
|
|
224
|
-
return new StateMessage(
|
|
225
|
-
item?.sessionId,
|
|
226
|
-
item?.content
|
|
227
|
-
);
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
**Usage:**
|
|
233
|
-
|
|
234
|
-
```typescript
|
|
235
|
-
// With adapt()
|
|
236
|
-
const message = StateMessage.adapt({
|
|
237
|
-
sessionId: { id: 'user123', name: 'John' },
|
|
238
|
-
content: { action: 'update', data: { id: 1, name: 'Updated' } }
|
|
239
|
-
});
|
|
240
|
-
|
|
241
|
-
// With constructor
|
|
242
|
-
const message = new StateMessage(
|
|
243
|
-
{ id: 'user123', name: 'John' },
|
|
244
|
-
{ action: 'delete', id: 1 }
|
|
245
|
-
);
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
---
|
|
249
|
-
|
|
250
|
-
### PublicMessage
|
|
251
|
-
|
|
252
|
-
Used for chat and broadcast messaging.
|
|
253
|
-
|
|
254
|
-
```typescript
|
|
255
|
-
export interface PublicMessageInterface {
|
|
256
|
-
sessionId: { id: string; ldap?: string; name?: string; email?: string };
|
|
257
|
-
content: { message: string; [key: string]: any };
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
export class PublicMessage implements PublicMessageInterface {
|
|
261
|
-
constructor(
|
|
262
|
-
public sessionId: { id: string; ldap?: string; name?: string; email?: string } = { id: '' },
|
|
263
|
-
public content: { message: string; [key: string]: any } = { message: '' }
|
|
264
|
-
) {}
|
|
265
|
-
|
|
266
|
-
static adapt(item?: any): PublicMessage {
|
|
267
|
-
return new PublicMessage(
|
|
268
|
-
item?.sessionId,
|
|
269
|
-
item?.content
|
|
270
|
-
);
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
**Usage:**
|
|
276
|
-
|
|
277
|
-
```typescript
|
|
278
|
-
const message = PublicMessage.adapt({
|
|
279
|
-
sessionId: { id: 'user123', name: 'John' },
|
|
280
|
-
content: {
|
|
281
|
-
message: 'Hello!',
|
|
282
|
-
emoji: '👋',
|
|
283
|
-
replyTo: 42
|
|
284
|
-
}
|
|
285
|
-
});
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
---
|
|
289
|
-
|
|
290
|
-
### NotificationMessage
|
|
291
|
-
|
|
292
|
-
Used for persistent notifications with history.
|
|
293
|
-
|
|
294
|
-
```typescript
|
|
295
|
-
export interface NotificationMessageInterface {
|
|
296
|
-
sessionId: { id: string; ldap?: string; name?: string; email?: string; color?: string };
|
|
297
|
-
message: string;
|
|
298
|
-
[key: string]: any;
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
export class NotificationMessage implements NotificationMessageInterface {
|
|
302
|
-
sessionId: { id: string; ldap?: string; name?: string; email?: string; color?: string };
|
|
303
|
-
message: string;
|
|
304
|
-
[key: string]: any;
|
|
305
|
-
|
|
306
|
-
constructor(
|
|
307
|
-
sessionId: { id: string; ldap?: string; name?: string; email?: string; color?: string } = { id: '' },
|
|
308
|
-
message: string = '',
|
|
309
|
-
additionalProperties: any = {}
|
|
310
|
-
) {
|
|
311
|
-
this.sessionId = sessionId;
|
|
312
|
-
this.message = message;
|
|
313
|
-
Object.assign(this, additionalProperties);
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
static adapt(item?: any): NotificationMessage {
|
|
317
|
-
return new NotificationMessage(
|
|
318
|
-
item?.sessionId,
|
|
319
|
-
item?.message,
|
|
320
|
-
item
|
|
321
|
-
);
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
```
|
|
325
|
-
|
|
326
|
-
**Usage:**
|
|
327
|
-
|
|
328
|
-
```typescript
|
|
329
|
-
const notification = NotificationMessage.adapt({
|
|
330
|
-
sessionId: { id: 'user123', name: 'John', color: '#FF0000' },
|
|
331
|
-
message: 'System update scheduled',
|
|
332
|
-
timestamp: Date.now(),
|
|
333
|
-
link: '/updates/123',
|
|
334
|
-
icon: 'notification'
|
|
335
|
-
});
|
|
336
|
-
```
|
|
337
|
-
|
|
338
|
-
---
|
|
339
|
-
|
|
340
|
-
## ChannelType Enum
|
|
341
|
-
|
|
342
|
-
The service uses the `ChannelType` enum for prefix management:
|
|
343
|
-
|
|
344
|
-
```typescript
|
|
345
|
-
export enum ChannelType {
|
|
346
|
-
STATE = 'SYS', // System/state channel (CRUD operations)
|
|
347
|
-
PUBLIC = 'PUB', // Public messaging (chat/broadcast)
|
|
348
|
-
NOTIFICATION = 'MES', // Notification channel (persistent messages)
|
|
349
|
-
CUSTOM = '' // No prefix (raw channel name)
|
|
350
|
-
}
|
|
351
|
-
```
|
|
352
|
-
|
|
353
|
-
**Note:** `ChannelType` is already exported from `request-manager-state-service` to avoid conflicts.
|
|
354
|
-
|
|
355
|
-
---
|
|
356
|
-
|
|
357
|
-
## Error Handling
|
|
358
|
-
|
|
359
|
-
The service uses silent failure with console errors:
|
|
360
|
-
|
|
361
|
-
### Validation Errors
|
|
362
|
-
|
|
363
|
-
```typescript
|
|
364
|
-
// Missing sessionId.id
|
|
365
|
-
const message = StateMessage.adapt({
|
|
366
|
-
sessionId: {}, // ❌ Missing id
|
|
367
|
-
content: { action: 'create' }
|
|
368
|
-
});
|
|
369
|
-
|
|
370
|
-
const success = this.wsMessageService.sendStateMessage(['ai', 'tests'], message);
|
|
371
|
-
// Console: ❌ WebSocketMessageService: StateMessage must have sessionId.id
|
|
372
|
-
// Returns: false
|
|
373
|
-
```
|
|
374
|
-
|
|
375
|
-
### Connection Errors
|
|
376
|
-
|
|
377
|
-
```typescript
|
|
378
|
-
// WebSocket not connected
|
|
379
|
-
const success = this.wsMessageService.sendPublicMessage('chat', message);
|
|
380
|
-
// Console: ❌ WebSocketMessageService: Cannot send public message - not connected
|
|
381
|
-
// Returns: false
|
|
382
|
-
```
|
|
383
|
-
|
|
384
|
-
### Success Example
|
|
385
|
-
|
|
386
|
-
```typescript
|
|
387
|
-
const message = PublicMessage.adapt({
|
|
388
|
-
sessionId: { id: 'user123' },
|
|
389
|
-
content: { message: 'Hello!' }
|
|
390
|
-
});
|
|
391
|
-
|
|
392
|
-
const success = this.wsMessageService.sendPublicMessage('chat', message);
|
|
393
|
-
// Console: (no error)
|
|
394
|
-
// Returns: true
|
|
395
|
-
// Message sent to: PUB-chat
|
|
396
|
-
```
|
|
397
|
-
|
|
398
|
-
---
|
|
399
|
-
|
|
400
|
-
## Complete Examples
|
|
401
|
-
|
|
402
|
-
### Example 1: State Synchronization (CRUD)
|
|
403
|
-
|
|
404
|
-
```typescript
|
|
405
|
-
import { Component, inject } from '@angular/core';
|
|
406
|
-
import { WebSocketMessageService, StateMessage } from 'http-request-manager';
|
|
407
|
-
|
|
408
|
-
@Component({
|
|
409
|
-
selector: 'app-data-sync',
|
|
410
|
-
template: `<button (click)="createItem()">Create Item</button>`
|
|
411
|
-
})
|
|
412
|
-
export class DataSyncComponent {
|
|
413
|
-
private wsMessageService = inject(WebSocketMessageService);
|
|
414
|
-
|
|
415
|
-
createItem() {
|
|
416
|
-
const message = StateMessage.adapt({
|
|
417
|
-
sessionId: { id: 'user123', name: 'John' },
|
|
418
|
-
content: {
|
|
419
|
-
action: 'create',
|
|
420
|
-
data: {
|
|
421
|
-
name: 'New Product',
|
|
422
|
-
price: 29.99,
|
|
423
|
-
category: 'Electronics'
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
});
|
|
427
|
-
|
|
428
|
-
const success = this.wsMessageService.sendStateMessage(
|
|
429
|
-
['products', 'inventory'],
|
|
430
|
-
message
|
|
431
|
-
);
|
|
432
|
-
|
|
433
|
-
if (success) {
|
|
434
|
-
console.log('✅ State update sent to SYS-products/inventory');
|
|
435
|
-
} else {
|
|
436
|
-
console.warn('❌ Failed to send state update');
|
|
437
|
-
}
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
```
|
|
441
|
-
|
|
442
|
-
---
|
|
443
|
-
|
|
444
|
-
### Example 2: Chat Application
|
|
445
|
-
|
|
446
|
-
```typescript
|
|
447
|
-
import { Component, inject } from '@angular/core';
|
|
448
|
-
import { WebSocketMessageService, PublicMessage } from 'http-request-manager';
|
|
449
|
-
|
|
450
|
-
@Component({
|
|
451
|
-
selector: 'app-chat',
|
|
452
|
-
template: `
|
|
453
|
-
<input [(ngModel)]="messageText" placeholder="Type message...">
|
|
454
|
-
<button (click)="sendMessage()">Send</button>
|
|
455
|
-
`
|
|
456
|
-
})
|
|
457
|
-
export class ChatComponent {
|
|
458
|
-
private wsMessageService = inject(WebSocketMessageService);
|
|
459
|
-
messageText = '';
|
|
460
|
-
|
|
461
|
-
sendMessage() {
|
|
462
|
-
const chatMessage = PublicMessage.adapt({
|
|
463
|
-
sessionId: {
|
|
464
|
-
id: 'user123',
|
|
465
|
-
name: 'John',
|
|
466
|
-
color: '#00FF00'
|
|
467
|
-
},
|
|
468
|
-
content: {
|
|
469
|
-
message: this.messageText,
|
|
470
|
-
timestamp: Date.now(),
|
|
471
|
-
type: 'text'
|
|
472
|
-
}
|
|
473
|
-
});
|
|
474
|
-
|
|
475
|
-
const success = this.wsMessageService.sendPublicMessage('general', chatMessage);
|
|
476
|
-
|
|
477
|
-
if (success) {
|
|
478
|
-
this.messageText = '';
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
```
|
|
483
|
-
|
|
484
|
-
---
|
|
485
|
-
|
|
486
|
-
### Example 3: Notification System
|
|
487
|
-
|
|
488
|
-
```typescript
|
|
489
|
-
import { Component, inject } from '@angular/core';
|
|
490
|
-
import { WebSocketMessageService, NotificationMessage } from 'http-request-manager';
|
|
491
|
-
|
|
492
|
-
@Component({
|
|
493
|
-
selector: 'app-notifications',
|
|
494
|
-
template: `<button (click)="notifyUser()">Notify User</button>`
|
|
495
|
-
})
|
|
496
|
-
export class NotificationsComponent {
|
|
497
|
-
private wsMessageService = inject(WebSocketMessageService);
|
|
498
|
-
|
|
499
|
-
notifyUser() {
|
|
500
|
-
const notification = NotificationMessage.adapt({
|
|
501
|
-
sessionId: {
|
|
502
|
-
id: 'user123',
|
|
503
|
-
name: 'System',
|
|
504
|
-
color: '#FF0000'
|
|
505
|
-
},
|
|
506
|
-
message: 'Your order has been shipped!',
|
|
507
|
-
orderId: 'ORD-12345',
|
|
508
|
-
trackingNumber: 'TRACK-67890',
|
|
509
|
-
link: '/orders/12345',
|
|
510
|
-
icon: 'shipping',
|
|
511
|
-
priority: 'high'
|
|
512
|
-
});
|
|
513
|
-
|
|
514
|
-
const success = this.wsMessageService.sendNotification(
|
|
515
|
-
'user-notifications',
|
|
516
|
-
notification
|
|
517
|
-
);
|
|
518
|
-
}
|
|
519
|
-
}
|
|
520
|
-
```
|
|
521
|
-
|
|
522
|
-
---
|
|
523
|
-
|
|
524
|
-
### Example 4: Multi-Channel Messaging
|
|
525
|
-
|
|
526
|
-
```typescript
|
|
527
|
-
import { Component, inject } from '@angular/core';
|
|
528
|
-
import {
|
|
529
|
-
WebSocketMessageService,
|
|
530
|
-
StateMessage,
|
|
531
|
-
PublicMessage,
|
|
532
|
-
NotificationMessage
|
|
533
|
-
} from 'http-request-manager';
|
|
534
|
-
|
|
535
|
-
@Component({
|
|
536
|
-
selector: 'app-multi-channel',
|
|
537
|
-
template: `
|
|
538
|
-
<button (click)="sendAll()">Send to All Channels</button>
|
|
539
|
-
`
|
|
540
|
-
})
|
|
541
|
-
export class MultiChannelComponent {
|
|
542
|
-
private wsMessageService = inject(WebSocketMessageService);
|
|
543
|
-
|
|
544
|
-
sendAll() {
|
|
545
|
-
// Send state update
|
|
546
|
-
const stateMsg = StateMessage.adapt({
|
|
547
|
-
sessionId: { id: 'user123' },
|
|
548
|
-
content: { action: 'update', data: { status: 'online' } }
|
|
549
|
-
});
|
|
550
|
-
this.wsMessageService.sendStateMessage(['users', 'status'], stateMsg);
|
|
551
|
-
|
|
552
|
-
// Send chat message
|
|
553
|
-
const chatMsg = PublicMessage.adapt({
|
|
554
|
-
sessionId: { id: 'user123' },
|
|
555
|
-
content: { message: 'User is now online!' }
|
|
556
|
-
});
|
|
557
|
-
this.wsMessageService.sendPublicMessage('activity', chatMsg);
|
|
558
|
-
|
|
559
|
-
// Send notification
|
|
560
|
-
const notification = NotificationMessage.adapt({
|
|
561
|
-
sessionId: { id: 'user123' },
|
|
562
|
-
message: 'Status changed to online'
|
|
563
|
-
});
|
|
564
|
-
this.wsMessageService.sendNotification('alerts', notification);
|
|
565
|
-
}
|
|
566
|
-
}
|
|
567
|
-
```
|
|
568
|
-
|
|
569
|
-
---
|
|
570
|
-
|
|
571
|
-
## Comparison with Old Approach
|
|
572
|
-
|
|
573
|
-
### Before (Multiple Services)
|
|
574
|
-
|
|
575
|
-
```typescript
|
|
576
|
-
// Inject 3 different services
|
|
577
|
-
private stateService = inject(StateServiceDemo);
|
|
578
|
-
private messageService = inject(MessageServiceDemo);
|
|
579
|
-
private notificationService = inject(NotificationServiceDemo);
|
|
580
|
-
|
|
581
|
-
// Different patterns for each
|
|
582
|
-
this.stateService.updateConnection(server, wsServer, token, user, ['ai', 'tests']);
|
|
583
|
-
this.stateService.createRecord(data); // Hidden channel
|
|
584
|
-
|
|
585
|
-
this.messageService.sendMessage(msg, ['chat']); // Manual prefix
|
|
586
|
-
|
|
587
|
-
this.notificationService.sendNotification('alerts', msg); // Manual prefix
|
|
588
|
-
```
|
|
589
|
-
|
|
590
|
-
### After (Unified Service)
|
|
591
|
-
|
|
592
|
-
```typescript
|
|
593
|
-
// Inject 1 service
|
|
594
|
-
private wsMessageService = inject(WebSocketMessageService);
|
|
595
|
-
|
|
596
|
-
// Consistent pattern for all
|
|
597
|
-
this.wsMessageService.sendStateMessage(['ai', 'tests'], stateMsg); // Explicit
|
|
598
|
-
this.wsMessageService.sendPublicMessage('chat', chatMsg); // Explicit
|
|
599
|
-
this.wsMessageService.sendNotification('alerts', notification); // Explicit
|
|
600
|
-
```
|
|
601
|
-
|
|
602
|
-
**Benefits:**
|
|
603
|
-
- ✅ Single injection point
|
|
604
|
-
- ✅ Consistent API across all message types
|
|
605
|
-
- ✅ Explicit channel names (no hidden state)
|
|
606
|
-
- ✅ Type-safe message models
|
|
607
|
-
- ✅ Automatic prefix management
|
|
608
|
-
|
|
609
|
-
---
|
|
610
|
-
|
|
611
|
-
## Best Practices
|
|
612
|
-
|
|
613
|
-
### 1. Always Use `adapt()` Method
|
|
614
|
-
|
|
615
|
-
```typescript
|
|
616
|
-
// ✅ Correct
|
|
617
|
-
const message = StateMessage.adapt({
|
|
618
|
-
sessionId: { id: 'user123' },
|
|
619
|
-
content: { action: 'create' }
|
|
620
|
-
});
|
|
621
|
-
|
|
622
|
-
// ❌ Avoid
|
|
623
|
-
const message = new StateMessage({ id: 'user123' }, { action: 'create' });
|
|
624
|
-
```
|
|
625
|
-
|
|
626
|
-
### 2. Check Return Value
|
|
627
|
-
|
|
628
|
-
```typescript
|
|
629
|
-
const success = this.wsMessageService.sendPublicMessage('chat', message);
|
|
630
|
-
|
|
631
|
-
if (!success) {
|
|
632
|
-
// Handle failure (log, retry, notify user, etc.)
|
|
633
|
-
console.warn('Message not sent - WebSocket may be disconnected');
|
|
634
|
-
}
|
|
635
|
-
```
|
|
636
|
-
|
|
637
|
-
### 3. Include Session ID
|
|
638
|
-
|
|
639
|
-
Always provide at least `sessionId.id`:
|
|
640
|
-
|
|
641
|
-
```typescript
|
|
642
|
-
// ✅ Minimum required
|
|
643
|
-
StateMessage.adapt({
|
|
644
|
-
sessionId: { id: 'user123' },
|
|
645
|
-
content: { ... }
|
|
646
|
-
});
|
|
647
|
-
|
|
648
|
-
// ❌ Will fail validation
|
|
649
|
-
StateMessage.adapt({
|
|
650
|
-
sessionId: {}, // Missing id
|
|
651
|
-
content: { ... }
|
|
652
|
-
});
|
|
653
|
-
```
|
|
654
|
-
|
|
655
|
-
### 4. Use Meaningful Paths/Channels
|
|
656
|
-
|
|
657
|
-
```typescript
|
|
658
|
-
// ✅ Clear and descriptive
|
|
659
|
-
sendStateMessage(['products', 'inventory'], message);
|
|
660
|
-
sendPublicMessage('customer-support', message);
|
|
661
|
-
sendNotification('order-updates', message);
|
|
662
|
-
|
|
663
|
-
// ❌ Vague
|
|
664
|
-
sendStateMessage(['data'], message);
|
|
665
|
-
sendPublicMessage('channel1', message);
|
|
666
|
-
```
|
|
667
|
-
|
|
668
|
-
### 5. Extend NotificationMessage with Custom Properties
|
|
669
|
-
|
|
670
|
-
```typescript
|
|
671
|
-
const notification = NotificationMessage.adapt({
|
|
672
|
-
sessionId: { id: 'user123' },
|
|
673
|
-
message: 'Order shipped',
|
|
674
|
-
// Custom properties
|
|
675
|
-
orderId: 'ORD-123',
|
|
676
|
-
trackingNumber: 'TRACK-456',
|
|
677
|
-
estimatedDelivery: '2026-04-05',
|
|
678
|
-
carrier: 'FedEx'
|
|
679
|
-
});
|
|
680
|
-
```
|
|
681
|
-
|
|
682
|
-
---
|
|
683
|
-
|
|
684
|
-
## Troubleshooting
|
|
685
|
-
|
|
686
|
-
### Message Not Sending
|
|
687
|
-
|
|
688
|
-
**Problem:** `sendStateMessage()` returns `false`
|
|
689
|
-
|
|
690
|
-
**Solution:**
|
|
691
|
-
1. Check console for error messages
|
|
692
|
-
2. Verify WebSocket is connected: `WebSocketManagerService.isConnected()`
|
|
693
|
-
3. Ensure `sessionId.id` is provided
|
|
694
|
-
4. Check path is not empty: `['ai', 'tests']` not `[]`
|
|
695
|
-
|
|
696
|
-
### Wrong Channel Received
|
|
697
|
-
|
|
698
|
-
**Problem:** Messages appearing on unexpected channels
|
|
699
|
-
|
|
700
|
-
**Solution:**
|
|
701
|
-
1. Verify channel name construction
|
|
702
|
-
2. Check prefix is correct (SYS-, PUB-, MES-)
|
|
703
|
-
3. Ensure no typos in path/channel names
|
|
704
|
-
|
|
705
|
-
### TypeScript Errors
|
|
706
|
-
|
|
707
|
-
**Problem:** Type errors when creating messages
|
|
708
|
-
|
|
709
|
-
**Solution:**
|
|
710
|
-
1. Use `adapt()` method for automatic type inference
|
|
711
|
-
2. Ensure `sessionId` object has required properties
|
|
712
|
-
3. For `PublicMessage`, ensure `content.message` is a string
|
|
713
|
-
4. For `NotificationMessage`, ensure `message` is a string
|
|
714
|
-
|
|
715
|
-
---
|
|
716
|
-
|
|
717
|
-
## Related Documentation
|
|
718
|
-
|
|
719
|
-
- [WebSocket Manager Service](./WS_MANAGER_README.md) - Underlying WebSocket connection management
|
|
720
|
-
- [Advanced WebSocket Guide](./ADVANCED_WEBSOCKET.md) - Channel architecture, presence tracking, message replay
|
|
721
|
-
- [ChannelMessage Model](./MODELS_README.md#channelmessage) - Base message structure
|
|
722
|
-
- [Complete API Reference](./COMPLETE_API_REFERENCE.md) - Full library API documentation
|
|
723
|
-
|
|
724
|
-
---
|
|
725
|
-
|
|
726
|
-
## Migration Guide
|
|
727
|
-
|
|
728
|
-
### From MessageServiceDemo
|
|
729
|
-
|
|
730
|
-
**Before:**
|
|
731
|
-
|
|
732
|
-
```typescript
|
|
733
|
-
private messageService = inject(MessageServiceDemo);
|
|
734
|
-
|
|
735
|
-
this.messageService.sendMessage(
|
|
736
|
-
ChannelMessage.adapt({
|
|
737
|
-
sessionId: { id: 'user123' },
|
|
738
|
-
content: { message: 'Hello' }
|
|
739
|
-
}),
|
|
740
|
-
['chat']
|
|
741
|
-
);
|
|
742
|
-
```
|
|
743
|
-
|
|
744
|
-
**After:**
|
|
745
|
-
|
|
746
|
-
```typescript
|
|
747
|
-
private wsMessageService = inject(WebSocketMessageService);
|
|
748
|
-
|
|
749
|
-
this.wsMessageService.sendPublicMessage(
|
|
750
|
-
'chat',
|
|
751
|
-
PublicMessage.adapt({
|
|
752
|
-
sessionId: { id: 'user123' },
|
|
753
|
-
content: { message: 'Hello' }
|
|
754
|
-
})
|
|
755
|
-
);
|
|
756
|
-
```
|
|
757
|
-
|
|
758
|
-
### From NotificationServiceDemo
|
|
759
|
-
|
|
760
|
-
**Before:**
|
|
761
|
-
|
|
762
|
-
```typescript
|
|
763
|
-
private notificationService = inject(NotificationServiceDemo);
|
|
764
|
-
|
|
765
|
-
this.notificationService.sendNotification('alerts', {
|
|
766
|
-
sessionId: { id: 'user123' },
|
|
767
|
-
message: 'New notification'
|
|
768
|
-
});
|
|
769
|
-
```
|
|
770
|
-
|
|
771
|
-
**After:**
|
|
772
|
-
|
|
773
|
-
```typescript
|
|
774
|
-
private wsMessageService = inject(WebSocketMessageService);
|
|
775
|
-
|
|
776
|
-
this.wsMessageService.sendNotification(
|
|
777
|
-
'alerts',
|
|
778
|
-
NotificationMessage.adapt({
|
|
779
|
-
sessionId: { id: 'user123' },
|
|
780
|
-
message: 'New notification'
|
|
781
|
-
})
|
|
782
|
-
);
|
|
783
|
-
```
|
|
784
|
-
|
|
785
|
-
---
|
|
786
|
-
|
|
787
|
-
## Summary
|
|
788
|
-
|
|
789
|
-
The `WebSocketMessageService` provides a unified, type-safe approach to WebSocket messaging with:
|
|
790
|
-
|
|
791
|
-
- ✅ **Three message types** - State (SYS-), Public (PUB-), Notification (MES-)
|
|
792
|
-
- ✅ **Automatic prefixes** - No manual string concatenation
|
|
793
|
-
- ✅ **Type safety** - Compile-time validation of message structures
|
|
794
|
-
- ✅ **Runtime validation** - Checks required fields before sending
|
|
795
|
-
- ✅ **Simple API** - Boolean return values for success/failure
|
|
796
|
-
- ✅ **Silent failure** - Console errors without exceptions
|
|
797
|
-
- ✅ **Backward compatible** - Existing services continue to work
|
|
798
|
-
|
|
799
|
-
For more information, see the [WebSocket Manager Service documentation](./WS_MANAGER_README.md) or the [Advanced WebSocket Guide](./ADVANCED_WEBSOCKET.md).
|