http-request-manager 19.0.0 → 19.2.5
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 +585 -300
- package/fesm2022/http-request-manager.mjs +9434 -3133
- package/fesm2022/http-request-manager.mjs.map +1 -1
- package/package.json +7 -9
- package/types/http-request-manager.d.ts +3546 -0
- package/esm2022/http-request-manager.mjs +0 -5
- package/esm2022/lib/http-request-manager.module.mjs +0 -186
- package/esm2022/lib/http-request-services-demo/database-data-demo/database-data-demo.component.mjs +0 -71
- package/esm2022/lib/http-request-services-demo/http-request-services-demo.component.mjs +0 -45
- package/esm2022/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.mjs +0 -173
- package/esm2022/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.mjs +0 -184
- package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.mjs +0 -80
- package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.mjs +0 -42
- package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.mjs +0 -88
- package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.mjs +0 -11
- package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.mjs +0 -29
- package/esm2022/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.mjs +0 -9
- package/esm2022/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.mjs +0 -12
- package/esm2022/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.mjs +0 -14
- package/esm2022/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.mjs +0 -315
- package/esm2022/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.mjs +0 -270
- package/esm2022/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.mjs +0 -67
- package/esm2022/lib/http-request-services-demo/request-signals-manager-demo/models/sample-ai-prompt.mjs +0 -9
- package/esm2022/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-info.mjs +0 -12
- package/esm2022/lib/http-request-services-demo/request-signals-manager-demo/models/sample-mapper-client-info.mjs +0 -14
- package/esm2022/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.mjs +0 -336
- package/esm2022/lib/index.mjs +0 -4
- package/esm2022/lib/interceptors/credentials.interceptor.mjs +0 -14
- package/esm2022/lib/interceptors/index.mjs +0 -5
- package/esm2022/lib/interceptors/models/error-settings.model.mjs +0 -10
- package/esm2022/lib/interceptors/proxy-debugger.interceptor.mjs +0 -47
- package/esm2022/lib/interceptors/request-error.interceptor.mjs +0 -49
- package/esm2022/lib/interceptors/request-header.interceptor.mjs +0 -41
- package/esm2022/lib/models/config-http-options.model.mjs +0 -18
- package/esm2022/lib/models/config-local-storage-options.model.mjs +0 -12
- package/esm2022/lib/models/config-options.model.mjs +0 -12
- package/esm2022/lib/models/config-token.model.mjs +0 -8
- package/esm2022/lib/models/data-type.enum.mjs +0 -7
- package/esm2022/lib/models/database-storage.model.mjs +0 -10
- package/esm2022/lib/models/index.mjs +0 -7
- package/esm2022/lib/models/retry-options.model.mjs +0 -10
- package/esm2022/lib/services/database-manager-services/database.manager.service.mjs +0 -119
- package/esm2022/lib/services/database-manager-services/db.storage.service.mjs +0 -143
- package/esm2022/lib/services/database-manager-services/index.mjs +0 -4
- package/esm2022/lib/services/database-manager-services/models/table-schema.mjs +0 -20
- package/esm2022/lib/services/index.mjs +0 -6
- package/esm2022/lib/services/local-storage-manager-service/index.mjs +0 -4
- package/esm2022/lib/services/local-storage-manager-service/local-storage-manager.service.mjs +0 -302
- package/esm2022/lib/services/local-storage-manager-service/local-storage-signals-manager.service.mjs +0 -277
- package/esm2022/lib/services/local-storage-manager-service/models/global-store-options.model.mjs +0 -13
- package/esm2022/lib/services/local-storage-manager-service/models/index.mjs +0 -6
- package/esm2022/lib/services/local-storage-manager-service/models/setting-options.model.mjs +0 -17
- package/esm2022/lib/services/local-storage-manager-service/models/storage-data.model.mjs +0 -10
- package/esm2022/lib/services/local-storage-manager-service/models/storage-option.model.mjs +0 -12
- package/esm2022/lib/services/local-storage-manager-service/models/storage-type.enum.mjs +0 -7
- package/esm2022/lib/services/request-manager-services/http-manager-signals.service.mjs +0 -199
- package/esm2022/lib/services/request-manager-services/http-manager.service.mjs +0 -207
- package/esm2022/lib/services/request-manager-services/index.mjs +0 -6
- package/esm2022/lib/services/request-manager-services/request-signals.service.mjs +0 -170
- package/esm2022/lib/services/request-manager-services/request.service.mjs +0 -191
- package/esm2022/lib/services/request-manager-services/rxjs-operators/countdown.mjs +0 -9
- package/esm2022/lib/services/request-manager-services/rxjs-operators/delay-retry.mjs +0 -10
- package/esm2022/lib/services/request-manager-services/rxjs-operators/index.mjs +0 -5
- package/esm2022/lib/services/request-manager-services/rxjs-operators/request-polling.mjs +0 -33
- package/esm2022/lib/services/request-manager-services/rxjs-operators/request-streaming.mjs +0 -19
- package/esm2022/lib/services/request-manager-state-service/http-manager-state.store.mjs +0 -360
- package/esm2022/lib/services/request-manager-state-service/index.mjs +0 -3
- package/esm2022/lib/services/request-manager-state-service/models/api-request.model.mjs +0 -21
- package/esm2022/lib/services/request-manager-state-service/models/index.mjs +0 -3
- package/esm2022/lib/services/request-manager-state-service/models/request-options.model.mjs +0 -10
- package/esm2022/lib/services/request-manager-state-service/models/ws-options.model.mjs +0 -12
- package/esm2022/lib/services/utils/app.service.mjs +0 -26
- package/esm2022/lib/services/utils/encryption/asymmetrical-encryption.service.mjs +0 -186
- package/esm2022/lib/services/utils/encryption/encryption-test.service.mjs +0 -35
- package/esm2022/lib/services/utils/encryption/index.mjs +0 -4
- package/esm2022/lib/services/utils/encryption/random.mjs +0 -52
- package/esm2022/lib/services/utils/encryption/symmetrical-encryption.service.mjs +0 -77
- package/esm2022/lib/services/utils/headers.service.mjs +0 -21
- package/esm2022/lib/services/utils/index.mjs +0 -6
- package/esm2022/lib/services/utils/object-merger.service.mjs +0 -70
- package/esm2022/lib/services/utils/path-query.service.mjs +0 -54
- package/esm2022/lib/services/utils/utils.service.mjs +0 -155
- package/esm2022/lib/services/ws-manager-service/models/assortment-data.model.mjs +0 -10
- package/esm2022/lib/services/ws-manager-service/websocket.service.mjs +0 -133
- package/esm2022/public-api.mjs +0 -11
- package/http-request-manager-19.0.0.tgz +0 -0
- package/index.d.ts +0 -5
- package/lib/http-request-manager.module.d.ts +0 -35
- package/lib/http-request-services-demo/database-data-demo/database-data-demo.component.d.ts +0 -19
- package/lib/http-request-services-demo/http-request-services-demo.component.d.ts +0 -32
- package/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.d.ts +0 -56
- package/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.d.ts +0 -55
- package/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.d.ts +0 -26
- package/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.d.ts +0 -13
- package/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.d.ts +0 -27
- package/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.d.ts +0 -12
- package/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.d.ts +0 -16
- package/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.d.ts +0 -8
- package/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.d.ts +0 -14
- package/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.d.ts +0 -14
- package/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.d.ts +0 -107
- package/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.d.ts +0 -122
- package/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.d.ts +0 -15
- package/lib/http-request-services-demo/request-signals-manager-demo/models/sample-ai-prompt.d.ts +0 -8
- package/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-info.d.ts +0 -14
- package/lib/http-request-services-demo/request-signals-manager-demo/models/sample-mapper-client-info.d.ts +0 -14
- package/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.d.ts +0 -106
- package/lib/index.d.ts +0 -3
- package/lib/interceptors/credentials.interceptor.d.ts +0 -8
- package/lib/interceptors/index.d.ts +0 -4
- package/lib/interceptors/models/error-settings.model.d.ts +0 -10
- package/lib/interceptors/proxy-debugger.interceptor.d.ts +0 -12
- package/lib/interceptors/request-error.interceptor.d.ts +0 -10
- package/lib/interceptors/request-header.interceptor.d.ts +0 -15
- package/lib/models/config-http-options.model.d.ts +0 -21
- package/lib/models/config-local-storage-options.model.d.ts +0 -13
- package/lib/models/config-options.model.d.ts +0 -12
- package/lib/models/config-token.model.d.ts +0 -8
- package/lib/models/data-type.enum.d.ts +0 -5
- package/lib/models/database-storage.model.d.ts +0 -10
- package/lib/models/index.d.ts +0 -6
- package/lib/models/retry-options.model.d.ts +0 -10
- package/lib/services/database-manager-services/database.manager.service.d.ts +0 -31
- package/lib/services/database-manager-services/db.storage.service.d.ts +0 -26
- package/lib/services/database-manager-services/index.d.ts +0 -3
- package/lib/services/database-manager-services/models/table-schema.d.ts +0 -11
- package/lib/services/index.d.ts +0 -4
- package/lib/services/local-storage-manager-service/index.d.ts +0 -3
- package/lib/services/local-storage-manager-service/local-storage-manager.service.d.ts +0 -86
- package/lib/services/local-storage-manager-service/local-storage-signals-manager.service.d.ts +0 -64
- package/lib/services/local-storage-manager-service/models/global-store-options.model.d.ts +0 -15
- package/lib/services/local-storage-manager-service/models/index.d.ts +0 -5
- package/lib/services/local-storage-manager-service/models/setting-options.model.d.ts +0 -15
- package/lib/services/local-storage-manager-service/models/storage-data.model.d.ts +0 -10
- package/lib/services/local-storage-manager-service/models/storage-option.model.d.ts +0 -13
- package/lib/services/local-storage-manager-service/models/storage-type.enum.d.ts +0 -5
- package/lib/services/request-manager-services/http-manager-signals.service.d.ts +0 -38
- package/lib/services/request-manager-services/http-manager.service.d.ts +0 -41
- package/lib/services/request-manager-services/index.d.ts +0 -4
- package/lib/services/request-manager-services/request-signals.service.d.ts +0 -26
- package/lib/services/request-manager-services/request.service.d.ts +0 -28
- package/lib/services/request-manager-services/rxjs-operators/countdown.d.ts +0 -2
- package/lib/services/request-manager-services/rxjs-operators/delay-retry.d.ts +0 -2
- package/lib/services/request-manager-services/rxjs-operators/index.d.ts +0 -4
- package/lib/services/request-manager-services/rxjs-operators/request-polling.d.ts +0 -2
- package/lib/services/request-manager-services/rxjs-operators/request-streaming.d.ts +0 -2
- package/lib/services/request-manager-state-service/http-manager-state.store.d.ts +0 -64
- package/lib/services/request-manager-state-service/index.d.ts +0 -2
- package/lib/services/request-manager-state-service/models/api-request.model.d.ts +0 -30
- package/lib/services/request-manager-state-service/models/index.d.ts +0 -2
- package/lib/services/request-manager-state-service/models/request-options.model.d.ts +0 -10
- package/lib/services/request-manager-state-service/models/ws-options.model.d.ts +0 -14
- package/lib/services/utils/app.service.d.ts +0 -8
- package/lib/services/utils/encryption/asymmetrical-encryption.service.d.ts +0 -17
- package/lib/services/utils/encryption/encryption-test.service.d.ts +0 -10
- package/lib/services/utils/encryption/index.d.ts +0 -3
- package/lib/services/utils/encryption/random.d.ts +0 -7
- package/lib/services/utils/encryption/symmetrical-encryption.service.d.ts +0 -14
- package/lib/services/utils/headers.service.d.ts +0 -10
- package/lib/services/utils/index.d.ts +0 -5
- package/lib/services/utils/object-merger.service.d.ts +0 -14
- package/lib/services/utils/path-query.service.d.ts +0 -11
- package/lib/services/utils/utils.service.d.ts +0 -24
- package/lib/services/ws-manager-service/models/assortment-data.model.d.ts +0 -10
- package/lib/services/ws-manager-service/websocket.service.d.ts +0 -21
- package/public-api.d.ts +0 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-request-manager.mjs","sources":["../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/models/storage-type.enum.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/models/setting-options.model.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/models/storage-option.model.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/models/global-store-options.model.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/models/storage-data.model.ts","../../../projects/http-request-manager/src/lib/services/utils/utils.service.ts","../../../projects/http-request-manager/src/lib/services/utils/encryption/random.ts","../../../projects/http-request-manager/src/lib/services/utils/app.service.ts","../../../projects/http-request-manager/src/lib/services/utils/encryption/symmetrical-encryption.service.ts","../../../projects/http-request-manager/src/lib/services/utils/encryption/encryption-test.service.ts","../../../projects/http-request-manager/src/lib/models/config-token.model.ts","../../../projects/http-request-manager/src/lib/services/utils/headers.service.ts","../../../projects/http-request-manager/src/lib/services/utils/path-query.service.ts","../../../projects/http-request-manager/src/lib/services/utils/encryption/asymmetrical-encryption.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/rxjs-operators/request-streaming.ts","../../../projects/http-request-manager/src/lib/services/ws-manager-service/websocket.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/request.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/rxjs-operators/countdown.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/rxjs-operators/delay-retry.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/rxjs-operators/request-polling.ts","../../../projects/http-request-manager/src/lib/models/database-storage.model.ts","../../../projects/http-request-manager/src/lib/models/retry-options.model.ts","../../../projects/http-request-manager/src/lib/models/data-type.enum.ts","../../../projects/http-request-manager/src/lib/models/config-http-options.model.ts","../../../projects/http-request-manager/src/lib/models/config-local-storage-options.model.ts","../../../projects/http-request-manager/src/lib/models/config-options.model.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/http-manager.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/request-signals.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/http-manager-signals.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/models/api-request.model.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/models/request-options.model.ts","../../../projects/http-request-manager/src/lib/services/utils/object-merger.service.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/local-storage-manager.service.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/http-manager-state.store.ts","../../../projects/http-request-manager/src/lib/services/index.ts","../../../projects/http-request-manager/src/lib/interceptors/models/error-settings.model.ts","../../../projects/http-request-manager/src/lib/interceptors/credentials.interceptor.ts","../../../projects/http-request-manager/src/lib/interceptors/request-header.interceptor.ts","../../../projects/http-request-manager/src/lib/interceptors/request-error.interceptor.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.html","../../../projects/http-request-manager/src/lib/interceptors/proxy-debugger.interceptor.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-info.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-mapper-client-info.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-ai-prompt.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/http-request-services-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/http-request-services-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.ts","../../../projects/http-request-manager/src/lib/http-request-manager.module.ts","../../../projects/http-request-manager/src/lib/services/database-manager-services/models/table-schema.ts","../../../projects/http-request-manager/src/lib/services/database-manager-services/db.storage.service.ts","../../../projects/http-request-manager/src/lib/services/database-manager-services/database.manager.service.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.html","../../../projects/http-request-manager/src/public-api.ts","../../../projects/http-request-manager/src/http-request-manager.ts"],"sourcesContent":["export enum StorageType {\n GLOBAL,\n SESSION,\n DB\n}\n","import { StorageType } from \"./storage-type.enum\"\n\nexport interface SettingOptionsInterface {\n storage?: StorageType\n expires?: number\n expiresIn?: string\n encrypted?: boolean\n}\n\nexport class SettingOptions implements SettingOptionsInterface {\n\n constructor(\n public storage?: StorageType,\n public expires?: number,\n public expiresIn?: string,\n public encrypted?: boolean,\n ) {}\n\n static adapt(item?: any): SettingOptions {\n\n const storage = (typeof item?.storage !== 'undefined' && item?.storage !== null) ? Number(item.storage) : StorageType.GLOBAL;\n const expires = (typeof item?.expires !== 'undefined' && item?.expires !== null) ? Number(item.expires) : 0;\n const expiresIn = (typeof item?.expiresIn !== 'undefined' && item?.expiresIn !== null) ? item.expiresIn : '';\n const encrypted = (typeof item?.encrypted !== 'undefined' && item?.encrypted !== null) ? Boolean(item.encrypted) : false;\n\n return new SettingOptions(\n storage,\n expires,\n expiresIn,\n encrypted,\n )\n\n }\n\n}\n","import { SettingOptions } from \"./setting-options.model\"\n\nexport interface StorageOptionInterface {\n id?: string\n name: string\n options?: SettingOptions\n}\n\nexport class StorageOption implements StorageOptionInterface {\n\n constructor(\n public id?: string,\n public name = 'untitled',\n public options?: SettingOptions,\n ) {}\n\n static adapt(item?: any): StorageOption {\n\n return new StorageOption(\n (item?.id) ? item.id : crypto.randomUUID(),\n item?.name,\n (item?.options) ? SettingOptions.adapt(item.options) : SettingOptions.adapt(),\n )\n\n }\n\n}\n\n\n","import { StorageOption } from \"./storage-option.model\"\n\nexport interface GlobalStoreOptionsInterface {\n encryption?: boolean\n expiresIn?: string\n expires?: number\n stores: StorageOption[]|null\n}\n\nexport class GlobalStoreOptions implements GlobalStoreOptionsInterface {\n\n constructor(\n public encryption = false,\n public expiresIn?: string,\n public expires?: number,\n public stores: StorageOption[]|null = [],\n ) {}\n\n static adapt(item?: any): GlobalStoreOptions {\n\n return new GlobalStoreOptions(\n (item?.encryption) ? item.encryption : false,\n (item?.expiresIn) ? item.expiresIn : '',\n (item?.expires) ? item.expires : 0,\n (item?.stores) ? item.stores.map((item: any) => StorageOption.adapt(item)) : []\n )\n\n }\n\n}\n","export interface StorageDataInterface {\n id?: string\n data?: any\n}\n\nexport class StorageData implements StorageDataInterface {\n\n constructor(\n public id?: string,\n public data?: any,\n ) {}\n\n static adapt(item?: any): StorageData {\n\n return new StorageData(\n (item?.id) ? item.id : crypto.randomUUID(),\n (item?.data) ? item.data : null\n )\n\n }\n\n}\n\n\n","\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UtilsService {\n\n http = inject(HttpClient)\n\n constructor() { }\n\n isString(x: string | number) {\n return Object.prototype.toString.call(x) === '[object String]'\n }\n\n isObject(obj: any) {\n return Object.prototype.toString.call(obj) === '[object Object]'\n }\n\n JSONToString(value: any) {\n return (this.isObject(value)) ? JSON.stringify(value) : value\n }\n\n stringToJSON(value: string) {\n return (this.isJSON(value)) ? JSON.parse(value) : value\n }\n\n isJSON(str: any) {\n try {\n JSON.parse(str)\n } catch (e) {\n return false\n }\n return true\n }\n\n getValueByProp(obj: any, prop: string) {\n if(typeof obj === 'undefined') return false\n return obj[prop]\n }\n\n objectsEqual(x: any, y: any): boolean {\n\n const ok = Object.keys, tx = typeof x, ty = typeof y\n\n return x && y && tx === 'object' && tx === ty ? (\n ok(x).length === ok(y).length &&\n ok(x).every((key: any) => this.objectsEqual(x[key], y[key]))\n ) : (x === y)\n\n }\n\n getJSON(file: string) {\n return this.http.get(`assets/data/${file}`)\n }\n\n get today() {\n return new Date().getMilliseconds() / 1000\n }\n\n base32ToHex(base32: string): string {\n\n const base32chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\"\n\n const charToValue = (char: string) => base32chars.indexOf(char.toUpperCase())\n\n let bits = ''\n let hex = ''\n\n for (let i = 0; i < base32.length; i++) {\n const val = charToValue(base32.charAt(i))\n bits += val.toString(2).padStart(5, '0')\n }\n\n for (let i = 0; i + 4 <= bits.length; i += 4) {\n const chunk = bits.substr(i, 4)\n hex += parseInt(chunk, 2).toString(16)\n }\n\n return hex.toUpperCase()\n }\n\n binaryToHex(binary: string): string {\n let hex = '';\n for (let i = 0; i < binary.length; i += 8) {\n const byte = binary.substr(i, 8);\n const decimal = parseInt(byte, 2);\n hex += decimal.toString(16).padStart(2, '0');\n }\n return hex.padStart(32, '0').substr(0, 32);\n }\n\n // y = years, m = months, w = weeks, d = days, hr = hours, mn = minutes else seconds\n // returns epoch time corresponding to the expiry type\n expires(str?: string) {\n\n if(!str) return\n\n const match = str.match(/[^0-9]+$/)\n\n const type = (match) ? str.slice(-match[0].length) : 0\n\n const now = Math.floor(new Date().getTime() / 1000)\n\n let value = 0;\n\n switch (type) {\n case\n 'y':\n const years = parseInt(str.slice(0, -1))\n value = now + (years * 31556926)\n break;\n case\n 'm':\n const months = parseInt(str.slice(0, -1))\n value = now + (months * 2629743)\n break;\n case\n 'w':\n const weeks = parseInt(str.slice(0, -1))\n value = now + (weeks * 604800)\n break;\n case\n 'd':\n const days = parseInt(str.slice(0, -1))\n value = now + (days * 86400)\n break;\n case\n 'hr':\n const hrs = parseInt(str.slice(0, -2))\n value = now + (hrs * 3600)\n break;\n case\n 'mn':\n const min = parseInt(str.slice(0, -2))\n value = now + (min * 60)\n break;\n default: //seconds\n const sec = parseInt(str.slice(0, -1))\n value = now + (sec)\n break;\n }\n return value;\n }\n\n hasExpired(expiryDate: number): boolean {\n if (!expiryDate || expiryDate === 0) return false\n const currentTime = Math.floor(new Date().getTime() / 1000)\n return expiryDate < currentTime\n }\n\n hasExpiry(setting: any) {\n return (setting?.expires) ? true : false\n }\n\n expiresIn(expiryDate: number) {\n\n if (!expiryDate) return;\n\n const now = Math.floor(new Date().getTime() / 1000);\n let diff = expiryDate - now;\n\n if (diff <= 0) return \"Expired\";\n\n const units = [\n { label: 'y', seconds: 31536000 },\n { label: 'm', seconds: 2592000 },\n { label: 'w', seconds: 604800 },\n { label: 'd', seconds: 86400 },\n { label: 'h', seconds: 3600 },\n { label: 'min', seconds: 60 },\n { label: '', seconds: 1 },\n ];\n\n let result = [];\n\n for (const unit of units) {\n if (diff >= unit.seconds) {\n const value = Math.floor(diff / unit.seconds);\n diff %= unit.seconds;\n result.push(`${value}${unit.label}${value > 1 ? 's' : ''}`);\n }\n }\n\n return result.join(', ');\n }\n\n lc = (str: string) => str.toLowerCase().replace(/[^\\w\\s]/g, '').replace(/\\s+/g, '_')\n\n}\n","export const Random = () => {\n const typedArray = new Uint8Array(1)\n const randomValue = crypto.getRandomValues(typedArray)[0]\n const randomFloat = randomValue / Math.pow(2, 8)\n return randomFloat\n}\n\nexport const RandomNumber = (min: number, max: number) => {\n return Math.floor(Random() * max) + min\n}\n\nexport const RandomNumbers = (min: number, max: number, length: number) => {\n const numbers: number[] = []\n for (let i = 0; i < length; i++) numbers.push(Math.floor(Random() * max) + min)\n return numbers\n}\n\nexport const RandomNumbersUnique = (min: number, max: number, length: number) => {\n let count = 0;\n\n // Adjust the length if it exceeds the number of unique numbers possible in the range\n if (length > (max - min + 1)) {\n console.error('error encountered');\n length = max - min + 1;\n }\n\n console.log('length', length);\n const numbers: number[] = [];\n const maxAttempts = length * 100 ; // Safeguard to prevent infinite loops\n\n while (numbers.length < length && count < maxAttempts) {\n\n const num = Math.floor(Random() * max) + min;\n\n if (!numbers.includes(num)) {\n numbers.push(num);\n }\n }\n\n if (count >= maxAttempts) {\n throw new Error('Maximum attempts exceeded while generating unique numbers');\n }\n\n return numbers;\n};\n\nexport const RandomStr = () => {\n\n const typedArray = new Uint8Array(8)\n const array = new Uint32Array(1)\n crypto.getRandomValues(array)\n return array[0].toString(36)\n\n}\n\nexport const RandomSignature = () => {\n\n const typedArray = new Uint8Array(8)\n const array = new Uint32Array(1)\n crypto.getRandomValues(array)\n return array[0]\n\n}\n\nexport const UUID = () => {\n return self.crypto.randomUUID()\n}\n\n\n","import { APP_ID, Inject, Injectable } from '@angular/core';\n\n// Must provide a value for APP_ID in AppModule->Providers\n// providers: [\n// {\n// provide: APP_ID,\n// useValue: \"056991ac-3537-43ab-b5b9-83edf6554eff\",\n// },\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AppService {\n\n appID: string\n\n constructor(@Inject(APP_ID) private id: string) {\n this.appID = this.id\n }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport * as CryptoJS from 'crypto-js';\n\nimport { RandomSignature } from './random';\nimport { AppService } from '../app.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SymmetricalEncryptionService {\n\n appID: string; // APP SERVICE TO MANAGER ENCRYPTION KEY\n\n private appService = inject(AppService)\n\n constructor() {\n // TODO: The APP ID is not a string, it is a function\n this.appID = (this.appService.appID) ? this.appService.appID : ''\n if(this.appID === '') console.warn('No App Key has been define')\n }\n\n generateCipherKey() {\n return (RandomSignature().toString() + RandomSignature().toString()).substring(0, 8)\n }\n\n encrypt(str: any, key = this.appID) {\n\n if(!str || key === '') return ''\n\n let _key = CryptoJS.enc.Utf8.parse(key)\n let _iv = CryptoJS.enc.Utf8.parse(key)\n\n try {\n\n const encrypted = CryptoJS.AES.encrypt(\n JSON.stringify(str), _key, {\n keySize: 16,\n iv: _iv,\n mode: CryptoJS.mode.ECB,\n padding: CryptoJS.pad.Pkcs7\n });\n\n return encrypted.toString()\n\n } catch(error: any) {\n console.log(error)\n }\n\n return\n }\n\n decrypt(str: string, key = this.appID) {\n\n if(!str || key === '') return\n\n let _key = CryptoJS.enc.Utf8.parse(key)\n let _iv = CryptoJS.enc.Utf8.parse(key)\n\n try {\n\n return CryptoJS.AES.decrypt(\n str, _key, {\n keySize: 16,\n iv: _iv,\n mode: CryptoJS.mode.ECB,\n padding: CryptoJS.pad.Pkcs7\n }).toString(CryptoJS.enc.Utf8);\n\n } catch(error: any) {\n console.log(error)\n }\n\n return\n }\n\n createSignature(url: string, len = 16) {\n const sig = CryptoJS.SHA256(url).toString(CryptoJS.enc.Hex)\n return sig.substring(0, len).toUpperCase()\n }\n\n normalizeURL(url: string) {\n const normalizedURL = url.replace(/(https?:\\/\\/)?(www\\.)?/, '').replace(/\\/+$/, '');\n return normalizedURL;\n }\n\n generateSignature(url: string) {\n const normalizedURL = this.normalizeURL(url)\n const hash = CryptoJS.SHA256(normalizedURL)\n const signature = hash.toString(CryptoJS.enc.Hex)\n return signature;\n }\n\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EncryptionTestService {\n\n constructor() { }\n\n private isBase64(str: string): boolean {\n const base64Pattern = /^(?:[A-Z0-9+/]{4})*(?:[A-Z0-9+/]{2}==|[A-Z0-9+/]{3}=)?$/i;\n return base64Pattern.test(str);\n }\n\n private isHexadecimal(str: string): boolean {\n const hexPattern = /^[0-9a-fA-F]+$/;\n return hexPattern.test(str) && (str.length % 2 === 0);\n }\n\n private hasHighEntropy(str: string): boolean {\n const uniqueChars = new Set(str).size;\n return uniqueChars > str.length * 0.6;\n }\n\n isEncrypted(str: string): boolean {\n\n if (typeof str !== 'string') {\n return false;\n }\n\n if (this.isBase64(str) || this.isHexadecimal(str)) {\n return true;\n }\n\n return this.hasHighEntropy(str);\n\n }\n\n}\n","import { InjectionToken } from \"@angular/core\";\nimport { ConfigOptions } from \"./config-options.model\";\n\n/**\n * An injection token that provides the configuration settings for the application.\n * This token can be used to inject the `ConfigSettings` instance into components or services\n * that require access to the application configuration.\n */\nexport const CONFIG_SETTINGS_TOKEN = new InjectionToken<ConfigOptions>('http.config');\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HeadersService {\n\n headers = {}\n\n generateHeaders(headers?: Record<string, string>): { headers: HttpHeaders } {\n\n const allHeaders = headers ? { ...this.headers, ...headers } : {}\n return { headers: new HttpHeaders(allHeaders) }\n\n }\n\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PathQueryService {\n\n buildAPIPath(server: string|string[], params?: any[]|any) {\n\n server = (Array.isArray(server)) ? server.join('/') : server\n\n const pathObjects = (params) ? params.filter((path:any) => (!this.isObject(path))) : []\n const queryObjects = (params) ? params.filter((path:any) => (this.isObject(path))) : []\n\n const query = this.removeEmptyParams(queryObjects.reduce((r: any, c: any) => {\n Object.entries(c).forEach(([key, value]) => {\n r[key] = Array.isArray(value) ? value.join(',') : value\n })\n return r\n }, {}))\n\n let path = this.buildRestPath(server, pathObjects)\n\n return(Object.keys(query).length > 0) ? path + '?' + this.buildQueryPath(query) : path\n\n }\n\n private buildRestPath(server: string, params: any[]): string {\n server = (server) ? server : ''\n server = (server.charAt(0) === '/') ? server.substring(1) : server\n return this.cleanUrlPath(server +'/'+ params.join('/'))\n }\n\n private buildQueryPath(params: any): string {\n\n const searchParams = new URLSearchParams()\n\n for (const key in params) {\n\n if (Array.isArray(params[key])) {\n params[key].forEach((value: any) => searchParams.append(key, value));\n } else {\n searchParams.append(key, params[key]);\n }\n\n }\n\n return searchParams.toString()\n\n }\n\n private cleanUrlPath(str: string) {\n return str.replace(/([^:]\\/)\\/+/g, \"$1\").replace(/\\/$/,'')\n }\n\n private isObject(val: any): boolean {\n return (val === null) ? false : ( (typeof val === 'function') || (typeof val === 'object') )\n }\n\n private removeEmptyParams = (obj: any): Record<string, any> =>\n Object.fromEntries(\n Object.entries(obj)\n .map(([key, value]) =>\n [key, value && typeof value === 'object' ? this.removeEmptyParams(value) : value]\n )\n .filter(([_, value]) => value !== undefined && value !== \"\")\n )\n\n}\n","import { Injectable } from '@angular/core';\n\nimport { BehaviorSubject, EMPTY, Observable, from, of } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AsymmetricalEncryptionService {\n\n constructor() {}\n\n generateKeyPair(modulusLength = 2048): Observable<CryptoKeyPair> {\n \n // modulusLength - 1024, 2048, 4096\n // hash - SHA-256\n\n return from(crypto.subtle.generateKey(\n {\n name: \"RSA-OAEP\",\n modulusLength,\n publicExponent: new Uint8Array([1, 0, 1]), // 65537\n hash: { name: \"SHA-256\" }\n },\n true, // Extractable keys\n [\"encrypt\", \"decrypt\"]\n ))\n\n }\n\n encryptData(publicKey: CryptoKey, data: string) {\n\n const encodedData = new TextEncoder().encode(data)\n\n return from(crypto.subtle.encrypt(\n {\n name: \"RSA-OAEP\"\n },\n publicKey,\n encodedData\n )).pipe(\n map(enc => this.arrayBufferToBase64(enc))\n )\n\n }\n\n decryptData(privateKey: CryptoKey, encryptedData: string) {\n\n const encStr = this.base64ToArrayBuffer(encryptedData)\n\n return from(crypto.subtle.decrypt(\n {\n name: \"RSA-OAEP\"\n },\n privateKey,\n encStr\n ).then(decryptedData => {\n return new TextDecoder().decode(decryptedData)\n }))\n\n }\n\n pemToArrayBuffer(pem: string): ArrayBuffer {\n\n const b64 = pem.replace(/(-----BEGIN (RSA )?(PRIVATE|PUBLIC) KEY-----|-----END (RSA )?(PRIVATE|PUBLIC) KEY-----|\\n)/g, '')\n const binaryString = atob(b64)\n const len = binaryString.length\n const buffer = new ArrayBuffer(len)\n const view = new Uint8Array(buffer)\n\n for (let i = 0; i < len; i++) {\n view[i] = binaryString.charCodeAt(i)\n }\n\n return buffer\n\n }\n\n base64ToArrayBuffer(base64: string): ArrayBuffer {\n \n const binaryString = atob(base64);\n const len = binaryString.length;\n const buffer = new ArrayBuffer(len);\n const view = new Uint8Array(buffer);\n\n for (let i = 0; i < len; i++) {\n view[i] = binaryString.charCodeAt(i);\n }\n\n return buffer;\n }\n\n arrayBufferToBase64(buffer: ArrayBuffer): string {\n\n let binary = '';\n const bytes = new Uint8Array(buffer);\n const len = bytes.byteLength;\n\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n\n return window.btoa(binary)\n\n }\n\n base64ToPEM(base64Key: string, publicKey = true) {\n\n const keyType = (publicKey) ? 'PUBLIC' : 'PRIVATE'\n\n const header = `-----BEGIN ${keyType} KEY-----\\n`\n const footer = `\\n-----END ${keyType} KEY-----`\n\n const keyBody = base64Key.match(/.{1,64}/g)?.join(\"\\n\") || \"\"\n\n return header + keyBody + footer\n\n }\n\n pemToCryptoKey(\n pem: string, \n algorithm: RsaHashedKeyGenParams, \n extractable: boolean, \n keyUsages: KeyUsage[],\n format: any = \"pkcs8\" //\"raw\" | \"pkcs8\" | \"spki\"\n ) {\n \n const buffer = this.pemToArrayBuffer(pem);\n\n console.log('buffer found ', buffer);\n \n return from(crypto.subtle.importKey(\n format,\n buffer,\n algorithm,\n extractable,\n keyUsages\n ))\n\n }\n \n // TESTING\n\n testGenerateKeys(): Observable<string> {\n const testSequence: BehaviorSubject<string> = new BehaviorSubject<string>(\"\");\n const testSequence$: Observable<string> = testSequence.asObservable();\n testSequence.next(\"Test Generating Keys\");\n\n // GENERATE KEYS\n this.generateKeyPair().subscribe((data) => {\n\n console.log(\"GEN-GENERATED KEYS: \", data)\n\n crypto.subtle.exportKey('spki', data.publicKey)\n .then(key => {\n const publicKeyBase64 = this.arrayBufferToBase64(key);\n console.log(\"GEN-EXPORT PUBLIC KEY: \", this.base64ToPEM(publicKeyBase64, true));\n })\n\n crypto.subtle.exportKey('pkcs8', data.privateKey)\n .then(key => {\n const privateKeyBase64 = this.arrayBufferToBase64(key);\n console.log(\"GEN-EXPORT PRIVATE KEY: \", this.base64ToPEM(privateKeyBase64, false));\n });\n\n // TEST WITH GENERATED KEYS\n this.encryptData(data.publicKey, \"Sample Data here - Mike Bonifacio\")\n .subscribe((enc) => {\n\n console.log(\"GEN-ENCRYPT==>: \", enc)\n\n this.decryptData(data.privateKey, enc).subscribe((dec) => {\n testSequence.next('Test Passed');\n testSequence.complete();\n })\n\n })\n\n })\n return testSequence$;\n\n }\n\n testDecryptionWithKeys(): Observable<string> {\n const testSequence: BehaviorSubject<string> = new BehaviorSubject<string>(\"\");\n const testSequence$: Observable<string> = testSequence.asObservable();\n testSequence.next(\"Test Generating Keys\");\n\n const privateKey = `-----BEGIN PRIVATE KEY-----\n MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDKVBkCWNb9eHVF\n twAA5mdAyvXFix3WavdrsoYRkvtCl8ogDBQf8f6N0bRkDF1zcVHRrNAEyozXDtuD\n kFgSiivBFREI7fiS3sOvduq6FaGXzX0IY6oaVMu8oOPgDvC0yvoohR+0Qxq2d6lP\n SPyHeKQaxP4KxzCJJzB1XAcbd2eFzUUDv25mNlwdVkmW8FI/sAxnJLgPTW78dzfX\n Ddfk+nxdIqxVKSLATnL0kMN7aGJx24UozioAIpzvvvF5/+7HTd1gi6NeCqrAYr3g\n iP364AE26CFwFvHnafO9uNQhlQ+uiNnOoInXByfFGVP+RidSpfLzaxDjs6RDwpol\n h098btONAgMBAAECggEAAVhHM2OD5IkUtuowwcKNaCTKGmrClRE3gMuzJeBsSJEy\n uAReUFILZylcnhegDytSti2vDA9T7xqtO6CU0p3V8LpU89JMOPRb/deirI4UXSpx\n xbNyjirOO6bnrNlOWfKexdQQsikYPzF2iM1Scpr1u9ZDCHZOl1ZYSrkve5My4coP\n 3Gx6tTBqL0jQBfcpf4ES8BH3JSawR/MgqzDS74+bI2VH+kvuPAC1L4fBgaV3VUv0\n nFzim5A3s5VaXPgJbEIghP9BkYGFkeT9ma3nliEZWc96AzsmowFn1ayCvrNVPo9R\n ECD2NnttBiCJZt3H93sR9+OTeA8Bls+aZGlKd5mLAQKBgQDpf8nIYUm/Zmls7/lQ\n QBUSGHEYrbjNsEejQsPgNDtg2EVSxdUkvTn7Wb+HExTk09Z5bNvhaO2532/FH9y8\n ahSXafiMXpfR2olwXdOB9yXXl4F5C0LGnmzGim4OSeWzAX0JCL470KaS0QN3EmoG\n 9F0YCfMnZXNTweSSx4xvlO6ggQKBgQDd01uIolm7z1DIWCwNERAXP2GDwcvxyzYK\n YqJfKDeHt2t6yIzZMMotnPDy+OlcdGspIIHkB5a+SZN5Nt7DUKg/MnyOZ3KbVq41\n k7dR4Ka3LRnGkesy7lSr7ef1rfquyR75OXJQcPWvkFcLu0TMiQhvptatZ8VN+F4n\n fDQELRotDQKBgQCgN+AUT7VT0QjcCBnRV/ddUEoiPenFsYSmYMSYzh5ESIHg1wB2\n 0iS79Iw4Of6nOTg8X1bM57vfQ5Kk90T2P+/bKYqzfqC8DTErWiYsUpKzyTC9Bt4N\n /Vz0Kr5zrX8ggg/yp/4oevYhXav8AzWfigNq4EDpMnKc8TlPAf+5/L50gQKBgQC2\n mLPhPhr1gUszD3l7bA89w7uGlLFHoQoj9FtKTzWervp3QLzIT+QtNeIVb5XQuDg5\n y3uAdEq+6pvNjMBEMJG+K9Xh9v+dJPYUPjsJ2A4D/MkZ7qWX8B2cxSJK1uLim8W2\n S3ZxBvsGgJ9WldmlMCvUlJZkeWYtr4P5psC+q02/xQKBgQCDII/jcV2+lRM2iNTe\n vBijZSaNMEWOK/Y+/HFK8GYKXnB+xNWhrm8rKgWGzpDJAUPMh9Tt+leW9LKEBuzF\n Y1bGblmGm1zsPWpIx05Fdtv9eOJmFnXbGzIsYyhadZnPcQOWhqxtpVxSuul0Jc7Q\n XNq4qPaPXhbQAshgtyBt75DMkw==\n -----END PRIVATE KEY-----`\n \n const pubKey = `-----BEGIN PUBLIC KEY-----\n MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylQZAljW/Xh1RbcAAOZn\n QMr1xYsd1mr3a7KGEZL7QpfKIAwUH/H+jdG0ZAxdc3FR0azQBMqM1w7bg5BYEoor\n wRURCO34kt7Dr3bquhWhl819CGOqGlTLvKDj4A7wtMr6KIUftEMatnepT0j8h3ik\n GsT+CscwiScwdVwHG3dnhc1FA79uZjZcHVZJlvBSP7AMZyS4D01u/Hc31w3X5Pp8\n XSKsVSkiwE5y9JDDe2hicduFKM4qACKc777xef/ux03dYIujXgqqwGK94Ij9+uAB\n NughcBbx52nzvbjUIZUProjZzqCJ1wcnxRlT/kYnUqXy82sQ47OkQ8KaJYdPfG7T\n jQIDAQAB\n -----END PUBLIC KEY-----`\n\n const algorithm: RsaHashedKeyGenParams = {\n name: \"RSA-OAEP\",\n modulusLength: 2048,\n publicExponent: new Uint8Array([1, 0, 1]),\n hash: \"SHA-256\"\n };\n\n // ENCRYPT\n this.pemToCryptoKey(\n pubKey,\n algorithm,\n true,\n [\"encrypt\"],\n \"spki\"\n ).subscribe((keyPublic) => {\n\n // console.log(\"PUBLIC KEY: \", keyPublic)\n\n this.encryptData(keyPublic, \"Sample Data here - Mike Bonifacio\")\n .subscribe((str) => {\n console.log(\"ENCRYPTED STRING: \", str);\n testSequence.next('encrypted string success');\n })\n\n })\n\n const enc = \"r7UOuEGBZ6jbVTOIBuv9jFOEtRiedmS27hfW40k7XKCTsQ5VhWup0qu2BA2ANZaGKii/uehJ/RSPiyfGbJ6leJrat0mA1hPqH/XodaBzLMDigvdYM1NSXFZMDa40OpLUIXbPlAvybjcGu7Bal+LMA8htHrFu/OmM/fHI66xOzzpuXSYx0OkWjtY81rUQ1FFkvrkx2jGFPZ0p+Nw/v3Q4cJnet6V63vCueFlD749VMcVXo7pvz4AIPpB+IOy3kbxaYTPakLVioJERU6GFMXWkECuRvohhS9CETcORZtRVRkvhcHk3lxgIhfqojUKYgD6K5dDELDPsWIS+iTG1XIQIlg==\";\n\n // DECRYPTION\n this.pemToCryptoKey(\n privateKey,\n algorithm,\n false,\n [\"decrypt\"],\n \"pkcs8\"\n ).subscribe((key) => {\n\n // console.log(\"DECRYPT ===\", key)\n\n this.decryptData(key, enc)\n .pipe(\n catchError(err => {\n console.log(\"ERROR: \", err);\n return EMPTY\n })\n ).subscribe((str) => {\n console.log(\"DECRYPTED STRING: \", str);\n testSequence.next('decrypted string success');\n })\n\n })\n\n return testSequence$;\n };\n}\n","import { OperatorFunction } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { HttpEventType } from '@angular/common/http';\n\nexport function requestStreaming(): OperatorFunction<any, any> {\n\n return input$ => input$.pipe(\n filter((event: any) =>\n event.type === HttpEventType.DownloadProgress || event.type === HttpEventType.Response\n ),\n\n map((event: any) => {\n\n if (event.type === HttpEventType.DownloadProgress) {\n return event.partialText || ''\n } else if (event.type === HttpEventType.Response) {\n return event.body\n }\n\n }),\n\n map((data: any) => {\n if (typeof data === 'string') {\n const matches = data.match(/{[^}]+}/g) || []\n return (matches.length > 0) ? matches.map(match => JSON.parse(match)) : data\n }\n return data\n })\n )\n\n}\n\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WebsocketService {\n\n private socket: WebSocket | null = null;\n\n private messages = new BehaviorSubject<any>(null);\n public messages$: Observable<any> = this.messages.asObservable();\n\n private connectionStatus = new BehaviorSubject<boolean>(false);\n public connectionStatus$: Observable<boolean> = this.connectionStatus.asObservable();\n\n connect(url: string, jwtToken?: string) {\n\n if (this.socket) return;\n\n const URL = (jwtToken) ? `${url}?token=${jwtToken}` : url;\n\n this.socket = new WebSocket(URL);\n\n this.socket.onopen = () => {\n console.log(`📡 Connected to WebSocket`);\n this.connectionStatus.next(true);\n };\n\n this.socket.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n\n if (data.error && data.error === 'JWT_INVALID') {\n console.error('JWT validation failed. Authentication error!');\n this.connectionStatus.next(false);\n this.socket?.close();\n return;\n }\n\n this.messages.next(data);\n\n } catch (error) {\n console.error('Error parsing WebSocket message:', event.data);\n }\n\n };\n\n this.socket.onclose = () => {\n console.log('WebSocket connection closed');\n this.connectionStatus.next(false);\n this.socket = null;\n };\n\n this.socket.onerror = (error) => {\n console.error('WebSocket error:', error);\n this.connectionStatus.next(false);\n };\n }\n\n disconnect() {\n if (this.socket) {\n this.socket.close();\n this.socket = null;\n }\n }\n\n subscribeToChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'subscribe', subscribedChannel: channel }));\n console.log(`💬 Subscribed to channel: ${channel}`);\n } else {\n console.error('WebSocket is not open. Cannot subscribe to channel.');\n }\n }\n\n unsubscribeToChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'unsubscribe', subscribedChannel: channel }));\n console.log(`💬 Unsubscribed to channel: ${channel}`);\n } else {\n console.error('WebSocket is not open. Cannot unsubscribed to channel.');\n }\n }\n\n sendMessage(channel: string, content: any) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'message', subscribedChannel: channel, content }));\n console.log(`💬 Send message: ${content}`);\n } else {\n console.error('WebSocket is not open. Cannot send message.');\n }\n }\n\n sendBroadcast(content: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'broadcast', content }));\n console.log(`📢 Send broadcast: ${content}`);\n } else {\n console.error('WebSocket is not open. Cannot send broadcast.');\n }\n }\n\n getAllChannels() {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'getChannels' }));\n console.log('🗂️ List of all channels');\n } else {\n console.error('WebSocket is not open. Cannot request channels.');\n }\n }\n\n createChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'createChannel', content: channel }));\n console.log('🗂️ Created channel:', channel);\n } else {\n console.error('WebSocket is not open. Cannot request channels.');\n }\n }\n\n deleteChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'deleteChannel', content: channel }));\n console.log('🗂️ Delete channel:', channel);\n } else {\n console.error('WebSocket is not open. Cannot request channels.');\n }\n }\n\n getUsersInChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'getUsers', subscribedChannel: channel }));\n console.log(`👥 List all users in channel: ${channel}`);\n } else {\n console.error('WebSocket is not open. Cannot request users.');\n }\n }\n\n}\n","import { HttpClient, HttpEvent, HttpEventType, HttpHeaderResponse } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject, Observable, throwError } from 'rxjs';\nimport { catchError, delay, finalize, map } from 'rxjs/operators';\n\nimport { ApiRequest } from '../request-manager-state-service/models/api-request.model';\nimport { PathQueryService, HeadersService } from '../utils';\nimport { requestStreaming } from './rxjs-operators/request-streaming';\nimport { WebsocketService } from '../ws-manager-service/websocket.service';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RequestService extends WebsocketService {\n\n private http = inject(HttpClient)\n\n private pathQueryService = inject(PathQueryService)\n private headersService = inject(HeadersService)\n\n isPending = new BehaviorSubject<boolean>(false)\n isPending$ = this.isPending.asObservable().pipe(delay(1))\n\n progress = new BehaviorSubject<number>(0)\n progress$ = this.progress.asObservable()\n\n getRecordRequest<T>(options: ApiRequest): Observable<T> {\n\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildCombinedHeaders(options);\n\n this.isPending.next(true);\n\n return (options.stream)\n ? this.http.get<any>(urlPath, headers).pipe(\n requestStreaming(),\n this.handleFinalize()\n )\n : this.http.get<T>(urlPath, headers).pipe(\n this.request(options),\n )\n }\n\n createRecordRequest<T>(options: ApiRequest, data: any): Observable<T> {\n\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildCombinedHeaders(options);\n\n this.isPending.next(true);\n\n return (options.stream)\n ? this.http.post<any>(urlPath, data, headers).pipe(\n requestStreaming(),\n this.handleFinalize()\n )\n : this.http.post<T>(urlPath, data, headers).pipe(\n this.request(options),\n )\n }\n\n updateRecordRequest<T>(options: ApiRequest, data: any): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildHeaders(options);\n\n this.isPending.next(true);\n\n return this.http.put<any>(urlPath, data, headers).pipe(\n this.request(options),\n )\n }\n\n deleteRecordRequest<T>(options: ApiRequest): Observable<T> {\n\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildHeaders(options);\n\n this.isPending.next(true);\n\n return this.http.delete<any>(urlPath, headers).pipe(\n this.request(options),\n )\n }\n\n // Helper functions\n private buildUrlPath(options: ApiRequest): string {\n return this.pathQueryService.buildAPIPath(options.server, options.path);\n }\n\n private buildHeaders(options: ApiRequest): any {\n return this.headersService.generateHeaders(options.headers);\n }\n\n private buildCombinedHeaders(options: ApiRequest): any {\n const headers = this.headersService.generateHeaders(options.headers)\n return this.combineHeaders(headers, options.stream || false)\n }\n\n private request<T>(options: ApiRequest): (source: Observable<any>) => Observable<T> {\n return (source$: Observable<any>): Observable<T> => {\n return source$.pipe(\n map(data => {\n if (options?.adapter) {\n return Array.isArray(data)\n ? data.map((item: any) => options.adapter(item))\n : options.adapter(data)\n }\n return data\n })\n )\n }\n }\n\n downloadFileRequest(options: ApiRequest): Observable<any> {\n\n this.isPending.next(true);\n\n const urlPath = this.buildUrlPath(options);\n\n return this.http.get(urlPath, { responseType: 'blob', observe: 'events', reportProgress: true })\n .pipe(\n map((event: HttpEvent<any>) => {\n\n this.isPending.next(true)\n\n if (event instanceof HttpHeaderResponse) {\n if(event.status !== 200) {\n this.isPending.next(false)\n throw new Error('Download failed');\n }\n }\n\n // 0\tSent\tRequest has been sent.\n // 1\tUploadProgress\tUpload is in progress.\n // 2\tResponseHeader\tResponse headers received.\n // 3\tDownloadProgress\tDownload is in progress.\n // 4\tResponse\tResponse is fully received.\n // 5\tUser\tCustom user event.\n\n switch (event.type) {\n\n case HttpEventType.DownloadProgress:\n\n const status = (event.total) ? Math.round(event.loaded / (event.total || 1) * 100) : 100\n this.progress.next(status)\n return status\n\n case HttpEventType.Response:\n\n try {\n\n const fileNamePath = (options?.saveAs) ? options.saveAs : (options.path) ? options.path[options.path.length - 1] : []\n const header_content = event.headers.get('Content-Disposition') || '';\n // checks if header_content is not empty and splits the header_content to get the file name\n // otherwise, it will use the fileDownload - contains the file name and extension\n const file = (header_content) ? header_content.split('=')[1].substring(0, header_content.split('=')[1].length) : ''\n\n const fileName = (fileNamePath !== '') ? fileNamePath : file\n\n if (fileName === '') {\n this.isPending.next(false);\n throw new Error('Save File: (file name and extension) not found in Headers or Path');\n }\n\n this.downloadFile(fileName, event.body)\n this.isPending.next(false)\n\n return 100\n\n } catch (error) {\n throw new Error('Download failed');\n }\n\n default:\n this.isPending.next(false)\n return 0\n }\n\n }),\n catchError(err => {\n return throwError(() => err)\n })\n )\n }\n\n private handleFinalize(): (source: Observable<any>) => Observable<any> {\n return finalize(() => this.isPending.next(false));\n }\n\n private downloadFile(file:string, fileData: any) {\n\n const navigatorAny = window.navigator as any\n\n const extension = file.split('.')[1].toLowerCase()\n\n var newBlob = new Blob([fileData], { type: this.createFileType(extension) })\n\n if (navigatorAny.msSaveOrOpenBlob) {\n navigatorAny.msSaveOrOpenBlob(newBlob, file)\n } else {\n const link = document.createElement('a')\n const url = window.URL.createObjectURL(newBlob)\n link.href = url\n link.download = file\n link.click()\n window.URL.revokeObjectURL(url)\n }\n\n }\n\n private createFileType(ext: any): string {\n\n let fileType: string = \"\"\n\n if (ext == 'pdf' || ext == 'csv') {\n fileType = `application/${ext}`\n }\n else if (ext == 'jpeg' || ext == 'jpg' || ext == 'png') {\n fileType = `image/${ext}`\n }\n else if (ext == 'txt') {\n fileType = 'text/plain'\n }\n\n else if (ext == 'ppt' || ext == 'pot' || ext == 'pps' || ext == 'ppa') {\n fileType = 'application/vnd.ms-powerpoint'\n }\n else if (ext == 'pptx') {\n fileType = 'application/vnd.openxmlformats-officedocument.presentationml.presentation'\n }\n else if (ext == 'doc' || ext == 'dot') {\n fileType = 'application/msword'\n }\n else if (ext == 'docx') {\n fileType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n }\n else if (ext == 'xls' || ext == 'xlt' || ext == 'xla') {\n fileType = 'application/vnd.ms-excel'\n }\n else if (ext == 'xlsx') {\n fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n }\n\n return fileType\n\n }\n\n private combineHeaders(headers: any, isStreaming: boolean) {\n\n return (isStreaming) ?\n {\n ...headers,\n observe: 'events',\n responseType: 'text',\n reportProgress: true,\n Accept: 'text/event-stream'\n }\n : headers\n\n }\n\n}\n","import { Observable, defer, interval } from 'rxjs';\nimport { takeWhile, map, tap } from 'rxjs/operators';\n\nexport function countdown(duration: number): Observable<number> {\n\n return defer(() => {\n\n const currentCount = { current: duration }\n\n return interval(1000).pipe(\n map(() => --currentCount.current),\n takeWhile(count => count >= 0)\n )\n\n })\n\n}\n","import { Observable, timer } from 'rxjs';\nimport { retry } from 'rxjs/operators';\n\nconst DEFAULT_MAX_RETRIES = 3;\n\nexport function delayedRetry<T>(delayMs: number, maxRetry = DEFAULT_MAX_RETRIES) {\n return (src: Observable<T>) =>\n src.pipe(\n retry({\n count: maxRetry,\n delay: () => timer(delayMs)\n })\n );\n}\n\n\n","import { Observable, interval } from 'rxjs';\nimport { mergeMap, startWith, takeUntil, tap } from 'rxjs/operators';\n\nexport function requestPolling<T>(pollInterval: number, stopCondition$: Observable<any>, isPending$: any) {\n return (source: Observable<T>): Observable<T> => {\n return interval(pollInterval * 1000)\n .pipe(\n startWith(0),\n tap(() => {\n try {\n if (isPending$ && typeof isPending$.next === 'function') {\n isPending$.next(true);\n } else if (isPending$ && typeof isPending$.set === 'function') {\n isPending$.set(true);\n }\n } catch (e) {\n // no-op if setting fails\n }\n }),\n mergeMap(() => source),\n tap(() => {\n try {\n if (isPending$ && typeof isPending$.next === 'function') {\n isPending$.next(false);\n } else if (isPending$ && typeof isPending$.set === 'function') {\n isPending$.set(false);\n }\n } catch (e) {\n // no-op if setting fails\n }\n }),\n takeUntil(stopCondition$),\n );\n };\n}\n","import { DataType } from \"./data-type.enum\"\n\nexport interface DatabaseStorageInterface {\n table: string\n expiresIn: string\n}\n\nexport class DatabaseStorage implements DatabaseStorageInterface {\n \n constructor(\n public table = '',\n public expiresIn: '',\n ) {}\n\n static adapt(item?: any): DatabaseStorage {\n\n return new DatabaseStorage(\n item?.table,\n item?.expiresIn,\n )\n\n }\n\n}\n","export interface RetryOptionsInterface {\n times?: number // total request to be made including initial request\n delay?: number // seconds (<= 3 default 3 seconds)\n}\n\nexport class RetryOptions implements RetryOptionsInterface {\n\n constructor(\n public times = 0,\n public delay = 3,\n ) {}\n\n static adapt(item?: any): RetryOptions {\n\n return new RetryOptions(\n item?.times,\n item?.delay\n )\n\n }\n\n}\n","export enum DataType {\n ANY = 0,\n ARRAY,\n OBJECT\n}\n","import { RetryOptions } from \"./retry-options.model\"\n\nexport interface ConfigHTTPOptionsInterface {\n server: string\n path?: any[]\n headers?: any\n polling?: number // seconds (undefined | 0 = none)\n retry?: RetryOptions\n stream?: boolean\n displayError?: boolean\n}\n\nexport class ConfigHTTPOptions implements ConfigHTTPOptionsInterface {\n\n constructor(\n public server = '',\n public path?: any[],\n public headers?: any,\n public polling?: number,\n public retry?: RetryOptions,\n public stream?: boolean,\n public displayError?: boolean,\n ) {}\n\n static adapt(item?: any): ConfigHTTPOptions {\n\n const server = Array.isArray(item?.server) ? item.server.join('/') : item?.server || '';\n const retryOptions = item?.retry ? RetryOptions.adapt(item.retry) : RetryOptions.adapt();\n\n return new ConfigHTTPOptions(\n server,\n (item?.path) ? item.path : [],\n (item?.headers) ? item.headers : {},\n item?.polling ? Math.floor(item.polling) : 0,\n retryOptions,\n (item?.stream) ? item.stream : false,\n (item?.displayError) ? item.displayError : false,\n )\n\n }\n\n}\n","import { SettingOptions } from \"../services\"\n\nexport interface LocalStorageOptionsInterface {\n storageName?: string\n storageSettingsName?: string\n options?: SettingOptions,\n}\n\nexport class LocalStorageOptions implements LocalStorageOptionsInterface {\n\n constructor(\n public storageName?: string,\n public storageSettingsName?: string,\n public options?: SettingOptions,\n ) {}\n\n static adapt(item?: any): LocalStorageOptions {\n\n return new LocalStorageOptions(\n (item?.storageName) ? item.storageName : 'storage',\n (item?.storageSettingsName) ? item.storageSettingsName : 'global-storage',\n (item?.options) ? SettingOptions.adapt(item.options) : SettingOptions.adapt(),\n )\n\n }\n\n}\n","import { ConfigHTTPOptions } from \"./config-http-options.model\";\nimport { LocalStorageOptions } from \"./config-local-storage-options.model\";\n\nexport interface ConfigOptionsInterface {\n httpRequestOptions?: ConfigHTTPOptions\n LocalStorageOptions?: LocalStorageOptions\n // DatabaseOptions: any\n}\n\nexport class ConfigOptions implements ConfigOptionsInterface {\n\n constructor(\n public httpRequestOptions?: ConfigHTTPOptions,\n public LocalStorageOptions?: LocalStorageOptions,\n // public DatabaseOptions?: any,\n ) {}\n\n static adapt(item?: any): ConfigOptions {\n return new ConfigOptions(\n (item?.httpRequestOptions) ? ConfigHTTPOptions.adapt(item.httpRequestOptions) : undefined,\n (item?.LocalStorageOptions) ? LocalStorageOptions.adapt(item.LocalStorageOptions) : undefined,\n // item?.DatabaseOptions,\n )\n\n }\n\n}\n","import { Inject, inject, Injectable, Injector, Optional } from '@angular/core';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { BehaviorSubject, Observable, Subject, throwError } from 'rxjs';\nimport { tap, map, finalize, catchError } from 'rxjs/operators';\n\nimport { ApiRequest } from '../request-manager-state-service/models/api-request.model';\nimport { RequestService } from './request.service';\nimport { requestPolling, countdown, delayedRetry } from './rxjs-operators';\n\nimport { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display';\n\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigOptions } from '../../models';\nimport { ObjectMergerService } from '../utils/object-merger.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HTTPManagerService<T> extends RequestService {\n\n toastMessage = inject(ToastMessageDisplayService)\n ng_injector = inject(Injector)\n objectMergerService = inject(ObjectMergerService)\n\n private countdown = new BehaviorSubject<number>(0);\n countdown$ = this.countdown.asObservable();\n\n private error = new BehaviorSubject<boolean>(false);\n error$ = this.error.asObservable();\n\n private data = new BehaviorSubject<any>(null)\n data$ = this.data.asObservable()\n\n private polling$ = new Subject<void>();\n\n config = ApiRequest.adapt();\n\n constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {\n super()\n this.config = (configOptions) ? ApiRequest.adapt(configOptions.httpRequestOptions) : this.config\n }\n\n // REQUESTS\n\n getRequest<T>(options?: ApiRequest, params?: any[]) {\n\n this.isPending.next(true);\n this.data.next(null)\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.getRecordRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name)\n .pipe(\n tap(data => this.data.next(data))\n ).pipe(\n finalize(() => this.isPending.next(false)),\n catchError((err) => {\n if(updatedOptions.displayError) this.handleErrorWithSnackBar(err)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n }\n\n postRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {\n\n this.isPending.next(true);\n this.data.next(null)\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.createRecordRequest;\n const requests = this.createRequest(func, updatedOptions, data);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(tap(data => this.data.next(data)))\n .pipe(\n finalize(() => this.isPending.next(false)),\n catchError((err) => {\n if(updatedOptions.displayError) this.handleErrorWithSnackBar(err)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n }\n\n putRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {\n\n this.isPending.next(true);\n this.data.next(null)\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.updateRecordRequest;\n const requests = this.createRequest(func, updatedOptions, data);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(tap(data => this.data.next(data)))\n .pipe(\n finalize(() => this.isPending.next(false)),\n catchError((err) => {\n if(updatedOptions.displayError) this.handleErrorWithSnackBar(err)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n }\n\n deleteRequest<T>(options: ApiRequest, params?: any[]) {\n\n this.isPending.next(true);\n this.data.next(null)\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.deleteRecordRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(tap(data => this.data.next(data)))\n .pipe(\n finalize(() => this.isPending.next(false)),\n catchError((err) => {\n if(updatedOptions.displayError) this.handleErrorWithSnackBar(err)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n }\n\n downloadRequest<T>(options: ApiRequest, params?: any[], saveAs?: string) {\n\n this.isPending.next(true);\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.downloadFileRequest;\n const requests = this.createRequest(func, updatedOptions)\n\n return this.createObservable<T>(updatedOptions, requests, func.name)\n .pipe(\n catchError((err) => {\n this.error.next(true)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n\n }\n\n private createObservable<T>(options: ApiRequest, request$: Observable<T>, funcName: string) {\n\n const polling = options.polling ? (options.polling > 0 ? true : false) : false;\n const isPolling =\n polling &&\n !(funcName === 'deleteRecordRequest' || funcName === 'updateRecordRequest' || funcName === 'createRecordRequest')\n ? true\n : false;\n\n this.polling$.next();\n\n const polling$ =\n (isPolling && options.polling) || 0 >= 3\n ? request$.pipe(\n requestPolling((options.polling || 0) + 1, this.polling$, this.isPending),\n tap(() => this.countdown.next(0)),\n tap(() => {\n if (!options.polling) return;\n const count = options.polling ? options.polling : 0;\n // console.log('COUNT:', count);\n countdown(count)\n .pipe(\n map((x: number) => {\n // console.log('XX:', count, x);\n const pollingInSec = options.polling || 0;\n const percentageCompleted = ((pollingInSec - x) / pollingInSec) * 100;\n return Math.round(percentageCompleted);\n })\n )\n .subscribe((countDownValue: number) => {\n // console.log(this.countdown.value, countDownValue);\n this.countdown.next(countDownValue);\n });\n }),\n )\n : request$.pipe(\n catchError((err: any) => {\n\n if (err instanceof HttpErrorResponse) {\n this.error.next(true);\n return this.handleError(err);\n }\n\n return throwError(() => err);\n }),\n // finalize(() => this.isPending.next(false))\n )\n\n return polling$.pipe(\n catchError((err: any, caught: Observable<T>) => {\n\n if (err instanceof HttpErrorResponse) {\n this.error.next(true);\n if(isPolling) this.stopPolling();\n return this.handleError(err);\n }\n\n return throwError(() => err);\n }),\n (options?.retry && options.retry.times > 0)\n ? delayedRetry((options.retry.delay || 3) * 1000, (options.retry.times || 0) - 1)\n : (source: Observable<T>) => source\n );\n }\n\n private createRequest(func: Function, options: ApiRequest, data?: any | any[]) {\n const dataItem = this.prepareRequestData(options, data, func.name);\n return func.bind(this)(dataItem.options, dataItem.data);\n }\n\n private prepareRequestData(options: ApiRequest, data: any, funcName: string) {\n\n if ((options.mapper && funcName === 'updateRecordRequest') || funcName === 'createRecordRequest') {\n if (options?.mapper) {\n data = options.mapper\n ? Array.isArray(data)\n ? map((item) => options.mapper(item))\n : options.mapper(data)\n : data;\n }\n } else {\n if (options?.adapter) {\n data = Array.isArray(data)\n ? map((item) => options.adapter(item))\n : options.adapter(data)\n }\n }\n\n return { options: options, data: data };\n }\n\n // MISC\n\n private handleError(error: Response | any) {\n this.error.next(error.message || `${error.status} - ${error.statusText}`)\n return throwError(() => error)\n }\n\n private handleErrorWithSnackBar(error: Response | any) {\n\n const displayError = ToastDisplay.adapt({\n message: error.message || `${error.status} - ${error.statusText}`,\n action: 'OK',\n color: ToastColors.ERROR,\n icon: 'error',\n duration: 5 * 1000, //5 seconds\n })\n\n this.toastMessage.toastMessage(displayError)\n\n }\n\n private stopPolling() {\n this.isPending.next(false);\n this.polling$.next();\n }\n\n private defineReqOptions(options: any, params?: any[]) {\n\n const req = ApiRequest.adapt(options)\n if(req?.path) req.path = (params) ? [...req.path, ...params] : req.path\n\n const optionsReq = (req)? req : ApiRequest.adapt()\n const updatedOptions = this.objectMergerService.mergeOptions(optionsReq)\n\n return updatedOptions\n\n }\n}\n","import { HttpClient, HttpEvent, HttpEventType, HttpHeaderResponse } from '@angular/common/http';\nimport { Injectable, inject, signal, computed } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, finalize, map } from 'rxjs/operators';\n\nimport { ApiRequest } from '../request-manager-state-service/models/api-request.model';\nimport { PathQueryService, HeadersService } from '../utils';\nimport { requestStreaming } from './rxjs-operators/request-streaming';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RequestSignalsService {\n\n private http = inject(HttpClient);\n private pathQueryService = inject(PathQueryService);\n private headersService = inject(HeadersService);\n\n isPending = signal(false);\n progress = signal(0);\n\n isIdle = computed(() => !this.isPending());\n\n getRecordRequest<T>(options: ApiRequest): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildCombinedHeaders(options);\n\n this.isPending.set(true);\n\n return (options.stream)\n ? this.http.get<any>(urlPath, headers).pipe(\n requestStreaming(),\n this.handleFinalize()\n )\n : this.http.get<T>(urlPath, headers).pipe(\n this.request(options),\n this.handleFinalize()\n );\n }\n\n createRecordRequest<T>(options: ApiRequest, data: any): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildCombinedHeaders(options);\n\n this.isPending.set(true);\n\n return (options.stream)\n ? this.http.post<any>(urlPath, data, headers).pipe(\n requestStreaming(),\n this.handleFinalize()\n )\n : this.http.post<T>(urlPath, data, headers).pipe(\n this.request(options),\n this.handleFinalize()\n );\n }\n\n updateRecordRequest<T>(options: ApiRequest, data: any): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildHeaders(options);\n\n this.isPending.set(true);\n\n return this.http.put<any>(urlPath, data, headers).pipe(\n this.request(options),\n this.handleFinalize()\n );\n }\n\n deleteRecordRequest<T>(options: ApiRequest): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildHeaders(options);\n\n this.isPending.set(true);\n\n return this.http.delete<any>(urlPath, headers).pipe(\n this.request(options),\n this.handleFinalize()\n );\n }\n\n private buildUrlPath(options: ApiRequest): string {\n return this.pathQueryService.buildAPIPath(options.server, options.path);\n }\n\n private buildHeaders(options: ApiRequest): any {\n return this.headersService.generateHeaders(options.headers);\n }\n\n private buildCombinedHeaders(options: ApiRequest): any {\n const headers = this.headersService.generateHeaders(options.headers);\n return this.combineHeaders(headers, options.stream || false);\n }\n\n private request<T>(options: ApiRequest): (source: Observable<any>) => Observable<T> {\n return (source$: Observable<any>): Observable<T> => {\n return source$.pipe(\n map(data => {\n if (options?.adapter) {\n return Array.isArray(data)\n ? data.map((item: any) => options.adapter(item))\n : options.adapter(data);\n }\n return data;\n })\n );\n };\n }\n\n downloadFileRequest(options: ApiRequest): Observable<any> {\n this.isPending.set(true);\n\n const urlPath = this.buildUrlPath(options);\n\n return this.http.get(urlPath, { responseType: 'blob', observe: 'events', reportProgress: true })\n .pipe(\n map((event: HttpEvent<any>) => {\n this.isPending.set(true);\n\n if (event instanceof HttpHeaderResponse) {\n if (event.status !== 200) {\n this.isPending.set(false);\n throw new Error('Download failed');\n }\n }\n\n switch (event.type) {\n case HttpEventType.DownloadProgress:\n const status = (event.total) ? Math.round(event.loaded / (event.total || 1) * 100) : 100;\n this.progress.set(status);\n return status;\n\n case HttpEventType.Response:\n try {\n const fileNamePath = (options?.saveAs) ? options.saveAs : (options.path) ? options.path[options.path.length - 1] : [];\n const header_content = event.headers.get('Content-Disposition') || '';\n const file = (header_content) ? header_content.split('=')[1].substring(0, header_content.split('=')[1].length) : '';\n\n const fileName = (fileNamePath !== '') ? fileNamePath : file;\n\n if (fileName === '') {\n this.isPending.set(false);\n throw new Error('Save File: (file name and extension) not found in Headers or Path');\n }\n\n this.downloadFile(fileName, event.body);\n this.isPending.set(false);\n\n return 100;\n\n } catch (error) {\n throw new Error('Download failed');\n }\n\n default:\n this.isPending.set(false);\n return 0;\n }\n }),\n catchError(err => {\n return throwError(() => err);\n })\n );\n }\n\n private handleFinalize(): (source: Observable<any>) => Observable<any> {\n return finalize(() => this.isPending.set(false));\n }\n\n private downloadFile(file: string, fileData: any) {\n const navigatorAny = window.navigator as any;\n const extension = file.split('.')[1]?.toLowerCase();\n const newBlob = new Blob([fileData], { type: this.createFileType(extension) });\n\n if (navigatorAny.msSaveOrOpenBlob) {\n navigatorAny.msSaveOrOpenBlob(newBlob, file);\n } else {\n const link = document.createElement('a');\n const url = window.URL.createObjectURL(newBlob);\n link.href = url;\n link.download = file;\n link.click();\n window.URL.revokeObjectURL(url);\n }\n }\n\n private createFileType(ext: string): string {\n let fileType = \"\";\n\n if (ext === 'pdf' || ext === 'csv') fileType = `application/${ext}`;\n else if (ext === 'jpeg' || ext === 'jpg' || ext === 'png') fileType = `image/${ext}`;\n else if (ext === 'txt') fileType = 'text/plain';\n else if (ext === 'ppt' || ext === 'pot' || ext === 'pps' || ext === 'ppa') fileType = 'application/vnd.ms-powerpoint';\n else if (ext === 'pptx') fileType = 'application/vnd.openxmlformats-officedocument.presentationml.presentation';\n else if (ext === 'doc' || ext === 'dot') fileType = 'application/msword';\n else if (ext === 'docx') fileType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n else if (ext === 'xls' || ext === 'xlt' || ext === 'xla') fileType = 'application/vnd.ms-excel';\n else if (ext === 'xlsx') fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n\n return fileType;\n }\n\n private combineHeaders(headers: any, isStreaming: boolean) {\n return (isStreaming)\n ? {\n ...headers,\n observe: 'events',\n responseType: 'text',\n reportProgress: true,\n Accept: 'text/event-stream'\n }\n : headers;\n }\n}\n","import { Inject, inject, Injectable, Injector, Optional, signal } from '@angular/core';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Observable, Subject, throwError } from 'rxjs';\nimport { tap, map, finalize, catchError } from 'rxjs/operators';\n\nimport { ApiRequest } from '../request-manager-state-service/models/api-request.model';\nimport { RequestSignalsService } from './request-signals.service'; // 👈 updated\nimport { requestPolling, countdown, delayedRetry } from './rxjs-operators';\n\nimport { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigOptions } from '../../models';\nimport { ObjectMergerService } from '../utils/object-merger.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HTTPManagerSignalsService<T> extends RequestSignalsService { // 👈 use signals service\n\n toastMessage = inject(ToastMessageDisplayService);\n ng_injector = inject(Injector);\n objectMergerService = inject(ObjectMergerService);\n\n // ✅ Replaced BehaviorSubjects with Angular signals\n countdown = signal<number>(0);\n error = signal<string | boolean>(false);\n data = signal<any>(null);\n\n private polling$ = new Subject<void>();\n\n config = ApiRequest.adapt();\n\n constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {\n super();\n this.config = configOptions\n ? ApiRequest.adapt(configOptions.httpRequestOptions)\n : this.config;\n }\n\n // REQUESTS\n getRequest<T>(options?: ApiRequest, params?: any[]) {\n this.isPending.set(true);\n this.data.set(null);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.getRecordRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n tap(data => this.data.set(data)),\n finalize(() => this.isPending.set(false)),\n catchError((err) => {\n if (updatedOptions.displayError) this.handleErrorWithSnackBar(err);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n postRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {\n this.isPending.set(true);\n this.data.set(null);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.createRecordRequest;\n const requests = this.createRequest(func, updatedOptions, data);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n tap(data => this.data.set(data)),\n finalize(() => this.isPending.set(false)),\n catchError((err) => {\n if (updatedOptions.displayError) this.handleErrorWithSnackBar(err);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n putRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {\n this.isPending.set(true);\n this.data.set(null);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.updateRecordRequest;\n const requests = this.createRequest(func, updatedOptions, data);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n tap(data => this.data.set(data)),\n finalize(() => this.isPending.set(false)),\n catchError((err) => {\n if (updatedOptions.displayError) this.handleErrorWithSnackBar(err);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n deleteRequest<T>(options: ApiRequest, params?: any[]) {\n this.isPending.set(true);\n this.data.set(null);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.deleteRecordRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n tap(data => this.data.set(data)),\n finalize(() => this.isPending.set(false)),\n catchError((err) => {\n if (updatedOptions.displayError) this.handleErrorWithSnackBar(err);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n downloadRequest<T>(options: ApiRequest, params?: any[], saveAs?: string) {\n this.isPending.set(true);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.downloadFileRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n catchError((err) => {\n this.error.set(true);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n // --- private helpers ---\n private createObservable<T>(options: ApiRequest, request$: Observable<T>, funcName: string) {\n const polling =\n options.polling ? (options.polling > 0 ? true : false) : false;\n\n const isPolling =\n polling &&\n !(funcName === 'deleteRecordRequest' ||\n funcName === 'updateRecordRequest' ||\n funcName === 'createRecordRequest');\n\n this.polling$.next();\n\n const polling$ =\n (isPolling && options.polling) || 0 >= 3\n ? request$.pipe(\n requestPolling((options.polling || 0) + 1, this.polling$, this.isPending),\n tap(() => this.countdown.set(0)),\n tap(() => {\n if (!options.polling) return;\n const count = options.polling ? options.polling : 0;\n countdown(count)\n .pipe(\n map((x: number) => {\n const pollingInSec = options.polling || 0;\n const percentageCompleted = ((pollingInSec - x) / pollingInSec) * 100;\n return Math.round(percentageCompleted);\n })\n )\n .subscribe((countDownValue: number) => {\n this.countdown.set(countDownValue);\n });\n }),\n )\n : request$.pipe(\n catchError((err: any) => {\n if (err instanceof HttpErrorResponse) {\n this.error.set(true);\n return this.handleError(err);\n }\n return throwError(() => err);\n })\n );\n\n return polling$.pipe(\n catchError((err: any, caught: Observable<T>) => {\n if (err instanceof HttpErrorResponse) {\n this.error.set(true);\n if (isPolling) this.stopPolling();\n return this.handleError(err);\n }\n return throwError(() => err);\n }),\n options?.retry && options.retry.times > 0\n ? delayedRetry((options.retry.delay || 3) * 1000, (options.retry.times || 0) - 1)\n : (source: Observable<T>) => source\n );\n }\n\n private createRequest(func: Function, options: ApiRequest, data?: any | any[]) {\n const dataItem = this.prepareRequestData(options, data, func.name);\n return func.bind(this)(dataItem.options, dataItem.data);\n }\n\n private prepareRequestData(options: ApiRequest, data: any, funcName: string) {\n if ((options.mapper && funcName === 'updateRecordRequest') || funcName === 'createRecordRequest') {\n if (options?.mapper) {\n data = options.mapper\n ? Array.isArray(data)\n ? map((item) => options.mapper(item))\n : options.mapper(data)\n : data;\n }\n } else {\n if (options?.adapter) {\n data = Array.isArray(data)\n ? map((item) => options.adapter(item))\n : options.adapter(data);\n }\n }\n return { options: options, data: data };\n }\n\n private handleError(error: Response | any) {\n this.error.set(error.message || `${error.status} - ${error.statusText}`);\n return throwError(() => error);\n }\n\n private handleErrorWithSnackBar(error: Response | any) {\n const displayError = ToastDisplay.adapt({\n message: error.message || `${error.status} - ${error.statusText}`,\n action: 'OK',\n color: ToastColors.ERROR,\n icon: 'error',\n duration: 5 * 1000,\n });\n this.toastMessage.toastMessage(displayError);\n }\n\n private stopPolling() {\n this.isPending.set(false);\n this.polling$.next();\n }\n\n private defineReqOptions(options: any, params?: any[]) {\n const req = ApiRequest.adapt(options);\n if (req?.path) req.path = params ? [...req.path, ...params] : req.path;\n\n const optionsReq = req ? req : ApiRequest.adapt();\n const updatedOptions = this.objectMergerService.mergeOptions(optionsReq);\n\n return updatedOptions;\n }\n}\n","import { RetryOptions } from \"../../request-manager-services\"\nimport { WSOptions } from \"./ws-options.model\"\n\nexport interface ApiRequestInterface {\n server: string\n path?: any[]\n headers?: any\n adapter?: any\n mapper?: any\n polling?: number // seconds (undefined | 0 = none)\n retry?: RetryOptions\n stream?: boolean\n displayError?: boolean\n saveAs?: string\n ws?: WSOptions // Websocket Options\n}\n\nexport class ApiRequest implements ApiRequestInterface {\n\n constructor(\n public server = '',\n public path?: any[],\n public headers?: any,\n public adapter?: any,\n public mapper?: any,\n public polling?: number,\n public retry?: RetryOptions,\n public stream?: boolean,\n public displayError?: boolean,\n public saveAs?: string,\n public ws?: WSOptions,\n ) {}\n\n static adapt(item?: any): ApiRequest {\n\n const server = Array.isArray(item?.server) ? item.server.join('/') : item?.server || '';\n\n return new ApiRequest(\n server,\n (item?.path) ? item.path : [],\n (item?.headers) ? item.headers : {},\n item?.adapter,\n item?.mapper,\n item?.polling ? Math.floor(item.polling) : 0,\n item?.retry ? RetryOptions.adapt(item.retry) : RetryOptions.adapt(),\n (item?.stream) ? item.stream : false,\n (item?.displayError) ? item.displayError : false,\n item?.saveAs,\n item?.ws,\n )\n\n }\n\n}\n","export interface RequestOptionsInterface {\n path: any[],\n headers: any,\n}\n\nexport class RequestOptions implements RequestOptionsInterface {\n\n constructor(\n public path: any[] = [],\n public headers = {},\n ) {}\n\n static adapt(item?: any): RequestOptions {\n\n return new RequestOptions(\n item?.path,\n item?.headers,\n )\n\n }\n\n}\n","import { Inject, Injectable, Optional, inject } from '@angular/core';\n\nimport { ApiRequest } from '../request-manager-state-service/models';\nimport { SettingOptions } from '../local-storage-manager-service';\nimport { UtilsService } from '../utils/utils.service';\n\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigHTTPOptions, ConfigOptions, LocalStorageOptions } from '../request-manager-services';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ObjectMergerService {\n\n utils = inject(UtilsService);\n\n constructor(@Inject(CONFIG_SETTINGS_TOKEN) @Optional() private configOptions?: ConfigOptions) {\n if (!this.configOptions) this.configOptions = ConfigOptions.adapt()\n }\n\n mergeOptions(options = ApiRequest.adapt()) {\n\n const configForRoot = (this.configOptions?.httpRequestOptions) ? this.configOptions.httpRequestOptions : ConfigHTTPOptions.adapt()\n const mergedOptions = ApiRequest.adapt(options)\n\n mergedOptions.server = (options && options.server === '') ? configForRoot?.server || '' : options.server\n\n mergedOptions.path = [ ...options.path || [], ...configForRoot?.path || [] ]\n\n mergedOptions.headers = { ...options.headers || {}, ...configForRoot?.headers || {} }\n\n mergedOptions.retry = (options && (options?.retry?.times !== 0 || options?.retry?.delay !== 3)) ? options.retry : configForRoot?.retry || { times: 0, delay: 3 };\n\n mergedOptions.polling = (options && options?.polling !== 0) ? options.polling : configForRoot?.polling || 0;\n\n mergedOptions.displayError = (options && options?.displayError) ? options.displayError : configForRoot?.displayError || false;\n\n mergedOptions.stream = (options && options?.stream) ? options.stream : configForRoot?.stream || false;\n\n return mergedOptions;\n\n }\n\n mergeStorageOptions(options = SettingOptions.adapt()) {\n\n const configForRoot = (this.configOptions?.LocalStorageOptions) ? this.configOptions.LocalStorageOptions : LocalStorageOptions.adapt()\n const configForRootOptions = configForRoot.options || LocalStorageOptions.adapt().options\n\n const mergedOptions = SettingOptions.adapt(options)\n\n // storage type\n mergedOptions.storage = (options && (typeof options.storage !== 'undefined')) ? options.storage : (configForRootOptions?.storage ?? 0)\n\n // expires: prefer explicit numeric expires; if not provided, compute from expiresIn string; otherwise use config default\n // if an explicit, non-zero numeric expires is provided, use it\n if (options && (typeof options.expires !== 'undefined') && options.expires !== null && Number(options.expires) > 0) {\n mergedOptions.expires = Number(options.expires);\n } else if (options && options.expiresIn) {\n // compute numeric epoch from expiresIn string using UtilsService if available\n try {\n mergedOptions.expires = this.utils ? this.utils.expires(options.expiresIn) : 0;\n } catch {\n mergedOptions.expires = 0;\n }\n } else {\n mergedOptions.expires = configForRootOptions?.expires ?? 0;\n }\n\n // keep expiresIn string if explicitly provided, otherwise use config default\n mergedOptions.expiresIn = (options && (typeof options.expiresIn !== 'undefined')) ? options.expiresIn : (configForRootOptions?.expiresIn || '')\n\n mergedOptions.encrypted = (options && (typeof options.encrypted !== 'undefined')) ? options.encrypted : (configForRootOptions?.encrypted || false)\n\n return mergedOptions;\n\n }\n\n}\n","import { Inject, Injectable, OnDestroy, Optional, inject } from '@angular/core';\nimport { ComponentStore } from '@ngrx/component-store';\nimport { withLatestFrom, map, tap } from 'rxjs/operators';\n\nimport { UtilsService } from '../utils/utils.service';\nimport { SymmetricalEncryptionService } from '../utils/encryption/symmetrical-encryption.service';\n\nimport { StorageOption, StorageType } from './models';\nimport { SettingOptions } from './models/setting-options.model';\nimport { StorageData } from './models/storage-data.model';\nimport { EncryptionTestService } from '../utils/encryption/encryption-test.service';\nimport { interval } from 'rxjs';\nimport { AppService } from '../utils/app.service';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigOptions } from '../request-manager-services';\nimport { ObjectMergerService } from '../utils/object-merger.service';\n\nexport interface State {\n localStores: StorageData[]\n sessionStores: StorageData[]\n settings: StorageOption[]\n}\n\nconst storage: State = {\n localStores: [],\n sessionStores: [],\n settings: [],\n};\n\n@Injectable({ providedIn: 'root' })\nexport class LocalStorageManagerService extends ComponentStore<State> implements OnDestroy {\n\n storageName = 'storage'\n storageSettingsName = 'global-storage'\n defaultOptions = SettingOptions.adapt()\n\n stateRetrieved = false\n encrypted = false\n\n app = inject(AppService)\n utils = inject(UtilsService)\n objectMergerService = inject(ObjectMergerService)\n encryption = inject(SymmetricalEncryptionService)\n encryptionTest = inject(EncryptionTestService)\n\n // SELECTORS\n\n private readonly data$ = this.select((state) => state)\n\n readonly stores$ = this.select((state) => state.settings)\n\n readonly storeExists$ = (store: string) => this.select(\n this.data$,\n (data) => data.settings.find(item => item.name === store) ? true : false\n )\n\n readonly store$ = (store: string) => this.select(\n this.data$,\n (data) => {\n\n const foundStore = data.settings.find(item => item.name === store)\n\n if(foundStore) {\n\n const options = SettingOptions.adapt(foundStore.options)\n\n const found = foundStore.options?.storage === StorageType.GLOBAL\n ? data.localStores.find(item => item.id === foundStore.id) as StorageData\n : data.sessionStores.find(item => item.id === foundStore.id) as StorageData\n\n if(!found) {\n this.deleteStore({ name: store })\n return\n }\n\n if(!this.app?.appID) {\n console.warn('No App ID found - AppId not Provided')\n return\n }\n\n const storageData = (options.encrypted) ? this.encryption.decrypt(found.data, this.app.appID) : found.data\n return (this.isString(storageData)) ? JSON.parse(storageData): storageData\n\n } else {\n return null\n }\n\n }\n )\n\n readonly settings$ = this.select(state => (state) ? state.settings : storage.settings)\n\n readonly setting$ = (store: string) => this.select(\n this.data$,\n (state) => {\n const foundSetting = state.settings.find(item => item.name === store)\n return (foundSetting) ? foundSetting : null\n }\n )\n\n persistence$ = this.data$\n .subscribe(data => {\n if(this.stateRetrieved) this.persistState(data)\n })\n\n startTimer() {\n const timer$ = interval(1000 * 3).pipe(\n withLatestFrom(this.data$),\n map(([_, state]) => state),\n tap((state) => {\n\n const expired: StorageOption[] = this.expired(state) ? this.expired(state) : []\n\n if (expired.length > 0) {\n\n const ids = expired.map((item) => item.id)\n\n const updatedState: State = {\n ...state,\n localStores: state.localStores.filter((item) => !ids.includes(item.id)),\n sessionStores: state.sessionStores.filter((item) => !ids.includes(item.id)),\n settings: state.settings.filter((item) => !ids.includes(item.id)),\n };\n\n this.persistState(updatedState)\n this.updateState(updatedState)\n\n }\n })\n );\n\n timer$.subscribe()\n }\n\n private updateState = this.updater((state, updatedState: State) => ({\n ...updatedState,\n }))\n\n\n constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {\n\n super(storage)\n\n this.storageName = configOptions?.LocalStorageOptions?.storageName || this.storageName\n this.storageSettingsName = configOptions?.LocalStorageOptions?.storageSettingsName || this.storageSettingsName\n this.defaultOptions = configOptions?.LocalStorageOptions?.options || this.defaultOptions\n\n this.retrieveState()\n this.startTimer()\n }\n\n readonly setStore = this.updater((state: State, store: { id: string, name: string, data: any, options: SettingOptions }): any => {\n\n const settings = StorageOption.adapt(store)\n settings.options = this.objectMergerService.mergeStorageOptions(settings.options)\n\n const type = store.options.storage\n const hasStore = this.hasGlobalStorage(type, store.id)\n\n store.name = this.validStoreName(store.name)\n\n if(!hasStore) {\n console.warn(`No such Store: ${store.name}`)\n return state\n } else {\n\n const str = this.encryptionTest.isEncrypted(store.data) ? store.data : JSON.stringify(store.data)\n const dataStr = (this.isObjectOrArray(str)) ? (store.options.encrypted) ? this.encryption.encrypt(str, this.app.appID) : store.data : store.data\n\n const localData = (dataStr && settings.options?.storage === StorageType.GLOBAL) ? [{ data: dataStr, id: settings.id }] : []\n const sessionData = (dataStr && settings.options?.storage === StorageType.SESSION) ? [{ data: dataStr, id: settings.id }] : []\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n settings: [...state.settings, ...[settings]],\n }\n\n }\n\n })\n\n readonly createStore = this.updater((state: State, store: { id?: string, name: string, data: any, options: SettingOptions }): any => {\n\n const settings = StorageOption.adapt(store)\n settings.options = this.objectMergerService.mergeStorageOptions(settings.options)\n const foundStore = state?.settings.some(item => item.name === store.name)\n\n const expires = (settings.options?.expiresIn) ? this.utils.expires(settings.options?.expiresIn) : 0\n if(settings.options) settings.options.expires = expires\n\n store.name = this.validStoreName(store.name)\n\n if(foundStore) {\n return state\n } else {\n if(!this.isObjectOrArray(store.data)) {\n console.warn('Data must ba an Object or Array')\n return\n }\n\n store.data = (this.isString(store.data)) ? JSON.parse(store.data) : store.data\n const dataStr = (store.options.encrypted) ? this.encryption.encrypt(store.data, this.app.appID) : store.data\n\n const localData = (settings.options?.storage === StorageType.GLOBAL) ? [{ data: dataStr, id: settings.id }] : []\n const sessionData = (settings.options?.storage === StorageType.SESSION) ? [{ data: dataStr, id: settings.id }] : []\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n settings: [...state.settings, ...[settings]],\n }\n\n }\n\n })\n\n readonly updateStore = this.updater((state: State, store: { name: string, data: any }): any => {\n\n store.name = this.validStoreName(store.name)\n\n const settings = state.settings.find(item => item.name === store.name)\n\n if(settings) {\n\n const type = settings.options?.storage\n const hasStore = this.hasGlobalStorage(type, settings.id || '')\n\n if(!hasStore) {\n console.warn(`No such Store: ${store.name}`)\n } else {\n\n const dataStr = (settings.options?.encrypted) ? this.encryption.encrypt(store.data, this.app.appID) : store.data\n\n const localData = (dataStr && settings.options?.storage === StorageType.GLOBAL) ? [{ data: dataStr, id: settings.id }] : []\n const sessionData = (dataStr && settings.options?.storage === StorageType.SESSION) ? [{ data: dataStr, id: settings.id }] : []\n\n state.localStores = state.localStores.filter(item => item.id !== settings.id)\n state.sessionStores = state.sessionStores.filter(item => item.id !== settings.id)\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n }\n\n }\n }\n\n return state\n\n })\n\n readonly deleteStore = this.updater((state: State, store: { name: string }): any => {\n\n store.name = this.validStoreName(store.name)\n\n const id = state.settings.find(item => item.name === store.name)?.id\n\n if(id) {\n\n const settings = state.settings.filter(item => item.id !== id)\n const localData = state.localStores.filter(item => item.id !== id)\n const sessionData = state.sessionStores.filter(item => item.id !== id)\n\n return {\n ...state,\n localStores: [...localData],\n sessionStores: [...sessionData],\n settings: [...settings],\n }\n\n } else {\n console.warn(`No such Store: ${store.name}`)\n return state\n }\n\n })\n\n resetStore() {\n\n const newState = {\n localStores: [],\n sessionStores: [],\n settings: [],\n }\n\n this.updateState(newState)\n this.persistState(newState)\n\n }\n\n private persistState(state: State|null) {\n\n if(!state) return\n\n const strLocal = JSON.stringify(state.localStores)\n localStorage.setItem(this.storageName, strLocal)\n\n const strSession = JSON.stringify(state.sessionStores)\n sessionStorage.setItem(this.storageName, strSession)\n\n const settingsStr = this.encryption.encrypt(state.settings, this.app.appID)\n localStorage.setItem(this.storageSettingsName, settingsStr || '')\n\n }\n\n private expired(state: State|null) {\n\n if(!state) return []\n return state.settings?.filter(item => (item.options?.expires || 0) > 0 && this.utils.hasExpired(item.options?.expires || 0))\n\n }\n\n retrieveState() {\n\n const str = localStorage.getItem(this.storageSettingsName)\n\n const localStr = localStorage.getItem(this.storageName)\n const sessionStr = sessionStorage.getItem(this.storageName)\n\n const localData: StorageData[] = (localStr) ? JSON.parse(localStr) : null\n const sessionData: StorageData[] = (sessionStr) ? JSON.parse(sessionStr) : null\n\n const decryptedStr = str ? this.encryption.decrypt(str, this.app.appID) : null\n const settings: StorageOption[] = (decryptedStr && decryptedStr !== null) ? JSON.parse(decryptedStr) : []\n\n settings.forEach(store => {\n\n const expired = (store.options?.expires || 0) > 0 && this.utils.hasExpired(store.options?.expires || 0)\n\n if(!expired) {\n\n const hasStorage = this.hasGlobalStorage(store.options?.storage, store.id || '')\n\n if(!hasStorage) {\n this.createStore({ id: store.id, name: store.name, data: [], options: SettingOptions.adapt(store.options)})\n } else {\n const storeData = (store.options?.storage === StorageType.GLOBAL) ? localData.find(item => item.id === store.id) : sessionData.find(item => item.id === store.id)\n this.setStore({ id: store.id || '', name: store.name, data: storeData?.data, options: SettingOptions.adapt(store.options) })\n }\n\n }\n\n })\n\n this.stateRetrieved = true\n\n }\n\n private isObjectOrArray = (obj: any) => {\n\n let parsed;\n\n try {\n parsed = (typeof obj === 'object') ? obj : JSON.parse(obj)\n } catch (e) {\n return false;\n }\n\n if (Array.isArray(parsed)) {\n const allStringsOrObjectsOrNumbers = parsed.every(item =>\n typeof item === 'string' ||\n typeof item === 'object' && item !== null ||\n typeof item === 'number'\n );\n return allStringsOrObjectsOrNumbers;\n }\n\n return typeof parsed === 'object' && parsed !== null;\n\n }\n\n private isString (obj: any) {\n return (Object.prototype.toString.call(obj) === '[object String]')\n }\n\n private fixAndParseJSON(jsonString: string): any {\n const fixedString = jsonString\n .replace(/'/g, '\"')\n .replace(/([{,]\\s*)(\\w+)\\s*:/g, '$1\"$2\":')\n .replace(/,\\s*(\\}|\\])/g, '$1');\n\n try {\n return JSON.parse(fixedString);\n } catch (error: any) {\n throw new Error('Failed to parse JSON: ' + error.message);\n }\n }\n\n private validStoreName(str: string) {\n return str\n .toLowerCase() // Convert to lowercase\n .replace(/\\s+/g, '_') // Replace spaces with underscores\n .replace(/[^ -~]/g, ''); // Remove non-ASCII characters\n }\n\n private hasGlobalStorage(type: StorageType = StorageType.GLOBAL, id: string) {\n\n const strData: StorageOption[] = []\n\n if(type === StorageType.GLOBAL) {\n const str = localStorage.getItem(this.storageName)\n strData.push(...(str ? JSON.parse(str) : []))\n } else {\n const str = sessionStorage.getItem(this.storageName)\n strData.push(...(str ? JSON.parse(str) : []))\n }\n\n const found = strData.find(store => store.id === id)\n return (found) ? true : false\n\n }\n\n override ngOnDestroy() {\n this.persistence$.unsubscribe()\n }\n\n}\n","import { Inject, Injectable, Optional, WritableSignal, signal, computed, effect, inject } from '@angular/core';\n\nimport { UtilsService } from '../utils/utils.service';\nimport { SymmetricalEncryptionService } from '../utils/encryption/symmetrical-encryption.service';\n\nimport { StorageOption, StorageType } from './models';\nimport { SettingOptions } from './models/setting-options.model';\nimport { StorageData } from './models/storage-data.model';\nimport { EncryptionTestService } from '../utils/encryption/encryption-test.service';\nimport { AppService } from '../utils/app.service';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigOptions } from '../request-manager-services';\nimport { ObjectMergerService } from '../utils/object-merger.service';\n\nexport interface State {\n localStores: StorageData[];\n sessionStores: StorageData[];\n settings: StorageOption[];\n}\n\nconst initialState: State = {\n localStores: [],\n sessionStores: [],\n settings: [],\n};\n\n@Injectable({ providedIn: 'root' })\nexport class LocalStorageSignalsManagerService {\n\n private state: WritableSignal<State> = signal(initialState);\n\n storageName = 'storage';\n storageSettingsName = 'global-storage';\n defaultOptions = SettingOptions.adapt();\n\n stateRetrieved = false;\n encrypted = false;\n\n app = inject(AppService);\n utils = inject(UtilsService);\n objectMergerService = inject(ObjectMergerService);\n encryption = inject(SymmetricalEncryptionService);\n encryptionTest = inject(EncryptionTestService);\n\n // --- SELECTORS ---\n\n readonly stores = computed(() => this.state().settings);\n\n readonly storeExists = (store: string) =>\n computed(() => !!this.state().settings.find(item => item.name === store));\n\n readonly store = (store: string) =>\n computed(() => {\n const data = this.state();\n const foundStore = data.settings.find(item => item.name === store);\n if (!foundStore) return null;\n\n const options = SettingOptions.adapt(foundStore.options);\n const found =\n options.storage === StorageType.GLOBAL\n ? data.localStores.find(item => item.id === foundStore.id)\n : data.sessionStores.find(item => item.id === foundStore.id);\n\n if (!found) {\n this.deleteStore({ name: store });\n return null;\n }\n\n if (!this.app?.appID) {\n console.warn('No App ID found - AppId not Provided');\n return null;\n }\n\n const storageData = options.encrypted\n ? this.encryption.decrypt(found.data, this.app.appID)\n : found.data;\n\n return this.isString(storageData) ? JSON.parse(storageData) : storageData;\n });\n\n readonly settings = computed(() => this.state().settings);\n\n readonly setting = (store: string) =>\n computed(() => this.state().settings.find(item => item.name === store) ?? null);\n\n constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {\n this.storageName = configOptions?.LocalStorageOptions?.storageName || this.storageName;\n this.storageSettingsName = configOptions?.LocalStorageOptions?.storageSettingsName || this.storageSettingsName;\n this.defaultOptions = configOptions?.LocalStorageOptions?.options || this.defaultOptions;\n\n this.retrieveState();\n // Auto-persist when state changes\n effect(() => {\n if (this.stateRetrieved) {\n this.persistState(this.state());\n }\n });\n\n // Expiration timer every 3s\n setInterval(() => {\n const state = this.state();\n const expired = this.expired(state);\n if (expired.length > 0) {\n const ids = expired.map(i => i.id);\n const updated: State = {\n ...state,\n localStores: state.localStores.filter(i => !ids.includes(i.id)),\n sessionStores: state.sessionStores.filter(i => !ids.includes(i.id)),\n settings: state.settings.filter(i => !ids.includes(i.id)),\n };\n this.state.set(updated);\n this.persistState(updated);\n }\n }, 3000);\n }\n\n // --- STATE MUTATORS ---\n\n setStore(store: { id: string; name: string; data: any; options: SettingOptions }) {\n this.state.update(state => {\n const settings = StorageOption.adapt(store);\n settings.options = this.objectMergerService.mergeStorageOptions(settings.options);\n store.name = this.validStoreName(store.name);\n\n const str = this.encryptionTest.isEncrypted(store.data) ? store.data : JSON.stringify(store.data);\n const dataStr =\n this.isObjectOrArray(str) && store.options.encrypted\n ? this.encryption.encrypt(str, this.app.appID)\n : store.data;\n\n const localData =\n dataStr && settings.options?.storage === StorageType.GLOBAL\n ? [{ data: dataStr, id: settings.id }]\n : [];\n const sessionData =\n dataStr && settings.options?.storage === StorageType.SESSION\n ? [{ data: dataStr, id: settings.id }]\n : [];\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n settings: [...state.settings, settings],\n };\n });\n }\n\n createStore(store: { id?: string; name: string; data: any; options: SettingOptions }) {\n this.state.update(state => {\n const settings = StorageOption.adapt(store);\n settings.options = this.objectMergerService.mergeStorageOptions(settings.options);\n\n if (state.settings.some(item => item.name === store.name)) {\n return state;\n }\n\n if (!this.isObjectOrArray(store.data)) {\n console.warn('Data must be an Object or Array');\n return state;\n }\n\n const dataStr =\n store.options.encrypted ? this.encryption.encrypt(store.data, this.app.appID) : store.data;\n\n const localData =\n settings.options?.storage === StorageType.GLOBAL ? [{ data: dataStr, id: settings.id }] : [];\n const sessionData =\n settings.options?.storage === StorageType.SESSION ? [{ data: dataStr, id: settings.id }] : [];\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n settings: [...state.settings, settings],\n };\n });\n }\n\n updateStore(store: { name: string; data: any }) {\n this.state.update(state => {\n const settings = state.settings.find(item => item.name === store.name);\n if (!settings) return state;\n\n const dataStr =\n settings.options?.encrypted\n ? this.encryption.encrypt(store.data, this.app.appID)\n : store.data;\n\n const localData =\n settings.options?.storage === StorageType.GLOBAL ? [{ data: dataStr, id: settings.id }] : [];\n const sessionData =\n settings.options?.storage === StorageType.SESSION ? [{ data: dataStr, id: settings.id }] : [];\n\n return {\n ...state,\n localStores: [...state.localStores.filter(i => i.id !== settings.id), ...localData],\n sessionStores: [...state.sessionStores.filter(i => i.id !== settings.id), ...sessionData],\n };\n });\n }\n\n deleteStore(store: { name: string }) {\n this.state.update(state => {\n const id = state.settings.find(item => item.name === store.name)?.id;\n if (!id) return state;\n return {\n ...state,\n localStores: state.localStores.filter(i => i.id !== id),\n sessionStores: state.sessionStores.filter(i => i.id !== id),\n settings: state.settings.filter(i => i.id !== id),\n };\n });\n }\n\n resetStore() {\n const cleared: State = { localStores: [], sessionStores: [], settings: [] };\n this.state.set(cleared);\n this.persistState(cleared);\n }\n\n // --- HELPERS ---\n\n private persistState(state: State) {\n localStorage.setItem(this.storageName, JSON.stringify(state.localStores));\n sessionStorage.setItem(this.storageName, JSON.stringify(state.sessionStores));\n const settingsStr = this.encryption.encrypt(state.settings, this.app.appID);\n localStorage.setItem(this.storageSettingsName, settingsStr || '');\n }\n\n private expired(state: State) {\n return state.settings.filter(\n s => (s.options?.expires || 0) > 0 && this.utils.hasExpired(s.options?.expires!)\n );\n }\n\n retrieveState() {\n\n const str = localStorage.getItem(this.storageSettingsName);\n\n const localStr = localStorage.getItem(this.storageName);\n const sessionStr = sessionStorage.getItem(this.storageName);\n\n const localData: StorageData[] = localStr ? JSON.parse(localStr) : [];\n const sessionData: StorageData[] = sessionStr ? JSON.parse(sessionStr) : [];\n\n const decryptedStr = str ? this.encryption.decrypt(str, this.app.appID) : null;\n const settings: StorageOption[] = decryptedStr ? JSON.parse(decryptedStr) : [];\n\n settings.forEach(store => {\n\n\n // normalize options so we compare numbers and compute expires correctly\n const options = SettingOptions.adapt(store.options);\n\n // if persisted data included expiresIn but not numeric expires, compute it now\n if ((!options.expires || options.expires === 0) && options.expiresIn) {\n try {\n const computed = this.utils.expires(options.expiresIn as string);\n options.expires = computed || 0;\n } catch {\n options.expires = 0;\n }\n }\n\n const expired = (options.expires || 0) > 0 && this.utils.hasExpired(options.expires || 0);\n\n if (!expired) {\n\n const hasStorage = this.hasGlobalStorage(options.storage, store.id || '');\n\n if (!hasStorage) {\n this.createStore({ id: store.id, name: store.name, data: [], options });\n } else {\n const storeData = (options.storage === StorageType.GLOBAL)\n ? localData.find(item => item.id === store.id)\n : sessionData.find(item => item.id === store.id);\n this.setStore({ id: store.id || '', name: store.name, data: storeData?.data, options });\n }\n\n }\n\n });\n\n this.stateRetrieved = true;\n\n // Ensure all stored settings have numeric expires computed and persisted\n try {\n const current = this.state();\n let changed = false;\n const normalizedSettings = current.settings.map(s => {\n const opts = SettingOptions.adapt(s.options);\n if ((!opts.expires || opts.expires === 0) && opts.expiresIn) {\n const computed = this.utils.expires(opts.expiresIn as string) || 0;\n if (computed && computed !== opts.expires) {\n opts.expires = computed;\n changed = true;\n }\n }\n return { ...s, options: opts } as StorageOption;\n });\n\n if (changed) {\n const updated: State = { ...current, settings: normalizedSettings };\n this.state.set(updated);\n this.persistState(updated);\n }\n } catch (e) {\n // swallow normalization errors to avoid breaking init\n }\n\n }\n\n private hasGlobalStorage(type: StorageType = StorageType.GLOBAL, id: string) {\n const strData: StorageData[] = [];\n\n if (type === StorageType.GLOBAL) {\n const str = localStorage.getItem(this.storageName);\n strData.push(...(str ? JSON.parse(str) : []));\n } else {\n const str = sessionStorage.getItem(this.storageName);\n strData.push(...(str ? JSON.parse(str) : []));\n }\n\n const found = strData.find(store => store.id === id);\n return !!found;\n }\n\n private isObjectOrArray(obj: any) {\n try {\n const parsed = typeof obj === 'object' ? obj : JSON.parse(obj);\n return typeof parsed === 'object' && parsed !== null;\n } catch {\n return false;\n }\n }\n\n private isString(obj: any) {\n return Object.prototype.toString.call(obj) === '[object String]';\n }\n\n private validStoreName(str: string) {\n return str.toLowerCase().replace(/\\s+/g, '_').replace(/[^ -~]/g, '');\n }\n}\n","import { inject, Inject, Injectable, InjectionToken } from '@angular/core';\nimport { ComponentStore } from '@ngrx/component-store';\n\nimport { BehaviorSubject, of, Subscription } from 'rxjs';\nimport { tap, switchMap, concatMap, scan, delay } from 'rxjs/operators';\nimport { DatabaseStorage } from '../../models/database-storage.model';\nimport { HTTPManagerService, DataType } from '../request-manager-services';\nimport { ApiRequest, RequestOptions } from './models';\nimport { ChannelInfo } from '../ws-manager-service/models/assortment-data.model';\n\n\nconst API_OPTS = new InjectionToken<ApiRequest>('API_OPTS');\n\nexport interface APIStateManagerData<T> {\n data: T[]\n dataObject: T | null\n}\n\nconst defaultState: APIStateManagerData<any> = {\n data: [],\n dataObject: null,\n};\n\n@Injectable()\nexport class HTTPManagerStateService<T extends { id: number }> extends ComponentStore<APIStateManagerData<T>> {\n\n httpManagerService = inject(HTTPManagerService)\n\n error$ = this.httpManagerService.error$\n isPending$ = this.httpManagerService.isPending$.pipe(delay(1))\n\n // PAGINATION\n private page = new BehaviorSubject<number>(0)\n page$ = this.page.asObservable()\n\n private totalPages = new BehaviorSubject<number>(0)\n totalPages$ = this.totalPages.asObservable()\n\n private percentage = new BehaviorSubject<number>(0)\n percentage$ = this.percentage.asObservable()\n // ----------\n\n private hasDatabase = false\n\n streamedResponse = []\n\n // WS\n status$ = this.httpManagerService.connectionStatus$;\n\n messages$: Subscription | null = null;\n connectionStatus$: Subscription | null = null;\n\n userList: string[] = []\n channels: ChannelInfo[] = []\n channelList: string[] = []\n messages: any[] = []\n wsConnection = false\n\n constructor(\n @Inject(API_OPTS) private apiOptions = ApiRequest.adapt(),\n @Inject(\"dataType\") private dataType: DataType | undefined,\n @Inject(\"database\") private database?: DatabaseStorage | undefined\n ) {\n super(defaultState);\n this.setApiRequestOptions(apiOptions, dataType, database)\n }\n\n setApiRequestOptions(apiOptions?: ApiRequest, dataType?: DataType, database?: DatabaseStorage) {\n\n this.apiOptions = ApiRequest.adapt(apiOptions)\n this.dataType = (dataType) ? dataType : DataType.ARRAY\n\n this.hasDatabase = this.database?.table === \"\" ? false : true\n this.database = (this.hasDatabase) ? DatabaseStorage.adapt(database) : undefined\n\n console.log('WS API Options:', this.apiOptions.ws)\n this.initWS(this.apiOptions.ws)\n }\n\n initWS(wsOptions: any) {\n\n if(wsOptions?.wsServer) this.httpManagerService.connect(wsOptions.wsServer, wsOptions.jwtToken)\n\n // connection status\n this.connectionStatus$ = this.httpManagerService.connectionStatus$\n .subscribe(\n (isConnected: any) => {\n\n this.wsConnection = isConnected\n\n if (isConnected) {\n console.log('🟢 WebSocket connection is open.')\n this.httpManagerService.getAllChannels()\n } else {\n console.log('🔴 WebSocket connection is closed.')\n }\n\n }\n )\n\n // Subscribe to incoming messages\n this.messages$ = this.httpManagerService.messages$\n .subscribe((message: any) => {\n\n if(!message) return\n\n console.log('Received message:', message)\n\n switch (message.type) {\n case 'channelsList':\n\n console.log('💬 Channels:', message.channels)\n\n this.channelList = message.channels\n\n if(this.channelList.includes(wsOptions.id)) {\n this.httpManagerService.subscribeToChannel(wsOptions.id)\n } else {\n this.httpManagerService.createChannel(wsOptions.id)\n }\n\n break;\n\n case 'channelMessage':\n\n console.log('💬 Message:', message.content)\n this.fetchRecord(RequestOptions.adapt({ path: message.content.path }), message.content.method)\n\n break;\n\n case 'usersInChannel':\n\n this.userList = message.users\n console.log('👥 Users:', message.users)\n\n break;\n\n default:\n\n if (message) this.messages.push(message)\n break\n }\n\n })\n\n }\n\n get ApiRequestOptions() {\n return this.apiOptions\n }\n\n initStorage() {\n // if(this.otherOptions.database) {\n // console.log('Has Database Option:', this.otherOptions.database.table)\n // const schema = (this.otherOptions.adapters?.incoming) ? Object.keys(this.otherOptions.adapters.incoming({})).join() : '++id'\n // this.apiService.initDB(this.otherOptions.database.expiresIn, this.otherOptions.database.table, schema)\n // }\n }\n\n initializeState(data: any) {\n this.setData$(data)\n }\n\n // --------------------------------------------------------------------------------------------------\n // SELECTORS\n\n readonly data$ = this.select(({ data, dataObject }) => {\n const isArray =( this.dataType === DataType.ARRAY) ? true : false\n return (isArray) ? data : dataObject\n })\n\n readonly selectRecord$ = (id: number) => this.select(\n this.data$,\n (data) => {\n if (this.dataType === DataType.ARRAY && Array.isArray(data)) {\n return data.find(item => item.id === id) as T | null\n } else {\n return (data as T).id === id ? data : null\n }\n }\n );\n\n // --------------------------------------------------------------------------------------------------\n\n // UPDATERS\n\n private readonly setData$ = this.updater((state: APIStateManagerData<T>, data: T | T[] | any) => {\n\n if (!data) return state;\n\n if (this.dataType === DataType.ARRAY) {\n\n const dataArray = Array.isArray(data) ? data : [data]\n\n const stateDataSample = (state.data.length > 0) ? Object.keys(state.data[0]) : []\n const newDataSample = (dataArray.length > 0) ? Object.keys(dataArray[0]) : []\n\n const isSame = (state.data.length === 0) ? false : stateDataSample.every((value, index) => value === newDataSample[index])\n const updatedData = (!isSame && dataArray.length !== 0) ? this.updateArrayState([], dataArray) : this.updateArrayState(state.data, dataArray)\n\n return { ...state, data: updatedData, dataObject: null } as APIStateManagerData<T>;\n\n } else {\n const dataObject = this.isEmpty(data) ? null : data;\n return { ...state, data: [], dataObject: dataObject } as APIStateManagerData<T>;\n }\n\n });\n\n private updateArrayState(currentData: any[], newData: any[]): any[] {\n\n const filterCurrentData = () => {\n const ids = this.streamedResponse.map((obj: any) => obj.id)\n return currentData.filter(obj => (obj.id) ? ids.includes(obj.id) : obj)\n }\n\n const filteredCurrentData = (this.httpManagerService.isPending.value) ? currentData : filterCurrentData()\n\n const updatedData = filteredCurrentData.map(item => {\n const newItem = newData.find(newItem => {\n const hasId = (newItem?.id && item?.id) ? true : false\n return (hasId) ? newItem.id === item.id : JSON.stringify(newItem) === JSON.stringify(item)\n })\n return (newItem) ? { ...item, ...newItem } : item\n })\n\n const addedData = newData.filter(newItem => {\n return !filteredCurrentData.some(item => {\n const hasId = (newItem?.id && item?.id) ? true : false\n return (hasId) ? item.id === newItem.id : JSON.stringify(newItem) === JSON.stringify(item)\n })\n })\n\n return [...updatedData, ...addedData]\n\n}\n\n private readonly addData$ = this.updater((state: APIStateManagerData<T>, data: T) => {\n\n if (this.dataType === DataType.ARRAY) {\n const exists = state.data.some(item => item.id === data.id);\n\n if (exists) {\n const updatedData = state.data.map(item =>\n item.id === data.id ? data : item\n );\n\n return { ...state, data: updatedData };\n } else {\n const newState = [...state.data, data];\n return { ...state, data: newState };\n }\n } else {\n return { ...state, dataObject: data };\n }\n\n })\n\n private readonly deleteData$ = this.updater((state: APIStateManagerData<T>, data: T & { id: number }) => {\n if (this.dataType === DataType.ARRAY) {\n const newState = state.data.filter(item => item.id !== data.id)\n return { ...state, ...{ data: newState } }\n } else {\n return { ...state, ...{ dataObject: null } }\n }\n })\n\n private readonly updateData$ = this.updater((state: APIStateManagerData<T>, data: T) => {\n\n if (this.dataType === DataType.ARRAY) {\n\n const objIndex = state.data.findIndex(item => item.id === data.id)\n\n if (objIndex > -1) {\n const newState = [...state.data]\n newState[objIndex] = data\n return { ...state, ...{ data: newState } }\n }\n\n return state\n\n } else {\n return { ...state, ...{ dataObject: data } }\n }\n\n })\n\n // --------------------------------------------------------------------------------------------------\n // EFFECTS\n\n readonly clearRecords = this.effect(data =>\n data.pipe(\n tap(() => {\n if (this.dataType === DataType.ARRAY) {\n this.setData$([])\n } else {\n this.setData$({})\n }\n })\n ))\n\n readonly refreshData = this.effect(data =>\n data.pipe(\n tap(() => {\n // this.apiService.flushDatabase(this.otherOptions.database?.table)\n this.fetchRecords()\n })\n ))\n\n // --------------------------------------------------------------------------------------------------\n // CRUD OPERATIONS\n\n // FETCH RECORDS\n readonly fetchRecords = (options?: RequestOptions) =>\n this.effect<any>(() =>\n of(RequestOptions.adapt(options)).pipe(\n switchMap(() => {\n\n this.streamedResponse = []\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.getRequest(requestOptions, options?.path)\n .pipe(\n tap((data: any) => {\n data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data\n this.setData$(data)\n })\n )\n\n })\n )\n )\n\n // FETCH RECORD\n readonly fetchRecord = (options: RequestOptions, method: string) =>\n this.effect<any>(() =>\n of(RequestOptions.adapt(options)).pipe(\n switchMap((options) => {\n\n this.streamedResponse = []\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.getRequest(requestOptions, options?.path)\n .pipe(\n tap((data: any) => {\n\n data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data\n\n const id = (options as any).path?.length ? options.path[options.path.length -1] : 0\n\n if(method === 'DELETE') this.deleteData$({ id } as T & { id: number })\n if(method === 'UPDATE') this.updateData$(data)\n if(method === 'CREATE') this.addData$(data)\n\n })\n )\n\n })\n )\n )\n\n // CREATE RECORD\n readonly createRecord = (data: any|null, options?: RequestOptions) =>\n this.effect<any>(() =>\n of(data).pipe(\n switchMap((data: any) => {\n\n this.streamedResponse = []\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.postRequest(data, requestOptions, options?.path)\n .pipe(\n tap((data: any) => {\n\n data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data\n this.addData$(data)\n\n if(this.wsConnection) this.wsCommunication('CREATE', [...options?.path || [], data.id])\n\n }),\n )\n\n })\n )\n )\n\n // UPDATE RECORD\n readonly updateRecord = (data: any|null, options?: RequestOptions) =>\n this.effect<any>(() =>\n of(data).pipe(\n concatMap((data: any) => {\n\n this.streamedResponse = []\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.putRequest(data, requestOptions, options?.path)\n .pipe(\n tap((data: any) => {\n\n data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data\n this.updateData$(data)\n\n if(this.wsConnection) this.wsCommunication('UPDATE', [...options?.path || []])\n\n }),\n )\n\n })\n )\n )\n\n // DELETE RECORD\n readonly deleteRecord = (options?: RequestOptions) =>\n this.effect<any>(() =>\n of(options).pipe(\n concatMap((data: any) => {\n\n this.streamedResponse = []\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.deleteRequest(requestOptions, options?.path)\n .pipe(\n tap((data: any) => {\n\n data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data\n this.deleteData$(data)\n\n if(this.wsConnection) this.wsCommunication('DELETE', [...options?.path || []])\n\n }),\n )\n\n })\n )\n )\n\n // --------------------------------------------------------------------------------------------------\n // FETCH STREAM\n\n readonly createStream = (data: any|null, options?: RequestOptions) =>\n this.effect<any>(() =>\n of(data).pipe(\n tap(() => this.httpManagerService.isPending.next(true)),\n switchMap((data: any) => {\n\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.postRequest(data, requestOptions, options?.path)\n .pipe(\n tap((res: any) => {\n if(res.length > 0) this.setData$(res)\n this.streamedResponse = res\n }),\n scan((acc, res: any) => {\n\n const previous = acc.current\n const current = res\n return { previous, current };\n\n }, { previous: null, current: null }),\n tap(({ previous, current }) => {\n\n if(previous && JSON.stringify(previous) === JSON.stringify(current)) {\n this.httpManagerService.isPending.next(false)\n this.setData$([])\n } else {\n this.httpManagerService.isPending.next(true)\n }\n\n })\n )\n\n })\n )\n\n )\n\n readonly fetchStream = (options?: RequestOptions) =>\n this.effect<any>(() =>\n of(options).pipe(\n tap(() => this.httpManagerService.isPending.next(true)),\n switchMap((options: any) => {\n\n const requestOptions = this.updateRequestOptions(options?.headers)\n requestOptions.stream = true\n\n return this.httpManagerService.getRequest(requestOptions, options?.path)\n .pipe(\n tap((res: any) => {\n\n if(res.length > 0) this.setData$(res)\n this.streamedResponse = res\n }),\n scan((acc, res: any) => {\n\n const previous = acc.current\n const current = res\n return { previous, current }\n\n }, { previous: null, current: null }),\n tap(({ previous, current }) => {\n\n if(previous && JSON.stringify(previous) === JSON.stringify(current)) {\n this.httpManagerService.isPending.next(false)\n this.setData$([])\n } else {\n this.httpManagerService.isPending.next(true)\n }\n\n })\n )\n\n }),\n )\n )\n\n private wsCommunication(method: string, path?: string|number[]) {\n\n if(this.wsConnection && this.apiOptions.ws) {\n const wsServer = this.apiOptions.ws.id\n this.httpManagerService.sendMessage(wsServer, { method, path })\n }\n\n }\n\n // --------------------------------------------------------------------------------------------------\n // MISC\n\n private isEmpty(obj: any) {\n return Object.keys(obj).length === 0\n }\n\n private updateRequestOptions(headers?: any): ApiRequest {\n\n const options = ApiRequest.adapt({ ...this.apiOptions })\n\n options.headers = (headers)\n ? { ...options.headers, ...headers }\n : { ...options.headers }\n\n return options\n }\n\n}\n","\n// export * from \"./database-manager-services/index\";\nexport * from \"./local-storage-manager-service/index\";\n\nexport * from \"./request-manager-services/index\";\nexport * from \"./request-manager-state-service/index\";\n\nexport * from \"./utils/index\";\n","export interface ErrorDisplaySettingsInterface {\n displayTime: number\n position: string\n}\n\nexport class ErrorDisplaySettings implements ErrorDisplaySettingsInterface {\n\n constructor(\n public displayTime = 3 * 1000,\n public position = 'top'\n ) {}\n\n static adapt(item?: any): ErrorDisplaySettings {\n\n return new ErrorDisplaySettings(\n (item?.displayTime) ? item.displayTime * 1000 : 3 * 1000,\n item?.position,\n )\n\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class WithCredentialsInterceptor implements HttpInterceptor {\n\n intercept(req: HttpRequest<any>, next: HttpHandler):\n Observable<HttpEvent<any>> {\n\n req = req.clone({ withCredentials: true })\n\n return next.handle(req);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';\nimport { Observable, Subscription } from 'rxjs';\nimport { LangChangeEvent, TranslateService } from '@ngx-translate/core';\n\n@Injectable()\nexport class RequestHeadersInterceptor implements HttpInterceptor {\n\n subscriptions = new Subscription()\n language = 'en-CA'\n\n get currentDate() {\n\n const date = new Date()\n\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const day = String(date.getDate()).padStart(2, '0')\n\n return `${year}-${month}-${day}`\n\n }\n\n constructor(\n private translate: TranslateService\n ) {\n this.subscriptions.add(\n this.translate.onLangChange\n .subscribe((params: LangChangeEvent) => {\n this.language = `${params.lang}-CA`\n })\n )\n }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n request = request.clone({\n setHeaders: {\n 'Content-Type': 'application/json',\n 'Accept-Language': this.language || 'en-CA',\n 'Current-Date': this.currentDate\n }\n })\n\n return next.handle(request)\n\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe()\n }\n}\n\n","import { inject, Injectable } from '@angular/core'\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpErrorResponse } from '@angular/common/http'\nimport { Observable, catchError, throwError } from 'rxjs'\n\nimport { ToastMessageDisplayService, ToastDisplay, ToastColors } from 'toast-message-display'\n\n@Injectable()\nexport class RequestErrorInterceptor implements HttpInterceptor {\n\n toastMessage = inject(ToastMessageDisplayService)\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n return next.handle(req).pipe(\n\n catchError((error: HttpErrorResponse) => {\n\n const displayError = ToastDisplay.adapt({\n message: 'This is a toast message. This is an Error!!',\n action: 'OK',\n color: ToastColors.SUCCESS,\n icon: 'info',\n duration: 5 * 1000, //5 seconds\n })\n\n if (error.status >= 400 && error.status < 500) {\n\n displayError.color = ToastColors.WARN\n displayError.message = error.error || `${error.status}: ${error.statusText}`\n\n console.error('Client Error:', {\n status: error.status,\n message: error.message,\n error: error.error,\n text: error.statusText,\n })\n\n this.toastMessage.toastMessage(displayError)\n\n } else if (error.status >= 500) {\n\n displayError.color = ToastColors.ERROR\n displayError.message = error.error || `${error.status}: ${error.statusText}`\n\n console.error('Server Error:', {\n status: error.status,\n message: error.message,\n error: error.error,\n text: error.statusText,\n })\n\n this.toastMessage.toastMessage(displayError)\n\n }\n\n return throwError(() => error)\n\n })\n\n )\n }\n\n}\n\n\n","export interface ClientInfoInterface {\n domain: string\n service: string\n id: number\n name: string\n}\n\nexport class ClientInfo implements ClientInfoInterface {\n\n constructor(\n public domain = '',\n public service = '',\n public id = 0,\n public name = '',\n ) {}\n\n static adapt(item?: any): ClientInfo {\n\n return new ClientInfo(\n item?.domain,\n item?.service,\n item?.id,\n (item?.first_name || item?.last_name) ? `${item?.first_name} ${item?.last_name}` : '',\n )\n\n }\n\n}\n\n\n","export interface ClientInfoMapperInterface {\n id: number\n first_name: string\n last_name: string\n email: string\n}\n\nexport class ClientInfoMapper implements ClientInfoMapperInterface {\n\n constructor(\n public id = 0,\n public first_name = '',\n public last_name = '',\n public email = '',\n ) {}\n\n static adapt(item?: any): ClientInfoMapper {\n\n const first_name = (item?.name) ? item.name.split(' ')[0] : ''\n const last_name = (item?.name) ? item.name.split(' ')[1] : ''\n\n return new ClientInfoMapper(\n item?.id,\n first_name,\n last_name,\n item?.email,\n )\n\n }\n\n}\n\n\n","export interface AIPromptInterface {\n response: string\n}\n\nexport class AIPrompt implements AIPromptInterface {\n\n constructor(\n public response = '',\n ) {}\n\n static adapt(item?: any): AIPrompt {\n\n return new AIPrompt(\n item?.response,\n )\n\n }\n\n}\n","export interface DownloadLabelsInterface {\n error: string;\n action: string;\n icon: string;\n}\n\nexport class DownloadLabels implements DownloadLabelsInterface {\n constructor(\n public error = '',\n public action = '',\n public icon = 'error',\n ) {}\n\n static adapt(item?: any): DownloadLabelsInterface {\n return new DownloadLabels(\n item?.error,\n item?.action,\n item?.icon,\n )\n\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { ProgressSpinnerMode } from '@angular/material/progress-spinner';\nimport { Subscription, timer } from 'rxjs';\n\n@Component({\n selector: 'app-download-file',\n templateUrl: './download-file.component.html',\n styleUrls: ['./download-file.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class DownloadFileComponent implements OnInit {\n\n private subscriptions = new Subscription();\n\n @Input() event?: Function;\n @Input() displayError = 3; // seconds\n @Input() diameter = 32;\n @Input() mode: ProgressSpinnerMode = 'determinate';\n @Input() isPending = false;\n\n @Input() active = false;\n @Input() disabled = false;\n\n @Output() error = new EventEmitter<void>();\n\n private _progress = 0;\n @Input() set progress(value: any) {\n this._progress = value ?? 0;\n }\n\n get progress() {\n return this._progress;\n }\n\n private _hasError = false;\n private errorTimerActive = false;\n\n @Input() set hasError(value: boolean | any) {\n\n this._hasError = !!value;\n\n if (this._hasError && !this.errorTimerActive) {\n this.errorTimerActive = true;\n this.active = false;\n this.error.emit()\n this.subscriptions.add(\n timer(this.displayError * 1000)\n .subscribe((err) => {\n this._hasError = false;\n this.errorTimerActive = false;\n })\n );\n }\n\n }\n\n get hasError() {\n return this._hasError;\n }\n\n ngOnInit() {}\n\n onAction() {\n this.isPending = false\n if (this.event) this.event()\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe()\n }\n}\n","<ng-container *ngIf=\"!isPending; else DOWNLOADING\">\n <ng-container *ngIf=\"hasError; else NORMAL\">\n <div class=\"width center-txt\" style=\"margin-bottom: 4px;\">\n <mat-icon color=\"warn\" class=\"warn-icon\">warning</mat-icon>\n </div>\n </ng-container>\n <ng-template #NORMAL>\n <ng-container *ngIf=\"active; else ACTION\">\n\n <div class=\"container-obj\">\n <div class=\"centered-obj-div\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"44\"\n ></mat-progress-spinner>\n </div>\n </div>\n\n </ng-container>\n <ng-template #ACTION>\n <button data-tracking=\"export-btn\" mat-icon-button (click)=\"onAction()\" class=\"icon-button\" [disabled]=\"disabled\">\n <mat-icon class=\"custom-icon\">file_download</mat-icon>\n </button>\n </ng-template>\n </ng-template>\n</ng-container>\n\n<ng-template #DOWNLOADING>\n <div\n class=\"spinner-container\"\n *ngIf=\"(progress > 0 && progress < 100); else INDETERMINATE\"\n >\n <div class=\"spinner-background\">\n {{progress}}%\n </div>\n <mat-progress-spinner\n color=\"primary\"\n [mode]=\"mode\"\n [value]=\"progress\"\n [diameter]=\"44\"\n ></mat-progress-spinner>\n </div>\n <ng-template #INDETERMINATE>\n <div class=\"container-obj\">\n <div class=\"centered-obj-div\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"44\"\n ></mat-progress-spinner>\n </div>\n </div>\n </ng-template>\n\n</ng-template>\n\n\n\n","import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { catchError, distinctUntilChanged, finalize } from 'rxjs/operators';\n\nimport { ToastColors, ToastDisplay } from 'toast-message-display';\n\nimport { DownloadLabels } from './models/download-labels-model';\nimport { HTTPManagerService } from '../../../services/request-manager-services';\nimport { ApiRequest } from '../../../services';\nimport { Subscription, throwError } from 'rxjs';\n\n@Component({\n selector: 'app-file-downloader',\n templateUrl: './file-downloader.component.html',\n styleUrls: ['./file-downloader.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class FileDownloaderComponent extends HTTPManagerService<any> implements OnInit {\n\n @Input() delayError = 3\n @Input() apiRequest: ApiRequest = ApiRequest.adapt()\n @Input() displayErrorMessage = false\n\n @Input() saveFileAs?: string\n\n _labels = DownloadLabels.adapt()\n @Input() set labels(value: DownloadLabels) {\n this._labels = (value) ? DownloadLabels.adapt(value) : DownloadLabels.adapt()\n }\n\n active = false\n\n subscription = new Subscription()\n\n get labels() {\n return this._labels\n }\n\n @Output() completed = new EventEmitter<void>()\n @Output() failed = new EventEmitter<string>()\n\n @Input() disabled = false\n\n constructor() {\n super()\n }\n\n ngOnInit() {\n\n }\n\n onDownloadStreaming() {\n\n if (this.active) return;\n this.active = true;\n\n return this.downloadRequest(this.apiRequest, [])\n .pipe(\n distinctUntilChanged(),\n catchError((err) => {\n\n this.onError(err.message)\n this.active = false\n this.failed.emit(err)\n\n return throwError(() => err)\n\n }),\n finalize(() => {\n if (!this.active) return\n this.active = false\n this.completed.emit()\n })\n )\n .subscribe()\n }\n\n\n onError(message: string) {\n\n if(!message || !this.displayErrorMessage) return\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.ERROR,\n icon: 'error',\n });\n\n this.active = false\n\n this.toastMessage.toastMessage(display);\n\n }\n\n OnDestroy() {\n this.subscription.unsubscribe()\n }\n\n}\n","<app-download-file\n [disabled]=\"disabled\"\n [displayError]=\"3\"\n [event]=\"onDownloadStreaming.bind(this)\"\n [isPending]=\"(isPending$ | async) || false\"\n [progress]=\"(progress$ | async)\"\n [hasError]=\"(error$ | async)\"\n (error)=\"onError(labels.error)\"\n [active]=\"active\"\n></app-download-file>\n","import { Component, OnInit, ViewChild, inject } from '@angular/core'\n\nimport { BehaviorSubject, EMPTY, Observable, throwError } from 'rxjs'\nimport { FormArray, FormBuilder, Validators } from '@angular/forms'\n\nimport { ClientInfo } from './models/sample-client-info'\nimport { ClientInfoMapper } from './models/sample-mapper-client-info'\nimport { AIPrompt } from './models/sample-ai-prompt'\nimport { ApiRequest, HTTPManagerService } from '../..'\nimport { catchError, map, tap } from 'rxjs/operators'\n\nimport { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display'\n\n@Component({\n selector: 'app-request-manager-demo',\n templateUrl: './request-manager-demo.component.html',\n styleUrls: ['./request-manager-demo.component.scss'],\n})\nexport class RequestManagerDemoComponent implements OnInit {\n\n displayedColumns = ['id','name', 'lastName', 'age']\n\n private fb = inject(FormBuilder)\n private toastMessage = inject(ToastMessageDisplayService)\n\n httpManagerService = inject(HTTPManagerService)\n\n isPending$ = this.httpManagerService.isPending$\n countdown$ = this.httpManagerService.countdown$\n\n GET_error$ = new BehaviorSubject<string>('')\n POST_error$ = new BehaviorSubject<string>('')\n PUT_error$ = new BehaviorSubject<string>('')\n DELETE_error$ = new BehaviorSubject<string>('')\n\n STREAM_error$ = new BehaviorSubject<string>('')\n STREAM_AI_error$ = new BehaviorSubject<string>('')\n\n GET$?: Observable<any>\n POST$?: Observable<any>\n PUT$?: Observable<any>\n DELETE$?: Observable<any>\n\n STREAM_AI$?: Observable<any>\n STREAM$?: Observable<any>\n\n requestParams = {\n GET: ApiRequest.adapt(),\n POST: ApiRequest.adapt(),\n PUT: ApiRequest.adapt(),\n DELETE: ApiRequest.adapt(),\n STREAM: ApiRequest.adapt(),\n }\n\n @ViewChild(\"failedState\", { static: true }) failedState: any\n @ViewChild(\"pollingState\", { static: true }) pollingState: any\n\n questionControl = this.fb.control(\"\", [Validators.required])\n\n downloadRequest = ApiRequest.adapt({\n server: 'assets/images',\n path: ['me.jpg'],\n // saveAs: 'john.jpg' // Optional\n })\n\n // downloadRequest = ApiRequest.adapt({\n // server: 'oidc/ai/file'\n // })\n\n sampleClientData = {\n id: 0,\n name: \"Old School Dates\",\n domain: \"osd.com\",\n service: \"osd\",\n spiffe: \"osd.com/osd\",\n secret: \"SMOPECXP-OS4P-USOG-X2II-3XMD1FQDR3IJX\",\n created: 1693003138,\n modified: 1693003138,\n icon: \"\",\n imageFile: \"\",\n email: \"wavecoders@gmail.com\"\n }\n\n requestForm = this.fb.group({\n path: this.fb.control<string>(\"ai/\"),\n headers: this.fb.array([]),\n adapter: [null],\n mapper: [null],\n retry: this.fb.group({\n times: [3],\n delay: [3],\n }),\n polling: [3],\n })\n\n AIType = 0\n\n sampleAdaptors = [\n { label: \"ClientInfo Basic\", value: ClientInfo.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n sampleMappers = [\n { label: \"Mapper Basic\", value: ClientInfoMapper.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n get retry() {\n return this.requestForm.get('retry')?.value\n }\n\n get headers(): FormArray {\n return this.requestForm.get('headers') as FormArray\n }\n\n get isValid() {\n this.requestForm.markAllAsTouched()\n return this.requestForm.valid\n }\n\n hasId = (arr: any[]) => {\n if (arr.length === 0) return false\n return !isNaN(arr[arr.length - 1])\n }\n\n props = (adapter: any) => {\n return (adapter) ? adapter() : null\n }\n\n // server = `http://sample-endpoint/as/authorization.oauth2`\n\n arrayObjectsToObjects = (arr: any[]) => {\n return Array.isArray(arr) ? arr.reduce((obj, item) => Object.assign(obj, { [item.key]: item.value }), {}) : {}\n }\n\n constructor() { }\n\n ngOnInit() {\n\n // const reqGet2 = ApiRequest.adapt({\n // server,\n // path: ['clients'],\n // headers: { authentication: \"Bearer <KEY>\" },\n // adapter: ClientInfo,\n // dataType: DataType.OBJECT,\n // // concurrent: false,\n // // polling: 3, //seconds\n // })\n\n // const req2 = [1024,1025,1026].map(item => {\n // return this.httpManagerService.getRequest<ClientInfo[]>(reqGet2, [item])\n // .pipe(\n // catchError(error => {\n // return throwError(() => new Error(error.error.message))\n // })\n // )\n // })\n\n // forkJoin(req2)\n // .subscribe(res => console.log(res))\n\n }\n\n addHeader() {\n const header = this.fb.group({\n key: ['', Validators.required],\n value: ['']\n })\n this.headers.push(header)\n }\n\n removeHeader(index: number) {\n this.headers.removeAt(index)\n }\n\n compileRequest() {\n\n const requestParams = this.requestForm.value\n\n requestParams.headers = this.arrayObjectsToObjects(\n requestParams.headers || []\n )\n\n const pathReq = (requestParams.path === \"\") ? [] : (requestParams.path || \"\").split(\"/\")\n\n if (!this.pollingState.checked) requestParams.polling = 0\n\n if (!this.failedState.checked) {\n requestParams.retry = { times: 0,delay: 0 }\n }\n\n const apiOptions = ApiRequest.adapt(requestParams)\n apiOptions.path = []\n\n return { apiOptions: apiOptions, path: pathReq }\n\n }\n\n onGetRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n this.requestParams.GET = reqParams.apiOptions\n\n this.GET$ = EMPTY //Cancels Previous\n this.GET_error$.next('')\n\n this.GET$ = this.httpManagerService.getRequest<ClientInfo[]>(reqParams.apiOptions, reqParams.path)\n .pipe(\n // tap((data) => console.log(\"API GET response\", data)),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'GET'))\n })\n )\n\n }\n\n onCreateRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n this.requestParams.POST = reqParams.apiOptions\n\n this.POST$ = EMPTY //Cancels Previous\n this.POST_error$.next('')\n\n console.log(\"POST\", this.sampleClientData)\n console.log(\"POST\", reqParams.apiOptions)\n console.log(\"POST\", reqParams.path)\n\n this.POST$ = this.httpManagerService.postRequest<ClientInfo>(this.sampleClientData, reqParams.apiOptions, reqParams.path)\n .pipe(\n // tap((data) => console.log(\"API POST response\", data)),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'POST'))\n })\n )\n\n }\n\n onUpdateRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n if(!this.hasId(reqParams.path)) {\n console.log(\"Missing ID\")\n return\n }\n\n this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length-1])\n this.requestParams.PUT = reqParams.apiOptions\n\n this.PUT$ = EMPTY //Cancels Previous\n this.PUT_error$.next('')\n\n this.PUT$ = this.httpManagerService.putRequest<any>(this.sampleClientData, reqParams.apiOptions, reqParams.path)\n .pipe(\n // tap((data) => console.log(\"API PUT response\", data)),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'PUT'))\n })\n )\n\n }\n\n onDeleteRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n this.requestParams.DELETE = reqParams.apiOptions\n\n if(!this.hasId(reqParams.path)) {\n console.log(\"Missing ID\")\n return\n }\n\n this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length-1])\n this.requestParams.DELETE = reqParams.apiOptions\n\n this.DELETE$ = EMPTY //Cancels Previous\n this.DELETE_error$.next('')\n\n this.DELETE$ = this.httpManagerService.deleteRequest<ClientInfo>(reqParams.apiOptions, reqParams.path)\n .pipe(\n // tap((data) => console.log(\"API DELETE response\", data)),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'DELETE'))\n })\n )\n\n }\n\n onStreamPostRequest() {\n\n if (!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n let payload = {}\n let apiPath: string[] = reqParams.path\n let apiOptions = reqParams.apiOptions\n let responseMapper: (items: any) => any = (items) => items.response\n\n if (this.AIType === 0) {\n\n // API request\n payload = { prompt: this.questionControl.value }\n\n } else {\n\n // Local Ollama request\n apiOptions.server = \"api\"\n apiPath = [\"generate\"]\n apiOptions.stream = true\n payload = {\n model: \"phi3:latest\",\n prompt: this.questionControl.value,\n stream: true,\n }\n\n responseMapper = (items) => items.map((word: any) => word.response).flat().join('')\n\n }\n\n this.requestParams.STREAM = apiOptions\n this.STREAM_AI$ = EMPTY\n this.STREAM_AI_error$.next('')\n\n this.STREAM_AI$ = this.httpManagerService.postRequest<any>(payload, apiOptions, apiPath).pipe(\n map(responseMapper),\n tap(() => this.questionControl.reset()),\n catchError(error => throwError(() => this.errorHandling(error, 'STREAM')))\n )\n\n }\n\n\n onStreamRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n reqParams.apiOptions.stream = true\n\n this.requestParams.GET = reqParams.apiOptions\n this.STREAM$ = this.httpManagerService.getRequest<ClientInfo[]>(reqParams.apiOptions, reqParams.path)\n .pipe(\n // tap((data) => console.log(\"API STREAM response\", data)),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'STREAM'))\n })\n )\n\n }\n\n onDownloadCompleted() {\n\n const message = \"Download Completed\"\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.SUCCESS,\n icon: 'sentiment_satisfied_alt',\n })\n\n this.toastMessage.toastMessage(display)\n }\n\n onDownloadFailed(err: string) {\n\n const message = \"Download Failed\"\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.ERROR,\n icon: 'warning',\n })\n\n this.toastMessage.toastMessage(display)\n }\n\n errorHandling(err: any, type: string) {\n if(type === 'GET') this.GET_error$.next(err.message)\n if(type === 'POST') this.POST_error$.next(err.message)\n if(type === 'PUT') this.PUT_error$.next(err.message)\n if(type === 'DELETE') this.DELETE_error$.next(err.message)\n if(type === 'STREAM') this.STREAM_error$.next(err.message)\n }\n\n onSelectAIType(type: number) {\n this.AIType = type\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <h2>\n HTTP Request Manager\n </h2>\n\n <div [formGroup]=\"requestForm\" style=\"margin-top: 2rem;\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Adapter (Model)</mat-label>\n <mat-select formControlName=\"adapter\" #adapterSelect>\n <mat-option>None</mat-option>\n <mat-option *ngFor=\"let adapter of sampleAdaptors\" [value]=\"adapter.value\">\n {{adapter.label}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mapper (Model)</mat-label>\n <mat-select formControlName=\"mapper\" #mapperSelect>\n <mat-option>None</mat-option>\n <mat-option *ngFor=\"let mapper of sampleMappers\" [value]=\"mapper.value\">\n {{mapper.label}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"display: flex; margin-bottom: 2rem;\" *ngIf=\"adapterSelect.value || mapperSelect.value\">\n <div style=\"flex:1\" class=\"box\">\n <h3>Adapter (Incoming)</h3>\n <div *ngIf=\"adapterSelect.value; else NO_ADAPTER\">\n {{ props(adapterSelect.value) | json }}\n </div>\n <ng-template #NO_ADAPTER>No Transformation</ng-template>\n </div>\n <div style=\"flex:1\" class=\"box\">\n <h3>Mapper (Outgoing)</h3>\n <div *ngIf=\"mapperSelect.value; else NO_MAPPER\">\n {{ props(mapperSelect.value) | json }}\n </div>\n <ng-template #NO_MAPPER>No Transformation</ng-template>\n </div>\n </div>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>RestPath (/ delimited)</mat-label>\n <input matInput placeholder=\"clients/list\" formControlName=\"path\">\n </mat-form-field>\n </div>\n <div>\n <div formArrayName=\"headers\">\n <div *ngFor=\"let task of headers.controls; let i = index\" [formGroupName]=\"i\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Key</mat-label>\n <input matInput placeholder=\"authentication\" formControlName=\"key\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Value</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"value\">\n </mat-form-field>\n <div style=\"margin-top: .5rem;\">\n <button mat-icon-button (click)=\"removeHeader(i)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n <button mat-stroked-button (click)=\"addHeader()\" class=\"btn\">Add Header</button>\n </div>\n <div style=\"margin-top: 2rem; display: flex; flex-direction:column; gap: 1rem;\">\n <div>\n <mat-slide-toggle #failedState>Retry on Failed</mat-slide-toggle>\n <div *ngIf=\"failedState.checked\" style=\"display: flex; gap: .5rem; margin-top: 1rem;\" formGroupName=\"retry\">\n <mat-form-field appearance=\"outline\">\n <mat-label>#of Times</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"times\" value=\"3\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Delay Until Next</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"delay\" value=\"3\">\n </mat-form-field>\n </div>\n </div>\n <div>\n <mat-slide-toggle #pollingState>Polling</mat-slide-toggle>\n <div *ngIf=\"pollingState.checked\">\n <mat-form-field appearance=\"outline\" style=\"margin-top: 1rem\">\n <mat-label>#of Seconds</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"polling\" value=\"3\">\n </mat-form-field>\n </div>\n </div>\n </div>\n </div>\n\n <div style=\"margin-bottom: 1rem; margin-top: 2rem;\">\n <mat-progress-bar mode=\"indeterminate\"\n *ngIf=\"(isPending$ | async)\"\n ></mat-progress-bar>\n <mat-progress-bar mode=\"determinate\"\n *ngIf=\"pollingState.checked && !(isPending$ | async)\"\n [value]=\"(this.countdown$ | async)\"\n ></mat-progress-bar>\n </div>\n\n <div style=\"margin-top: 1rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onGetRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"(GET_error$ | async) as get_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ get_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"(GET$ | async) as dataRecord\">\n <!-- <div [innerHTML]=\"(GET$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">POST Request</h2>\n <div>\n <button mat-raised-button (click)=\"onCreateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"(POST_error$ | async) as post_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ post_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"(POST$ | async) as dataRecord\">\n <!-- <div [innerHTML]=\"(POST$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">PUT Request</h2>\n <div>\n <button mat-raised-button (click)=\"onUpdateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"(PUT_error$ | async) as put_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ put_error }}</mat-error>\n </div>\n\n <h3>Include Record ID in the RestPath</h3>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"(PUT$ | async) as dataRecord\">\n <!-- <div [innerHTML]=\"(PUT$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">DELETE Request</h2>\n <div>\n <button mat-raised-button (click)=\"onDeleteRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <h3>Include Record ID in the RestPath</h3>\n\n <div *ngIf=\"(DELETE_error$ | async) as delete_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ delete_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"(DELETE$ | async) as dataRecord\">\n <!-- <div [innerHTML]=\"(DELETE$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">Streaming GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onStreamRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <!-- <div *ngIf=\"(STREAM_error$ | async) as stream_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ stream_error }}</mat-error>\n </div> -->\n\n <div style=\"margin-top: 1rem;\">\n <div *ngIf=\"(STREAM$ | async) as data\" class=\"container\">\n <table mat-table [dataSource]=\"data\">\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> First Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"lastName\">\n <th mat-header-cell *matHeaderCellDef> Last Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.lastName}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"age\">\n <th mat-header-cell *matHeaderCellDef> Age </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.age}} </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n </div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1; padding-top: .5rem;\">AI -<span *ngIf=\"AIType === 1\">STREAMING</span> POST Request</h2>\n <div style=\"display: flex; gap: 1rem;\">\n <button mat-raised-button [matMenuTriggerFor]=\"menu\" style=\"min-width: 120px;\">\n <mat-icon>lan</mat-icon>\n <span *ngIf=\"AIType === 0; else LOCAL\">Server</span>\n <ng-template #LOCAL>\n Local\n </ng-template>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"onSelectAIType(0)\">Server</button>\n <button mat-menu-item (click)=\"onSelectAIType(1)\">Local</button>\n </mat-menu>\n <div>\n <button mat-raised-button (click)=\"onStreamPostRequest()\" class=\"btn\">Ask Me</button>\n </div>\n </div>\n </div>\n\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Ask me a Question</mat-label>\n <textarea matInput placeholder=\"Why is the sky blue?\" [formControl]=\"questionControl\"></textarea>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"(STREAM_AI_error$ | async) as stream_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ stream_error }}</mat-error>\n </div>\n\n <div *ngIf=\"AIType === 1; else ALTERNATIVE\" style=\"color: red;\">\n You must have Ollama active and the 'phi3:latest' model to use this feature.\n </div>\n <ng-template #ALTERNATIVE>\n <span style=\"color: gray;\">\n Define the RestPath to the API endpoint that will handle the AI request.\n Use: 'ai/chat' for server\n </span>\n </ng-template>\n\n <div>\n <div *ngIf=\"(STREAM_AI$ | async) as data\" style=\"margin-top: 1rem; font-size: 1.2rem; border-radius: 1rem; border: black 1px solid; padding: 2rem;\">\n <p style=\"margin-bottom: .5rem; white-space:pre-wrap; line-height: 1.6rem;\">{{data}}</p>\n </div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 1.5rem; margin-bottom: 1rem; line-height: 1.5rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div>\n <div style=\"display: flex;\">\n <h2 style=\"flex:1; margin-bottom: 0; padding-top: .5rem; display: flex;\">\n <div>\n Download File\n </div>\n <div style=\"flex:1; margin-left: 1rem;\">\n <mat-slide-toggle #disable>\n <span *ngIf=\"disable.checked; else DISABLE\">\n Enable\n </span>\n <ng-template #DISABLE>Disable</ng-template>\n </mat-slide-toggle>\n </div>\n </h2>\n <div>\n <app-file-downloader\n [disabled]=\"disable.checked\"\n [delayError]=\"3\"\n [apiRequest]=\"downloadRequest\"\n (completed)=\"onDownloadCompleted()\"\n (failed)=\"onDownloadFailed($event)\"\n ></app-file-downloader>\n </div>\n </div>\n </div>\n\n</div>\n","import { Injectable } from '@angular/core';\n\nimport { DataType, DatabaseStorage } from '../../../models';\nimport { HTTPManagerStateService, ApiRequest, RequestOptions } from '../../../services';\n\nimport { ClientInfo } from '../../request-manager-demo/models/sample-client-info';\nimport { ClientInfoMapper } from '../../request-manager-demo/models/sample-mapper-client-info';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StateManagerDemoService extends HTTPManagerStateService<any> {\n\n constructor() {\n super(\n ApiRequest.adapt({\n server: \"\",\n path: [],\n headers: {},\n adapter: ClientInfo.adapt,\n mapper: ClientInfoMapper.adapt,\n stream: false,\n }),\n DataType.ARRAY,\n DatabaseStorage.adapt()\n )\n }\n\n setAPIOptions(apiOptions: ApiRequest, dataType: DataType, database?: DatabaseStorage) {\n this.setApiRequestOptions(apiOptions, dataType, database)\n }\n\n getClients() {\n\n // const headers = {\n // auth: \"sample-auth-token\"\n // }\n // const sampleOptions = RequestOptions.adapt({ path: [\"id\", 12], headers, sample: true })\n this.fetchRecords()\n\n }\n\n createClient(data: any) {\n\n // const headers = {\n // auth: \"sample-auth-token\"\n // }\n\n // const sampleOptions = RequestOptions.adapt({ path: [\"id\", 12], headers, sample: true })\n this.createRecord(data)\n\n }\n\n updateClient(data: ClientInfo) {\n\n // const headers = {\n // auth: \"sample-auth-token\"\n // }\n data.id = 1031\n const sampleOptions = RequestOptions.adapt({ path: [data.id] })\n this.updateRecord(data, sampleOptions)\n\n }\n\n deleteClient(data: ClientInfo) {\n\n // const headers = {\n // auth: \"sample-auth-token\"\n // }\n\n data.id = 1031\n const sampleOptions = RequestOptions.adapt({ path: [data.id] })\n this.deleteRecord(sampleOptions)\n\n }\n\n streamRequest() {\n\n const headers = {\n auth: \"sample-auth-token\"\n }\n\n // const sampleOptions = RequestOptions.adapt({ path: [1], headers })\n this.fetchStream()\n\n }\n\n}\n","import { Component, OnInit, ViewChild, inject } from '@angular/core';\n\nimport { StateManagerDemoService } from './services/state-manager-demo.service';\nimport { FormBuilder, Validators, FormArray } from '@angular/forms';\n\nimport { Observable, BehaviorSubject, EMPTY, map, tap, catchError, throwError } from 'rxjs';\n\nimport { ClientInfo } from '../request-manager-demo/models/sample-client-info';\nimport { ClientInfoMapper } from '../request-manager-demo/models/sample-mapper-client-info';\nimport { AIPrompt } from '../request-manager-demo/models/sample-ai-prompt';\n\nimport { DataType } from '../../models';\nimport { DatabaseStorage } from '../../models/database-storage.model';\nimport { HTTPManagerService, ApiRequest } from '../../services';\n\n\n@Component({\n selector: 'app-request-manager-state-demo',\n templateUrl: './request-manager-state-demo.component.html',\n styleUrls: ['./request-manager-state-demo.component.scss'],\n})\nexport class RequestManagerStateDemoComponent implements OnInit {\n\n stateManagerDemoService = inject(StateManagerDemoService)\n\n displayedColumns = ['id','name', 'lastName', 'age']\n\n selectedRecord$?: Observable<ClientInfo|null>\n\n fb = inject(FormBuilder)\n\n httpManagerService = inject(HTTPManagerService)\n\n isPending$ = this.stateManagerDemoService.isPending$\n error$ = this.stateManagerDemoService.error$\n\n countdown$ = this.httpManagerService.countdown$\n\n GET_error$ = new BehaviorSubject<string>('')\n POST_error$ = new BehaviorSubject<string>('')\n PUT_error$ = new BehaviorSubject<string>('')\n DELETE_error$ = new BehaviorSubject<string>('')\n\n STREAM_error$ = new BehaviorSubject<string>('')\n STREAM_AI_error$ = new BehaviorSubject<string>('')\n\n GET$ = new BehaviorSubject<any>(null)\n POST$ = new BehaviorSubject(null)\n PUT$ = new BehaviorSubject(null)\n DELETE$ = new BehaviorSubject(null)\n\n STREAM = new BehaviorSubject(null)\n STREAM$ = this.STREAM.asObservable()\n\n STREAM_AI = new BehaviorSubject<{response: string}[]>([])\n STREAM_AI$ = this.STREAM_AI.asObservable()\n .pipe(\n map((items: any) => (items) ? items.map((item: any) => item.response) : []),\n map((items: any) => items.join('\\n').trim()),\n )\n\n @ViewChild(\"failedState\", { static: true }) failedState: any\n @ViewChild(\"pollingState\", { static: true }) pollingState: any\n\n questionControl = this.fb.control(\"\", [Validators.required])\n\n requestType = ''\n\n prompts: string[] = []\n\n AIType = 0\n\n get dataObservable$() {\n\n switch (this.requestType) {\n case 'GET':\n return this.GET$\n\n case 'PUT':\n return this.PUT$\n\n case 'POST':\n return this.POST$\n\n case 'DELETE':\n return this.DELETE$\n\n case 'STREAM':\n return this.STREAM\n\n case 'STREAM_AI':\n return this.STREAM_AI\n\n default:\n return this.GET$\n break;\n }\n\n }\n\n sampleClientData = {\n id: 0,\n name: \"Old School Dates\",\n domain: \"osd.com\",\n service: \"osd\",\n spiffe: \"osd.com/osd\",\n secret: \"SMOPECXP-OS4P-USOG-X2II-3XMD1FQDR3IJX\",\n created: 1693003138,\n modified: 1693003138,\n icon: \"\",\n imageFile: \"\",\n }\n\n selectedRecord = this.fb.control(null)\n\n requestForm = this.fb.group({\n datatype: this.fb.control('ARRAY'),\n path: this.fb.control<string>(\"ai/\"),\n headers: this.fb.array([]),\n adapter: [null],\n mapper: [null],\n retry: this.fb.group({\n times: [3],\n delay: [3],\n }),\n polling: [3],\n database: this.fb.group({\n table: [''],\n expiresIn: ['1m'],\n })\n })\n\n get hasChanged() {\n return this.requestForm.dirty || this.requestForm.untouched\n }\n\n get dataType() {\n return this.requestForm.get(\"datatype\")?.value\n }\n\n get database() {\n return this.requestForm.get(\"database\")?.value\n }\n\n get retry() {\n return this.requestForm.get(\"retry\")?.value\n }\n\n sampleAdaptors = [\n { label: \"ClientInfo Basic\", value: ClientInfo.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n sampleMappers = [\n { label: \"Mapper Basic\", value: ClientInfoMapper.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n get headers(): FormArray {\n return this.requestForm.get('headers') as FormArray\n }\n\n get isValid() {\n this.requestForm.markAllAsTouched()\n return this.requestForm.valid\n }\n\n // server = `http://sample-endpoint/as/authorization.oauth2`\n\n arrayObjectsToObjects = (arr: any[]) => {\n return Array.isArray(arr) ? arr.reduce((obj, item) => Object.assign(obj, { [item.key]: item.value }), {}) : {}\n }\n\n props = (adapter: any) => {\n return (adapter) ? adapter() : null\n }\n\n constructor() { }\n\n ngOnInit() {\n\n this.stateManagerDemoService.data$.pipe(\n tap((data) => console.log(\"API STREAM_AI response\", data)),\n )\n\n this.error$.pipe(\n tap((data) => {\n debugger\n console.log(\"API STREAM response\", data)\n }),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'STREAM'))\n })\n )\n\n this.selectedRecord.valueChanges\n .subscribe((data: ClientInfo|null) => {\n this.selectedRecord$ = (data) ? this.stateManagerDemoService.selectRecord$(data.id) : EMPTY\n })\n\n this.stateManagerDemoService.data$\n .pipe(\n tap((data: any) => {\n\n switch (this.requestType) {\n case 'GET':\n this.GET$.next(data)\n break;\n\n case 'PUT':\n this.PUT$.next(data)\n break;\n\n case 'POST':\n this.POST$.next(data)\n break;\n\n case 'DELETE':\n this.DELETE$.next(data)\n break;\n\n case 'STREAM':\n this.STREAM.next(data)\n break;\n\n case 'STREAM_AI':\n this.STREAM_AI.next(data)\n break;\n\n default:\n break;\n }\n\n })\n ).subscribe()\n\n }\n\n addHeader() {\n const header = this.fb.group({\n key: ['', Validators.required],\n value: ['']\n });\n this.headers.push(header)\n }\n\n removeHeader(index: number) {\n this.headers.removeAt(index)\n }\n\n compileRequest() {\n\n const requestParams = this.requestForm.value\n\n requestParams.headers = this.arrayObjectsToObjects(\n requestParams.headers || []\n )\n\n const pathReq = (requestParams.path === \"\") ? [] : (requestParams.path || \"\").split(\"/\")\n\n if (!this.pollingState.checked) requestParams.polling = 0\n\n if (!this.failedState.checked) {\n requestParams.retry = { times: 0,delay: 0 }\n }\n\n const currentOptions = ApiRequest.adapt(requestParams)\n currentOptions.path = []\n const apiOptions = ApiRequest.adapt({ ...currentOptions, path: pathReq })\n\n return { apiOptions: apiOptions, path: pathReq }\n\n }\n\n onSetStateOptions() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n const db = DatabaseStorage.adapt(this.database)\n const type = this.dataType === \"ARRAY\" ? DataType.ARRAY : DataType.OBJECT\n this.stateManagerDemoService.setAPIOptions(reqParams.apiOptions, type, db)\n\n this.requestForm.markAsPristine()\n }\n\n onClearRecords() {\n this.stateManagerDemoService.clearRecords()\n }\n\n onRefreshRecords() {\n this.stateManagerDemoService.refreshData()\n }\n\n onGetRequest() {\n this.requestType = 'GET'\n this.stateManagerDemoService.getClients()\n }\n\n onCreateRequest() {\n this.requestType = 'POST'\n this.stateManagerDemoService.createClient(this.sampleClientData)\n }\n\n onUpdateRequest() {\n this.requestType = 'PUT'\n this.stateManagerDemoService.updateClient(this.sampleClientData)\n }\n\n onDeleteRequest() {\n this.requestType = 'DELETE'\n this.stateManagerDemoService.deleteClient(this.sampleClientData)\n }\n\n onStreamRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n reqParams.apiOptions.stream = true\n\n this.requestType = 'STREAM'\n\n this.stateManagerDemoService.streamRequest()\n\n }\n\n errorHandling(err: any, type: string) { console.log(err, type)\n if(type === 'GET') this.GET_error$.next(err.message)\n if(type === 'POST') this.POST_error$.next(err.message)\n if(type === 'PUT') this.PUT_error$.next(err.message)\n if(type === 'DELETE') this.DELETE_error$.next(err.message)\n if(type === 'STREAM') this.STREAM_error$.next(err.message)\n if(type === 'STREAM_AI') this.STREAM_AI_error$.next(err.message)\n }\n\n onSelectAIType(type: number) {\n this.AIType = type\n }\n\n onClearHistory() {\n this.prompts = []\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <h2>\n HTTP Request State Manager\n </h2>\n\n <div [formGroup]=\"requestForm\" style=\"margin-top: 2rem;\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>State Data Type</mat-label>\n <mat-select formControlName=\"datatype\">\n <mat-option value=\"ARRAY\">Array</mat-option>\n <mat-option value=\"OBJECT\">Object</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Adapter (Model)</mat-label>\n <mat-select formControlName=\"adapter\" #adapterSelect>\n <mat-option>None</mat-option>\n <mat-option *ngFor=\"let adapter of sampleAdaptors\" [value]=\"adapter.value\">\n {{adapter.label}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mapper (Model)</mat-label>\n <mat-select formControlName=\"mapper\" #mapperSelect>\n <mat-option>None</mat-option>\n <mat-option *ngFor=\"let mapper of sampleMappers\" [value]=\"mapper.value\">\n {{mapper.label}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div style=\"display: flex; margin-bottom: 2rem;\" *ngIf=\"adapterSelect.value || mapperSelect.value\">\n <div style=\"flex:1\" class=\"box\">\n <h3>Adapter (Incoming)</h3>\n <div *ngIf=\"adapterSelect.value; else NO_ADAPTER\">\n {{ props(adapterSelect.value) | json }}\n </div>\n <ng-template #NO_ADAPTER>No Transformation</ng-template>\n </div>\n <div style=\"flex:1\" class=\"box\">\n <h3>Mapper (Outgoing)</h3>\n <div *ngIf=\"mapperSelect.value; else NO_MAPPER\">\n {{ props(mapperSelect.value) | json }}\n </div>\n <ng-template #NO_MAPPER>No Transformation</ng-template>\n </div>\n </div>\n\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>RestPath (/ delimited)</mat-label>\n <input matInput placeholder=\"clients/list\" formControlName=\"path\">\n </mat-form-field>\n </div>\n <div>\n <div formArrayName=\"headers\">\n <div *ngFor=\"let task of headers.controls; let i = index\" [formGroupName]=\"i\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Key</mat-label>\n <input matInput placeholder=\"authentication\" formControlName=\"key\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Value</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"value\">\n </mat-form-field>\n <div style=\"margin-top: .5rem;\">\n <button mat-icon-button (click)=\"removeHeader(i)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n <button mat-stroked-button (click)=\"addHeader()\">Add Header</button>\n </div>\n <div style=\"margin-top: 2rem; display: flex; flex-direction:column; gap: 1rem;\">\n <div>\n <mat-slide-toggle #failedState>Retry on Failed</mat-slide-toggle>\n <div *ngIf=\"failedState.checked\" style=\"display: flex; gap: .5rem; margin-top: 1rem;\" formGroupName=\"retry\">\n <mat-form-field appearance=\"outline\">\n <mat-label>#of Times</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"times\" value=\"3\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Delay Until Next</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"delay\" value=\"3\">\n </mat-form-field>\n </div>\n </div>\n <div>\n <mat-slide-toggle #pollingState>Polling</mat-slide-toggle>\n <div *ngIf=\"pollingState.checked\">\n <mat-form-field appearance=\"outline\" style=\"margin-top: 1rem\">\n <mat-label>#of Seconds</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"polling\" value=\"3\">\n </mat-form-field>\n </div>\n </div>\n <div>\n <mat-slide-toggle #DBState>Database Storage</mat-slide-toggle>\n <div *ngIf=\"DBState.checked\" style=\"display: flex; gap: .5rem; margin-top: 1rem\" formGroupName=\"database\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Table Name</mat-label>\n <input matInput placeholder=\"table\" formControlName=\"table\" value=\"\">\n </mat-form-field>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Expires In</mat-label>\n <mat-select formControlName=\"expiresIn\">\n <mat-option value=\"1m\">One Minute</mat-option>\n <mat-option value=\"1h\">One Hour</mat-option>\n <mat-option value=\"1d\">One Day</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n <div style=\"margin-top: 1rem; display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onSetStateOptions()\" [disabled]=\"!hasChanged\">\n Set API Request Options\n </button>\n </div>\n <div>\n <mat-error *ngIf=\"(error$ | async) as error\">\n {{ error }}\n </mat-error>\n </div>\n </div>\n </div>\n\n <div style=\"margin-bottom: 1rem; margin-top: 2rem;\">\n <mat-progress-bar mode=\"indeterminate\"\n *ngIf=\"(isPending$ | async)\"\n ></mat-progress-bar>\n <div *ngIf=\"pollingState.checked\">\n <mat-progress-bar mode=\"determinate\"\n *ngIf=\"!(isPending$ | async) && (this.countdown$ | async) || -1 > 0\"\n [value]=\"(this.countdown$ | async)\"\n ></mat-progress-bar>\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\" *ngIf=\"(GET$ | async) as data\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1;\">CURRENT STATE ({{ dataType }})</h2>\n </div>\n <div *ngIf=\"data.length > 1\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Records</mat-label>\n <mat-select [formControl]=\"selectedRecord\" [disabled]=\"data === null && data?.length === 0\">\n <mat-option [value]=\"\">None</mat-option>\n <mat-option *ngFor=\"let item of data\" [value]=\"item\">\n {{item.name || (item.first_name) | titlecase}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div *ngIf=\"(dataObservable$ | async) as dataRecord\">\n <div *ngIf=\"(selectedRecord$ | async) as record; else NO_RECORD\">\n {{ record | json }}\n </div>\n <ng-template #NO_RECORD>No Record Selected from State</ng-template>\n\n </div>\n <div style=\"margin-top: 1rem;\">\n <span *ngIf=\"data !== null && data?.length > 0; else NO_DATA\">\n State contains a Total of {{ data.length }} Records\n </span>\n <ng-template #NO_DATA>No Records</ng-template>\n <div style=\"display: flex; gap: .5rem; text-align: end; justify-content: flex-end;\">\n <button class=\"btn\" mat-stroked-button (click)=\"onClearRecords()\">Clear</button>\n <button class=\"btn\" mat-stroked-button (click)=\"onRefreshRecords()\" [disabled]=\"hasChanged\">Refresh</button>\n </div>\n </div>\n </div>\n\n\n\n\n <div style=\"margin-top: 1rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">GET Request ({{ dataType }})</h2>\n <div>\n <button mat-raised-button (click)=\"onGetRequest()\" [disabled]=\"hasChanged\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"(GET_error$ | async) as get_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ get_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(GET$ | async) | jsonv\"></div> -->\n <div *ngIf=\"(GET$ | async) as getData\">{{ getData | json }}</div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">POST Request</h2>\n <div>\n <button mat-raised-button (click)=\"onCreateRequest()\" [disabled]=\"hasChanged\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"(POST_error$ | async) as post_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ post_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(POST$ | async) | jsonv\"></div> -->\n <div *ngIf=\"(POST$ | async) as postData\">{{ postData | json }}</div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">PUT Request</h2>\n <div>\n <button mat-raised-button (click)=\"onUpdateRequest()\" [disabled]=\"hasChanged\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"(PUT_error$ | async) as put_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ put_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(PUT$ | async) | jsonv\"></div> -->\n <div *ngIf=\"(PUT$ | async) as putData\">{{ putData | json }}</div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">DELETE Request</h2>\n <div>\n <button mat-raised-button (click)=\"onDeleteRequest()\" [disabled]=\"hasChanged\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"(DELETE_error$ | async) as delete_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ delete_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(DELETE$ | async) | jsonv\"></div> -->\n <div *ngIf=\"(DELETE$ | async) as deleteData\">{{ deleteData | json }}</div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">Streaming GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onStreamRequest()\" class=\"btn\" [disabled]=\"hasChanged\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"(STREAM_error$ | async) as stream_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ stream_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <div *ngIf=\"(STREAM$ | async) as data\" class=\"container\">\n <table mat-table [dataSource]=\"data\">\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> First Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"lastName\">\n <th mat-header-cell *matHeaderCellDef> Last Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.lastName}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"age\">\n <th mat-header-cell *matHeaderCellDef> Age </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.age}} </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n </div>\n </div>\n\n </div>\n\n</div>\n","import { Component, Inject, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { LocalStorageManagerService, SettingOptions, StorageOption, StorageType } from '../../services/local-storage-manager-service';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { BehaviorSubject, EMPTY, Observable, of } from 'rxjs';\nimport { ConfigOptions, LocalStorageOptions, UtilsService } from '../../services';\nimport { switchMap, tap, map } from 'rxjs/operators';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\n\n@Component({\n selector: 'app-local-storage-demo',\n templateUrl: './local-storage-demo.component.html',\n styleUrls: ['./local-storage-demo.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class LocalStorageDemoComponent implements OnInit {\n\n fb = inject(FormBuilder)\n utils = inject(UtilsService)\n\n type$ = new BehaviorSubject(StorageType.GLOBAL)\n get type() {\n return (this.typeControl.value) ? +this.typeControl.value : 0\n }\n\n typeControl = this.fb.control(StorageType.GLOBAL.toString())\n\n localStorageManagerService = inject(LocalStorageManagerService)\n\n settings$: Observable<any> = this.localStorageManagerService.settings$\n\n setting$ = (store: string) => this.localStorageManagerService.setting$(store)\n\n storageForm = this.fb.group({\n store: this.fb.control<string|null>(null),\n type: 'local',\n settingType: 'local',\n encrypted: false,\n data: this.fb.control<string>('', Validators.required),\n })\n\n newStoreForm = this.fb.group({\n name: this.fb.control<string|null>(null, Validators.required),\n storage: 'local',\n encrypted: false,\n data: this.fb.control<string>('', Validators.required),\n expiresIn: this.fb.control('0')\n })\n\n store$?: Observable<any>\n\n storeData$ = this.storageForm.get('store')?.valueChanges\n .pipe(\n switchMap((data: any) => {\n return data\n ? this.localStorageManagerService.store$(data.name)\n : of('')\n }),\n tap(data => {\n this.storageForm.get('data')?.patchValue(data, { emitEvent: false })\n })\n )\n\n expiresIn = (epoch: number) => this.utils.expiresIn(epoch)\n\n get isValid() {\n return this.newStoreForm.valid\n }\n\n get isValidData() {\n return this.storageForm.valid\n }\n\n isValidJSON = (str: string) => {\n try {\n JSON.parse(str)\n return true\n } catch (e) {\n return false\n }\n }\n\n displayedColumns: string[] = ['name', 'id', 'encrypted', 'expires', \"option\"];\n\n filterData = (values: SettingOptions[]) => {\n if(!values) return []\n return values.filter((item: any) => item.options.storage === +this.type)\n }\n\n data$?: Observable<any>\n\n store: any\n\n create = false\n\n storeProps?: LocalStorageOptions\n options?: SettingOptions\n\n constructor(@Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) { }\n\n ngOnInit() {\n\n this.storeProps = this.configOptions?.LocalStorageOptions\n this.options = this.storeProps?.options\n\n if(this.options?.storage) {\n this.typeControl.patchValue(this.options.storage.toString())\n this.typeControl.disable()\n } else {\n this.typeControl.enable()\n }\n\n if(this.options?.expiresIn) {\n this.newStoreForm.get('expiresIn')?.patchValue(this.options.expiresIn)\n this.newStoreForm.get('expiresIn')?.disable()\n } else {\n this.newStoreForm.get('expiresIn')?.enable()\n }\n\n if(this.options?.encrypted) {\n this.newStoreForm.get('encrypted')?.patchValue(this.options.encrypted)\n this.newStoreForm.get('encrypted')?.disable()\n } else {\n this.newStoreForm.get('encrypted')?.enable()\n }\n\n }\n\n onCreateStore() {\n\n if(!this.isValid) return\n\n const store = this.newStoreForm.value\n if(!store.name || store.name === '') return\n\n const options = { storage: this.type, encrypted: store.encrypted, expiresIn: store.expiresIn }\n\n this.localStorageManagerService.createStore({\n name: store.name,\n data: store.data,\n options: SettingOptions.adapt(options)\n })\n\n this.newStoreForm.reset()\n this.create = false\n }\n\n onUpdateStore(store: any) {\n\n if(!this.storageForm.valid) return\n\n const storeData = this.storageForm.value\n\n const data = JSON.parse(storeData.data || '')\n\n const type = (storeData.type === 'local') ? StorageType.GLOBAL : StorageType.SESSION\n\n this.localStorageManagerService.updateStore({\n name: store.name,\n data\n })\n\n }\n\n onSelectedRow(store: any) {\n this.store = store\n this.data$ = this.localStorageManagerService.store$(store.name).pipe(map(item => JSON.stringify(item)))\n this.create = false\n }\n\n onCreate() {\n this.onCancel()\n this.create = true\n }\n\n onDelete(store: StorageOption) {\n\n this.localStorageManagerService.deleteStore({\n name: store.name,\n })\n\n this.onCancel()\n }\n\n onCancel() {\n this.data$ = EMPTY\n this.store = null\n this.create = false\n }\n\n onUpdate(store: StorageOption, data: any) {\n\n this.localStorageManagerService.updateStore({\n name: store.name,\n data: JSON.parse(data)\n })\n\n this.onCancel()\n\n }\n\n onReset() {\n this.localStorageManagerService.resetStore()\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <div style=\"display: flex; gap: 1rem\">\n <h2 style=\"padding-top: .5rem; display: flex;\">\n <div style=\"padding-top: .5rem;\">Local Storage Manager</div>\n <div>\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon>info</mat-icon>\n </button>\n </div>\n </h2>\n <span style=\"flex:1\"></span>\n <div style=\"padding-top: .25rem;\">\n <mat-button-toggle-group name=\"storage\" [formControl]=\"typeControl\" (change)=\"onCancel()\">\n <mat-button-toggle value=\"0\">Local Storage</mat-button-toggle>\n <mat-button-toggle value=\"1\">Session Storage</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n <div style=\"margin-top: .25rem;\">\n <button mat-icon-button (click)=\"onCreate()\">\n <mat-icon>add</mat-icon>\n </button>\n </div>\n </div>\n\n <ng-container *ngIf=\"storeProps?.storageName || storeProps?.storageSettingsName\">\n <div style=\"display: flex; gap: .5rem; flex-direction: column; border: gray solid thin; background-color: whitesmoke; padding: 1rem;\"\n >\n <div style=\"display: flex;\">\n <div *ngIf=\"storeProps?.storageSettingsName\" style=\"flex:1\">\n Database: <b>{{ storeProps?.storageSettingsName }}</b>\n </div>\n <div *ngIf=\"storeProps?.storageName\" style=\"flex:1\">\n Data: <b>{{ storeProps?.storageName }}</b>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div style=\"margin-top: 2rem;\" [formGroup]=\"newStoreForm\" *ngIf=\"create; else LIST\">\n\n <h2>Create Store</h2>\n\n <div style=\"display: flex; gap: 1rem;\">\n <div style=\"flex:1\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Store Name</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"name\">\n </mat-form-field>\n </div>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Expires In...</mat-label>\n <mat-select formControlName=\"expiresIn\">\n <mat-option value=\"0\">None</mat-option>\n <mat-option value=\"30s\">30 Seconds</mat-option>\n <mat-option value=\"1mn\">1 Minute</mat-option>\n <mat-option value=\"1hr\">1 Hour</mat-option>\n <mat-option value=\"1d\">1 Day</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"margin-top: 1rem;\">\n <mat-slide-toggle formControlName=\"encrypted\">Encrypted</mat-slide-toggle>\n </div>\n </div>\n\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex: 1;\">\n <mat-label>Data (Must be an Object or Array of any)</mat-label>\n <textarea matInput placeholder=\"[]\" formControlName=\"data\" #json></textarea>\n </mat-form-field>\n </div>\n <mat-error *ngIf=\"!isValidJSON(json.value)\">Not Valid Data</mat-error>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onCreateStore()\" [disabled]=\"!(isValid && isValidJSON(json.value))\">\n Save Store\n </button>\n </div>\n\n </div>\n\n <ng-template #LIST>\n\n <div style=\"margin-top: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n{{ settings$ | async | json }}\n <div *ngIf=\"filterData(settings$ | async) as data\">\n <ng-container *ngIf=\"data.length > 0; else NO_DATA\">\n <table mat-table [dataSource]=\"data\">\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> Store </th>\n <td mat-cell *matCellDef=\"let element\" style=\"font-weight: bold; text-transform: uppercase;\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"encrypted\">\n <th mat-header-cell *matHeaderCellDef style=\"text-align: center;\"> Encrypted </th>\n <td mat-cell *matCellDef=\"let element\" style=\"text-align: center;\">\n <ng-container *ngIf=\"element.options.encrypted; else NO\">YES</ng-container>\n <ng-template #NO><span style=\"color:gray\">NO</span></ng-template>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"expires\">\n <th mat-header-cell *matHeaderCellDef style=\"text-align: center;\"> Expires </th>\n <td mat-cell *matCellDef=\"let element\" style=\"text-align: center;\">\n <ng-container *ngIf=\"element.options.expires !== 0; else NO_DATA\">\n {{expiresIn(element.options.expires)}}\n </ng-container>\n <ng-template #NO_DATA>\n ∞\n </ng-template>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"option\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell *matCellDef=\"let element\" style=\"padding-right: 0;\">\n <div style=\"display: flex;justify-content: flex-end;\">\n <button mat-icon-button color=\"warn\" (click)=\"onDelete(element); $event.stopPropagation()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" (click)=\"onSelectedRow(row)\"></tr>\n </table>\n </ng-container>\n\n <ng-template #NO_DATA>\n <h3 style=\"margin-top: 1rem;\">No Data</h3>\n </ng-template>\n\n <div *ngIf=\"(data$ | async) as data\" style=\"margin-top: 2rem;\">\n <div style=\"margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <h3>STORE: <span style=\"font-weight: bold;\">{{ store.name | uppercase }}</span></h3>\n <h3>SETTINGS: {{ setting$(store.name) | async | json }}</h3>\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex: 1;\">\n <mat-label>Data (Must be an Object or Array of any)</mat-label>\n <textarea matInput placeholder=\"[]\" #json [value]=\"data\"></textarea>\n </mat-form-field>\n </div>\n <mat-error *ngIf=\"!isValidJSON(json.value)\">Not Valid Data</mat-error>\n\n <div style=\"display: flex; gap: .5rem;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onCancel()\">Cancel</button>\n <button mat-stroked-button (click)=\"onUpdate(store, json.value)\" [disabled]=\"!(isValidJSON(json.value))\">Update</button>\n </div>\n </div>\n </div>\n\n </ng-template>\n\n <div style=\"margin-top: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <button mat-stroked-button (click)=\"onReset()\">Delete All Stores</button>\n </div>\n\n</div>\n\n\n<mat-menu #menu=\"matMenu\">\n <div style=\"padding: 1rem;\">\n <p>Please note that the LocalStorage (encryption) and management of data is dependant on initializing the APP_ID</p>\n <p>Must provide a value for <b>APP_ID</b> in AppModule->Providers</p>\n <mat-divider></mat-divider>\n <div style=\"font-size: smaller; margin-top: .5rem;\">\n <p>Example: UUID (self.crypto.randomUUID() to generate)</p>\n <div style=\"background-color: whitesmoke; padding: 1rem;\">\n {<br>\n provide: APP_ID,<br>\n useValue: \"056991ac-3537-43ab-b5b9-83edf6554eff\",<br>\n }\n </div>\n </div>\n </div>\n</mat-menu>\n","import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\nimport { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\nexport const PROXY_CONFIG = new InjectionToken<Record<string, any>>('PROXY_CONFIG');\n\n@Injectable()\nexport class ProxyDebuggerInterceptor implements HttpInterceptor {\n\n constructor(@Optional() @Inject(PROXY_CONFIG) private proxyConfig: Record<string, any>) {}\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n if (!this.proxyConfig) {\n return next.handle(req);\n }\n\n const headers = req.headers.keys().reduce((acc, key) => {\n acc[key] = req.headers.get(key) || '';\n return acc;\n }, {} as Record<string, string>);\n\n for (const proxyPath in this.proxyConfig) {\n if (this.proxyConfig.hasOwnProperty(proxyPath)) {\n const proxyDetails = this.proxyConfig[proxyPath];\n const regex = new RegExp('^' + proxyPath.replace('/', '').replace('*', '(.*)'));\n\n if (regex.test(req.url)) {\n const target = proxyDetails.target;\n const endpoint = req.url.replace(regex, '$1');\n const actualPath = target + '/' + endpoint;\n\n console.log('Request Proxied:', {\n requestUrl: req.url,\n requestPayload: req.body,\n headers: headers,\n proxyPath: proxyPath,\n actualPath: actualPath,\n });\n }\n }\n }\n\n return next.handle(req);\n }\n}\n","export interface ClientInfoInterface {\n domain: string\n service: string\n id: number\n name: string\n}\n\nexport class ClientInfo implements ClientInfoInterface {\n\n constructor(\n public domain = '',\n public service = '',\n public id = 0,\n public name = '',\n ) {}\n\n static adapt(item?: any): ClientInfo {\n\n return new ClientInfo(\n item?.domain,\n item?.service,\n item?.id,\n (item?.first_name || item?.last_name) ? `${item?.first_name} ${item?.last_name}` : '',\n )\n\n }\n\n}\n\n\n","export interface ClientInfoMapperInterface {\n id: number\n first_name: string\n last_name: string\n email: string\n}\n\nexport class ClientInfoMapper implements ClientInfoMapperInterface {\n\n constructor(\n public id = 0,\n public first_name = '',\n public last_name = '',\n public email = '',\n ) {}\n\n static adapt(item?: any): ClientInfoMapper {\n\n const first_name = (item?.name) ? item.name.split(' ')[0] : ''\n const last_name = (item?.name) ? item.name.split(' ')[1] : ''\n\n return new ClientInfoMapper(\n item?.id,\n first_name,\n last_name,\n item?.email,\n )\n\n }\n\n}\n\n\n","export interface AIPromptInterface {\n response: string\n}\n\nexport class AIPrompt implements AIPromptInterface {\n\n constructor(\n public response = '',\n ) {}\n\n static adapt(item?: any): AIPrompt {\n\n return new AIPrompt(\n item?.response,\n )\n\n }\n\n}\n","import { Component, OnInit, ViewChild, inject } from '@angular/core'\n\nimport { FormArray, FormBuilder, Validators } from '@angular/forms'\n\nimport { ClientInfo } from './models/sample-client-info'\nimport { ClientInfoMapper } from './models/sample-mapper-client-info'\nimport { AIPrompt } from './models/sample-ai-prompt'\nimport { ApiRequest, HTTPManagerSignalsService } from '../..'\n\nimport { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display'\n\n@Component({\n selector: 'app-request-signals-manager-demo',\n templateUrl: './request-signals-manager-demo.component.html',\n styleUrls: ['./request-signals-manager-demo.component.scss'],\n})\nexport class RequestSignalsManagerDemoComponent implements OnInit {\n\n displayedColumns = ['id','name', 'lastName', 'age']\n\n private fb = inject(FormBuilder)\n private toastMessage = inject(ToastMessageDisplayService)\n\n httpManagerSignalsService = inject(HTTPManagerSignalsService)\n\n // Using signals service: signals are callable in templates (e.g. isPending())\n isPending = this.httpManagerSignalsService.isPending\n countdown = this.httpManagerSignalsService.countdown\n\n // per-operation plain results and error messages (no rxjs in component)\n GET_result: any = null\n POST_result: any = null\n PUT_result: any = null\n DELETE_result: any = null\n\n STREAM_result: any = null\n STREAM_AI_result: any = null\n\n GET_error: string = ''\n POST_error: string = ''\n PUT_error: string = ''\n DELETE_error: string = ''\n STREAM_error: string = ''\n STREAM_AI_error: string = ''\n\n requestParams = {\n GET: ApiRequest.adapt(),\n POST: ApiRequest.adapt(),\n PUT: ApiRequest.adapt(),\n DELETE: ApiRequest.adapt(),\n STREAM: ApiRequest.adapt(),\n }\n\n @ViewChild(\"failedState\", { static: true }) failedState: any\n @ViewChild(\"pollingState\", { static: true }) pollingState: any\n\n questionControl = this.fb.control(\"\", [Validators.required])\n\n downloadRequest = ApiRequest.adapt({\n server: 'assets/images',\n path: ['me.jpg'],\n // saveAs: 'john.jpg' // Optional\n })\n\n // downloadRequest = ApiRequest.adapt({\n // server: 'oidc/ai/file'\n // })\n\n sampleClientData = {\n id: 0,\n name: \"Old School Dates\",\n domain: \"osd.com\",\n service: \"osd\",\n spiffe: \"osd.com/osd\",\n secret: \"SMOPECXP-OS4P-USOG-X2II-3XMD1FQDR3IJX\",\n created: 1693003138,\n modified: 1693003138,\n icon: \"\",\n imageFile: \"\",\n email: \"wavecoders@gmail.com\"\n }\n\n requestForm = this.fb.group({\n path: this.fb.control<string>(\"ai/\"),\n headers: this.fb.array([]),\n adapter: [null],\n mapper: [null],\n retry: this.fb.group({\n times: [3],\n delay: [3],\n }),\n polling: [3],\n })\n\n AIType = 0\n\n sampleAdaptors = [\n { label: \"ClientInfo Basic\", value: ClientInfo.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n sampleMappers = [\n { label: \"Mapper Basic\", value: ClientInfoMapper.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n get retry() {\n return this.requestForm.get('retry')?.value\n }\n\n get headers(): FormArray {\n return this.requestForm.get('headers') as FormArray\n }\n\n get isValid() {\n this.requestForm.markAllAsTouched()\n return this.requestForm.valid\n }\n\n hasId = (arr: any[]) => {\n if (arr.length === 0) return false\n return !isNaN(arr[arr.length - 1])\n }\n\n props = (adapter: any) => {\n return (adapter) ? adapter() : null\n }\n\n // server = `http://sample-endpoint/as/authorization.oauth2`\n\n arrayObjectsToObjects = (arr: any[]) => {\n return Array.isArray(arr) ? arr.reduce((obj, item) => Object.assign(obj, { [item.key]: item.value }), {}) : {}\n }\n\n constructor() { }\n\n ngOnInit() {\n\n // const reqGet2 = ApiRequest.adapt({\n // server,\n // path: ['clients'],\n // headers: { authentication: \"Bearer <KEY>\" },\n // adapter: ClientInfo,\n // dataType: DataType.OBJECT,\n // // concurrent: false,\n // // polling: 3, //seconds\n // })\n\n // const req2 = [1024,1025,1026].map(item => {\n // return this.httpManagerService.getRequest<ClientInfo[]>(reqGet2, [item])\n // .pipe(\n // catchError(error => {\n // return throwError(() => new Error(error.error.message))\n // })\n // )\n // })\n\n // forkJoin(req2)\n // .subscribe(res => console.log(res))\n\n }\n\n addHeader() {\n const header = this.fb.group({\n key: ['', Validators.required],\n value: ['']\n })\n this.headers.push(header)\n }\n\n removeHeader(index: number) {\n this.headers.removeAt(index)\n }\n\n compileRequest() {\n\n const requestParams = this.requestForm.value\n\n requestParams.headers = this.arrayObjectsToObjects(\n requestParams.headers || []\n )\n\n const pathReq = (requestParams.path === \"\") ? [] : (requestParams.path || \"\").split(\"/\")\n\n if (!this.pollingState.checked) requestParams.polling = 0\n\n if (!this.failedState.checked) {\n requestParams.retry = { times: 0,delay: 0 }\n }\n\n const apiOptions = ApiRequest.adapt(requestParams)\n apiOptions.path = []\n\n return { apiOptions: apiOptions, path: pathReq }\n\n }\n\n onGetRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n this.requestParams.GET = reqParams.apiOptions\n\n // reset local state\n this.GET_result = null\n this.GET_error = ''\n\n this.httpManagerSignalsService.getRequest<ClientInfo[]>(reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.GET_result = res,\n error: (err) => this.errorHandling(err, 'GET')\n })\n\n }\n\n onCreateRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n this.requestParams.POST = reqParams.apiOptions\n\n // reset local state\n this.POST_result = null\n this.POST_error = ''\n\n this.httpManagerSignalsService.postRequest<ClientInfo>(this.sampleClientData, reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.POST_result = res,\n error: (err) => this.errorHandling(err, 'POST')\n })\n\n }\n\n onUpdateRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n if(!this.hasId(reqParams.path)) {\n console.log(\"Missing ID\")\n return\n }\n\n this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length-1])\n this.requestParams.PUT = reqParams.apiOptions\n\n // reset local state\n this.PUT_result = null\n this.PUT_error = ''\n\n this.httpManagerSignalsService.putRequest<any>(this.sampleClientData, reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.PUT_result = res,\n error: (err) => this.errorHandling(err, 'PUT')\n })\n\n }\n\n onDeleteRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n this.requestParams.DELETE = reqParams.apiOptions\n\n if(!this.hasId(reqParams.path)) {\n console.log(\"Missing ID\")\n return\n }\n\n this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length-1])\n this.requestParams.DELETE = reqParams.apiOptions\n\n // reset local state\n this.DELETE_result = null\n this.DELETE_error = ''\n\n this.httpManagerSignalsService.deleteRequest<ClientInfo>(reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.DELETE_result = res,\n error: (err) => this.errorHandling(err, 'DELETE')\n })\n\n }\n\n onStreamPostRequest() {\n\n if (!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n let payload = {}\n let apiPath: string[] = reqParams.path\n let apiOptions = reqParams.apiOptions\n let responseMapper: (items: any) => any = (items) => items.response\n\n if (this.AIType === 0) {\n\n // API request\n payload = { prompt: this.questionControl.value }\n\n } else {\n\n // Local Ollama request\n apiOptions.server = \"api\"\n apiPath = [\"generate\"]\n apiOptions.stream = true\n payload = {\n model: \"phi3:latest\",\n prompt: this.questionControl.value,\n stream: true,\n }\n\n responseMapper = (items) => items.map((word: any) => word.response).flat().join('')\n\n }\n\n this.requestParams.STREAM = apiOptions\n this.STREAM_AI_result = null\n this.STREAM_AI_error = ''\n\n this.httpManagerSignalsService.postRequest<any>(payload, apiOptions, apiPath)\n .subscribe({\n next: (res) => {\n try {\n this.STREAM_AI_result = responseMapper(res)\n } catch (e) {\n this.STREAM_AI_result = res\n }\n this.questionControl.reset()\n },\n error: (err) => this.errorHandling(err, 'STREAM')\n })\n\n }\n\n\n onStreamRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n reqParams.apiOptions.stream = true\n\n this.requestParams.GET = reqParams.apiOptions\n this.STREAM_result = null\n this.STREAM_error = ''\n\n this.httpManagerSignalsService.getRequest<ClientInfo[]>(reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.STREAM_result = res,\n error: (err) => this.errorHandling(err, 'STREAM')\n })\n\n }\n\n onDownloadCompleted() {\n\n const message = \"Download Completed\"\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.SUCCESS,\n icon: 'sentiment_satisfied_alt',\n })\n\n this.toastMessage.toastMessage(display)\n }\n\n onDownloadFailed(err: string) {\n\n const message = \"Download Failed\"\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.ERROR,\n icon: 'warning',\n })\n\n this.toastMessage.toastMessage(display)\n }\n\n errorHandling(err: any, type: string) {\n const message = err?.message || String(err)\n // set local error state\n if (type === 'GET') this.GET_error = message\n if (type === 'POST') this.POST_error = message\n if (type === 'PUT') this.PUT_error = message\n if (type === 'DELETE') this.DELETE_error = message\n if (type === 'STREAM') this.STREAM_error = message\n\n // also set the shared service error signal\n this.httpManagerSignalsService.error.set(message)\n\n return err\n }\n\n onSelectAIType(type: number) {\n this.AIType = type\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <h2>\n <span>HTTP Request Signals Manager</span>\n <span style=\"margin-left: .5rem;\">\n <mat-icon color=\"accent\">fiber_new</mat-icon>\n </span>\n </h2>\n\n <div [formGroup]=\"requestForm\" style=\"margin-top: 2rem;\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Adapter (Model)</mat-label>\n <mat-select formControlName=\"adapter\" #adapterSelect>\n <mat-option>None</mat-option>\n <mat-option *ngFor=\"let adapter of sampleAdaptors\" [value]=\"adapter.value\">\n {{adapter.label}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mapper (Model)</mat-label>\n <mat-select formControlName=\"mapper\" #mapperSelect>\n <mat-option>None</mat-option>\n <mat-option *ngFor=\"let mapper of sampleMappers\" [value]=\"mapper.value\">\n {{mapper.label}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"display: flex; margin-bottom: 2rem;\" *ngIf=\"adapterSelect.value || mapperSelect.value\">\n <div style=\"flex:1\" class=\"box\">\n <h3>Adapter (Incoming)</h3>\n <div *ngIf=\"adapterSelect.value; else NO_ADAPTER\">\n {{ props(adapterSelect.value) | json }}\n </div>\n <ng-template #NO_ADAPTER>No Transformation</ng-template>\n </div>\n <div style=\"flex:1\" class=\"box\">\n <h3>Mapper (Outgoing)</h3>\n <div *ngIf=\"mapperSelect.value; else NO_MAPPER\">\n {{ props(mapperSelect.value) | json }}\n </div>\n <ng-template #NO_MAPPER>No Transformation</ng-template>\n </div>\n </div>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>RestPath (/ delimited)</mat-label>\n <input matInput placeholder=\"clients/list\" formControlName=\"path\">\n </mat-form-field>\n </div>\n <div>\n <div formArrayName=\"headers\">\n <div *ngFor=\"let task of headers.controls; let i = index\" [formGroupName]=\"i\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Key</mat-label>\n <input matInput placeholder=\"authentication\" formControlName=\"key\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Value</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"value\">\n </mat-form-field>\n <div style=\"margin-top: .5rem;\">\n <button mat-icon-button (click)=\"removeHeader(i)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n <button mat-stroked-button (click)=\"addHeader()\" class=\"btn\">Add Header</button>\n </div>\n <div style=\"margin-top: 2rem; display: flex; flex-direction:column; gap: 1rem;\">\n <div>\n <mat-slide-toggle #failedState>Retry on Failed</mat-slide-toggle>\n <div *ngIf=\"failedState.checked\" style=\"display: flex; gap: .5rem; margin-top: 1rem;\" formGroupName=\"retry\">\n <mat-form-field appearance=\"outline\">\n <mat-label>#of Times</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"times\" value=\"3\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Delay Until Next</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"delay\" value=\"3\">\n </mat-form-field>\n </div>\n </div>\n <div>\n <mat-slide-toggle #pollingState>Polling</mat-slide-toggle>\n <div *ngIf=\"pollingState.checked\">\n <mat-form-field appearance=\"outline\" style=\"margin-top: 1rem\">\n <mat-label>#of Seconds</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"polling\" value=\"3\">\n </mat-form-field>\n </div>\n </div>\n </div>\n </div>\n\n <div style=\"margin-bottom: 1rem; margin-top: 2rem;\">\n <mat-progress-bar mode=\"indeterminate\"\n *ngIf=\"isPending()\"\n ></mat-progress-bar>\n <mat-progress-bar mode=\"determinate\"\n *ngIf=\"pollingState.checked && !isPending()\"\n [value]=\"countdown()\"\n ></mat-progress-bar>\n </div>\n\n <div style=\"margin-top: 1rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onGetRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"GET_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ GET_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"GET_result\">\n {{ GET_result | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">POST Request</h2>\n <div>\n <button mat-raised-button (click)=\"onCreateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"POST_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ POST_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"POST_result\">\n {{ POST_result | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">PUT Request</h2>\n <div>\n <button mat-raised-button (click)=\"onUpdateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"PUT_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ PUT_error }}</mat-error>\n </div>\n\n <h3>Include Record ID in the RestPath</h3>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"PUT_result\">\n {{ PUT_result | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">DELETE Request</h2>\n <div>\n <button mat-raised-button (click)=\"onDeleteRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <h3>Include Record ID in the RestPath</h3>\n\n <div *ngIf=\"DELETE_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ DELETE_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"DELETE_result\">\n {{ DELETE_result | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">Streaming GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onStreamRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <!-- <div *ngIf=\"(STREAM_error$ | async) as stream_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ stream_error }}</mat-error>\n </div> -->\n\n <div style=\"margin-top: 1rem;\">\n <div *ngIf=\"STREAM_result as data\" class=\"container\">\n <table mat-table [dataSource]=\"data\">\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> First Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"lastName\">\n <th mat-header-cell *matHeaderCellDef> Last Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.lastName}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"age\">\n <th mat-header-cell *matHeaderCellDef> Age </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.age}} </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n </div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1; padding-top: .5rem;\">AI -<span *ngIf=\"AIType === 1\">STREAMING</span> POST Request</h2>\n <div style=\"display: flex; gap: 1rem;\">\n <button mat-raised-button [matMenuTriggerFor]=\"menu\" style=\"min-width: 120px;\">\n <mat-icon>lan</mat-icon>\n <span *ngIf=\"AIType === 0; else LOCAL\">Server</span>\n <ng-template #LOCAL>\n Local\n </ng-template>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"onSelectAIType(0)\">Server</button>\n <button mat-menu-item (click)=\"onSelectAIType(1)\">Local</button>\n </mat-menu>\n <div>\n <button mat-raised-button (click)=\"onStreamPostRequest()\" class=\"btn\">Ask Me</button>\n </div>\n </div>\n </div>\n\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Ask me a Question</mat-label>\n <textarea matInput placeholder=\"Why is the sky blue?\" [formControl]=\"questionControl\"></textarea>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"STREAM_AI_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ STREAM_AI_error }}</mat-error>\n </div>\n\n <div *ngIf=\"AIType === 1; else ALTERNATIVE\" style=\"color: red;\">\n You must have Ollama active and the 'phi3:latest' model to use this feature.\n </div>\n <ng-template #ALTERNATIVE>\n <span style=\"color: gray;\">\n Define the RestPath to the API endpoint that will handle the AI request.\n Use: 'ai/chat' for server\n </span>\n </ng-template>\n\n <div>\n <div *ngIf=\"STREAM_AI_result\" style=\"margin-top: 1rem; font-size: 1.2rem; border-radius: 1rem; border: black 1px solid; padding: 2rem;\">\n <p style=\"margin-bottom: .5rem; white-space:pre-wrap; line-height: 1.6rem;\">{{STREAM_AI_result}}</p>\n </div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 1.5rem; margin-bottom: 1rem; line-height: 1.5rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div>\n <div style=\"display: flex;\">\n <h2 style=\"flex:1; margin-bottom: 0; padding-top: .5rem; display: flex;\">\n <div>\n Download File\n </div>\n <div style=\"flex:1; margin-left: 1rem;\">\n <mat-slide-toggle #disable>\n <span *ngIf=\"disable.checked; else DISABLE\">\n Enable\n </span>\n <ng-template #DISABLE>Disable</ng-template>\n </mat-slide-toggle>\n </div>\n </h2>\n <div>\n <app-file-downloader\n [disabled]=\"disable.checked\"\n [delayError]=\"3\"\n [apiRequest]=\"downloadRequest\"\n (completed)=\"onDownloadCompleted()\"\n (failed)=\"onDownloadFailed($event)\"\n ></app-file-downloader>\n </div>\n </div>\n </div>\n\n</div>\n","import { Component, Inject, inject, OnInit, ViewEncapsulation, effect, signal, computed } from '@angular/core';\nimport { LocalStorageSignalsManagerService, SettingOptions, StorageOption, StorageType } from '../../services/local-storage-manager-service';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { ConfigOptions, LocalStorageOptions, UtilsService } from '../../services';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\n\n@Component({\n selector: 'app-local-storage-signals-demo',\n templateUrl: './local-storage-signals-demo.component.html',\n styleUrls: ['./local-storage-signals-demo.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class LocalStorageSignalsDemoComponent implements OnInit {\n\n fb = inject(FormBuilder)\n utils = inject(UtilsService)\n\n // store type is driven by the form control\n get type() {\n return (this.typeControl.value) ? +this.typeControl.value : 0;\n }\n\n typeControl = this.fb.control(StorageType.GLOBAL.toString())\n\n localStorageManagerService = inject(LocalStorageSignalsManagerService)\n\n // Use signals directly and computed values for template binding\n readonly settings = computed(() => this.localStorageManagerService.settings());\n\n // selected store (signal) and its JSON data for template\n storeSelected = signal<StorageOption | null>(null);\n selectedStoreData = computed(() => {\n const s = this.storeSelected();\n if (!s) return '';\n const computed = this.localStorageManagerService.store(s.name);\n return computed ? JSON.stringify(computed()) : '';\n });\n\n // filtered settings by selected type\n selectedType = signal<number>(StorageType.GLOBAL);\n filteredSettings = computed(() => {\n const values = this.settings() || [];\n return values.filter((item: any) => item.options.storage === +this.selectedType());\n });\n\n storageForm = this.fb.group({\n store: this.fb.control<string|null>(null),\n type: 'local',\n settingType: 'local',\n encrypted: false,\n data: this.fb.control<string>('', Validators.required),\n })\n\n newStoreForm = this.fb.group({\n name: this.fb.control<string|null>(null, Validators.required),\n storage: 'local',\n encrypted: false,\n data: this.fb.control<string>('', Validators.required),\n expiresIn: this.fb.control('0')\n })\n\n // no RxJS Observables here; template uses signals/computed directly\n\n expiresIn = (epoch: number) => this.utils.expiresIn(epoch)\n\n get isValid() {\n return this.newStoreForm.valid\n }\n\n get isValidData() {\n return this.storageForm.valid\n }\n\n isValidJSON = (str: string) => {\n try {\n JSON.parse(str)\n return true\n } catch (e) {\n return false\n }\n }\n\n displayedColumns: string[] = ['name', 'id', 'encrypted', 'expires', \"option\"];\n\n filterData = (values: StorageOption[] | null | undefined) => {\n if(!values) return []\n return values.filter((item: any) => item.options && item.options.storage === +this.type)\n }\n\n settingFor(name: string) {\n const c = this.localStorageManagerService.setting(name);\n return c ? c() : null;\n }\n\n // data and selected store\n store: any\n create = false\n\n storeProps?: LocalStorageOptions\n options?: SettingOptions\n\n constructor(@Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) { }\n\n ngOnInit() {\n\n this.storeProps = this.configOptions?.LocalStorageOptions\n this.options = this.storeProps?.options\n\n if(this.options?.storage) {\n this.typeControl.patchValue(this.options.storage.toString())\n this.typeControl.disable()\n } else {\n this.typeControl.enable()\n }\n\n if(this.options?.expiresIn) {\n this.newStoreForm.get('expiresIn')?.patchValue(this.options.expiresIn)\n this.newStoreForm.get('expiresIn')?.disable()\n } else {\n this.newStoreForm.get('expiresIn')?.enable()\n }\n\n if(this.options?.encrypted) {\n this.newStoreForm.get('encrypted')?.patchValue(this.options.encrypted)\n this.newStoreForm.get('encrypted')?.disable()\n } else {\n this.newStoreForm.get('encrypted')?.enable()\n }\n\n // nothing to synchronize - templates read computed signals directly\n\n }\n\n onCreateStore() {\n\n if(!this.isValid) return\n\n const store = this.newStoreForm.value\n if(!store.name || store.name === '') return\n\n const options = { storage: this.type, encrypted: store.encrypted, expiresIn: store.expiresIn }\n\n this.localStorageManagerService.createStore({\n name: store.name,\n data: store.data,\n options: SettingOptions.adapt(options)\n })\n\n this.newStoreForm.reset()\n this.create = false\n }\n\n onUpdateStore(store: any) {\n\n if(!this.storageForm.valid) return\n\n const storeData = this.storageForm.value\n\n const data = JSON.parse(storeData.data || '')\n\n const type = (storeData.type === 'local') ? StorageType.GLOBAL : StorageType.SESSION\n\n this.localStorageManagerService.updateStore({\n name: store.name,\n data\n })\n\n }\n\n onSelectedRow(store: any) {\n this.store = store\n this.storeSelected.set(store)\n this.create = false\n }\n\n onCreate() {\n this.onCancel()\n this.create = true\n }\n\n onDelete(store: StorageOption) {\n\n this.localStorageManagerService.deleteStore({\n name: store.name,\n })\n\n this.onCancel()\n }\n\n onCancel() {\n this.storeSelected.set(null)\n this.store = null\n this.create = false\n }\n\n onUpdate(store: StorageOption, data: any) {\n\n this.localStorageManagerService.updateStore({\n name: store.name,\n data: JSON.parse(data)\n })\n\n this.onCancel()\n\n }\n\n onReset() {\n this.localStorageManagerService.resetStore()\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <div style=\"display: flex; gap: 1rem\">\n <h2 style=\"padding-top: .5rem; display: flex;\">\n <div style=\"padding-top: .5rem;\">\n <span>Local Storage Manager</span>\n <span style=\"margin-left: .5rem;\">\n <mat-icon color=\"accent\">fiber_new</mat-icon>\n </span>\n </div>\n <div>\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon>info</mat-icon>\n </button>\n </div>\n </h2>\n <span style=\"flex:1\"></span>\n <div style=\"padding-top: .25rem;\">\n <mat-button-toggle-group name=\"storage\" [formControl]=\"typeControl\" (change)=\"onCancel()\">\n <mat-button-toggle value=\"0\">Local Storage</mat-button-toggle>\n <mat-button-toggle value=\"1\">Session Storage</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n <div style=\"margin-top: .25rem;\">\n <button mat-icon-button (click)=\"onCreate()\">\n <mat-icon>add</mat-icon>\n </button>\n </div>\n </div>\n\n <ng-container *ngIf=\"storeProps?.storageName || storeProps?.storageSettingsName\">\n <div style=\"display: flex; gap: .5rem; flex-direction: column; border: gray solid thin; background-color: whitesmoke; padding: 1rem;\"\n >\n <div style=\"display: flex;\">\n <div *ngIf=\"storeProps?.storageSettingsName\" style=\"flex:1\">\n Database: <b>{{ storeProps?.storageSettingsName }}</b>\n </div>\n <div *ngIf=\"storeProps?.storageName\" style=\"flex:1\">\n Data: <b>{{ storeProps?.storageName }}</b>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div style=\"margin-top: 2rem;\" [formGroup]=\"newStoreForm\" *ngIf=\"create; else LIST\">\n\n <h2>Create Store</h2>\n\n <div style=\"display: flex; gap: 1rem;\">\n <div style=\"flex:1\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Store Name</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"name\">\n </mat-form-field>\n </div>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Expires In...</mat-label>\n <mat-select formControlName=\"expiresIn\">\n <mat-option value=\"0\">None</mat-option>\n <mat-option value=\"30s\">30 Seconds</mat-option>\n <mat-option value=\"1mn\">1 Minute</mat-option>\n <mat-option value=\"1hr\">1 Hour</mat-option>\n <mat-option value=\"1d\">1 Day</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"margin-top: 1rem;\">\n <mat-slide-toggle formControlName=\"encrypted\">Encrypted</mat-slide-toggle>\n </div>\n </div>\n\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex: 1;\">\n <mat-label>Data (Must be an Object or Array of any)</mat-label>\n <textarea matInput placeholder=\"[]\" formControlName=\"data\" #json></textarea>\n </mat-form-field>\n </div>\n <mat-error *ngIf=\"!isValidJSON(json.value)\">Not Valid Data</mat-error>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onCreateStore()\" [disabled]=\"!(isValid && isValidJSON(json.value))\">\n Save Store\n </button>\n </div>\n\n </div>\n\n <ng-template #LIST>\n\n <div style=\"margin-top: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n{{ settings() | json }}\n <div *ngIf=\"filterData(settings()) as data\">\n <ng-container *ngIf=\"data.length > 0; else NO_DATA\">\n <table mat-table [dataSource]=\"data\">\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> Store </th>\n <td mat-cell *matCellDef=\"let element\" style=\"font-weight: bold; text-transform: uppercase;\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"encrypted\">\n <th mat-header-cell *matHeaderCellDef style=\"text-align: center;\"> Encrypted </th>\n <td mat-cell *matCellDef=\"let element\" style=\"text-align: center;\">\n <ng-container *ngIf=\"element.options.encrypted; else NO\">YES</ng-container>\n <ng-template #NO><span style=\"color:gray\">NO</span></ng-template>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"expires\">\n <th mat-header-cell *matHeaderCellDef style=\"text-align: center;\"> Expires </th>\n <td mat-cell *matCellDef=\"let element\" style=\"text-align: center;\">\n <ng-container *ngIf=\"element.options.expires !== 0; else NO_DATA\">\n {{expiresIn(element.options.expires)}}\n </ng-container>\n <ng-template #NO_DATA>\n ∞\n </ng-template>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"option\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell *matCellDef=\"let element\" style=\"padding-right: 0;\">\n <div style=\"display: flex;justify-content: flex-end;\">\n <button mat-icon-button color=\"warn\" (click)=\"onDelete(element); $event.stopPropagation()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" (click)=\"onSelectedRow(row)\"></tr>\n </table>\n </ng-container>\n\n <ng-template #NO_DATA>\n <h3 style=\"margin-top: 1rem;\">No Data</h3>\n </ng-template>\n\n <div *ngIf=\"storeSelected() as selectedStore\" style=\"margin-top: 2rem;\">\n <div style=\"margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <h3>STORE: <span style=\"font-weight: bold;\">{{ selectedStore.name | uppercase }}</span></h3>\n <h3>SETTINGS: {{ localStorageManagerService.setting(selectedStore.name) ? (localStorageManagerService.setting(selectedStore.name)() | json) : '{}' }}</h3>\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex: 1;\">\n <mat-label>Data (Must be an Object or Array of any)</mat-label>\n <textarea matInput placeholder=\"[]\" #json [value]=\"selectedStoreData()\"></textarea>\n </mat-form-field>\n </div>\n <mat-error *ngIf=\"!isValidJSON(json.value)\">Not Valid Data</mat-error>\n\n <div style=\"display: flex; gap: .5rem;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onCancel()\">Cancel</button>\n <button mat-stroked-button (click)=\"onUpdate(selectedStore, json.value)\" [disabled]=\"!(isValidJSON(json.value))\">Update</button>\n </div>\n </div>\n </div>\n\n </ng-template>\n\n <div style=\"margin-top: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <button mat-stroked-button (click)=\"onReset()\">Delete All Stores</button>\n </div>\n\n</div>\n\n\n<mat-menu #menu=\"matMenu\">\n <div style=\"padding: 1rem;\">\n <p>Please note that the LocalStorage (encryption) and management of data is dependant on initializing the APP_ID</p>\n <p>Must provide a value for <b>APP_ID</b> in AppModule->Providers</p>\n <mat-divider></mat-divider>\n <div style=\"font-size: smaller; margin-top: .5rem;\">\n <p>Example: UUID (self.crypto.randomUUID() to generate)</p>\n <div style=\"background-color: whitesmoke; padding: 1rem;\">\n {<br>\n provide: APP_ID,<br>\n useValue: \"056991ac-3537-43ab-b5b9-83edf6554eff\",<br>\n }\n </div>\n </div>\n </div>\n</mat-menu>\n","import { Component, Inject, OnInit } from '@angular/core';\n\nimport { CONFIG_SETTINGS_TOKEN } from '../models/config-token.model';\nimport { ConfigOptions } from '../models/config-options.model';\n\n@Component({\n selector: 'app-http-request-services-demo',\n templateUrl: './http-request-services-demo.component.html',\n styleUrls: ['./http-request-services-demo.component.scss']\n})\nexport class HttpRequestServicesDemoComponent implements OnInit {\n\n requestTypes = [\n { name: \"Http Service\", value: 'http_service' },\n { name: \"Http Signals Service\", value: 'http_signals_service', new: true },\n { name: \"Http State Service\", value: 'http_state_service' },\n { name: \"Database Service\", value: 'database_service', divider: true, disabled: true },\n { name: \"Local Storage Service\", value: 'local_storage_service' },\n { name: \"Local Signals Storage Service\", value: 'local_storage_signals_service', new: true },\n ]\n\n selectedService = this.requestTypes[0].value\n\n injectionOptions?: ConfigOptions\n\n constructor(@Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) { }\n\n ngOnInit() {\n if(this.configOptions) this.injectionOptions = this.configOptions\n }\n\n onSelected(type: number) {\n this.selectedService = this.requestTypes[type].value\n }\n\n}\n","<mat-toolbar style=\"display:flex\">\n <div>Http Request Manager Services</div>\n <div style=\"flex:1\"></div>\n <button mat-stroked-button [matMenuTriggerFor]=\"menu\">Services</button>\n <mat-menu #menu=\"matMenu\">\n <ng-container *ngFor=\"let type of requestTypes; index as i\">\n <div\n *ngIf=\"type?.divider\"\n style=\"margin-top: .5rem; margin-bottom: .5rem;\"\n >\n <mat-divider></mat-divider>\n </div>\n <button\n mat-menu-item\n (click)=\"onSelected(i)\"\n [disabled]=\"type.disabled\"\n >\n {{ type.name }}\n </button>\n </ng-container>\n\n </mat-menu>\n</mat-toolbar>\n\n<span [ngSwitch]=\"selectedService\">\n <p *ngSwitchCase=\"'http_service'\">\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-manager-demo></app-request-manager-demo>\n </p>\n <p *ngSwitchCase=\"'http_signals_service'\">\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-signals-manager-demo></app-request-signals-manager-demo>\n </p>\n <p *ngSwitchCase=\"'http_state_service'\">\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-manager-state-demo></app-request-manager-state-demo>\n </p>\n <p *ngSwitchCase=\"'database_service'\">\n <!-- <app-database-data-demo></app-database-data-demo> -->\n </p>\n <p *ngSwitchCase=\"'local_storage_service'\">\n <ng-container *ngTemplateOutlet=\"LOCAL_OPTIONS\"></ng-container>\n <app-local-storage-demo></app-local-storage-demo>\n </p>\n <p *ngSwitchCase=\"'local_storage_signals_service'\">\n <ng-container *ngTemplateOutlet=\"LOCAL_OPTIONS\"></ng-container>\n <app-local-storage-signals-demo></app-local-storage-signals-demo>\n </p>\n <p *ngSwitchDefault>\n Other\n </p>\n</span>\n\n<ng-template #HTTP_OPTIONS>\n <ng-container *ngIf=\"injectionOptions?.httpRequestOptions\">\n <div class=\"box\">\n <h3 style=\"font-weight: bold;\">Injection Token Detected - HTTP Options</h3>\n {{ injectionOptions?.httpRequestOptions| json }}\n </div>\n </ng-container>\n</ng-template>\n\n<ng-template #LOCAL_OPTIONS>\n <ng-container class=\"box\" *ngIf=\"injectionOptions?.LocalStorageOptions\">\n <div class=\"box\">\n <h3 style=\"font-weight: bold;\">Injection Token Detected - LocalStorage Options</h3>\n {{ injectionOptions?.LocalStorageOptions| json }}\n </div>\n </ng-container>\n</ng-template>\n\n\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ThemePalette } from '@angular/material/core';\nimport { ProgressSpinnerMode } from '@angular/material/progress-spinner';\n\n@Component({\n selector: 'app-spinner',\n templateUrl: './spinner.component.html',\n styleUrls: ['./spinner.component.scss']\n})\nexport class SpinnerComponent implements OnInit {\n\n @Input() color: ThemePalette;\n\n @Input() diameter?: number;\n @Input() display?: string | number;\n @Input() mode?: ProgressSpinnerMode;\n @Input() strokeWidth?: number;\n @Input() value = 0\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","<div class=\"spinner-background\">{{display}}</div>\n<mat-progress-spinner\n [color]=\"color\"\n [diameter]=\"diameter\"\n [mode]=\"mode || 'indeterminate'\"\n [strokeWidth]=\"strokeWidth\"\n [value]=\"value\">\n</mat-progress-spinner>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { DownloadFileComponent } from './download-file/download-file.component';\nimport { FileDownloaderComponent } from './file-downloader.component';\n\nimport { SpinnerComponent } from './spinner/spinner.component';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatButtonModule } from '@angular/material/button';\n\n@NgModule({\n imports: [\n CommonModule,\n MatIconModule,\n MatProgressSpinnerModule,\n MatButtonModule,\n ],\n declarations: [\n SpinnerComponent,\n DownloadFileComponent,\n FileDownloaderComponent,\n ],\n exports: [\n FileDownloaderComponent\n ]\n})\nexport class FileDownloaderModule { }\n","import { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\n\n\nimport { WithCredentialsInterceptor, RequestHeadersInterceptor } from './interceptors';\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { RequestManagerDemoComponent } from './http-request-services-demo/request-manager-demo/request-manager-demo.component';\nimport { RequestManagerStateDemoComponent } from './http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component';\nimport { LocalStorageDemoComponent } from './http-request-services-demo/local-storage-demo/local-storage-demo.component';\n// import { DatabaseDataDemoComponent } from './global-data-demo/database-data-demo/database-data-demo.component';\n\nimport { CommonModule } from '@angular/common';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { ProxyDebuggerInterceptor } from './interceptors/proxy-debugger.interceptor';\n\nimport { HttpRequestServicesDemoComponent } from './http-request-services-demo/http-request-services-demo.component';\nimport { RequestSignalsManagerDemoComponent } from './http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component';\n\nimport { ConfigOptions } from './models';\nimport { CONFIG_SETTINGS_TOKEN } from './models/config-token.model';\nimport { HTTPManagerService, LocalStorageManagerService } from './services';\n\nimport { FileDownloaderModule } from './http-request-services-demo/request-manager-demo/file-downloader/file-download.module';\nimport { LocalStorageSignalsDemoComponent } from './http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component';\nimport { ToastMessageDisplayModule } from 'toast-message-display';\n\n\n@NgModule({\n imports: [\n CommonModule,\n ToastMessageDisplayModule,\n FormsModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatSelectModule,\n MatChipsModule,\n MatMenuModule,\n MatIconModule,\n MatTableModule,\n MatButtonToggleModule,\n MatAutocompleteModule,\n MatProgressBarModule,\n MatSlideToggleModule,\n MatDividerModule,\n MatFormFieldModule,\n MatInputModule,\n MatToolbarModule,\n MatSlideToggleModule,\n TranslateModule.forRoot(),\n MatSidenavModule,\n FileDownloaderModule,\n ],\n declarations: [\n HttpRequestServicesDemoComponent,\n RequestManagerStateDemoComponent,\n RequestManagerDemoComponent,\n RequestSignalsManagerDemoComponent,\n LocalStorageDemoComponent,\n LocalStorageSignalsDemoComponent,\n // DatabaseDataDemoComponent,\n ],\n exports: [\n HttpRequestServicesDemoComponent,\n // Re-export commonly used modules so demo component templates have access to\n // Angular common pipes and Material components when the library is imported.\n CommonModule,\n MatButtonToggleModule,\n MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n MatIconModule,\n MatTableModule,\n MatSlideToggleModule,\n MatProgressBarModule,\n MatDividerModule,\n ],\n providers: [\n { provide: HTTP_INTERCEPTORS, useClass: WithCredentialsInterceptor, multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: RequestHeadersInterceptor, multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: ProxyDebuggerInterceptor, multi: true },\n { provide: CONFIG_SETTINGS_TOKEN, useValue: ConfigOptions.adapt() },\n HTTPManagerService, LocalStorageManagerService\n ],\n})\nexport class HttpRequestManagerModule {\n\n static forRoot(config: ConfigOptions = ConfigOptions.adapt()): ModuleWithProviders<HttpRequestManagerModule> {\n return {\n ngModule: HttpRequestManagerModule,\n providers: [\n { provide: CONFIG_SETTINGS_TOKEN, useValue: ConfigOptions.adapt(config) },\n HTTPManagerService, LocalStorageManagerService //all services that need access to config\n ],\n };\n }\n\n}\n\n\n","export interface TableSchemaDefInterface {\n table: string\n schema: string\n}\n\nexport class TableSchemaDef implements TableSchemaDefInterface {\n constructor(\n public table = 'unknown',\n public schema: string = '',\n ) {}\n\n static adapt(item?: any): TableSchemaDef {\n\n const schemaArray = (item?.schema && Array.isArray(item.schema)) ? item.schema : item.schema.split(',')\n const schema = schemaArray.map((item: string) => this.cleanString(item)).join()\n\n return new TableSchemaDef(\n (item?.table) ? this.cleanString(item.table) : 'unknown',\n schema,\n )\n\n }\n\n static cleanString(str: string): string {\n const camelCaseSplit = str.replace(/([a-z])([A-Z])/g, '$1 $2')\n \n const cleanStr = camelCaseSplit\n .replace(/[^a-zA-Z0-9\\s]/g, '') // Remove non-alphanumeric characters except spaces\n .toLowerCase() // Convert to lowercase\n .trim(); // Trim any leading or trailing spaces\n \n return cleanStr;\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport Dexie, {Table} from 'dexie';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DbService extends Dexie {\n\n storageDB = \"global_storage_db\"\n\n db = new Dexie(this.storageDB)\n\n get vr() {\n return (this.db.verno === 0) ? 1 : this.db.verno + 1\n }\n\n get nextVr() {\n return this.vr + 1\n }\n\n get getTables() {\n return this.db.tables.map((item: any) => item.name)\n }\n\n async hasDatabase() {\n return await Dexie.exists(this.storageDB).then((res: any) => {\n this.createNewDatabase()\n return res\n })\n }\n\n getTable = (table: string) => {\n return this.db.tables.find((item: any) => item.name === table)\n }\n\n tableExists = (table: string) => {\n return (this.getTables.find((item: any) => item === table)) ? true : false\n }\n\n constructor() {\n\n super(\"global_storage_db\")\n\n this.db = this\n this.open().then((data: any) => {\n\n }).catch(err => {\n this.createNewDatabase()\n })\n\n }\n\n protected async updateTable(table: string, find: { key: string, value: string|number }, data: any) {\n\n const tableSource = this.getTable(table)\n\n if(!tableSource || !find || !(find.key || find.value)) return false\n\n await tableSource?.where(find.key).equals(find.value).first()\n .then(async (rec: any) => {\n const newRec = this.updateObjectKeys(rec, data)\n await tableSource?.update(rec.id, newRec)\n })\n\n return true\n\n }\n\n protected async createNewDatabase() {\n\n const db = new Dexie('global_storage_db');\n\n if (!await Dexie.exists(db.name)) {\n db.version(1).stores({})\n }\n\n await db.open()\n\n }\n\n // async createTable(table: string, schema: string) {\n protected async createTable(table: string, schema: string) {\n\n // console.log('createTable:', table, schema)\n\n this.hasDatabase().then(async(res) => {\n\n const tableDef = this.normalizeString(table)\n const schemaDef = this.normalizeString(schema)\n\n table = tableDef || ''\n schema = schemaDef || ''\n\n if(table === '' || schema === '') return\n\n if(!this.db.isOpen()) {\n await this.db.open()\n .then( async () => {\n this.create(table, schema)\n // console.log('OPENED', table)\n })\n .catch(() => {\n // console.log('FAILED', table)\n })\n\n } else {\n this.create(table, schema)\n }\n\n const hasTable = this.getTable(table)\n\n if(!hasTable) {\n setTimeout(() => {\n this.createTable.bind(this, table, schema)\n this.create(table, schema)\n }, 300)\n }\n\n // console.log('DB HAS', table, hasTable)\n\n })\n\n }\n\n private async create(table: string, schema: string) {\n\n // console.log('OPEN', this.db.name, this.vr, this.db.verno, 'OPEN',this.db.isOpen())\n\n if(!this.tableExists(table)) {\n\n if(this.db.isOpen()) await this.db.close()\n\n const newSchema: any = { [table]: schema }\n await this.db.version(this.nextVr).stores(newSchema)\n\n // console.log('Created New Table: ', table, schema)\n\n if(!this.db.isOpen()) await this.db.open()\n }\n\n }\n\n private updateObjectKeys(obj1: any, obj2: any) {\n\n return Object.keys(obj1).reduce((updatedObj: any, key: any) => {\n updatedObj[key] = obj2.hasOwnProperty(key) ? obj2[key] : obj1[key]\n return updatedObj\n }, {})\n\n }\n\n protected async DBOpened() {\n\n if(!this.db.isOpen()) {\n await this.db.open()\n .then( async () => {\n // console.log('OPENED')\n })\n .catch(async (err) => {\n // console.log('OPENED ERR')\n return false\n })\n } else {\n // console.log('OPENED')\n }\n\n return true\n\n }\n\n private normalizeString(item: string|string[]) {\n\n if(!item) return\n\n return Array.isArray(item) ?\n item.map((item: string) => this.cleanString(item)).join()\n : item.split(',').map((item: string) => this.cleanString(item)).join()\n\n }\n\n private cleanString(str: string): string {\n\n const cleanStr = str\n .replace(/[^a-zA-Z0-9\\s]/g, '')\n .replace(/\\s+/g, '_')\n\n return cleanStr.trim().toLowerCase()\n\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { DbService } from './db.storage.service';\n\nimport { TableSchemaDef } from './models/table-schema';\nimport { EMPTY, from, Observable } from 'rxjs';\nimport { map, mergeMap, switchMap } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DatabaseManagerService extends DbService {\n\n constructor() {\n super()\n this.createNewDatabase()\n }\n\n getDatabaseTables() {\n return from(this.DBOpened()).pipe(\n map(() => this.db.tables.map((item: any) => item.name))\n )\n }\n\n hasDatabaseTable(table: string): Observable<boolean> {\n return from(this.DBOpened()).pipe(\n map(() => {\n return this.tableExists(this.clean(table))\n })\n )\n }\n\n getDatabaseTable(table: string): Observable<any> {\n return from(this.DBOpened()).pipe(\n map((res) => {\n this.hasDatabase().then((res) => {\n\n const tables = this.db.tables\n const found = tables.find((item: any) => item.name === this.clean(table)) || null\n\n if(!found) {\n console.warn('No Such Table:', this.clean(table))\n return\n } else {\n return found\n }\n\n })\n })\n )\n }\n\n getDatabaseTableSchema(table: string): Observable<string[]> {\n\n return from(this.DBOpened()).pipe(\n mergeMap((res) => this.getDatabaseTable(table)),\n map((dbTable: any) => {\n if(!dbTable) return []\n const cols = dbTable.schema.indexes.map((col: any) => col.name)\n const pri = dbTable.schema.primKey.name\n return [pri, ...cols]\n })\n )\n\n }\n\n createDatabaseTable(tableDef: TableSchemaDef) {\n this.createTable(tableDef.table, tableDef.schema)\n return from(this.DBOpened())\n }\n\n updateDatabaseTableSchema(tableDef: TableSchemaDef) {\n\n }\n\n // CRUD\n findTableRecords(table: string, column: string, value: any) {\n\n }\n\n findTableRecord(table: string, column: string, value: any) {\n\n }\n\n getTableRecords(table: string) {\n\n }\n\n getTableRecord(table: string, id: number) {\n\n }\n\n createTableRecord(table: string, record: any) {\n return this.createTableRecords(table, [record])\n .pipe(\n map((item: any) => item ? item[0] : null))\n }\n\n createTableRecords(table: string, records: any[]) {\n\n return this.getDatabaseTable(table).pipe(\n\n switchMap((tableData: any) => {\n\n if(!tableData) return EMPTY\n\n return this.getDatabaseTableSchema(table).pipe(\n\n map((schema: string[]) => {\n\n const insertRecords = records.map((record: any) => {\n\n const objectFromSchema: { [key: string]: any } = {}\n\n schema.forEach((field: string) => {\n const data = (record as any)[field] ?? null\n objectFromSchema[field] = data\n })\n\n return objectFromSchema\n\n })\n\n tableData.bulkPut(insertRecords)\n return insertRecords\n\n })\n\n )\n\n })\n\n )\n\n }\n\n updateTableRecord(table: string, record: any) {\n return this.updateTableRecords(table, [record])\n .pipe(\n map(item => item.length > 0 ? item[0] : null)\n )\n }\n\n updateTableRecords(table: string, records: any[]) {\n\n return this.getDatabaseTable(table).pipe(\n\n switchMap((tableData: any) => {\n\n return this.getDatabaseTableSchema(table).pipe(\n\n map((schema: string[]) => {\n\n const insertRecords = records.map((record: any) => {\n\n const objectFromSchema: { [key: string]: any } = {}\n\n schema.forEach((field: string) => {\n const data = (record as any)[field] ?? null\n objectFromSchema[field] = data\n })\n\n return objectFromSchema\n\n })\n\n tableData.bulkPut(insertRecords).then(() => console.log('Updated DB'))\n return insertRecords\n\n })\n\n )\n\n })\n\n )\n\n }\n\n deleteTableRecord<T>(table: string, id: number) {\n\n }\n\n private clean(str: string): string {\n const cleanStr = str\n .replace(/[^a-zA-Z0-9\\s]/g, '_') // Replace non-alphanumeric characters except spaces with underscores\n .replace(/\\s+/g, '_') // Replace spaces with underscores\n .toLowerCase() // Convert to lowercase\n .trim(); // Trim leading or trailing spaces\n\n return cleanStr;\n }\n\n}\n","import { Component, OnInit, inject } from '@angular/core';\n\nimport { TableSchemaDef } from '../../services/database-manager-services/models/table-schema';\nimport { DatabaseManagerService } from '../../services/database-manager-services';\n\n@Component({\n selector: 'app-database-data-demo',\n templateUrl: './database-data-demo.component.html',\n styleUrls: ['./database-data-demo.component.scss']\n})\nexport class DatabaseDataDemoComponent implements OnInit {\n\n db = inject(DatabaseManagerService)\n\n constructor() { }\n\n ngOnInit() {\n\n const tableDef = TableSchemaDef.adapt({table: 'Sample Table', schema: ['id', 'lastName', 'age']})\n console.log(tableDef)\n\n this.createTable(tableDef).subscribe(() => {\n\n // hasTable\n this.db.hasDatabaseTable('Sample Table').subscribe(data => console.log(data))\n\n // Tables\n this.db.getDatabaseTables().subscribe(data => console.log(data))\n\n // getTable\n this.db.getDatabaseTable('Sample Table').subscribe(data => console.log(data))\n\n // Table Schema\n this.db.getDatabaseTableSchema('Sample Table').subscribe(data => console.log(data))\n\n // Update Table Schema\n // const newTableDef = TableSchemaDef.adapt({table: 'sample', schema: ['id', 'name', 'age', 'amount']})\n // this.db.updateDatabaseTableSchema(newTableDef)\n\n // Insert Table Record\n const record = { id: 12, age: 45, last_name: 'Bonifacio', amount: 1200 }\n\n this.db.createTableRecord('Sample Table', record).subscribe(data => console.log(data))\n\n // Insert Table Records\n const records = [\n { id: 12, age: 12, last_name: 'Bonifacio', amount: 80 },\n { id: 10, age: 15, last_name: 'Johns', amount: 700 },\n { id: 1, age: 22, last_name: 'Kims', amount: 234 },\n { id: 2, age: 45, last_name: 'Harrys', amount: 1200 },\n ]\n\n this.db.createTableRecords('Sample Table', records).subscribe(data => console.log(data))\n\n // Update Table Record\n const recordUpdate = { id: 12, age: 45, last_name: 'Bonifacio', amount: 5000 }\n\n this.db.createTableRecord('Sample Table', record).subscribe(data => console.log(data))\n\n // Update Table Records\n // const recordsUpdate = [\n // { id: 12, age: 12, last_name: 'Bonifacio', amount: 5000 },\n // { id: 10, age: 15, last_name: 'Johns', amount: 5000 },\n // ]\n\n // this.db.updateTableRecords('sample_table', records).subscribe(data => console.log(data))\n\n })\n\n }\n\n createTable(tableDef: TableSchemaDef) {\n return this.db.createDatabaseTable(tableDef)\n }\n\n // CRUD\n findTableRecords(table: string, column: string, value: any) {\n\n }\n\n findTableRecord(table: string, column: string, value: any) {\n\n }\n\n getTableRecords(table: string) {\n\n }\n\n getTableRecord(table: string, id: number) {\n\n }\n\n createTableRecord<T>(table: string, record: T) {\n\n }\n\n updateTableRecord<T>(table: string, record: T) {\n\n }\n\n deleteTableRecord<T>(table: string, id: number) {\n\n }\n\n}\n","<p>\n database-data-demo works!\n</p>\n","/*\n * Public API Surface of http-request-manager\n */\n\nexport * from './lib/index';\nexport * from './lib/http-request-manager.module';\n\nexport * from './lib/http-request-services-demo/http-request-services-demo.component';\n\nexport * from './lib/http-request-services-demo/database-data-demo/database-data-demo.component';\nexport * from './lib/http-request-services-demo/local-storage-demo/local-storage-demo.component';\nexport * from './lib/http-request-services-demo/request-manager-demo/request-manager-demo.component';\nexport * from './lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["catchError","i1","i2","i4","i1.DownloadFileComponent","ClientInfo","AIPrompt","ClientInfoMapper","i3","i14.FileDownloaderComponent","map","tap","i7","i8","i9","i10","i11","i12","i5","i6.RequestManagerStateDemoComponent","i7.RequestManagerDemoComponent","i8.RequestSignalsManagerDemoComponent","i9.LocalStorageDemoComponent","i10.LocalStorageSignalsDemoComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"http-request-manager.mjs","sources":["../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/models/storage-type.enum.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/models/setting-options.model.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/models/storage-option.model.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/models/global-store-options.model.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/models/storage-data.model.ts","../../../projects/http-request-manager/src/lib/services/utils/utils.service.ts","../../../projects/http-request-manager/src/lib/services/utils/encryption/random.ts","../../../projects/http-request-manager/src/lib/services/utils/app.service.ts","../../../projects/http-request-manager/src/lib/services/utils/encryption/symmetrical-encryption.service.ts","../../../projects/http-request-manager/src/lib/services/utils/encryption/encryption-test.service.ts","../../../projects/http-request-manager/src/lib/models/config-token.model.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/models/stream-type.enum.ts","../../../projects/http-request-manager/src/lib/services/utils/headers.service.ts","../../../projects/http-request-manager/src/lib/services/utils/path-query.service.ts","../../../projects/http-request-manager/src/lib/services/utils/random-color.utils.ts","../../../projects/http-request-manager/src/lib/services/utils/encryption/asymmetrical-encryption.service.ts","../../../projects/http-request-manager/src/lib/services/utils/logger.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/rxjs-operators/request-streaming.ts","../../../projects/http-request-manager/src/lib/services/ws-manager-service/models/channel-info.model.ts","../../../projects/http-request-manager/src/lib/services/ws-manager-service/models/ws-user.model.ts","../../../projects/http-request-manager/src/lib/services/ws-manager-service/models/communication-type.enum.ts","../../../projects/http-request-manager/src/lib/services/ws-manager-service/models/channel-type.enum.ts","../../../projects/http-request-manager/src/lib/services/ws-manager-service/models/state-message.model.ts","../../../projects/http-request-manager/src/lib/services/ws-manager-service/models/public-message.model.ts","../../../projects/http-request-manager/src/lib/services/ws-manager-service/models/notification-message.model.ts","../../../projects/http-request-manager/src/lib/services/ws-manager-service/services/websocket.service.ts","../../../projects/http-request-manager/src/lib/services/ws-manager-service/websocket-service/websocket-manager.service.ts","../../../projects/http-request-manager/src/lib/services/ws-manager-service/services/websocket-message.service.ts","../../../projects/http-request-manager/src/lib/services/ws-manager-service/websocket-signals-manager.service.ts","../../../projects/http-request-manager/src/lib/services/ws-manager-service/message-tracker-signals.service.ts","../../../projects/http-request-manager/src/lib/services/ws-manager-service/index.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/request.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/rxjs-operators/countdown.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/rxjs-operators/delay-retry.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/rxjs-operators/request-polling.ts","../../../projects/http-request-manager/src/lib/models/database-storage.model.ts","../../../projects/http-request-manager/src/lib/models/retry-options.model.ts","../../../projects/http-request-manager/src/lib/models/batch-options.model.ts","../../../projects/http-request-manager/src/lib/models/batch-result.model.ts","../../../projects/http-request-manager/src/lib/models/batch-request-state.model.ts","../../../projects/http-request-manager/src/lib/models/batch-progress.model.ts","../../../projects/http-request-manager/src/lib/models/data-type.enum.ts","../../../projects/http-request-manager/src/lib/models/config-http-options.model.ts","../../../projects/http-request-manager/src/lib/models/config-local-storage-options.model.ts","../../../projects/http-request-manager/src/lib/models/config-options.model.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/models/user-data.model.ts","../../../projects/http-request-manager/src/lib/services/ws-manager-service/message-tracker.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/http-manager.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/request-signals.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/http-manager-signals.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/models/api-request.model.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/models/request-options.model.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/models/ws-options.model.ts","../../../projects/http-request-manager/src/lib/services/utils/object-merger.service.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/local-storage-manager.service.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.ts","../../../projects/http-request-manager/src/lib/services/database-manager-service/models/table-schema.ts","../../../projects/http-request-manager/src/lib/services/database-manager-service/db.storage.service.ts","../../../projects/http-request-manager/src/lib/services/database-manager-service/database.manager.service.ts","../../../projects/http-request-manager/src/lib/services/ws-manager-service/models/channel-message.model.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/http-manager-state.store.ts","../../../projects/http-request-manager/src/lib/services/store-state-manager-service/models/state-storage-options.model.ts","../../../projects/http-request-manager/src/lib/services/store-state-manager-service/store-state-manager.service.ts","../../../projects/http-request-manager/src/lib/services/store-state-manager-service/store-state-manager-signals.service.ts","../../../projects/http-request-manager/src/lib/services/index.ts","../../../projects/http-request-manager/src/lib/interceptors/models/error-settings.model.ts","../../../projects/http-request-manager/src/lib/interceptors/credentials.interceptor.ts","../../../projects/http-request-manager/src/lib/interceptors/request-header.interceptor.ts","../../../projects/http-request-manager/src/lib/interceptors/request-error.interceptor.ts","../../../projects/http-request-manager/src/lib/interceptors/proxy-debugger.interceptor.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.ts","../../../projects/http-request-manager/src/lib/message-display/models/display-config.model.ts","../../../projects/http-request-manager/src/lib/message-display/models/display-rule.interface.ts","../../../projects/http-request-manager/src/lib/message-display/models/slide.model.ts","../../../projects/http-request-manager/src/lib/message-display/models/action.model.ts","../../../projects/http-request-manager/src/lib/message-display/models/communication-message.model.ts","../../../projects/http-request-manager/src/lib/message-display/rules/default-display-rules.ts","../../../projects/http-request-manager/src/lib/message-display/strategies/snackbar.strategy.ts","../../../projects/http-request-manager/src/lib/message-display/services/message-display-router.service.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client-info.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-mapper-client-info.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-ai-prompt.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/models/oidc-client.model.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/services/state-service-demo.service.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/services/message-service-demo.service.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/services/notification-service-demo.service.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/services/state-data-request.service.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/store-state-manager-demo/models/settings.model.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/store-state-manager-demo/services/settings-state.service.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/http-request-services-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/http-request-services-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-info.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-mapper-client-info.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-ai-prompt.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-manager.module.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/store-state-signals-demo/store-state-signals-demo.component.ts","../../../projects/http-request-manager/src/public-api.ts","../../../projects/http-request-manager/src/http-request-manager.ts"],"sourcesContent":["export enum StorageType {\n GLOBAL,\n SESSION,\n DB\n}\n","import { StorageType } from \"./storage-type.enum\"\n\nexport interface SettingOptionsInterface {\n storage?: StorageType\n expires?: number\n expiresIn?: string\n encrypted?: boolean\n}\n\nexport class SettingOptions implements SettingOptionsInterface {\n\n constructor(\n public storage?: StorageType,\n public expires?: number,\n public expiresIn?: string,\n public encrypted?: boolean,\n ) {}\n\n static adapt(item?: any): SettingOptions {\n\n const storage = (typeof item?.storage !== 'undefined' && item?.storage !== null) ? Number(item.storage) : StorageType.GLOBAL;\n const expires = (typeof item?.expires !== 'undefined' && item?.expires !== null) ? Number(item.expires) : 0;\n const expiresIn = (typeof item?.expiresIn !== 'undefined' && item?.expiresIn !== null) ? item.expiresIn : '';\n const encrypted = (typeof item?.encrypted !== 'undefined' && item?.encrypted !== null) ? Boolean(item.encrypted) : false;\n\n return new SettingOptions(\n storage,\n expires,\n expiresIn,\n encrypted,\n )\n\n }\n\n}\n","import { SettingOptions } from \"./setting-options.model\"\n\nexport interface StorageOptionInterface {\n id?: string\n name: string\n data?: any\n options?: SettingOptions\n}\n\nexport class StorageOption implements StorageOptionInterface {\n\n constructor(\n public id?: string,\n public name: string = 'untitled',\n public data?: any,\n public options?: SettingOptions,\n ) {}\n\n static adapt(item?: any): StorageOption {\n\n return new StorageOption(\n (item?.id) ? item.id : crypto.randomUUID(),\n (item?.name) ? item.name.toLowerCase() : 'untitled',\n item?.data,\n (item?.options) ? SettingOptions.adapt(item.options) : SettingOptions.adapt(),\n )\n\n }\n\n}\n\n\n","import { StorageOption } from \"./storage-option.model\"\n\nexport interface GlobalStoreOptionsInterface {\n encryption?: boolean\n expiresIn?: string\n expires?: number\n stores: StorageOption[]|null\n}\n\nexport class GlobalStoreOptions implements GlobalStoreOptionsInterface {\n\n constructor(\n public encryption = false,\n public expiresIn?: string,\n public expires?: number,\n public stores: StorageOption[]|null = [],\n ) {}\n\n static adapt(item?: any): GlobalStoreOptions {\n\n return new GlobalStoreOptions(\n (item?.encryption) ? item.encryption : false,\n (item?.expiresIn) ? item.expiresIn : '',\n (item?.expires) ? item.expires : 0,\n (item?.stores) ? item.stores.map((item: any) => StorageOption.adapt(item)) : []\n )\n\n }\n\n}\n","export interface StorageDataInterface {\n id?: string\n data?: any\n}\n\nexport class StorageData implements StorageDataInterface {\n\n constructor(\n public id?: string,\n public data?: any,\n ) {}\n\n static adapt(item?: any): StorageData {\n\n return new StorageData(\n (item?.id) ? item.id : crypto.randomUUID(),\n (item?.data) ? item.data : null\n )\n\n }\n\n}\n\n\n","\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UtilsService {\n\n http = inject(HttpClient)\n\n constructor() { }\n\n isString(x: string | number) {\n return Object.prototype.toString.call(x) === '[object String]'\n }\n\n isObject(obj: any) {\n return Object.prototype.toString.call(obj) === '[object Object]'\n }\n\n JSONToString(value: any) {\n return (this.isObject(value)) ? JSON.stringify(value) : value\n }\n\n stringToJSON(value: string) {\n return (this.isJSON(value)) ? JSON.parse(value) : value\n }\n\n isJSON(str: any) {\n try {\n JSON.parse(str)\n } catch (e) {\n return false\n }\n return true\n }\n\n getValueByProp(obj: any, prop: string) {\n if(typeof obj === 'undefined') return false\n return obj[prop]\n }\n\n objectsEqual(x: any, y: any): boolean {\n\n const ok = Object.keys, tx = typeof x, ty = typeof y\n\n return x && y && tx === 'object' && tx === ty ? (\n ok(x).length === ok(y).length &&\n ok(x).every((key: any) => this.objectsEqual(x[key], y[key]))\n ) : (x === y)\n\n }\n\n getJSON(file: string) {\n return this.http.get(`assets/data/${file}`)\n }\n\n get today() {\n return new Date().getMilliseconds() / 1000\n }\n\n base32ToHex(base32: string): string {\n\n const base32chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\"\n\n const charToValue = (char: string) => base32chars.indexOf(char.toUpperCase())\n\n let bits = ''\n let hex = ''\n\n for (let i = 0; i < base32.length; i++) {\n const val = charToValue(base32.charAt(i))\n bits += val.toString(2).padStart(5, '0')\n }\n\n for (let i = 0; i + 4 <= bits.length; i += 4) {\n const chunk = bits.substr(i, 4)\n hex += parseInt(chunk, 2).toString(16)\n }\n\n return hex.toUpperCase()\n }\n\n binaryToHex(binary: string): string {\n let hex = '';\n for (let i = 0; i < binary.length; i += 8) {\n const byte = binary.substr(i, 8);\n const decimal = parseInt(byte, 2);\n hex += decimal.toString(16).padStart(2, '0');\n }\n return hex.padStart(32, '0').substr(0, 32);\n }\n\n // y = years, m = months, w = weeks, d = days, hr = hours, mn = minutes else seconds\n // returns epoch time corresponding to the expiry type\n expires(str?: string) {\n\n if(!str) return undefined\n\n const match = str.match(/[^0-9]+$/)\n\n const type = (match) ? str.slice(-match[0].length) : 0\n\n const now = Math.floor(new Date().getTime() / 1000)\n\n let value = 0;\n\n switch (type) {\n case\n 'y':\n const years = parseInt(str.slice(0, -1))\n value = now + (years * 31556926)\n break;\n case\n 'm':\n const months = parseInt(str.slice(0, -1))\n value = now + (months * 2629743)\n break;\n case\n 'w':\n const weeks = parseInt(str.slice(0, -1))\n value = now + (weeks * 604800)\n break;\n case\n 'd':\n const days = parseInt(str.slice(0, -1))\n value = now + (days * 86400)\n break;\n case\n 'hr':\n const hrs = parseInt(str.slice(0, -2))\n value = now + (hrs * 3600)\n break;\n case\n 'mn':\n const min = parseInt(str.slice(0, -2))\n value = now + (min * 60)\n break;\n default: //seconds\n const sec = parseInt(str.slice(0, -1))\n value = now + sec\n break;\n }\n return value;\n }\n\n hasExpired(expiryDate: number): boolean {\n if (!expiryDate || expiryDate === 0) return false\n const currentTime = Math.floor(new Date().getTime() / 1000)\n return expiryDate < currentTime\n }\n\n hasExpiry(setting: any) {\n return (setting?.expires) ? true : false\n }\n\n expiresIn(expiryDate: number) {\n\n if (!expiryDate) return;\n\n const now = Math.floor(new Date().getTime() / 1000);\n let diff = expiryDate - now;\n\n if (diff <= 0) return \"Expired\";\n\n const units = [\n { label: 'y', s: 31536000 },\n { label: 'm', s: 2592000 },\n { label: 'w', s: 604800 },\n { label: 'd', s: 86400 },\n { label: 'h', s: 3600 },\n { label: 'min', s: 60 },\n { label: 's', s: 1 },\n ];\n\n let result = [];\n\n for (const unit of units) {\n if (diff >= unit.s) {\n const value = Math.floor(diff / unit.s);\n diff %= unit.s;\n result.push(`${value}${unit.label}`);\n }\n }\n\n return result.join(', ');\n }\n\n lc = (str: string) => str.toLowerCase().replace(/[^\\w\\s]/g, '').replace(/\\s+/g, '_')\n\n}\n","export const Random = () => {\n const typedArray = new Uint8Array(1)\n const randomValue = crypto.getRandomValues(typedArray)[0]\n const randomFloat = randomValue / Math.pow(2, 8)\n return randomFloat\n}\n\nexport const RandomNumber = (min: number, max: number) => {\n return Math.floor(Random() * max) + min\n}\n\nexport const RandomNumbers = (min: number, max: number, length: number) => {\n const numbers: number[] = []\n for (let i = 0; i < length; i++) numbers.push(Math.floor(Random() * max) + min)\n return numbers\n}\n\nexport const RandomNumbersUnique = (min: number, max: number, length: number) => {\n let count = 0;\n\n // Adjust the length if it exceeds the number of unique numbers possible in the range\n if (length > (max - min + 1)) {\n console.error('error encountered');\n length = max - min + 1;\n }\n\n console.log('length', length);\n const numbers: number[] = [];\n const maxAttempts = length * 100 ; // Safeguard to prevent infinite loops\n\n while (numbers.length < length && count < maxAttempts) {\n\n const num = Math.floor(Random() * max) + min;\n\n if (!numbers.includes(num)) {\n numbers.push(num);\n }\n }\n\n if (count >= maxAttempts) {\n throw new Error('Maximum attempts exceeded while generating unique numbers');\n }\n\n return numbers;\n};\n\nexport const RandomStr = () => {\n\n const typedArray = new Uint8Array(8)\n const array = new Uint32Array(1)\n crypto.getRandomValues(array)\n return array[0].toString(36)\n\n}\n\nexport const RandomSignature = () => {\n\n const typedArray = new Uint8Array(8)\n const array = new Uint32Array(1)\n crypto.getRandomValues(array)\n return array[0]\n\n}\n\nexport const UUID = () => {\n return self.crypto.randomUUID()\n}\n\n/**\n * Generate a UUID string (legacy format)\n */\nexport const UUID_STR = (): string => {\n const s4 = () => {\n return Math.floor((1 + Random()) * 0x10000)\n .toString(16)\n .substring(1);\n };\n return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\n};\n\n\n","import { APP_ID, Inject, Injectable } from '@angular/core';\n\n// Must provide a value for APP_ID in AppModule->Providers\n// providers: [\n// {\n// provide: APP_ID,\n// useValue: \"056991ac-3537-43ab-b5b9-83edf6554eff\",\n// },\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AppService {\n\n appID: string\n\n constructor(@Inject(APP_ID) private id: string) {\n this.appID = this.id\n }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport * as CryptoJS from 'crypto-js';\n\nimport { RandomSignature } from './random';\nimport { AppService } from '../app.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SymmetricalEncryptionService {\n\n appID: string; // APP SERVICE TO MANAGER ENCRYPTION KEY\n\n private appService = inject(AppService)\n\n constructor() {\n // TODO: The APP ID is not a string, it is a function\n this.appID = (this.appService.appID) ? this.appService.appID : ''\n if(this.appID === '') console.warn('No App Key has been define')\n }\n\n generateCipherKey() {\n return (RandomSignature().toString() + RandomSignature().toString()).substring(0, 8)\n }\n\n encrypt(str: any, key = this.appID) {\n\n if(!str || key === '') return ''\n\n let _key = CryptoJS.enc.Utf8.parse(key)\n let _iv = CryptoJS.enc.Utf8.parse(key)\n\n try {\n\n const encrypted = CryptoJS.AES.encrypt(\n JSON.stringify(str), _key, {\n keySize: 16,\n iv: _iv,\n mode: CryptoJS.mode.ECB,\n padding: CryptoJS.pad.Pkcs7\n });\n\n return encrypted.toString()\n\n } catch(error: any) {\n console.log(error)\n }\n\n return\n }\n\n decrypt(str: string, key = this.appID) {\n\n if(!str || key === '') return\n\n let _key = CryptoJS.enc.Utf8.parse(key)\n let _iv = CryptoJS.enc.Utf8.parse(key)\n\n try {\n\n const decrypted = CryptoJS.AES.decrypt(\n str, _key, {\n keySize: 16,\n iv: _iv,\n mode: CryptoJS.mode.ECB,\n padding: CryptoJS.pad.Pkcs7\n });\n\n // Check if the decrypted data is valid before converting to UTF-8\n const decryptedStr = decrypted.toString(CryptoJS.enc.Utf8);\n if (!decryptedStr) {\n console.warn('Decryption resulted in empty string');\n return null;\n }\n\n return decryptedStr;\n\n } catch(error: any) {\n console.error('Decryption failed:', error.message);\n return null;\n }\n\n return null;\n }\n\n createSignature(url: string, len = 16) {\n const sig = CryptoJS.SHA256(url).toString(CryptoJS.enc.Hex)\n return sig.substring(0, len).toUpperCase()\n }\n\n normalizeURL(url: string) {\n const normalizedURL = url.replace(/(https?:\\/\\/)?(www\\.)?/, '').replace(/\\/+$/, '');\n return normalizedURL;\n }\n\n generateSignature(url: string) {\n const normalizedURL = this.normalizeURL(url)\n const hash = CryptoJS.SHA256(normalizedURL)\n const signature = hash.toString(CryptoJS.enc.Hex)\n return signature;\n }\n\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EncryptionTestService {\n\n constructor() { }\n\n private isBase64(str: string): boolean {\n const base64Pattern = /^(?:[A-Z0-9+/]{4})*(?:[A-Z0-9+/]{2}==|[A-Z0-9+/]{3}=)?$/i;\n return base64Pattern.test(str);\n }\n\n private isHexadecimal(str: string): boolean {\n const hexPattern = /^[0-9a-fA-F]+$/;\n return hexPattern.test(str) && (str.length % 2 === 0);\n }\n\n private hasHighEntropy(str: string): boolean {\n const uniqueChars = new Set(str).size;\n return uniqueChars > str.length * 0.6;\n }\n\n isEncrypted(str: string): boolean {\n\n if (typeof str !== 'string') {\n return false;\n }\n\n if (this.isBase64(str) || this.isHexadecimal(str)) {\n return true;\n }\n\n return this.hasHighEntropy(str);\n\n }\n\n}\n","import { InjectionToken } from \"@angular/core\";\nimport { ConfigOptions } from \"./config-options.model\";\n\n/**\n * An injection token that provides the configuration settings for the application.\n * This token can be used to inject the `ConfigSettings` instance into components or services\n * that require access to the application configuration.\n */\nexport const CONFIG_SETTINGS_TOKEN = new InjectionToken<ConfigOptions>('http.config');\n","/**\n * Enum representing valid streaming format types\n * \n * This enum defines all supported streaming formats for HTTP requests.\n * Each enum value corresponds to a specific data format and parsing strategy.\n */\nexport enum StreamType {\n JSON = 'json',\n NDJSON = 'ndjson', \n AI_STREAMING = 'ai_streaming',\n EVENT_STREAM = 'event_stream',\n AUTO = 'auto'\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HeadersService {\n\n headers = {}\n\n generateHeaders(headers?: Record<string, string>): { headers: HttpHeaders } {\n\n const allHeaders = headers ? { ...this.headers, ...headers } : {}\n return { headers: new HttpHeaders(allHeaders) }\n\n }\n\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PathQueryService {\n\n buildAPIPath(server: string|string[], params?: any[]|any) {\n\n server = (Array.isArray(server)) ? server.join('/') : server\n\n const pathObjects = (params) ? params.filter((path:any) => (!this.isObject(path))) : []\n const queryObjects = (params) ? params.filter((path:any) => (this.isObject(path))) : []\n\n const query = this.removeEmptyParams(queryObjects.reduce((r: any, c: any) => {\n Object.entries(c).forEach(([key, value]) => {\n r[key] = Array.isArray(value) ? value.join(',') : value\n })\n return r\n }, {}))\n\n let path = this.buildRestPath(server, pathObjects)\n\n return(Object.keys(query).length > 0) ? path + '?' + this.buildQueryPath(query) : path\n\n }\n\n private buildRestPath(server: string, params: any[]): string {\n server = (server) ? server : ''\n server = (server.charAt(0) === '/') ? server.substring(1) : server\n return this.cleanUrlPath(server +'/'+ params.join('/'))\n }\n\n private buildQueryPath(params: any): string {\n\n const searchParams = new URLSearchParams()\n\n for (const key in params) {\n\n if (Array.isArray(params[key])) {\n params[key].forEach((value: any) => searchParams.append(key, value));\n } else {\n searchParams.append(key, params[key]);\n }\n\n }\n\n return searchParams.toString()\n\n }\n\n private cleanUrlPath(str: string) {\n return str.replace(/([^:]\\/)\\/+/g, \"$1\").replace(/\\/$/,'')\n }\n\n private isObject(val: any): boolean {\n return (val === null) ? false : ( (typeof val === 'function') || (typeof val === 'object') )\n }\n\n private removeEmptyParams = (obj: any): Record<string, any> =>\n Object.fromEntries(\n Object.entries(obj)\n .map(([key, value]) =>\n [key, value && typeof value === 'object' ? this.removeEmptyParams(value) : value]\n )\n .filter(([_, value]) => value !== undefined && value !== \"\")\n )\n\n}\n","/**\n * Generate a random hex color code\n * @returns A random hex color string (e.g., \"#FF5733\")\n */\nexport const RandomHexColor = (): string => {\n // Generate a random number between 0 and 16777215 (0xFFFFFF)\n const randomColor = Math.floor(Math.random() * 16777215);\n // Convert to hexadecimal and pad with zeros to ensure 6 digits\n const hexColor = randomColor.toString(16).padStart(6, '0');\n // Return with # prefix\n return `#${hexColor}`;\n};\n\n/**\n * Generate a random hex color with constraints to ensure good visibility\n * @param options Optional constraints for color generation\n * @returns A random hex color string with good contrast\n */\nexport const RandomVisibleColor = (options?: {\n minBrightness?: number; // Minimum brightness (0-255), default: 50\n maxBrightness?: number; // Maximum brightness (0-255), default: 200\n}): string => {\n const minBrightness = options?.minBrightness ?? 50;\n const maxBrightness = options?.maxBrightness ?? 200;\n\n // Generate RGB values within the specified brightness range\n const r = Math.floor(Math.random() * (maxBrightness - minBrightness) + minBrightness);\n const g = Math.floor(Math.random() * (maxBrightness - minBrightness) + minBrightness);\n const b = Math.floor(Math.random() * (maxBrightness - minBrightness) + minBrightness);\n\n // Convert to hex and pad with zeros\n const toHex = (n: number) => n.toString(16).padStart(2, '0');\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n};\n\n/**\n * Generate a random color from a predefined palette\n * @returns A hex color from a set of visually distinct colors\n */\nexport const RandomPaletteColor = (): string => {\n const colorPalette = [\n '#FF6B6B', // Coral\n '#4ECDC4', // Turquoise\n '#45B7D1', // Sky Blue\n '#FFBE0B', // Amber\n '#FB5607', // Orange\n '#8338EC', // Violet\n '#3A86FF', // Azure\n '#38B000', // Green\n '#9D4EDD', // Purple\n '#FF006E', // Pink\n '#0077B6', // Blue\n '#2A9D8F' // Teal\n ];\n\n const randomIndex = Math.floor(Math.random() * colorPalette.length);\n return colorPalette[randomIndex];\n};\n\n/**\n * Generate a random HSL color\n * @param options Optional constraints for HSL generation\n * @returns A random HSL color string (e.g., \"hsl(120, 100%, 50%)\")\n */\nexport const RandomHSLColor = (options?: {\n saturation?: [number, number]; // Saturation range (0-100), default: [50, 100]\n lightness?: [number, number]; // Lightness range (0-100), default: [40, 80]\n}): string => {\n // Full range for hue (0-360)\n const hue = Math.floor(Math.random() * 361);\n\n // Default or custom saturation range\n const satMin = options?.saturation?.[0] ?? 50;\n const satMax = options?.saturation?.[1] ?? 100;\n const saturation = Math.floor(Math.random() * (satMax - satMin + 1) + satMin);\n\n // Default or custom lightness range\n const lightMin = options?.lightness?.[0] ?? 40;\n const lightMax = options?.lightness?.[1] ?? 80;\n const lightness = Math.floor(Math.random() * (lightMax - lightMin + 1) + lightMin);\n\n return `hsl(${hue}, ${saturation}%, ${lightness}%)`;\n};\n","import { Injectable } from '@angular/core';\n\nimport { BehaviorSubject, EMPTY, Observable, from, of } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AsymmetricalEncryptionService {\n\n constructor() {}\n\n generateKeyPair(modulusLength = 2048): Observable<CryptoKeyPair> {\n \n // modulusLength - 1024, 2048, 4096\n // hash - SHA-256\n\n return from(crypto.subtle.generateKey(\n {\n name: \"RSA-OAEP\",\n modulusLength,\n publicExponent: new Uint8Array([1, 0, 1]), // 65537\n hash: { name: \"SHA-256\" }\n },\n true, // Extractable keys\n [\"encrypt\", \"decrypt\"]\n ))\n\n }\n\n encryptData(publicKey: CryptoKey, data: string) {\n\n const encodedData = new TextEncoder().encode(data)\n\n return from(crypto.subtle.encrypt(\n {\n name: \"RSA-OAEP\"\n },\n publicKey,\n encodedData\n )).pipe(\n map(enc => this.arrayBufferToBase64(enc))\n )\n\n }\n\n decryptData(privateKey: CryptoKey, encryptedData: string) {\n\n const encStr = this.base64ToArrayBuffer(encryptedData)\n\n return from(crypto.subtle.decrypt(\n {\n name: \"RSA-OAEP\"\n },\n privateKey,\n encStr\n ).then(decryptedData => {\n return new TextDecoder().decode(decryptedData)\n }))\n\n }\n\n pemToArrayBuffer(pem: string): ArrayBuffer {\n\n const b64 = pem.replace(/(-----BEGIN (RSA )?(PRIVATE|PUBLIC) KEY-----|-----END (RSA )?(PRIVATE|PUBLIC) KEY-----|\\n)/g, '')\n const binaryString = atob(b64)\n const len = binaryString.length\n const buffer = new ArrayBuffer(len)\n const view = new Uint8Array(buffer)\n\n for (let i = 0; i < len; i++) {\n view[i] = binaryString.charCodeAt(i)\n }\n\n return buffer\n\n }\n\n base64ToArrayBuffer(base64: string): ArrayBuffer {\n \n const binaryString = atob(base64);\n const len = binaryString.length;\n const buffer = new ArrayBuffer(len);\n const view = new Uint8Array(buffer);\n\n for (let i = 0; i < len; i++) {\n view[i] = binaryString.charCodeAt(i);\n }\n\n return buffer;\n }\n\n arrayBufferToBase64(buffer: ArrayBuffer): string {\n\n let binary = '';\n const bytes = new Uint8Array(buffer);\n const len = bytes.byteLength;\n\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n\n return window.btoa(binary)\n\n }\n\n base64ToPEM(base64Key: string, publicKey = true) {\n\n const keyType = (publicKey) ? 'PUBLIC' : 'PRIVATE'\n\n const header = `-----BEGIN ${keyType} KEY-----\\n`\n const footer = `\\n-----END ${keyType} KEY-----`\n\n const keyBody = base64Key.match(/.{1,64}/g)?.join(\"\\n\") || \"\"\n\n return header + keyBody + footer\n\n }\n\n pemToCryptoKey(\n pem: string, \n algorithm: RsaHashedKeyGenParams, \n extractable: boolean, \n keyUsages: KeyUsage[],\n format: any = \"pkcs8\" //\"raw\" | \"pkcs8\" | \"spki\"\n ) {\n \n const buffer = this.pemToArrayBuffer(pem);\n\n console.log('buffer found ', buffer);\n \n return from(crypto.subtle.importKey(\n format,\n buffer,\n algorithm,\n extractable,\n keyUsages\n ))\n\n }\n \n // TESTING\n\n testGenerateKeys(): Observable<string> {\n const testSequence: BehaviorSubject<string> = new BehaviorSubject<string>(\"\");\n const testSequence$: Observable<string> = testSequence.asObservable();\n testSequence.next(\"Test Generating Keys\");\n\n // GENERATE KEYS\n this.generateKeyPair().subscribe((data) => {\n\n console.log(\"GEN-GENERATED KEYS: \", data)\n\n crypto.subtle.exportKey('spki', data.publicKey)\n .then(key => {\n const publicKeyBase64 = this.arrayBufferToBase64(key);\n console.log(\"GEN-EXPORT PUBLIC KEY: \", this.base64ToPEM(publicKeyBase64, true));\n })\n\n crypto.subtle.exportKey('pkcs8', data.privateKey)\n .then(key => {\n const privateKeyBase64 = this.arrayBufferToBase64(key);\n console.log(\"GEN-EXPORT PRIVATE KEY: \", this.base64ToPEM(privateKeyBase64, false));\n });\n\n // TEST WITH GENERATED KEYS\n this.encryptData(data.publicKey, \"Sample Data here - Mike Bonifacio\")\n .subscribe((enc) => {\n\n console.log(\"GEN-ENCRYPT==>: \", enc)\n\n this.decryptData(data.privateKey, enc).subscribe((dec) => {\n testSequence.next('Test Passed');\n testSequence.complete();\n })\n\n })\n\n })\n return testSequence$;\n\n }\n\n testDecryptionWithKeys(): Observable<string> {\n const testSequence: BehaviorSubject<string> = new BehaviorSubject<string>(\"\");\n const testSequence$: Observable<string> = testSequence.asObservable();\n testSequence.next(\"Test Generating Keys\");\n\n const privateKey = `-----BEGIN PRIVATE KEY-----\n MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDKVBkCWNb9eHVF\n twAA5mdAyvXFix3WavdrsoYRkvtCl8ogDBQf8f6N0bRkDF1zcVHRrNAEyozXDtuD\n kFgSiivBFREI7fiS3sOvduq6FaGXzX0IY6oaVMu8oOPgDvC0yvoohR+0Qxq2d6lP\n SPyHeKQaxP4KxzCJJzB1XAcbd2eFzUUDv25mNlwdVkmW8FI/sAxnJLgPTW78dzfX\n Ddfk+nxdIqxVKSLATnL0kMN7aGJx24UozioAIpzvvvF5/+7HTd1gi6NeCqrAYr3g\n iP364AE26CFwFvHnafO9uNQhlQ+uiNnOoInXByfFGVP+RidSpfLzaxDjs6RDwpol\n h098btONAgMBAAECggEAAVhHM2OD5IkUtuowwcKNaCTKGmrClRE3gMuzJeBsSJEy\n uAReUFILZylcnhegDytSti2vDA9T7xqtO6CU0p3V8LpU89JMOPRb/deirI4UXSpx\n xbNyjirOO6bnrNlOWfKexdQQsikYPzF2iM1Scpr1u9ZDCHZOl1ZYSrkve5My4coP\n 3Gx6tTBqL0jQBfcpf4ES8BH3JSawR/MgqzDS74+bI2VH+kvuPAC1L4fBgaV3VUv0\n nFzim5A3s5VaXPgJbEIghP9BkYGFkeT9ma3nliEZWc96AzsmowFn1ayCvrNVPo9R\n ECD2NnttBiCJZt3H93sR9+OTeA8Bls+aZGlKd5mLAQKBgQDpf8nIYUm/Zmls7/lQ\n QBUSGHEYrbjNsEejQsPgNDtg2EVSxdUkvTn7Wb+HExTk09Z5bNvhaO2532/FH9y8\n ahSXafiMXpfR2olwXdOB9yXXl4F5C0LGnmzGim4OSeWzAX0JCL470KaS0QN3EmoG\n 9F0YCfMnZXNTweSSx4xvlO6ggQKBgQDd01uIolm7z1DIWCwNERAXP2GDwcvxyzYK\n YqJfKDeHt2t6yIzZMMotnPDy+OlcdGspIIHkB5a+SZN5Nt7DUKg/MnyOZ3KbVq41\n k7dR4Ka3LRnGkesy7lSr7ef1rfquyR75OXJQcPWvkFcLu0TMiQhvptatZ8VN+F4n\n fDQELRotDQKBgQCgN+AUT7VT0QjcCBnRV/ddUEoiPenFsYSmYMSYzh5ESIHg1wB2\n 0iS79Iw4Of6nOTg8X1bM57vfQ5Kk90T2P+/bKYqzfqC8DTErWiYsUpKzyTC9Bt4N\n /Vz0Kr5zrX8ggg/yp/4oevYhXav8AzWfigNq4EDpMnKc8TlPAf+5/L50gQKBgQC2\n mLPhPhr1gUszD3l7bA89w7uGlLFHoQoj9FtKTzWervp3QLzIT+QtNeIVb5XQuDg5\n y3uAdEq+6pvNjMBEMJG+K9Xh9v+dJPYUPjsJ2A4D/MkZ7qWX8B2cxSJK1uLim8W2\n S3ZxBvsGgJ9WldmlMCvUlJZkeWYtr4P5psC+q02/xQKBgQCDII/jcV2+lRM2iNTe\n vBijZSaNMEWOK/Y+/HFK8GYKXnB+xNWhrm8rKgWGzpDJAUPMh9Tt+leW9LKEBuzF\n Y1bGblmGm1zsPWpIx05Fdtv9eOJmFnXbGzIsYyhadZnPcQOWhqxtpVxSuul0Jc7Q\n XNq4qPaPXhbQAshgtyBt75DMkw==\n -----END PRIVATE KEY-----`\n \n const pubKey = `-----BEGIN PUBLIC KEY-----\n MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylQZAljW/Xh1RbcAAOZn\n QMr1xYsd1mr3a7KGEZL7QpfKIAwUH/H+jdG0ZAxdc3FR0azQBMqM1w7bg5BYEoor\n wRURCO34kt7Dr3bquhWhl819CGOqGlTLvKDj4A7wtMr6KIUftEMatnepT0j8h3ik\n GsT+CscwiScwdVwHG3dnhc1FA79uZjZcHVZJlvBSP7AMZyS4D01u/Hc31w3X5Pp8\n XSKsVSkiwE5y9JDDe2hicduFKM4qACKc777xef/ux03dYIujXgqqwGK94Ij9+uAB\n NughcBbx52nzvbjUIZUProjZzqCJ1wcnxRlT/kYnUqXy82sQ47OkQ8KaJYdPfG7T\n jQIDAQAB\n -----END PUBLIC KEY-----`\n\n const algorithm: RsaHashedKeyGenParams = {\n name: \"RSA-OAEP\",\n modulusLength: 2048,\n publicExponent: new Uint8Array([1, 0, 1]),\n hash: \"SHA-256\"\n };\n\n // ENCRYPT\n this.pemToCryptoKey(\n pubKey,\n algorithm,\n true,\n [\"encrypt\"],\n \"spki\"\n ).subscribe((keyPublic) => {\n\n // console.log(\"PUBLIC KEY: \", keyPublic)\n\n this.encryptData(keyPublic, \"Sample Data here - Mike Bonifacio\")\n .subscribe((str) => {\n console.log(\"ENCRYPTED STRING: \", str);\n testSequence.next('encrypted string success');\n })\n\n })\n\n const enc = \"r7UOuEGBZ6jbVTOIBuv9jFOEtRiedmS27hfW40k7XKCTsQ5VhWup0qu2BA2ANZaGKii/uehJ/RSPiyfGbJ6leJrat0mA1hPqH/XodaBzLMDigvdYM1NSXFZMDa40OpLUIXbPlAvybjcGu7Bal+LMA8htHrFu/OmM/fHI66xOzzpuXSYx0OkWjtY81rUQ1FFkvrkx2jGFPZ0p+Nw/v3Q4cJnet6V63vCueFlD749VMcVXo7pvz4AIPpB+IOy3kbxaYTPakLVioJERU6GFMXWkECuRvohhS9CETcORZtRVRkvhcHk3lxgIhfqojUKYgD6K5dDELDPsWIS+iTG1XIQIlg==\";\n\n // DECRYPTION\n this.pemToCryptoKey(\n privateKey,\n algorithm,\n false,\n [\"decrypt\"],\n \"pkcs8\"\n ).subscribe((key) => {\n\n // console.log(\"DECRYPT ===\", key)\n\n this.decryptData(key, enc)\n .pipe(\n catchError(err => {\n console.log(\"ERROR: \", err);\n return EMPTY\n })\n ).subscribe((str) => {\n console.log(\"DECRYPTED STRING: \", str);\n testSequence.next('decrypted string success');\n })\n\n })\n\n return testSequence$;\n };\n}\n","import { Injectable, isDevMode } from '@angular/core';\n\n/**\n * LoggerService for http-request-manager library\n *\n * Automatically enables debug logging in development mode,\n * disables it in production mode.\n *\n * Usage:\n * ```typescript\n * constructor(private logger: LoggerService) {}\n *\n * this.logger.debug('WebSocket', 'Connected successfully');\n * this.logger.info('HTTP', 'Request completed', { status: 200 });\n * this.logger.warn('State', 'Cache miss for key', { key: 'user' });\n * this.logger.error('Database', 'Connection failed', error);\n * ```\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class LoggerService {\n private debugMode: boolean;\n\n constructor() {\n // Automatically detect development vs production mode\n this.debugMode = isDevMode();\n }\n\n /**\n * Debug level logging - only shown in development mode\n * Use for: Detailed diagnostic information, state changes, connection events\n */\n debug(context: string, message: string, data?: any): void {\n if (this.debugMode) {\n console.log(`[HTTP-MGR DEBUG] ${context}: ${message}`, data ?? '');\n }\n }\n\n /**\n * Info level logging - only shown in development mode\n * Use for: Important operational messages, successful operations\n */\n info(context: string, message: string, data?: any): void {\n if (this.debugMode) {\n console.info(`[HTTP-MGR INFO] ${context}: ${message}`, data ?? '');\n }\n }\n\n /**\n * Warning level logging - always shown\n * Use for: Potential issues, deprecated usage, recoverable errors\n */\n warn(context: string, message: string, data?: any): void {\n console.warn(`[HTTP-MGR WARN] ${context}: ${message}`, data ?? '');\n }\n\n /**\n * Error level logging - always shown\n * Use for: Actual errors, failures, exceptions\n */\n error(context: string, message: string, data?: any): void {\n console.error(`[HTTP-MGR ERROR] ${context}: ${message}`, data ?? '');\n }\n\n /**\n * Check if debug mode is enabled (development mode)\n */\n isDebugEnabled(): boolean {\n return this.debugMode;\n }\n}\n","import { OperatorFunction } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { HttpEventType } from '@angular/common/http';\nimport { StreamType } from '../../request-manager-state-service/models/stream-type.enum';\n\nexport interface StreamConfig {\n streamType: StreamType;\n}\n\n// TypeScript interfaces for proper type safety\nexport interface StreamEvent<T = any> {\n type: 'progress' | 'complete' | 'data';\n data: T;\n metadata?: {\n timestamp: Date;\n streamType: StreamType;\n contentLength?: number;\n };\n}\n\nexport interface ParsingResult<T = any> {\n success: boolean;\n data?: T[];\n error?: string;\n}\n\n/**\n * Stateful processor for managing streaming data and events\n */\nclass StreamingProcessor<T = any> {\n private buffer = '';\n private contentType = '';\n private readonly maxBufferSize = 10 * 1024 * 1024; // 10MB limit\n private streamConfig: StreamConfig;\n\n constructor(config?: StreamConfig) {\n this.streamConfig = config || { streamType: StreamType.AI_STREAMING };\n }\n\n /**\n * Process HTTP events and extract streaming data\n */\n process(event: any): T[] | null {\n switch (event.type) {\n case HttpEventType.ResponseHeader:\n this.contentType = event.headers?.get('content-type') || '';\n return null;\n\n case HttpEventType.DownloadProgress:\n if (event.partialText) {\n this.appendToBuffer(event.partialText);\n const parsedData = this.parseBuffer();\n return parsedData.length > 0 ? [parsedData[0]] : null;\n }\n return null;\n\n case HttpEventType.Response:\n if (event.body) {\n this.appendToBuffer(event.body);\n const parsedData = this.parseBuffer();\n return parsedData.length > 0 ? parsedData : null;\n }\n return null;\n\n default:\n return null;\n }\n }\n\n /**\n * Append data to buffer with size management\n */\n private appendToBuffer(data: string): void {\n this.buffer += data;\n\n // Implement sliding window if buffer gets too large\n if (this.buffer.length > this.maxBufferSize) {\n this.buffer = this.buffer.slice(-this.maxBufferSize / 2);\n }\n }\n\n /**\n * Parse current buffer content\n */\n private parseBuffer(): T[] {\n if (!this.buffer.trim()) {\n return [];\n }\n\n try {\n const result = parseStreamData(this.buffer, this.contentType, this.streamConfig);\n return result as T[];\n } catch (error) {\n console.warn('Failed to parse streaming data:', error);\n return [];\n }\n }\n\n /**\n * Reset processor state\n */\n reset(): void {\n this.buffer = '';\n this.contentType = '';\n }\n\n /**\n * Update configuration\n */\n updateConfig(config: StreamConfig): void {\n this.streamConfig = config;\n }\n}\n\n/**\n * Safe JSON parsing with error handling\n */\nfunction safeJsonParse<T>(jsonStr: string, fallback?: T): T | null {\n try {\n return JSON.parse(jsonStr);\n } catch (error) {\n console.warn('Failed to parse JSON:', jsonStr.substring(0, 100));\n return fallback || null;\n }\n}\n\n/**\n * Safe JSON array parsing\n */\nfunction safeJsonArrayParse<T>(jsonStr: string, fallback: T[] = []): T[] {\n try {\n const parsed = JSON.parse(jsonStr);\n return Array.isArray(parsed) ? parsed : fallback;\n } catch (error) {\n console.warn('Failed to parse JSON array:', jsonStr.substring(0, 100));\n return fallback;\n }\n}\n\n/**\n * Enhanced JSON object extraction with better error handling\n */\nfunction extractJsonObjects(text: string): string[] {\n const objects: string[] = [];\n let braceCount = 0;\n let currentObject = '';\n let inString = false;\n let escaped = false;\n\n for (let i = 0; i < text.length; i++) {\n const char = text[i];\n\n if (escaped) {\n currentObject += char;\n escaped = false;\n continue;\n }\n\n if (char === '\\\\') {\n escaped = true;\n currentObject += char;\n continue;\n }\n\n if (char === '\"' && !escaped) {\n inString = !inString;\n }\n\n if (!inString) {\n if (char === '{') braceCount++;\n else if (char === '}') braceCount--;\n }\n\n currentObject += char;\n\n if (braceCount === 0 && currentObject.trim()) {\n objects.push(currentObject.trim());\n currentObject = '';\n }\n }\n\n return objects;\n}\n\n/**\n * COMPREHENSIVE REQUEST STREAMING OPERATOR - FULLY ABSTRACTED\n * Refactored for better type safety and memory management\n *\n * Single function that handles ALL streaming formats without hardcoded assumptions:\n * - JSON format (Individual JSON objects)\n * - NDJSON format (Newline delimited JSON)\n * - AI streaming format (Real-time AI responses)\n * - Server-Sent Events format\n * - Auto-detection mode\n *\n * Usage:\n * this.http.get(url, options).pipe(requestStreaming()).subscribe(data => {...})\n * this.http.get(url, options).pipe(requestStreaming({ streamType: StreamType.NDJSON })).subscribe(data => {...})\n */\nexport function requestStreaming<T = any>(config?: StreamConfig): OperatorFunction<any, T[]> {\n const processor = new StreamingProcessor<T>(config);\n\n return input$ => input$.pipe(\n // Filter only streaming-related events\n filter((event: any) =>\n event.type === HttpEventType.DownloadProgress ||\n event.type === HttpEventType.Response ||\n event.type === HttpEventType.ResponseHeader\n ),\n\n // Process events using the streaming processor\n map((event: any) => {\n const result = processor.process(event);\n return result;\n }),\n\n // Filter out null results\n filter((result): result is T[] => result !== null)\n );\n}\n\n/**\n * Main streaming data parser - handles ALL formats based on streamType\n */\nfunction parseStreamData(buffer: string, contentType: string, config: StreamConfig): any[] {\n const results: any[] = [];\n\n if (!buffer.trim()) {\n return results;\n }\n\n // Determine parsing format based on streamType and content type\n const format = config.streamType === StreamType.AI_STREAMING ? detectFormat(buffer, contentType) : config.streamType;\n\n switch (format) {\n case StreamType.NDJSON:\n return parseNdjson(buffer, config);\n\n case StreamType.JSON:\n return parseJsonObjects(buffer, config);\n\n case StreamType.AI_STREAMING:\n return parseAiStreaming(buffer, config);\n\n case StreamType.EVENT_STREAM:\n return parseEventStream(buffer, config);\n\n default:\n return autoParse(buffer, contentType, config);\n }\n}\n\n/**\n * Parse NDJSON format (JSON objects per line)\n */\nfunction parseNdjson(buffer: string, config: StreamConfig): any[] {\n const results: any[] = [];\n const lines = buffer.split('\\n').filter(line => line.trim());\n\n lines.forEach(line => {\n const trimmedLine = line.trim();\n if (trimmedLine && trimmedLine.startsWith('{') && trimmedLine.endsWith('}')) {\n const parsed = safeJsonParse(trimmedLine);\n if (parsed) results.push(parsed);\n }\n });\n\n return results;\n}\n\n/**\n * Parse individual JSON objects\n */\nfunction parseJsonObjects(buffer: string, config: StreamConfig): any[] {\n const results: any[] = [];\n const jsonObjects = extractJsonObjects(buffer);\n\n jsonObjects.forEach(jsonStr => {\n const parsed = safeJsonParse(jsonStr);\n if (parsed) results.push(parsed);\n });\n\n return results;\n}\n\n/**\n * Parse AI streaming format\n */\nfunction parseAiStreaming(buffer: string, config: StreamConfig): any[] {\n const results: any[] = [];\n const jsonObjects = extractJsonObjects(buffer);\n\n jsonObjects.forEach(jsonStr => {\n const parsed = safeJsonParse(jsonStr);\n if (parsed && typeof parsed === 'object' && parsed !== null && 'type' in parsed) {\n const typedParsed = parsed as any;\n if (['ai_thinking', 'ai_response', 'ai_suggestion', 'ai_status'].includes(typedParsed.type)) {\n results.push(typedParsed);\n }\n }\n });\n\n return results;\n}\n\n/**\n * Parse Server-Sent Events format\n */\nfunction parseEventStream(buffer: string, config: StreamConfig): any[] {\n const results: any[] = [];\n const events = buffer.split('\\n\\n').filter(event => event.trim());\n\n events.forEach(event => {\n const lines = event.split('\\n');\n let eventData = '';\n\n lines.forEach(line => {\n if (line.startsWith('data: ')) {\n eventData += line.substring(6);\n }\n });\n\n if (eventData) {\n try {\n const parsed = JSON.parse(eventData);\n if(parsed) results.push(parsed);\n } catch (e) {\n results.push({\n content: eventData,\n _streamType: 'event_stream',\n _format: StreamType.EVENT_STREAM,\n _timestamp: new Date().toISOString()\n });\n }\n }\n });\n\n return results;\n}\n\n/**\n * Auto-detect and parse unknown formats\n */\nfunction autoParse(buffer: string, contentType: string, config: StreamConfig): any[] {\n // Check content type hints\n if (contentType.includes('application/x-ndjson') || isNdjsonFormat(buffer)) {\n return parseNdjson(buffer, config);\n }\n\n if (contentType.includes('application/json') || buffer.includes('{')) {\n // Check if it looks like AI streaming\n if (buffer.includes('\"type\":') && buffer.includes('\"ai_')) {\n return parseAiStreaming(buffer, config);\n }\n return parseJsonObjects(buffer, config);\n }\n\n if (contentType.includes('text/event-stream')) {\n return parseEventStream(buffer, config);\n }\n\n // Fallback: try to parse as JSON, otherwise treat as text\n const jsonObjects = extractJsonObjects(buffer);\n if (jsonObjects.length > 0) {\n return parseJsonObjects(buffer, config);\n } else {\n // Return as text chunks\n return buffer.split('\\n').filter(line => line.trim()).map(line => ({\n content: line.trim(),\n _streamType: 'text',\n _format: 'plain',\n _timestamp: new Date().toISOString()\n }));\n }\n}\n\n/**\n * Detect streaming format from content\n */\nfunction detectFormat(buffer: string, contentType: string): StreamType {\n if (contentType.includes('application/x-ndjson') || isNdjsonFormat(buffer)) {\n return StreamType.NDJSON;\n }\n\n if (contentType.includes('text/event-stream')) {\n return StreamType.EVENT_STREAM;\n }\n\n if (contentType.includes('application/json') || buffer.includes('{')) {\n // Check if it looks like AI streaming\n if (buffer.includes('\"type\":') && buffer.includes('\"ai_')) {\n return StreamType.AI_STREAMING;\n }\n return StreamType.JSON;\n }\n\n return StreamType.JSON; // Default\n}\n\n/**\n * Check if buffer is NDJSON format\n */\nfunction isNdjsonFormat(buffer: string): boolean {\n const lines = buffer.split('\\n').filter(line => line.trim());\n const jsonLines = lines.filter(line => line.trim().startsWith('{') && line.trim().endsWith('}'));\n return jsonLines.length > 1 || (lines.length > 1 && jsonLines.length > 0);\n}\n\n/**\n * Convenience functions for common use cases\n */\n\n// Stream with JSON format\nexport function streamJSON<T = any>(): OperatorFunction<any, T[]> {\n return requestStreaming<T>({ streamType: StreamType.JSON });\n}\n\n// Stream with NDJSON format\nexport function streamNDJSON<T = any>(): OperatorFunction<any, T[]> {\n return requestStreaming<T>({ streamType: StreamType.NDJSON });\n}\n\n// Stream AI responses\nexport function streamAI<T = any>(): OperatorFunction<any, T[]> {\n return requestStreaming<T>({ streamType: StreamType.AI_STREAMING });\n}\n\n// Stream Server-Sent Events\nexport function streamEvents<T = any>(): OperatorFunction<any, T[]> {\n return requestStreaming<T>({ streamType: StreamType.EVENT_STREAM });\n}\n\n// Auto-detect streaming format\nexport function streamAuto<T = any>(): OperatorFunction<any, T[]> {\n return requestStreaming<T>({ streamType: StreamType.AUTO });\n}\n","export interface ChannelInfoInterface {\n name: string\n canSubscribe: boolean\n}\n\nexport class ChannelInfo implements ChannelInfoInterface {\n\n constructor(\n public name = '',\n public canSubscribe = false,\n ) {}\n\n static adapt(item?: any): ChannelInfo {\n // Handle string input (backward compatibility with old server responses)\n if (typeof item === 'string') {\n return new ChannelInfo(item, true); // Assume subscribable\n }\n\n // Handle object input (new server responses)\n // Default canSubscribe to true if not specified (backward compat)\n return new ChannelInfo(\n item?.name,\n item?.canSubscribe ?? true,\n )\n }\n\n}\n\n\n","export interface WSUserInterface {\n id: string,\n ldap?: string,\n name?: string,\n email?: string,\n [key: string]: any, // Allow additional properties\n}\n\nexport class WSUser implements WSUserInterface {\n\n constructor(\n public id: string = '',\n public ldap: string = '',\n public name: string = '',\n public email: string = '',\n ) {}\n\n static adapt(item?: any): WSUser {\n const user = new WSUser(\n item?.id || item?.sessionId, // Support both for backward compatibility\n item?.ldap,\n item?.name,\n item?.email,\n );\n // Copy any additional properties\n if (item) {\n Object.keys(item).forEach(key => {\n if (!['id', 'sessionId', 'ldap', 'name', 'email'].includes(key)) {\n (user as any)[key] = item[key];\n }\n });\n }\n return user;\n }\n\n}\n\n\n","export enum CommunicationType {\n MESSAGE,\n ALERT,\n OTHER\n}\n","export enum ChannelType {\n STATE = 'SYS', // System/state channel (CRUD operations)\n PUBLIC = 'PUB', // Public messaging (chat/broadcast)\n NOTIFICATION = 'MES', // Notification channel (persistent messages)\n CUSTOM = '' // No prefix (raw channel name)\n}\n","export interface StateMessageInterface {\n sessionId: { id: string; ldap?: string; name?: string; email?: string };\n content: any;\n}\n\nexport class StateMessage implements StateMessageInterface {\n constructor(\n public sessionId: { id: string; ldap?: string; name?: string; email?: string } = { id: '' },\n public content: any = {}\n ) {}\n\n static adapt(item?: any): StateMessage {\n return new StateMessage(\n item?.sessionId,\n item?.content\n );\n }\n}\n","export interface PublicMessageInterface {\n sessionId: { id: string; ldap?: string; name?: string; email?: string };\n content: { message: string; [key: string]: any };\n}\n\nexport class PublicMessage implements PublicMessageInterface {\n constructor(\n public sessionId: { id: string; ldap?: string; name?: string; email?: string } = { id: '' },\n public content: { message: string; [key: string]: any } = { message: '' }\n ) {}\n\n static adapt(item?: any): PublicMessage {\n return new PublicMessage(\n item?.sessionId,\n item?.content\n );\n }\n}\n","export interface NotificationMessageInterface {\n sessionId: { id: string; ldap?: string; name?: string; email?: string; color?: string };\n message: string;\n [key: string]: any;\n}\n\nexport class NotificationMessage implements NotificationMessageInterface {\n sessionId: { id: string; ldap?: string; name?: string; email?: string; color?: string };\n message: string;\n [key: string]: any;\n\n constructor(\n sessionId: { id: string; ldap?: string; name?: string; email?: string; color?: string } = { id: '' },\n message: string = '',\n additionalProperties: any = {}\n ) {\n this.sessionId = sessionId;\n this.message = message;\n Object.assign(this, additionalProperties);\n }\n\n static adapt(item?: any): NotificationMessage {\n return new NotificationMessage(\n item?.sessionId,\n item?.message,\n item\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { WSOptions } from '../../request-manager-state-service';\nimport { UUID_STR } from '../../utils/encryption/random';\nimport { LoggerService } from '../../utils/logger.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WebsocketService {\n private logger = new LoggerService();\n\n private socket: WebSocket | null = null;\n\n private messages = new BehaviorSubject<any>(null);\n public messages$: Observable<any> = this.messages.asObservable();\n\n private connectionStatus = new BehaviorSubject<boolean>(false);\n public connectionStatus$: Observable<boolean> = this.connectionStatus.asObservable();\n\n private isSubscribed: boolean = false;\n\n // Track currently subscribed channels\n private subscribedChannels = new BehaviorSubject<Set<string>>(new Set());\n public subscribedChannels$: Observable<Set<string>> = this.subscribedChannels.asObservable();\n\n // Store last options for reconnection\n private lastOptions: WSOptions | null = null;\n\n private getSessionId(): string {\n return sessionStorage.getItem('WSID') ?? (() => {\n const uuid = UUID_STR()\n sessionStorage.setItem('WSID', uuid)\n return uuid\n })()\n }\n\n private sendSubscribe(channelName: string, user: any) {\n\n // Check if already subscribed to THIS specific channel (not just any channel)\n const alreadySubscribed = this.subscribedChannels.value.has(channelName);\n\n if (this.socket?.readyState === WebSocket.OPEN && !alreadySubscribed) {\n const message = {\n type: 'subscribe',\n subscribedChannel: channelName,\n content: {\n id: this.getSessionId(),\n ...user\n }\n };\n this.socket.send(JSON.stringify(message));\n\n // Track this channel as subscribed\n const current = new Set(this.subscribedChannels.value);\n current.add(channelName);\n this.subscribedChannels.next(current);\n\n this.isSubscribed = true; // Keep for backward compatibility\n this.logger.debug('WebSocket', `Sent initial subscription to: ${channelName}`);\n } else {\n this.logger.warn('WebSocket', `Subscription prevented`, {\n open: this.socket?.readyState === WebSocket.OPEN,\n channel: channelName,\n alreadySubscribed\n });\n }\n }\n\n connect(options: WSOptions, jwtToken: string) {\n\n if (this.socket) {\n\n if (this.socket.readyState === WebSocket.OPEN) {\n this.logger.debug('WebSocket', 'Connection is already OPEN');\n return;\n }\n\n if (this.socket.readyState === WebSocket.CONNECTING) {\n this.logger.debug('WebSocket', 'Already CONNECTING. Waiting for handshake');\n return;\n }\n\n if (this.socket.readyState === WebSocket.CLOSING || this.socket.readyState === WebSocket.CLOSED) {\n this.logger.debug('WebSocket', `Cleaning up stale socket`, { state: this.socket.readyState });\n this.socket.close();\n this.socket = null;\n }\n }\n\n this.isSubscribed = false;\n // Clear tracked subscriptions for new connection\n this.subscribedChannels.next(new Set());\n\n const sessionId = this.getSessionId();\n const URL = (jwtToken) ? `${options.wsServer}?token=${jwtToken}&sessionId=${sessionId}` : `${options.wsServer}?sessionId=${sessionId}`;\n\n this.socket = new WebSocket(URL);\n\n this.socket.onopen = () => {\n this.logger.info('WebSocket', '📡 Connected to WebSocket');\n this.connectionStatus.next(true);\n this.lastOptions = options;\n\n // Subscribe to primary channel\n this.sendSubscribe(options.id, options.user);\n\n // Build unified set of all channels to subscribe to (with deduplication)\n const allChannels = new Set<string>();\n\n // Add channels from options.channels[]\n if (options.channels && options.channels.length > 0) {\n options.channels.forEach(channel => allChannels.add(channel));\n }\n\n // Add channels from options.wsUpdateChannels[] with MES- prefix\n if (options.wsUpdateChannels && options.wsUpdateChannels.length > 0) {\n options.wsUpdateChannels.forEach(ch => {\n const prefixed = ch.startsWith('MES-') ? ch : `MES-${ch}`;\n allChannels.add(prefixed);\n });\n }\n\n // Subscribe to all channels (excluding primary channel)\n allChannels.forEach(channel => {\n if (channel !== options.id) {\n this.subscribeToChannel(channel);\n }\n });\n\n // Re-subscribe to any previously subscribed channels not in current options\n const previousChannels = this.subscribedChannels.value;\n if (previousChannels.size > 0) {\n previousChannels.forEach(channel => {\n if (!allChannels.has(channel) && channel !== options.id) {\n this.subscribeToChannel(channel);\n }\n });\n }\n };\n\n this.socket.onmessage = (event) => {\n\n try {\n\n const data = JSON.parse(event.data);\n\n if (data.error && data.error === 'JWT_INVALID') {\n\n this.logger.error('WebSocket', 'JWT validation failed. Authentication error!');\n\n this.messages.next(data);\n this.connectionStatus.next(false);\n this.socket?.close();\n\n return;\n\n }\n\n this.messages.next(data);\n\n } catch (error) {\n this.logger.error('WebSocket', 'Error parsing WebSocket message', { data: event.data });\n }\n\n };\n\n this.socket.onclose = () => {\n\n this.logger.debug('WebSocket', 'Connection closed');\n\n this.connectionStatus.next(false);\n this.socket = null;\n };\n\n this.socket.onerror = (error) => {\n this.logger.error('WebSocket', 'WebSocket error', error);\n this.connectionStatus.next(false);\n };\n\n }\n\n disconnect() {\n if (this.socket) {\n this.socket.close();\n this.socket = null;\n }\n }\n\n subscribeToChannel(channelName: string) {\n\n if (this.socket?.readyState === WebSocket.OPEN) {\n try {\n const message = {\n type: 'subscribe',\n subscribedChannel: channelName,\n content: {}\n };\n\n this.socket.send(JSON.stringify(message));\n\n // Track locally - create new Set to trigger change detection\n const current = new Set(this.subscribedChannels.value);\n current.add(channelName);\n this.subscribedChannels.next(current);\n this.logger.debug('WebSocket', `📝 Subscribed to channel`, { channel: channelName });\n } catch (error) {\n this.logger.error('WebSocket', `Failed to subscribe to channel`, { channel: channelName, error });\n }\n\n } else {\n this.logger.warn('WebSocket', `Cannot subscribe to channel - WebSocket not open`, { channel: channelName });\n }\n\n }\n\n subscribeToChannels(channelNames: string[]) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n channelNames.forEach(channel => this.subscribeToChannel(channel));\n } else {\n this.logger.warn('WebSocket', 'Cannot subscribe to channels - WebSocket not open');\n }\n }\n\n unsubscribeFromChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'unsubscribe', subscribedChannel: channel }));\n\n // Remove from local tracking - create new Set to trigger change detection\n const current = new Set(this.subscribedChannels.value);\n current.delete(channel);\n this.subscribedChannels.next(current);\n this.logger.debug('WebSocket', `💬 Unsubscribed from channel`, { channel });\n } else {\n this.logger.error('WebSocket', 'Cannot unsubscribe - WebSocket not open');\n }\n }\n\n unsubscribeToChannel(channel: string) {\n // Deprecated: Use unsubscribeFromChannel instead\n this.unsubscribeFromChannel(channel);\n }\n\n getSubscribedChannels(): Set<string> {\n return this.subscribedChannels.value;\n }\n\n sendBroadcast(content: any) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'broadcast', content }));\n this.logger.debug('WebSocket', `📢 Send broadcast`, { content });\n } else {\n this.logger.error('WebSocket', 'Cannot send broadcast - WebSocket not open');\n }\n }\n\n sendMessageInChannel(channel: string, content: any) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'stateMangerMessage', subscribedChannel: channel, content }));\n this.logger.debug('WebSocket', `💬 Send message`, { channel, content });\n } else {\n this.logger.error('WebSocket', 'Cannot send message - WebSocket not open');\n }\n }\n\n /**\n * Send a message to a specific channel for channel-based messaging\n * This uses the 'message' type which broadcasts to all subscribers in the channel\n */\n sendChannelMessage(channel: string, content: any) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'message', subscribedChannel: channel, content }));\n this.logger.debug('WebSocket', `💬 Send channel message`, { channel, content });\n } else {\n this.logger.error('WebSocket', 'Cannot send channel message - WebSocket not open');\n }\n }\n\n /**\n * Send a message to multiple channels at once (batch)\n * Sends the new batch format and falls back to legacy per-channel messages for compatibility\n */\n sendChannelMessageToChannels(channels: string[], content: any) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n try {\n // New batch format\n this.socket.send(JSON.stringify({\n type: 'channelMessage',\n channels: channels,\n data: content\n }));\n this.logger.debug('WebSocket', `💬 Send channel message to channels`, { channels, content });\n } catch (error) {\n this.logger.error('WebSocket', 'Failed to send channelMessage batch', error);\n }\n\n // Legacy fallback - send individual messages to each channel\n try {\n channels.forEach(channel => {\n this.socket?.send(JSON.stringify({ type: 'message', subscribedChannel: channel, content }));\n });\n } catch (err) {\n this.logger.warn('WebSocket', 'Legacy fallback failed sending individual messages', err);\n }\n\n } else {\n this.logger.error('WebSocket', 'Cannot send message to channels - WebSocket not open');\n }\n }\n\n sendMessageToUser(user: string, content: any) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'userMessage', subscribedChannel: user, content }));\n this.logger.debug('WebSocket', `💬 Send message to user`, { user, content });\n } else {\n this.logger.error('WebSocket', 'Cannot send message to user - WebSocket not open');\n }\n }\n\n getAllChannels() {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'getChannels' }));\n this.logger.debug('WebSocket', '🗂️ Requested list of all channels');\n } else {\n this.logger.error('WebSocket', 'Cannot request channels - WebSocket not open');\n }\n }\n\n createChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'createChannel', content: channel }));\n this.logger.debug('WebSocket', '🗂️ Created channel', { channel });\n } else {\n this.logger.error('WebSocket', 'Cannot create channel - WebSocket not open');\n }\n }\n\n deleteChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'deleteChannel', content: channel }));\n this.logger.debug('WebSocket', '🗂️ Delete channel', { channel });\n } else {\n this.logger.error('WebSocket', 'Cannot delete channel - WebSocket not open');\n }\n }\n\n getUsersInChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'getUsers', subscribedChannel: channel }));\n this.logger.debug('WebSocket', `👥 Requested users in channel`, { channel });\n } else {\n this.logger.error('WebSocket', 'Cannot request users - WebSocket not open');\n }\n }\n\n // =====================\n // Notification Channel Methods (MES- prefix)\n // =====================\n\n /**\n * Create a notification channel\n */\n createNotificationChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'createNotificationChannel', content: channel }));\n console.log('📢 Created notification channel:', channel);\n } else {\n console.error('WebSocket is not open. Cannot create notification channel.');\n }\n }\n\n /**\n * Get all notification channels (in-memory)\n */\n getNotificationChannels() {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'getNotificationChannels' }));\n this.logger.debug('WebSocket', '📢 Requested notification channels list');\n } else {\n this.logger.error('WebSocket', 'Cannot request notification channels - WebSocket not open');\n }\n }\n\n getTodaysNotificationChannels() {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'getTodaysNotificationChannels' }));\n this.logger.debug('WebSocket', \"📢 Requested today's notification channels from DB\");\n } else {\n this.logger.error('WebSocket', \"Cannot request today's notification channels - WebSocket not open\");\n }\n }\n\n subscribeToNotificationChannel(channel: string, options?: { startEpoch?: number; endEpoch?: number }, user?: any) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({\n type: 'subscribeNotifications',\n subscribedChannel: channel,\n content: {\n ...options,\n ...user\n }\n }));\n this.logger.debug('WebSocket', `📢 Subscribed to notification channel`, { channel, options });\n } else {\n this.logger.error('WebSocket', 'Cannot subscribe to notification channel - WebSocket not open');\n }\n }\n\n unsubscribeFromNotificationChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({\n type: 'unsubscribeNotifications',\n subscribedChannel: channel\n }));\n this.logger.debug('WebSocket', `📢 Unsubscribed from notification channel`, { channel });\n } else {\n this.logger.error('WebSocket', 'Cannot unsubscribe from notification channel - WebSocket not open');\n }\n }\n\n sendNotification(channel: string, content: any) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({\n type: 'notification',\n subscribedChannel: channel,\n content\n }));\n this.logger.debug('WebSocket', `📢 Sent notification to channel`, { channel, content });\n } else {\n this.logger.error('WebSocket', 'Cannot send notification - WebSocket not open');\n }\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { WSOptions } from '../../request-manager-state-service';\nimport { UUID_STR } from '../../utils/encryption/random';\n\n/**\n * WebSocketManagerService - Singleton WebSocket connection manager\n *\n * This service ensures only ONE WebSocket connection exists across ALL instances\n * of HTTPManagerStateService. It uses static properties to track connection state\n * globally, preventing duplicate connections when multiple state services are created.\n *\n * Usage:\n * - Inject into HTTPManagerService (or directly into state services)\n * - Call connect() with WSOptions - only the first call establishes connection\n * - Subsequent calls detect existing connection and skip reconnection\n * - All instances share the same connectionStatus$ and messages$ observables\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class WebSocketManagerService {\n\n // ═══════════════════════════════════════════════════════════════════════════\n // STATIC SINGLETON STATE (Shared across ALL instances)\n // ═══════════════════════════════════════════════════════════════════════════\n\n private static socket: WebSocket | null = null;\n private static isConnecting = false;\n private static connectionInitialized = false;\n\n // Store last options for reconnection\n private static lastOptions: WSOptions | null = null;\n\n // ═══════════════════════════════════════════════════════════════════════════\n // INSTANCE OBSERVABLES (Shared across ALL instances via static BehaviorSubjects)\n // ═══════════════════════════════════════════════════════════════════════════\n\n private static messages = new BehaviorSubject<any>(null);\n public messages$: Observable<any> = WebSocketManagerService.messages.asObservable();\n\n private static connectionStatus = new BehaviorSubject<boolean>(false);\n public connectionStatus$: Observable<boolean> = WebSocketManagerService.connectionStatus.asObservable();\n\n private static isSubscribed: boolean = false;\n\n // Track currently subscribed channels\n private static subscribedChannels = new BehaviorSubject<Set<string>>(new Set());\n public subscribedChannels$: Observable<Set<string>> = WebSocketManagerService.subscribedChannels.asObservable();\n\n // Public method to get current subscribed channels\n public static getSubscribedChannels(): Set<string> {\n return WebSocketManagerService.subscribedChannels.getValue();\n }\n\n // Public method to add a channel to subscribed channels\n public static addSubscribedChannel(channelName: string): void {\n const current = new Set(WebSocketManagerService.subscribedChannels.value);\n current.add(channelName);\n WebSocketManagerService.subscribedChannels.next(current);\n console.log(`📝 Added ${channelName} to subscribedChannels (now has ${current.size} channels)`);\n }\n\n // Reconnect event (emitted when connection is established/re-established)\n private static onReconnect = new BehaviorSubject<void>(undefined);\n public onReconnect$: Observable<void> = WebSocketManagerService.onReconnect.asObservable();\n\n // ═══════════════════════════════════════════════════════════════════════════\n // SESSION MANAGEMENT\n // ═══════════════════════════════════════════════════════════════════════════\n\n private getSessionId(): string {\n return sessionStorage.getItem('WSID') ?? (() => {\n const uuid = UUID_STR()\n sessionStorage.setItem('WSID', uuid)\n return uuid\n })()\n }\n\n // ═══════════════════════════════════════════════════════════════════════════\n // CONNECTION MANAGEMENT\n // ═══════════════════════════════════════════════════════════════════════════\n\n /**\n * Connect to WebSocket server\n *\n * IMPORTANT: Only the first call across ALL instances will establish a connection.\n * Subsequent calls will detect the existing connection and return immediately.\n *\n * @param options - WebSocket configuration options\n * @param jwtToken - Optional JWT token for authentication\n */\n connect(options: WSOptions, jwtToken: string): void {\n // Check if connection already exists and is open\n if (WebSocketManagerService.socket) {\n if (WebSocketManagerService.socket.readyState === WebSocket.OPEN) {\n console.log('✓ WebSocket connection already OPEN (singleton).');\n return;\n }\n\n if (WebSocketManagerService.socket.readyState === WebSocket.CONNECTING) {\n console.log('⏳ WebSocket is already CONNECTING (singleton). Waiting for handshake.');\n return;\n }\n\n // Clean up stale connection\n if (WebSocketManagerService.socket.readyState === WebSocket.CLOSING ||\n WebSocketManagerService.socket.readyState === WebSocket.CLOSED) {\n console.log(`🧹 Cleaning up stale socket (State: ${WebSocketManagerService.socket.readyState}).`);\n WebSocketManagerService.socket.close();\n WebSocketManagerService.socket = null;\n }\n }\n\n // Prevent duplicate connection attempts\n if (WebSocketManagerService.isConnecting) {\n console.log('⏳ Connection already in progress...');\n return;\n }\n\n // Mark as connecting\n WebSocketManagerService.isConnecting = true;\n WebSocketManagerService.isSubscribed = false;\n WebSocketManagerService.subscribedChannels.next(new Set());\n\n const sessionId = this.getSessionId();\n const URL = (jwtToken) ? `${options.wsServer}?token=${jwtToken}&sessionId=${sessionId}` : `${options.wsServer}?sessionId=${sessionId}`;\n\n console.log(`🔌 Initiating WebSocket connection to: ${options.wsServer}`);\n\n // Create new WebSocket instance (static)\n WebSocketManagerService.socket = new WebSocket(URL);\n\n WebSocketManagerService.socket.onopen = () => {\n console.log(`📡 Connected to WebSocket`);\n // Force clear subscribedChannels on new connection - server lost our subscriptions\n console.log('🧹 Clearing subscribedChannels on connect (was:', WebSocketManagerService.subscribedChannels.value.size, 'channels)');\n WebSocketManagerService.subscribedChannels.next(new Set());\n\n WebSocketManagerService.connectionStatus.next(true);\n WebSocketManagerService.isConnecting = false;\n WebSocketManagerService.connectionInitialized = true;\n WebSocketManagerService.lastOptions = options;\n\n // Emit reconnect event - MessageTrackerService will handle subscriptions with lastSeenId\n console.log(`🔄 Emitting reconnect event for MessageTrackerService`);\n WebSocketManagerService.onReconnect.next();\n };\n\n WebSocketManagerService.socket.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n\n if (data.error && data.error === 'JWT_INVALID') {\n console.error('JWT validation failed. Authentication error!');\n WebSocketManagerService.messages.next(data);\n WebSocketManagerService.connectionStatus.next(false);\n WebSocketManagerService.socket?.close();\n return;\n }\n\n WebSocketManagerService.messages.next(data);\n\n } catch (error) {\n console.error('Error parsing WebSocket message:', event.data);\n }\n };\n\n WebSocketManagerService.socket.onclose = () => {\n console.log('🔴 WebSocket connection closed');\n console.log('🧹 Clearing subscribedChannels (was:', WebSocketManagerService.subscribedChannels.value.size, 'channels)');\n WebSocketManagerService.connectionStatus.next(false);\n WebSocketManagerService.isConnecting = false;\n WebSocketManagerService.socket = null;\n // Clear subscribed channels - server lost our subscriptions\n WebSocketManagerService.subscribedChannels.next(new Set());\n console.log('✅ subscribedChannels cleared');\n };\n\n WebSocketManagerService.socket.onerror = (error) => {\n console.error('❌ WebSocket error:', error);\n WebSocketManagerService.connectionStatus.next(false);\n WebSocketManagerService.isConnecting = false;\n };\n }\n\n /**\n * Disconnect from WebSocket server\n */\n disconnect(): void {\n if (WebSocketManagerService.socket) {\n console.log('🔌 Disconnecting WebSocket...');\n WebSocketManagerService.socket.close();\n WebSocketManagerService.socket = null;\n WebSocketManagerService.connectionStatus.next(false);\n WebSocketManagerService.subscribedChannels.next(new Set());\n }\n }\n\n // ═══════════════════════════════════════════════════════════════════════════\n // SUBSCRIPTION MANAGEMENT\n // ═══════════════════════════════════════════════════════════════════════════\n\n private sendSubscribe(channelName: string, user: any): void {\n const alreadySubscribed = WebSocketManagerService.subscribedChannels.value.has(channelName);\n\n if (WebSocketManagerService.socket?.readyState === WebSocket.OPEN && !alreadySubscribed) {\n const message = {\n type: 'subscribe',\n subscribedChannel: channelName,\n content: {\n id: this.getSessionId(),\n ...user\n }\n };\n WebSocketManagerService.socket.send(JSON.stringify(message));\n\n // Track this channel as subscribed\n const current = new Set(WebSocketManagerService.subscribedChannels.value);\n current.add(channelName);\n WebSocketManagerService.subscribedChannels.next(current);\n\n WebSocketManagerService.isSubscribed = true;\n console.log(`[CLIENT] Sent initial subscription to: ${channelName}`);\n } else {\n console.warn(`[CLIENT] Subscription prevented. Open: ${WebSocketManagerService.socket?.readyState === WebSocket.OPEN}, Already subscribed to ${channelName}: ${alreadySubscribed}`);\n }\n }\n\n /**\n * Send subscribe with lastSeenId for message sync support\n * @param channelName - Channel name to subscribe to\n * @param user - User data\n * @param lastSeenId - Last message ID seen (for replay)\n */\n sendSubscribeWithLastSeen(channelName: string, user: any, lastSeenId: number): void {\n const alreadySubscribed = WebSocketManagerService.subscribedChannels.value.has(channelName);\n const isOpen = WebSocketManagerService.socket?.readyState === WebSocket.OPEN;\n\n console.log(`🔍 Subscription check for \"${channelName}\": isOpen=${isOpen}, alreadySubscribed=${alreadySubscribed}`);\n\n if (isOpen && !alreadySubscribed && WebSocketManagerService.socket) {\n const message = {\n type: 'subscribe',\n subscribedChannel: channelName,\n lastSeenId, // NEW: For message replay\n content: {\n id: this.getSessionId(),\n ...user\n }\n };\n WebSocketManagerService.socket.send(JSON.stringify(message));\n\n // DON'T track as subscribed yet - wait for server confirmation ('subscribed' message)\n // This prevents race conditions where we think we're subscribed but server doesn't\n\n WebSocketManagerService.isSubscribed = true;\n console.log(`[CLIENT] Sent subscription with lastSeenId=${lastSeenId} to: ${channelName}`);\n } else {\n console.warn(`[CLIENT] Subscription prevented. Open: ${isOpen}, Already subscribed to ${channelName}: ${alreadySubscribed}`);\n }\n }\n\n /**\n * Subscribe to a channel\n * @param channelName - Channel name to subscribe to\n */\n subscribeToChannel(channelName: string): void {\n if (WebSocketManagerService.socket?.readyState === WebSocket.OPEN) {\n try {\n const message = {\n type: 'subscribe',\n subscribedChannel: channelName,\n content: {}\n };\n\n WebSocketManagerService.socket.send(JSON.stringify(message));\n\n // Track locally - create new Set to trigger change detection\n const current = new Set(WebSocketManagerService.subscribedChannels.value);\n current.add(channelName);\n WebSocketManagerService.subscribedChannels.next(current);\n console.log(`📝 Subscribed to channel: ${channelName}`);\n } catch (error) {\n console.error(`❌ Failed to subscribe to channel \"${channelName}\":`, error);\n }\n } else {\n console.warn(`Cannot subscribe to channel \"${channelName}\": WebSocket not yet open.`);\n }\n }\n\n /**\n * Subscribe to multiple channels\n * @param channelNames - Array of channel names to subscribe to\n */\n subscribeToChannels(channelNames: string[]): void {\n if (WebSocketManagerService.socket?.readyState === WebSocket.OPEN) {\n channelNames.forEach(channel => this.subscribeToChannel(channel));\n } else {\n console.warn('Cannot subscribe: WebSocket not yet open.');\n }\n }\n\n /**\n * Unsubscribe from a channel\n * @param channel - Channel name to unsubscribe from\n */\n unsubscribeFromChannel(channel: string): void {\n if (WebSocketManagerService.socket?.readyState === WebSocket.OPEN) {\n WebSocketManagerService.socket.send(JSON.stringify({ type: 'unsubscribe', subscribedChannel: channel }));\n\n // Remove from local tracking - create new Set to trigger change detection\n const current = new Set(WebSocketManagerService.subscribedChannels.value);\n current.delete(channel);\n WebSocketManagerService.subscribedChannels.next(current);\n console.log(`💬 Unsubscribed from channel: ${channel}`);\n } else {\n console.error('WebSocket is not open. Cannot unsubscribe from channel.');\n }\n }\n\n /**\n * Get currently subscribed channels\n * @returns Set of subscribed channel names\n */\n getSubscribedChannels(): Set<string> {\n return WebSocketManagerService.subscribedChannels.value;\n }\n\n // ═══════════════════════════════════════════════════════════════════════════\n // MESSAGE SENDING\n // ═══════════════════════════════════════════════════════════════════════════\n\n /**\n * Generic send method for message tracking (acks, gap requests, etc.)\n * @param message - Message object to send\n */\n send(message: any): void {\n if (WebSocketManagerService.socket?.readyState === WebSocket.OPEN) {\n WebSocketManagerService.socket.send(JSON.stringify(message));\n } else {\n console.warn('⚠️ Cannot send message: WebSocket not open', message);\n }\n }\n\n /**\n * Send broadcast message\n * @param content - Message content to broadcast\n */\n sendBroadcast(content: any): void {\n if (WebSocketManagerService.socket?.readyState === WebSocket.OPEN) {\n WebSocketManagerService.socket.send(JSON.stringify({ type: 'broadcast', content }));\n console.log(`📢 Send broadcast: ${content}`);\n } else {\n console.error('WebSocket is not open. Cannot send broadcast.');\n }\n }\n\n /**\n * Send message in channel (state manager message)\n * @param channel - Channel name\n * @param content - Message content\n */\n sendMessageInChannel(channel: string, content: any): void {\n if (WebSocketManagerService.socket?.readyState === WebSocket.OPEN) {\n const message = {\n type: 'stateMangerMessage',\n subscribedChannel: channel,\n content\n };\n\n // DEBUG: Log the exact message being sent\n console.log('🔍 [DEBUG] sendMessageInChannel:', {\n channel,\n channelType: typeof channel,\n channelEmpty: channel === '' || channel === null || channel === undefined,\n content,\n fullMessage: message,\n jsonString: JSON.stringify(message)\n });\n\n WebSocketManagerService.socket.send(JSON.stringify(message));\n console.log(`💬 Send message:`, content);\n } else {\n console.error('WebSocket is not open. Cannot send message.');\n }\n }\n\n /**\n * Send channel message (broadcasts to all subscribers in the channel)\n * @param channel - Channel name\n * @param content - Message content\n */\n sendChannelMessage(channel: string, content: any): void {\n if (WebSocketManagerService.socket?.readyState === WebSocket.OPEN) {\n WebSocketManagerService.socket.send(JSON.stringify({\n type: 'message',\n subscribedChannel: channel,\n content\n }));\n console.log(`💬 Send channel message to [${channel}]:`, content);\n } else {\n console.error('WebSocket is not open. Cannot send channel message.');\n }\n }\n\n /**\n * Send message to multiple channels at once (batch)\n * @param channels - Array of channel names\n * @param content - Message content\n */\n sendChannelMessageToChannels(channels: string[], content: any): void {\n if (WebSocketManagerService.socket?.readyState === WebSocket.OPEN) {\n try {\n // New batch format\n WebSocketManagerService.socket.send(JSON.stringify({\n type: 'channelMessage',\n channels: channels,\n data: content\n }));\n console.log(`💬 Send channel message to channels [${channels.join(', ')}]:`, content);\n } catch (error) {\n console.error('❌ Failed to send channelMessage batch:', error);\n }\n\n // Legacy fallback - send individual messages to each channel\n try {\n channels.forEach(channel => {\n WebSocketManagerService.socket?.send(JSON.stringify({\n type: 'message',\n subscribedChannel: channel,\n content\n }));\n });\n } catch (err) {\n console.warn('⚠️ Legacy fallback failed sending individual messages', err);\n }\n\n } else {\n console.error('WebSocket is not open. Cannot send message to channels.');\n }\n }\n\n /**\n * Send message to specific user\n * @param user - User identifier\n * @param content - Message content\n */\n sendMessageToUser(user: string, content: any): void {\n if (WebSocketManagerService.socket?.readyState === WebSocket.OPEN) {\n WebSocketManagerService.socket.send(JSON.stringify({\n type: 'userMessage',\n subscribedChannel: user,\n content\n }));\n console.log(`💬 Send message:`, content);\n } else {\n console.error('WebSocket is not open. Cannot send message.');\n }\n }\n\n // ═══════════════════════════════════════════════════════════════════════════\n // CHANNEL MANAGEMENT\n // ═══════════════════════════════════════════════════════════════════════════\n\n /**\n * Request list of all channels from server\n */\n getAllChannels(): void {\n if (WebSocketManagerService.socket?.readyState === WebSocket.OPEN) {\n WebSocketManagerService.socket.send(JSON.stringify({ type: 'getChannels' }));\n console.log('🗂️ List of all channels');\n } else {\n console.error('WebSocket is not open. Cannot request channels.');\n }\n }\n\n /**\n * Create a new channel on server\n * @param channel - Channel name to create\n */\n createChannel(channel: string): void {\n if (WebSocketManagerService.socket?.readyState === WebSocket.OPEN) {\n WebSocketManagerService.socket.send(JSON.stringify({\n type: 'createChannel',\n content: channel\n }));\n console.log('🗂️ Created channel:', channel);\n } else {\n console.error('WebSocket is not open. Cannot request channels.');\n }\n }\n\n /**\n * Delete a channel from server\n * @param channel - Channel name to delete\n */\n deleteChannel(channel: string): void {\n if (WebSocketManagerService.socket?.readyState === WebSocket.OPEN) {\n WebSocketManagerService.socket.send(JSON.stringify({\n type: 'deleteChannel',\n content: channel\n }));\n console.log('🗂️ Delete channel:', channel);\n } else {\n console.error('WebSocket is not open. Cannot request channels.');\n }\n }\n\n /**\n * Get users in a specific channel\n * @param channel - Channel name\n */\n getUsersInChannel(channel: string): void {\n if (WebSocketManagerService.socket?.readyState === WebSocket.OPEN) {\n WebSocketManagerService.socket.send(JSON.stringify({\n type: 'getUsers',\n subscribedChannel: channel\n }));\n console.log(`👥 List all users in channel: ${channel}`);\n } else {\n console.error('WebSocket is not open. Cannot request users.');\n }\n }\n\n // ═══════════════════════════════════════════════════════════════════════════\n // NOTIFICATION CHANNELS (MES- prefix)\n // ═══════════════════════════════════════════════════════════════════════════\n\n /**\n * Create a notification channel\n * @param channel - Channel name (should include MES- prefix)\n */\n createNotificationChannel(channel: string): void {\n if (WebSocketManagerService.socket?.readyState === WebSocket.OPEN) {\n WebSocketManagerService.socket.send(JSON.stringify({\n type: 'createNotificationChannel',\n content: channel\n }));\n console.log('📢 Created notification channel:', channel);\n } else {\n console.error('WebSocket is not open. Cannot create notification channel.');\n }\n }\n\n /**\n * Get all notification channels (in-memory)\n */\n getNotificationChannels(): void {\n if (WebSocketManagerService.socket?.readyState === WebSocket.OPEN) {\n WebSocketManagerService.socket.send(JSON.stringify({ type: 'getNotificationChannels' }));\n console.log('📢 Requested notification channels list');\n } else {\n console.error('WebSocket is not open. Cannot request notification channels.');\n }\n }\n\n /**\n * Get today's notification channels from database\n */\n getTodaysNotificationChannels(): void {\n if (WebSocketManagerService.socket?.readyState === WebSocket.OPEN) {\n WebSocketManagerService.socket.send(JSON.stringify({ type: 'getTodaysNotificationChannels' }));\n console.log('📢 Requested today\\'s notification channels from DB');\n } else {\n console.error('WebSocket is not open. Cannot request today\\'s notification channels.');\n }\n }\n\n /**\n * Subscribe to a notification channel with optional date filters\n * @param channel - Channel name\n * @param options - Optional start/end epoch filters\n * @param user - User information\n */\n subscribeToNotificationChannel(channel: string, options?: { startEpoch?: number; endEpoch?: number }, user?: any): void {\n if (WebSocketManagerService.socket?.readyState === WebSocket.OPEN) {\n WebSocketManagerService.socket.send(JSON.stringify({\n type: 'subscribeNotifications',\n subscribedChannel: channel,\n content: {\n ...options,\n user: user\n }\n }));\n console.log(`📢 Subscribed to notification channel: ${channel}`);\n } else {\n console.error('WebSocket is not open. Cannot subscribe to notification channel.');\n }\n }\n\n /**\n * Unsubscribe from a notification channel\n * @param channel - Channel name\n */\n unsubscribeFromNotificationChannel(channel: string): void {\n if (WebSocketManagerService.socket?.readyState === WebSocket.OPEN) {\n WebSocketManagerService.socket.send(JSON.stringify({\n type: 'unsubscribeNotifications',\n subscribedChannel: channel\n }));\n console.log(`📢 Unsubscribed from notification channel: ${channel}`);\n } else {\n console.error('WebSocket is not open. Cannot unsubscribe from notification channel.');\n }\n }\n\n /**\n * Send notification to channel\n * @param channel - Channel name (should include MES- prefix)\n * @param content - Notification content\n */\n sendNotification(channel: string, content: any): void {\n if (WebSocketManagerService.socket?.readyState === WebSocket.OPEN) {\n WebSocketManagerService.socket.send(JSON.stringify({\n type: 'notification',\n subscribedChannel: channel,\n content\n }));\n console.log(`📢 Sent notification to channel: ${channel}`, content);\n } else {\n console.error('WebSocket is not open. Cannot send notification.');\n }\n }\n\n // ═══════════════════════════════════════════════════════════════════════════\n // CONNECTION STATUS (Static getter for direct access)\n // ═══════════════════════════════════════════════════════════════════════════\n\n /**\n * Check if WebSocket connection is currently open\n * @returns true if connected, false otherwise\n */\n static isConnected(): boolean {\n return WebSocketManagerService.socket?.readyState === WebSocket.OPEN;\n }\n\n /**\n * Check if connection has been initialized (attempted at least once)\n * @returns true if connection was initialized, false otherwise\n */\n static isInitialized(): boolean {\n return WebSocketManagerService.connectionInitialized;\n }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport { WebSocketManagerService } from '../websocket-service/websocket-manager.service';\nimport { ChannelType } from '../models/channel-type.enum';\nimport { StateMessage } from '../models/state-message.model';\nimport { PublicMessage } from '../models/public-message.model';\nimport { NotificationMessage } from '../models/notification-message.model';\nimport { LoggerService } from '../../utils/logger.service';\n\n/**\n * WebSocketMessageService - Unified service for sending WebSocket messages\n *\n * Provides type-safe methods for sending messages with automatic prefix management.\n * Supports three message types: State (SYS-), Public (PUB-), and Notification (MES-).\n *\n * Features:\n * - Type-safe message models\n * - Automatic prefix management\n * - Runtime validation\n * - Boolean return values for success/failure\n * - Silent failure with console errors\n */\n@Injectable({ providedIn: 'root' })\nexport class WebSocketMessageService {\n private wsManagerService = inject(WebSocketManagerService);\n private logger = new LoggerService();\n\n /**\n * Send state message (SYS- prefix)\n * Used for CRUD operations and state synchronization\n *\n * @param path - Path array (e.g., ['ai', 'tests'])\n * @param payload - StateMessage with sessionId and content\n * @returns true if sent successfully, false otherwise\n */\n sendStateMessage(path: (string | number)[], payload: StateMessage): boolean {\n // Validate payload\n if (!payload?.sessionId?.id) {\n this.logger.error('WebSocketMessageService', 'StateMessage must have sessionId.id');\n return false;\n }\n\n if (!WebSocketManagerService.isConnected()) {\n this.logger.error('WebSocketMessageService', 'Cannot send state message - not connected');\n return false;\n }\n\n const channel = `${ChannelType.STATE}-${path.join('/')}`;\n this.wsManagerService.sendMessageInChannel(channel, payload);\n return true;\n }\n\n /**\n * Send public message (PUB- prefix)\n * Used for chat, broadcast, general messaging\n *\n * @param channel - Channel name (without prefix)\n * @param payload - PublicMessage with sessionId and content.message\n * @returns true if sent successfully, false otherwise\n */\n sendPublicMessage(channel: string, payload: PublicMessage): boolean {\n // Validate payload\n if (!payload?.sessionId?.id) {\n this.logger.error('WebSocketMessageService', 'PublicMessage must have sessionId.id');\n return false;\n }\n\n if (!payload?.content?.message) {\n this.logger.error('WebSocketMessageService', 'PublicMessage must have content.message');\n return false;\n }\n\n if (!WebSocketManagerService.isConnected()) {\n this.logger.error('WebSocketMessageService', 'Cannot send public message - not connected');\n return false;\n }\n\n const fullChannel = `${ChannelType.PUBLIC}-${channel}`;\n this.wsManagerService.sendMessageInChannel(fullChannel, payload);\n return true;\n }\n\n /**\n * Send notification (MES- prefix)\n * Used for persistent notifications with history\n *\n * @param channel - Channel name (without prefix)\n * @param payload - NotificationMessage with sessionId and message\n * @returns true if sent successfully, false otherwise\n */\n sendNotification(channel: string, payload: NotificationMessage): boolean {\n // Validate payload\n if (!payload?.sessionId?.id) {\n this.logger.error('WebSocketMessageService', 'NotificationMessage must have sessionId.id');\n return false;\n }\n\n if (!payload?.message) {\n this.logger.error('WebSocketMessageService', 'NotificationMessage must have message');\n return false;\n }\n\n if (!WebSocketManagerService.isConnected()) {\n this.logger.error('WebSocketMessageService', 'Cannot send notification - not connected');\n return false;\n }\n\n const fullChannel = `${ChannelType.NOTIFICATION}-${channel}`;\n this.wsManagerService.sendMessageInChannel(fullChannel, payload);\n return true;\n }\n\n /**\n * Send to custom channel (no prefix)\n * User provides full channel name\n *\n * @param channel - Full channel name\n * @param payload - Any message payload\n * @returns true if sent successfully, false otherwise\n */\n sendToCustomChannel(channel: string, payload: any): boolean {\n if (!WebSocketManagerService.isConnected()) {\n this.logger.error('WebSocketMessageService', 'Cannot send custom message - not connected');\n return false;\n }\n\n this.wsManagerService.sendMessageInChannel(channel, payload);\n return true;\n }\n}\n","import { Injectable, inject, signal, computed, effect } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { WebSocketManagerService } from './websocket-service/websocket-manager.service';\nimport { WSOptions } from '../request-manager-state-service';\n\n/**\n * WebSocketSignalsManagerService - Signal-based WebSocket connection manager\n *\n * Provides signal-based reactivity for WebSocket connections while maintaining\n * singleton connection pattern. Offers both signals and observables for compatibility.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class WebSocketSignalsManagerService {\n\n private wsManager = inject(WebSocketManagerService);\n\n // Signal-based state (primary API)\n private static connectionStatusSignal = signal<boolean>(false);\n public readonly connectionStatus = WebSocketSignalsManagerService.connectionStatusSignal.asReadonly();\n public readonly connectionStatus$ = toObservable(WebSocketSignalsManagerService.connectionStatusSignal);\n\n private static messagesSignal = signal<any>(null);\n public readonly messages = WebSocketSignalsManagerService.messagesSignal.asReadonly();\n public readonly messages$ = toObservable(WebSocketSignalsManagerService.messagesSignal);\n\n private static subscribedChannelsSignal = signal<Set<string>>(new Set());\n public readonly subscribedChannels = WebSocketSignalsManagerService.subscribedChannelsSignal.asReadonly();\n public readonly subscribedChannels$ = toObservable(WebSocketSignalsManagerService.subscribedChannelsSignal);\n\n constructor() {\n // Sync with WebSocketManagerService state\n effect(() => {\n // This effect keeps our signals in sync with the BehaviorSubject-based manager\n // In a future refactor, we can make WebSocketManagerService signal-based too\n });\n\n // Subscribe to WebSocket messages and update signals\n this.wsManager.messages$.subscribe(message => {\n WebSocketSignalsManagerService.messagesSignal.set(message);\n });\n\n this.wsManager.connectionStatus$.subscribe(status => {\n WebSocketSignalsManagerService.connectionStatusSignal.set(status);\n });\n\n this.wsManager.subscribedChannels$.subscribe(channels => {\n WebSocketSignalsManagerService.subscribedChannelsSignal.set(channels);\n });\n }\n\n // Connection Management\n connect(options: WSOptions, jwtToken: string): void {\n this.wsManager.connect(options, jwtToken);\n }\n\n disconnect(): void {\n this.wsManager.disconnect();\n }\n\n // Channel Subscription\n subscribeToChannel(channel: string): void {\n this.wsManager.subscribeToChannel(channel);\n }\n\n subscribeToChannels(channels: string[]): void {\n channels.forEach(channel => this.subscribeToChannel(channel));\n }\n\n unsubscribeFromChannel(channel: string): void {\n this.wsManager.unsubscribeFromChannel(channel);\n }\n\n getSubscribedChannels(): Set<string> {\n return WebSocketSignalsManagerService.subscribedChannelsSignal();\n }\n\n // Message Sending\n sendBroadcast(content: any): void {\n this.wsManager.sendBroadcast(content);\n }\n\n sendMessageInChannel(channel: string, content: any): void {\n this.wsManager.sendMessageInChannel(channel, content);\n }\n\n sendChannelMessage(channel: string, content: any): void {\n this.wsManager.sendChannelMessage(channel, content);\n }\n\n sendChannelMessageToChannels(channels: string[], content: any): void {\n this.wsManager.sendChannelMessageToChannels(channels, content);\n }\n\n sendMessageToUser(user: string, content: any): void {\n this.wsManager.sendMessageToUser(user, content);\n }\n\n // Channel Management\n getAllChannels(): void {\n this.wsManager.getAllChannels();\n }\n\n createChannel(channel: string): void {\n this.wsManager.createChannel(channel);\n }\n\n deleteChannel(channel: string): void {\n this.wsManager.deleteChannel(channel);\n }\n\n getUsersInChannel(channel: string): void {\n this.wsManager.getUsersInChannel(channel);\n }\n\n // Notification Methods\n createNotificationChannel(channel: string): void {\n this.wsManager.createNotificationChannel(channel);\n }\n\n getNotificationChannels(): void {\n this.wsManager.getNotificationChannels();\n }\n\n getTodaysNotificationChannels(): void {\n this.wsManager.getTodaysNotificationChannels();\n }\n\n subscribeToNotificationChannel(channel: string, options?: any, user?: any): void {\n this.wsManager.subscribeToNotificationChannel(channel, options, user);\n }\n\n unsubscribeFromNotificationChannel(channel: string): void {\n this.wsManager.unsubscribeFromNotificationChannel(channel);\n }\n\n sendNotification(channel: string, content: any): void {\n this.wsManager.sendNotification(channel, content);\n }\n}\n","import { Injectable, inject, signal, computed, effect } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { WebSocketSignalsManagerService } from './websocket-signals-manager.service';\n\n/**\n * MessageTrackerSignalsService - Signal-based message tracking\n *\n * Tracks WebSocket messages, channel metadata, and user presence using signals.\n * Provides real-time reactivity for message-driven applications.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class MessageTrackerSignalsService {\n\n private wsManager = inject(WebSocketSignalsManagerService);\n\n // Signal-based state\n private messagesSignal = signal<any>(null);\n public readonly messages = this.messagesSignal.asReadonly();\n public readonly messages$ = toObservable(this.messagesSignal);\n\n private channelMetadataSignal = signal<Map<string, any>>(new Map());\n public readonly channelMetadata = this.channelMetadataSignal.asReadonly();\n public readonly channelMetadata$ = toObservable(this.channelMetadataSignal);\n\n private usersInChannelsSignal = signal<Map<string, Set<string>>>(new Map());\n public readonly usersInChannels = this.usersInChannelsSignal.asReadonly();\n public readonly usersInChannels$ = toObservable(this.usersInChannelsSignal);\n\n // Computed signals for derived state\n readonly messageCount = computed(() => {\n const metadata = this.channelMetadataSignal();\n let count = 0;\n metadata.forEach(data => count += data.count);\n return count;\n });\n\n readonly activeChannels = computed(() => {\n return Array.from(this.channelMetadataSignal().keys());\n });\n\n constructor() {\n // Track messages from WebSocket\n effect(() => {\n const message = this.wsManager.messages();\n if (message) {\n this.trackMessage(message);\n }\n });\n\n // Track connection status\n effect(() => {\n const connected = this.wsManager.connectionStatus();\n if (!connected) {\n this.onDisconnect();\n }\n });\n }\n\n trackMessage(message: any): void {\n // Store message\n this.messagesSignal.set(message);\n\n // Update channel metadata\n if (message.channel) {\n this.updateChannelMetadata(message.channel, message);\n }\n\n // Update user presence if applicable\n if (message.user && message.channel) {\n this.updateUserPresence(message.channel, message.user);\n }\n }\n\n private updateChannelMetadata(channel: string, message: any): void {\n this.channelMetadataSignal.update(metadata => {\n const updated = new Map(metadata);\n const current = updated.get(channel) || { count: 0, lastMessage: null, lastUpdated: 0 };\n updated.set(channel, {\n ...current,\n count: current.count + 1,\n lastMessage: message,\n lastUpdated: Date.now()\n });\n return updated;\n });\n }\n\n private updateUserPresence(channel: string, user: string): void {\n this.usersInChannelsSignal.update(users => {\n const updated = new Map(users);\n const channelUsers = new Set(updated.get(channel) || []);\n channelUsers.add(user);\n updated.set(channel, channelUsers);\n return updated;\n });\n }\n\n removeUserFromChannel(channel: string, user: string): void {\n this.usersInChannelsSignal.update(users => {\n const updated = new Map(users);\n const channelUsers = updated.get(channel);\n if (channelUsers) {\n channelUsers.delete(user);\n updated.set(channel, channelUsers);\n }\n return updated;\n });\n }\n\n subscribeToChannel(channel: string): void {\n this.wsManager.subscribeToChannel(channel);\n }\n\n unsubscribeFromChannel(channel: string): void {\n this.wsManager.unsubscribeFromChannel(channel);\n this.removeUserFromChannel(channel, 'current-user');\n }\n\n // Selectors\n getMessageCount(channel: string): number {\n const metadata = this.channelMetadataSignal();\n return metadata.get(channel)?.count || 0;\n }\n\n getLastMessage(channel: string): any {\n const metadata = this.channelMetadataSignal();\n return metadata.get(channel)?.lastMessage || null;\n }\n\n getActiveChannels(): string[] {\n return Array.from(this.channelMetadataSignal().keys());\n }\n\n getUsersInChannel(channel: string): string[] {\n const users = this.usersInChannelsSignal().get(channel);\n return users ? Array.from(users) : [];\n }\n\n private onDisconnect(): void {\n // Clear state on disconnect\n this.messagesSignal.set(null);\n this.channelMetadataSignal.set(new Map());\n this.usersInChannelsSignal.set(new Map());\n }\n}\n","\nexport * from \"./models/index\";\nexport * from \"./services/websocket.service\";\nexport * from \"./websocket-service/index\";\n\nexport { WebSocketMessageService } from \"./services/websocket-message.service\";\nexport { WebSocketSignalsManagerService } from \"./websocket-signals-manager.service\";\nexport { MessageTrackerSignalsService } from \"./message-tracker-signals.service\";\nexport { StateMessage, StateMessageInterface } from \"./models/state-message.model\";\nexport { PublicMessage, PublicMessageInterface } from \"./models/public-message.model\";\nexport { NotificationMessage, NotificationMessageInterface } from \"./models/notification-message.model\";\n// ChannelType is already exported from request-manager-state-service to avoid conflicts\n\n","import { HttpClient, HttpEvent, HttpEventType, HttpHeaderResponse } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject, Observable, throwError } from 'rxjs';\nimport { catchError, delay, finalize, map, tap } from 'rxjs/operators';\n\nimport { ApiRequest } from '../request-manager-state-service/models/api-request.model';\nimport { StreamType } from '../request-manager-state-service/models/stream-type.enum';\nimport { PathQueryService, HeadersService } from '../utils';\nimport { requestStreaming, StreamConfig } from './rxjs-operators/request-streaming';\nimport { WebsocketService } from '../ws-manager-service';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RequestService extends WebsocketService {\n\n private http = inject(HttpClient)\n\n private pathQueryService = inject(PathQueryService)\n private headersService = inject(HeadersService)\n\n isPending = new BehaviorSubject<boolean>(false)\n isPending$ = this.isPending.asObservable()\n\n progress = new BehaviorSubject<number>(0)\n progress$ = this.progress.asObservable()\n\n getRecordRequest<T>(options: ApiRequest): Observable<T>;\n // Overload for non-streaming requests\n getRecordRequest<T>(options: ApiRequest): Observable<T>;\n // Overload for streaming requests\n getRecordRequest<T>(options: ApiRequest & { stream: true }): Observable<T[]>;\n // Implementation\n getRecordRequest<T>(options: ApiRequest): Observable<any> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildCombinedHeaders(options);\n\n this.isPending.next(true);\n\n return (options.stream)\n ? this.http.get<any>(urlPath, {\n ...headers,\n observe: 'events',\n responseType: 'text',\n reportProgress: true\n }).pipe(\n tap(data => console.log('STREAM DATA', data)),\n requestStreaming({ streamType: options.streamType || StreamType.AI_STREAMING }),\n this.requestStreaming(options),\n this.handleFinalize()\n )\n : this.http.get<T>(urlPath, headers).pipe(\n this.request(options),\n )\n }\n\n createRecordRequest<T>(options: ApiRequest, data: any): Observable<T>;\n createRecordRequest<T>(options: ApiRequest & { stream: true }, data: any): Observable<T[]>;\n createRecordRequest<T>(options: ApiRequest, data: any): Observable<T>;\n createRecordRequest<T>(options: ApiRequest & { stream: true }, data: any): Observable<T[]>;\n createRecordRequest<T>(options: ApiRequest, data: any): Observable<any> {\n\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildCombinedHeaders(options);\n\n this.isPending.next(true);\n\n return (options.stream)\n ? this.http.post<any>(urlPath, data, {\n ...headers,\n observe: 'events',\n responseType: 'text',\n reportProgress: true\n }).pipe(\n requestStreaming({ streamType: options.streamType || StreamType.AI_STREAMING }),\n this.requestStreaming(options),\n this.handleFinalize()\n )\n : this.http.post<T>(urlPath, data, headers).pipe(\n this.request(options),\n )\n }\n\n updateRecordRequest<T>(options: ApiRequest, data: any): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildHeaders(options);\n\n this.isPending.next(true);\n\n return this.http.put<any>(urlPath, data, headers).pipe(\n this.request(options),\n )\n }\n\n deleteRecordRequest<T>(options: ApiRequest): Observable<T> {\n\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildHeaders(options);\n\n this.isPending.next(true);\n\n return this.http.delete<any>(urlPath, headers).pipe(\n this.request(options),\n )\n }\n\n // Helper functions\n private buildUrlPath(options: ApiRequest): string {\n return this.pathQueryService.buildAPIPath(options.server, options.path);\n }\n\n private buildHeaders(options: ApiRequest): any {\n return this.headersService.generateHeaders(options.headers);\n }\n\n private buildCombinedHeaders(options: ApiRequest): any {\n const headers = this.headersService.generateHeaders(options.headers)\n return this.combineHeaders(headers, options.stream || false)\n }\n\n private request<T>(options: ApiRequest): (source: Observable<any>) => Observable<T> {\n return (source$: Observable<any>): Observable<T> => {\n return source$.pipe(\n map(data => {\n if (!data || (Array.isArray(data) && data.length === 0)) {\n return data\n }\n if (options?.adapter) {\n return Array.isArray(data)\n ? data.map((item: any) => options.adapter(item))\n : options.adapter(data)\n }\n return data\n })\n )\n }\n }\n\n private requestStreaming<T>(options: ApiRequest): (source: Observable<T[]>) => Observable<T[]> {\n return (source$: Observable<T[]>): Observable<T[]> => {\n return source$.pipe(\n map(data => {\n if (!data || (Array.isArray(data) && data.length === 0)) {\n return data\n }\n if (options?.adapter) {\n return data.map((item: any) => options.adapter(item))\n }\n return data\n })\n )\n }\n }\n\n downloadFileRequest(options: ApiRequest): Observable<any> {\n\n this.isPending.next(true);\n\n const urlPath = this.buildUrlPath(options);\n\n return this.http.get(urlPath, { responseType: 'blob', observe: 'events', reportProgress: true })\n .pipe(\n map((event: HttpEvent<any>) => {\n\n this.isPending.next(true)\n\n if (event instanceof HttpHeaderResponse) {\n if(event.status !== 200) {\n this.isPending.next(false)\n throw new Error('Download failed');\n }\n }\n\n // 0\tSent\tRequest has been sent.\n // 1\tUploadProgress\tUpload is in progress.\n // 2\tResponseHeader\tResponse headers received.\n // 3\tDownloadProgress\tDownload is in progress.\n // 4\tResponse\tResponse is fully received.\n // 5\tUser\tCustom user event.\n\n switch (event.type) {\n\n case HttpEventType.DownloadProgress:\n\n const status = (event.total) ? Math.round(event.loaded / (event.total || 1) * 100) : 100\n this.progress.next(status)\n return status\n\n case HttpEventType.Response:\n\n try {\n\n const fileNamePath = (options?.saveAs) ? options.saveAs : (options.path) ? options.path[options.path.length - 1] : []\n const fileContentHeader = options.fileContentHeader || 'Content-Disposition'\n const header_content = event.headers.get(fileContentHeader);\n\n // checks if header_content is not empty and splits the header_content to get the file name\n // otherwise, it will use the fileDownload - contains the file name and extension\n const file = (header_content) ? header_content.split('=')[1].substring(0, header_content.split('=')[1].length) : ''\n\n const fileName = (file) ? file : fileNamePath\n\n if (fileName === '') {\n this.isPending.next(false);\n throw new Error('Save File: (file name and extension) not found in Headers or Path');\n }\n\n this.downloadFile(fileName, event.body)\n this.isPending.next(false)\n\n return 100\n\n } catch (error) {\n throw new Error('Download failed');\n }\n\n default:\n this.isPending.next(false)\n return 0\n }\n\n }),\n catchError(err => {\n return throwError(() => err)\n })\n )\n }\n\n private handleFinalize(): (source: Observable<any>) => Observable<any> {\n return finalize(() => this.isPending.next(false));\n }\n\n private downloadFile(file:string, fileData: any) {\n\n const navigatorAny = window.navigator as any\n\n const extension = file.split('.')[1].toLowerCase()\n\n var newBlob = new Blob([fileData], { type: this.createFileType(extension) })\n\n if (navigatorAny.msSaveOrOpenBlob) {\n navigatorAny.msSaveOrOpenBlob(newBlob, file)\n } else {\n const link = document.createElement('a')\n const url = window.URL.createObjectURL(newBlob)\n link.href = url\n link.download = file\n link.click()\n window.URL.revokeObjectURL(url)\n }\n\n }\n\n private createFileType(ext: any): string {\n\n let fileType: string = \"\"\n\n if (ext == 'pdf' || ext == 'csv') {\n fileType = `application/${ext}`\n }\n else if (ext == 'jpeg' || ext == 'jpg' || ext == 'png') {\n fileType = `image/${ext}`\n }\n else if (ext == 'txt') {\n fileType = 'text/plain'\n }\n\n else if (ext == 'ppt' || ext == 'pot' || ext == 'pps' || ext == 'ppa') {\n fileType = 'application/vnd.ms-powerpoint'\n }\n else if (ext == 'pptx') {\n fileType = 'application/vnd.openxmlformats-officedocument.presentationml.presentation'\n }\n else if (ext == 'doc' || ext == 'dot') {\n fileType = 'application/msword'\n }\n else if (ext == 'docx') {\n fileType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n }\n else if (ext == 'xls' || ext == 'xlt' || ext == 'xla') {\n fileType = 'application/vnd.ms-excel'\n }\n else if (ext == 'xlsx') {\n fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n }\n\n return fileType\n\n }\n\n private combineHeaders(headers: any, isStreaming: boolean) {\n\n return (isStreaming) ?\n {\n ...headers,\n observe: 'events',\n responseType: 'text',\n reportProgress: true,\n Accept: 'text/event-stream'\n }\n : headers\n\n }\n\n}\n","import { Observable, defer, interval } from 'rxjs';\nimport { takeWhile, map, tap } from 'rxjs/operators';\n\nexport function countdown(duration: number): Observable<number> {\n\n return defer(() => {\n\n const currentCount = { current: duration }\n\n return interval(1000).pipe(\n map(() => --currentCount.current),\n takeWhile(count => count >= 0)\n )\n\n })\n\n}\n","import { Observable, timer } from 'rxjs';\nimport { retry } from 'rxjs/operators';\n\nconst DEFAULT_MAX_RETRIES = 3;\n\nexport function delayedRetry<T>(delayMs: number, maxRetry = DEFAULT_MAX_RETRIES) {\n return (src: Observable<T>) =>\n src.pipe(\n retry({\n count: maxRetry,\n delay: () => timer(delayMs)\n })\n );\n}\n\n\n","import { Observable, interval } from 'rxjs';\nimport { mergeMap, startWith, takeUntil, tap } from 'rxjs/operators';\n\nexport function requestPolling<T>(pollInterval: number, stopCondition$: Observable<any>, isPending$: any) {\n return (source: Observable<T>): Observable<T> => {\n return interval(pollInterval * 1000)\n .pipe(\n startWith(0),\n tap(() => {\n try {\n if (isPending$ && typeof isPending$.next === 'function') {\n isPending$.next(true);\n } else if (isPending$ && typeof isPending$.set === 'function') {\n isPending$.set(true);\n }\n } catch (e) {\n // no-op if setting fails\n }\n }),\n mergeMap(() => source),\n tap(() => {\n try {\n if (isPending$ && typeof isPending$.next === 'function') {\n isPending$.next(false);\n } else if (isPending$ && typeof isPending$.set === 'function') {\n isPending$.set(false);\n }\n } catch (e) {\n // no-op if setting fails\n }\n }),\n takeUntil(stopCondition$),\n );\n };\n}\n","export interface DatabaseStorageInterface {\n table: string\n expiresIn: string\n}\n\nexport class DatabaseStorage implements DatabaseStorageInterface {\n\n constructor(\n public table = '',\n public expiresIn: '',\n ) {}\n\n static adapt(item?: any): any {\n\n if(!item?.table) return\n\n return new DatabaseStorage(\n item?.table,\n item?.expiresIn,\n )\n\n }\n\n}\n","export interface RetryOptionsInterface {\n times?: number // total request to be made including initial request\n delay?: number // seconds (<= 3 default 3 seconds)\n}\n\nexport class RetryOptions implements RetryOptionsInterface {\n\n constructor(\n public times = 0,\n public delay = 3,\n ) {}\n\n static adapt(item?: any): RetryOptions {\n\n return new RetryOptions(\n item?.times,\n item?.delay\n )\n\n }\n\n}\n","export interface BatchOptionsInterface {\n mode?: 'sequential' | 'parallel';\n stopOnError?: boolean;\n concurrency?: number;\n ignoreErrors?: boolean;\n logErrors?: boolean;\n}\n\nexport class BatchOptions implements BatchOptionsInterface {\n constructor(\n public mode: 'sequential' | 'parallel' = 'sequential',\n public stopOnError: boolean = false,\n public concurrency: number = 3,\n public ignoreErrors: boolean = false,\n public logErrors: boolean = true,\n ) {}\n\n static adapt(item?: any): BatchOptions {\n return new BatchOptions(\n item?.mode ?? 'sequential',\n item?.stopOnError ?? false,\n item?.concurrency ?? 3,\n item?.ignoreErrors ?? false,\n item?.logErrors !== false,\n );\n }\n}\n","export interface BatchResultInterface<T = any> {\n request: any;\n success: boolean;\n data?: T;\n error?: any;\n index: number;\n timestamp: number;\n}\n\nexport class BatchResult<T = any> implements BatchResultInterface<T> {\n constructor(\n public request: any,\n public success: boolean,\n public data?: T,\n public error?: any,\n public index: number = 0,\n public timestamp: number = Date.now(),\n ) {}\n\n static adapt<T>(item?: any): BatchResult<T> {\n return new BatchResult<T>(\n item?.request,\n item?.success ?? false,\n item?.data,\n item?.error,\n item?.index ?? 0,\n item?.timestamp ?? Date.now(),\n );\n }\n}\n","export type BatchRequestState<T> = \n | BatchPendingState\n | BatchSuccessState<T>\n | BatchErrorState;\n\nexport interface BatchPendingState {\n index: number;\n request: any;\n isPending: true;\n data?: undefined;\n error?: undefined;\n}\n\nexport interface BatchSuccessState<T> {\n index: number;\n request: any;\n isPending: false;\n data: T;\n error?: undefined;\n}\n\nexport interface BatchErrorState {\n index: number;\n request: any;\n isPending: false;\n data?: undefined;\n error: any;\n}\n\nexport function isPendingState<T>(state: BatchRequestState<T>): state is BatchPendingState {\n return state.isPending === true;\n}\n\nexport function isSuccessState<T>(state: BatchRequestState<T>): state is BatchSuccessState<T> {\n return state.isPending === false && state.data !== undefined;\n}\n\nexport function isErrorState<T>(state: BatchRequestState<T>): state is BatchErrorState {\n return state.isPending === false && state.error !== undefined;\n}\n","import { BatchRequestState } from './batch-request-state.model';\n\nexport interface BatchProgress {\n total: number;\n pending: number;\n completed: number;\n failed: number;\n percent: number;\n}\n\nexport function calculateBatchProgress<T>(states: BatchRequestState<T>[]): BatchProgress {\n const total = states.length;\n const pending = states.filter(s => s.isPending).length;\n const completed = states.filter(s => !s.isPending && s.data !== undefined).length;\n const failed = states.filter(s => !s.isPending && s.error !== undefined).length;\n const percent = total > 0 ? Math.round(((completed + failed) / total) * 100) : 0;\n\n return { total, pending, completed, failed, percent };\n}\n","export enum DataType {\n ANY = 0,\n ARRAY,\n OBJECT\n}\n","import { RetryOptions } from \"./retry-options.model\"\n\nexport interface ConfigHTTPOptionsInterface {\n server: string\n path?: any[]\n headers?: any\n polling?: number // seconds (undefined | 0 = none)\n retry?: RetryOptions\n stream?: boolean\n displayError?: boolean\n}\n\nexport class ConfigHTTPOptions implements ConfigHTTPOptionsInterface {\n\n constructor(\n public server = '',\n public path?: any[],\n public headers?: any,\n public polling?: number,\n public retry?: RetryOptions,\n public stream?: boolean,\n public displayError?: boolean,\n ) {}\n\n static adapt(item?: any): ConfigHTTPOptions {\n\n const server = Array.isArray(item?.server) ? item.server.join('/') : item?.server || '';\n const retryOptions = item?.retry ? RetryOptions.adapt(item.retry) : RetryOptions.adapt();\n\n return new ConfigHTTPOptions(\n server,\n (item?.path) ? item.path : [],\n (item?.headers) ? item.headers : {},\n item?.polling ? Math.floor(item.polling) : 0,\n retryOptions,\n (item?.stream) ? item.stream : false,\n (item?.displayError) ? item.displayError : false,\n )\n\n }\n\n}\n","import { SettingOptions } from \"../services\"\n\nexport interface LocalStorageOptionsInterface {\n storageName?: string\n storageSettingsName?: string\n options?: SettingOptions,\n}\n\nexport class LocalStorageOptions implements LocalStorageOptionsInterface {\n\n constructor(\n public storageName?: string,\n public storageSettingsName?: string,\n public options?: SettingOptions,\n ) {}\n\n static adapt(item?: any): LocalStorageOptions {\n\n return new LocalStorageOptions(\n (item?.storageName) ? item.storageName : 'storage',\n (item?.storageSettingsName) ? item.storageSettingsName : 'global-storage',\n (item?.options) ? SettingOptions.adapt(item.options) : SettingOptions.adapt(),\n )\n\n }\n\n}\n","import { ConfigHTTPOptions } from \"./config-http-options.model\";\nimport { LocalStorageOptions } from \"./config-local-storage-options.model\";\n\nexport interface ConfigOptionsInterface {\n httpRequestOptions?: ConfigHTTPOptions\n LocalStorageOptions?: LocalStorageOptions\n // DatabaseOptions: any\n}\n\nexport class ConfigOptions implements ConfigOptionsInterface {\n\n constructor(\n public httpRequestOptions?: ConfigHTTPOptions,\n public LocalStorageOptions?: LocalStorageOptions,\n // public DatabaseOptions?: any,\n ) {}\n\n static adapt(item?: any): ConfigOptions {\n return new ConfigOptions(\n (item?.httpRequestOptions) ? ConfigHTTPOptions.adapt(item.httpRequestOptions) : undefined,\n (item?.LocalStorageOptions) ? LocalStorageOptions.adapt(item.LocalStorageOptions) : undefined,\n // item?.DatabaseOptions,\n )\n\n }\n\n}\n","import { RandomPaletteColor } from \"../../../services\"\n\nexport interface UserDataInterface {\n ldap: string\n name: string\n email: string\n color: string\n}\n\nexport class UserData implements UserDataInterface {\n\n constructor(\n public ldap = '',\n public name = '',\n public email = '',\n public color = RandomPaletteColor(),\n ) {}\n\n static adapt(item?: any): UserData {\n\n const userName = `${item?.first_name} ${item?.last_name}`\n\n return new UserData(\n item?.ldap,\n userName,\n item?.email,\n item?.color,\n )\n\n }\n\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs';\nimport { WebSocketManagerService } from './websocket-service/websocket-manager.service';\n\n/**\n * Message Tracker Service - Guaranteed Message Delivery\n *\n * Tracks message IDs, detects gaps, manages acknowledgments, and handles sync.\n * Ensures frontend clients never miss messages even during disconnections.\n *\n * Features:\n * - Per-channel message sequence tracking\n * - Automatic gap detection and recovery\n * - Batch acknowledgments (configurable interval)\n * - Reconnection sync with last-seen tracking\n * - Gap threshold alerting (10 messages before UI notification)\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class MessageTrackerService implements OnDestroy {\n\n // ═══════════════════════════════════════════════════════════════════════════\n // CONFIGURATION\n // ═══════════════════════════════════════════════════════════════════════════\n\n /** Batch acknowledgment interval in milliseconds */\n private readonly BATCH_ACK_INTERVAL_MS = 5000; // 5 seconds\n\n /** Maximum gap before alerting UI */\n private readonly GAP_THRESHOLD = 10;\n\n /** Maximum messages to store in pending acks before forcing batch */\n private readonly MAX_PENDING_ACKS = 100;\n\n // ═══════════════════════════════════════════════════════════════════════════\n // STATE TRACKING\n // ═══════════════════════════════════════════════════════════════════════════\n\n /**\n * Track last seen message ID per channel\n * Map<channelName, lastMessageId>\n */\n private lastSeen = new Map<string, number>();\n\n /**\n * Expected next message ID per channel (for gap detection)\n * Map<channelName, nextExpectedId>\n */\n private expectedSequence = new Map<string, number>();\n\n /**\n * Pending acknowledgments per channel\n * Map<channelName, Set<messageId>>\n */\n private pendingAcks = new Map<string, Set<number>>();\n\n /**\n * Gap count per channel (for threshold alerting)\n * Map<channelName, gapCount>\n */\n private gapCounts = new Map<string, number>();\n\n /**\n * Replay mode tracking (per channel)\n * Used to distinguish replay vs live messages\n */\n private inReplayMode = new Map<string, boolean>();\n\n /**\n * Gap retry count (for retry logic)\n * Map<channel, retryCount>\n */\n private gapRetryCount = new Map<string, number>();\n\n /** Batch acknowledgment timer */\n private batchAckTimer: any = null;\n\n /** Subscription to WebSocket messages */\n private messagesSubscription: Subscription | null = null;\n\n /**\n * Track channels we want to be subscribed to (survives disconnect/reconnect)\n * This is separate from WebSocketManagerService.subscribedChannels which tracks\n * actual active subscriptions\n */\n private intendedChannels = new Set<string>();\n\n /** Observable to emit processed messages to UI components */\n private messagesSubject = new BehaviorSubject<any>(null);\n public messages$: Observable<any> = this.messagesSubject.asObservable();\n\n // ═══════════════════════════════════════════════════════════════════════════\n // INITIALIZATION\n // ═══════════════════════════════════════════════════════════════════════════\n\n constructor(private wsManager: WebSocketManagerService) {\n // Restore state from sessionStorage (survives page reload)\n this.restoreLastSeen();\n this.restoreIntendedChannels();\n\n // Start batch acknowledgment timer\n this.startBatchAckTimer();\n\n // Subscribe to all incoming WebSocket messages\n this.messagesSubscription = this.wsManager.messages$.subscribe(msg => {\n if (msg) {\n this.onMessage(msg);\n }\n });\n\n // Listen for reconnect events - re-subscribe with lastSeenId for sync\n this.wsManager.onReconnect$.subscribe(() => {\n console.log('🔄 Reconnection detected, re-subscribing with lastSeenId...');\n this.reSubscribeAllChannels();\n });\n\n console.log('✅ MessageTrackerService initialized');\n }\n\n ngOnDestroy(): void {\n this.stopBatchAckTimer();\n this.persistLastSeen(); // This now also persists intendedChannels\n this.messagesSubscription?.unsubscribe();\n console.log('🛑 MessageTrackerService destroyed');\n }\n\n // ═══════════════════════════════════════════════════════════════════════════\n // MESSAGE HANDLING\n // ═══════════════════════════════════════════════════════════════════════════\n\n /**\n * Process incoming message\n * Tracks ID, detects gaps, queues acknowledgment\n */\n private onMessage(msg: any): void {\n const { type, channel, messageId, isReplay } = msg;\n\n // Only track messages with IDs (ignore legacy messages without messageId)\n if (messageId === undefined || messageId === null) {\n console.warn('⚠️ Received message without ID (legacy format):', msg);\n // Still forward legacy messages to UI\n this.messagesSubject.next(msg);\n return;\n }\n\n // Handle replay mode transitions\n if (isReplay && !this.inReplayMode.get(channel)) {\n console.log(`🔄 Entering replay mode for channel: ${channel}`);\n this.inReplayMode.set(channel, true);\n } else if (!isReplay && this.inReplayMode.get(channel)) {\n console.log(`✅ Exiting replay mode for channel: ${channel}`);\n this.inReplayMode.set(channel, false);\n }\n\n // Track message and detect gaps\n this.trackMessage(channel, messageId, isReplay);\n\n // Forward message to UI components\n this.messagesSubject.next(msg);\n }\n\n /**\n * Track message ID and detect gaps\n */\n private trackMessage(channel: string, messageId: number, isReplay: boolean): void {\n const expected = this.expectedSequence.get(channel) || 1;\n\n // Gap detection\n if (messageId !== expected) {\n console.warn(`⚠️ Gap detected in channel \"${channel}\": expected ${expected}, got ${messageId}`);\n\n // Increment gap count\n const currentGapCount = this.gapCounts.get(channel) || 0;\n const newGapCount = currentGapCount + 1;\n this.gapCounts.set(channel, newGapCount);\n\n // Check threshold\n if (newGapCount >= this.GAP_THRESHOLD) {\n console.error(`🚨 Gap threshold exceeded for channel \"${channel}\": ${newGapCount} gaps`);\n this.onGapThresholdExceeded(channel, newGapCount);\n }\n\n // Request gap fill\n this.requestGapFill(channel, expected, messageId - 1);\n } else {\n // Reset gap count and retry count on successful sequence\n this.gapCounts.set(channel, 0);\n this.gapRetryCount.set(channel, 0);\n }\n\n // Update tracking\n this.lastSeen.set(channel, messageId);\n this.expectedSequence.set(channel, messageId + 1);\n\n // Persist to sessionStorage (debounced in production)\n this.persistLastSeen();\n\n // Queue for acknowledgment\n this.queueAck(channel, messageId);\n\n // Check if we should force batch ack due to volume\n const pendingCount = this.pendingAcks.get(channel)?.size || 0;\n if (pendingCount >= this.MAX_PENDING_ACKS) {\n console.log(`📦 Forcing batch ack: ${pendingCount} pending messages`);\n this.sendBatchAck(channel);\n }\n }\n\n // ═══════════════════════════════════════════════════════════════════════════\n // ACKNOWLEDGMENT MANAGEMENT\n // ═══════════════════════════════════════════════════════════════════════════\n\n /**\n * Queue message for batch acknowledgment\n */\n private queueAck(channel: string, messageId: number): void {\n if (!this.pendingAcks.has(channel)) {\n this.pendingAcks.set(channel, new Set());\n }\n this.pendingAcks.get(channel)!.add(messageId);\n }\n\n /**\n * Start batch acknowledgment timer\n */\n private startBatchAckTimer(): void {\n this.batchAckTimer = setInterval(() => {\n this.sendAllBatchAcks();\n }, this.BATCH_ACK_INTERVAL_MS);\n }\n\n /**\n * Stop batch acknowledgment timer\n */\n private stopBatchAckTimer(): void {\n if (this.batchAckTimer) {\n clearInterval(this.batchAckTimer);\n this.batchAckTimer = null;\n }\n }\n\n /**\n * Send batch acknowledgments for all channels with pending acks\n */\n private sendAllBatchAcks(): void {\n this.pendingAcks.forEach((messageIds, channel) => {\n if (messageIds.size > 0) {\n this.sendBatchAck(channel);\n }\n });\n }\n\n /**\n * Send batch acknowledgment for a specific channel\n */\n private sendBatchAck(channel: string): void {\n const messageIds = this.pendingAcks.get(channel);\n\n if (!messageIds || messageIds.size === 0) {\n return;\n }\n\n // Convert Set to sorted array\n const sortedIds = Array.from(messageIds).sort((a, b) => a - b);\n const ackUpTo = sortedIds[sortedIds.length - 1];\n\n console.log(`📦 Batch ack for channel \"${channel}\": ackUpTo=${ackUpTo} (${messageIds.size} messages)`);\n\n this.wsManager.send({\n type: 'messageAckBatch',\n channel,\n ackUpTo,\n // Optional: include skippedIds if you want to report gaps\n // skippedIds: this.getSkippedIds(channel, ackUpTo)\n });\n\n // Clear pending acks\n messageIds.clear();\n }\n\n // ═══════════════════════════════════════════════════════════════════════════\n // GAP RECOVERY\n // ═══════════════════════════════════════════════════════════════════════════\n\n /**\n * Request missing messages from server\n */\n private requestGapFill(channel: string, fromId: number, toId: number): void {\n const retries = this.gapRetryCount.get(channel) || 0;\n\n if (retries >= 3) {\n console.error(`🚨 Gap fill failed after 3 retries for channel \"${channel}\": ${fromId} to ${toId}`);\n // Could emit to UI for manual intervention\n return;\n }\n\n console.log(`🔍 Requesting gap fill for channel \"${channel}\": ${fromId} to ${toId} (attempt ${retries + 1})`);\n\n this.wsManager.send({\n type: 'gapRequest',\n channel,\n fromId,\n toId\n });\n\n this.gapRetryCount.set(channel, retries + 1);\n }\n\n /**\n * Handle gap threshold exceeded (optional: alert UI)\n */\n private onGapThresholdExceeded(channel: string, gapCount: number): void {\n console.warn(`⚠️ High gap count for channel \"${channel}\": ${gapCount} missed messages`);\n // Could emit to a separate observable for UI components to subscribe to\n // this.gapAlerts.next({ channel, gapCount });\n }\n\n // ═══════════════════════════════════════════════════════════════════════════\n // SUBSCRIPTION MANAGEMENT\n // ═══════════════════════════════════════════════════════════════════════════\n\n /**\n * Subscribe to channel with sync support\n * Automatically includes lastSeenId for replay\n */\n subscribeToChannel(channel: string, userData?: any): void {\n const lastSeenId = this.lastSeen.get(channel) || 0;\n\n console.log(`📥 Subscribing to channel \"${channel}\" with lastSeenId=${lastSeenId}`);\n console.log(`📝 Adding to intendedChannels (now has ${this.intendedChannels.size + 1} channels)`);\n\n // Track this channel as intended (survives disconnect/reconnect)\n this.intendedChannels.add(channel);\n this.persistIntendedChannels();\n\n this.wsManager.sendSubscribeWithLastSeen(channel, userData, lastSeenId);\n }\n\n /**\n * Re-subscribe to all previously subscribed channels after reconnect\n * Includes lastSeenId for each channel to trigger message replay\n */\n private reSubscribeAllChannels(): void {\n // Use intendedChannels which survives disconnect/reconnect\n const channels = Array.from(this.intendedChannels);\n\n console.log(`🔄 Re-subscribing to ${channels.length} channel(s) with lastSeenId...`);\n\n channels.forEach((channel: string) => {\n this.subscribeToChannel(channel);\n });\n\n console.log(`✅ Re-subscription complete for ${channels.length} channel(s)`);\n }\n\n // ═══════════════════════════════════════════════════════════════════════════\n // STATE PERSISTENCE\n // ═══════════════════════════════════════════════════════════════════════════\n\n /**\n * Persist lastSeen to sessionStorage (survives page reload)\n */\n private persistLastSeen(): void {\n try {\n const data = JSON.stringify(Array.from(this.lastSeen.entries()));\n sessionStorage.setItem('messageLastSeen', data);\n\n // Also persist intendedChannels\n this.persistIntendedChannels();\n } catch (err: any) {\n console.warn('⚠️ Failed to persist lastSeen:', err.message);\n }\n }\n\n /**\n * Restore lastSeen from sessionStorage\n */\n private restoreLastSeen(): void {\n try {\n const data = sessionStorage.getItem('messageLastSeen');\n if (data) {\n const entries = JSON.parse(data);\n this.lastSeen = new Map(entries);\n\n // Rebuild expectedSequence from restored lastSeen\n this.lastSeen.forEach((lastId, channel) => {\n this.expectedSequence.set(channel, lastId + 1);\n });\n\n console.log('📥 Restored lastSeen from sessionStorage:', this.lastSeen.size, 'channels');\n }\n } catch (err: any) {\n console.warn('⚠️ Failed to restore lastSeen:', err.message);\n }\n }\n\n /**\n * Persist intendedChannels to sessionStorage\n */\n private persistIntendedChannels(): void {\n try {\n const channels = Array.from(this.intendedChannels);\n sessionStorage.setItem('intendedChannels', JSON.stringify(channels));\n } catch (err: any) {\n console.warn('⚠️ Failed to persist intendedChannels:', err.message);\n }\n }\n\n /**\n * Restore intendedChannels from sessionStorage\n */\n private restoreIntendedChannels(): void {\n try {\n const data = sessionStorage.getItem('intendedChannels');\n if (data) {\n const channels = JSON.parse(data);\n this.intendedChannels = new Set(channels);\n console.log('📥 Restored intendedChannels from sessionStorage:', this.intendedChannels.size, 'channels');\n }\n } catch (err: any) {\n console.warn('⚠️ Failed to restore intendedChannels:', err.message);\n }\n }\n\n // ═══════════════════════════════════════════════════════════════════════════\n // PUBLIC ACCESSORS\n // ═══════════════════════════════════════════════════════════════════════════\n\n /**\n * Get last seen message ID for a channel\n */\n getLastSeenId(channel: string): number {\n return this.lastSeen.get(channel) || 0;\n }\n\n /**\n * Get expected next message ID for a channel\n */\n getExpectedNextId(channel: string): number {\n return this.expectedSequence.get(channel) || 1;\n }\n\n /**\n * Check if currently in replay mode for a channel\n */\n isInReplayMode(channel: string): boolean {\n return this.inReplayMode.get(channel) || false;\n }\n\n /**\n * Get gap count for a channel\n */\n getGapCount(channel: string): number {\n return this.gapCounts.get(channel) || 0;\n }\n\n // ═══════════════════════════════════════════════════════════════════════════\n // UTILITY METHODS\n // ═══════════════════════════════════════════════════════════════════════════\n\n /**\n * Get skipped IDs between expected and received (for detailed gap reporting)\n */\n private getSkippedIds(channel: string, upToId: number): number[] {\n const expected = this.expectedSequence.get(channel) || 1;\n const skipped: number[] = [];\n\n for (let i = expected; i < upToId; i++) {\n const pending = this.pendingAcks.get(channel);\n if (!pending?.has(i)) {\n skipped.push(i);\n }\n }\n\n return skipped;\n }\n\n /**\n * Clear all tracking state (useful for debugging or manual reset)\n */\n clearState(): void {\n this.lastSeen.clear();\n this.expectedSequence.clear();\n this.pendingAcks.clear();\n this.gapCounts.clear();\n this.inReplayMode.clear();\n this.gapRetryCount.clear();\n this.persistLastSeen();\n console.log('🧹 MessageTracker state cleared');\n }\n}\n","import { Inject, inject, Injectable, Injector, Optional } from '@angular/core';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { BehaviorSubject, Observable, Subject, throwError, from, of } from 'rxjs';\nimport { tap, map, finalize, catchError, concatMap, mergeMap, toArray, concat } from 'rxjs/operators';\n\nimport { ApiRequest } from '../request-manager-state-service/models/api-request.model';\nimport { RequestService } from './request.service';\nimport { requestPolling, countdown, delayedRetry } from './rxjs-operators';\n\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigOptions, BatchOptions, BatchResult, BatchRequestState } from '../../models';\nimport { ObjectMergerService } from '../utils/object-merger.service';\nimport { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display';\nimport { WebSocketManagerService } from '../ws-manager-service/websocket-service';\nimport { MessageTrackerService } from '../ws-manager-service/message-tracker.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HTTPManagerService<T> extends RequestService {\n\n toastMessage = inject(ToastMessageDisplayService)\n ng_injector = inject(Injector)\n objectMergerService = inject(ObjectMergerService)\n wsManager = inject(WebSocketManagerService)\n messageTracker = inject(MessageTrackerService)\n\n // Delegate WebSocket observables to WebSocketManagerService (singleton)\n override connectionStatus$ = this.wsManager.connectionStatus$\n override messages$ = this.messageTracker.messages$ // Messages flow through MessageTrackerService\n override subscribedChannels$ = this.wsManager.subscribedChannels$\n\n private countdown = new BehaviorSubject<number>(0);\n countdown$ = this.countdown.asObservable();\n\n private error = new BehaviorSubject<boolean>(false);\n error$ = this.error.asObservable();\n\n private data = new BehaviorSubject<any>(null)\n data$ = this.data.asObservable()\n\n private polling$ = new Subject<void>();\n\n config = ApiRequest.adapt();\n\n constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {\n super()\n this.config = (configOptions) ? ApiRequest.adapt(configOptions.httpRequestOptions) : this.config\n }\n\n // ═══════════════════════════════════════════════════════════════════════════\n // WEBSOCKET METHODS (Delegated to WebSocketManagerService singleton)\n // ═══════════════════════════════════════════════════════════════════════════\n\n /**\n * Connect to WebSocket server\n * Only the first call across ALL instances will establish a connection\n */\n override connect(options: any, jwtToken: string): void {\n this.wsManager.connect(options, jwtToken);\n }\n\n /**\n * Disconnect from WebSocket server\n */\n override disconnect(): void {\n this.wsManager.disconnect();\n }\n\n /**\n * Subscribe to a channel\n */\n override subscribeToChannel(channel: string, userData?: any): void {\n this.messageTracker.subscribeToChannel(channel, userData);\n }\n\n /**\n * Subscribe to multiple channels\n */\n override subscribeToChannels(channels: string[], userData?: any): void {\n channels.forEach(channel => this.messageTracker.subscribeToChannel(channel, userData));\n }\n\n /**\n * Unsubscribe from a channel\n */\n override unsubscribeFromChannel(channel: string): void {\n this.wsManager.unsubscribeFromChannel(channel);\n }\n\n /**\n * Get currently subscribed channels\n */\n override getSubscribedChannels(): Set<string> {\n return this.wsManager.getSubscribedChannels();\n }\n\n /**\n * Send broadcast message\n */\n override sendBroadcast(content: any): void {\n this.wsManager.sendBroadcast(content);\n }\n\n /**\n * Send message in channel (state manager message)\n */\n override sendMessageInChannel(channel: string, content: any): void {\n this.wsManager.sendMessageInChannel(channel, content);\n }\n\n /**\n * Send channel message\n */\n override sendChannelMessage(channel: string, content: any): void {\n this.wsManager.sendChannelMessage(channel, content);\n }\n\n /**\n * Send message to multiple channels\n */\n override sendChannelMessageToChannels(channels: string[], content: any): void {\n this.wsManager.sendChannelMessageToChannels(channels, content);\n }\n\n /**\n * Send message to user\n */\n override sendMessageToUser(user: string, content: any): void {\n this.wsManager.sendMessageToUser(user, content);\n }\n\n /**\n * Get all channels\n */\n override getAllChannels(): void {\n this.wsManager.getAllChannels();\n }\n\n /**\n * Create channel\n */\n override createChannel(channel: string): void {\n this.wsManager.createChannel(channel);\n }\n\n /**\n * Delete channel\n */\n override deleteChannel(channel: string): void {\n this.wsManager.deleteChannel(channel);\n }\n\n /**\n * Get users in channel\n */\n override getUsersInChannel(channel: string): void {\n this.wsManager.getUsersInChannel(channel);\n }\n\n /**\n * Create notification channel\n */\n override createNotificationChannel(channel: string): void {\n this.wsManager.createNotificationChannel(channel);\n }\n\n /**\n * Get notification channels\n */\n override getNotificationChannels(): void {\n this.wsManager.getNotificationChannels();\n }\n\n /**\n * Get today's notification channels\n */\n override getTodaysNotificationChannels(): void {\n this.wsManager.getTodaysNotificationChannels();\n }\n\n /**\n * Subscribe to notification channel\n */\n override subscribeToNotificationChannel(channel: string, options?: any, user?: any): void {\n this.wsManager.subscribeToNotificationChannel(channel, options, user);\n }\n\n /**\n * Unsubscribe from notification channel\n */\n override unsubscribeFromNotificationChannel(channel: string): void {\n this.wsManager.unsubscribeFromNotificationChannel(channel);\n }\n\n /**\n * Send notification to channel\n */\n override sendNotification(channel: string, content: any): void {\n this.wsManager.sendNotification(channel, content);\n }\n\n // REQUESTS\n\n getRequest<T>(options?: ApiRequest, params?: any[]) {\n\n this.isPending.next(true);\n this.data.next(null)\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.getRecordRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name)\n .pipe(\n tap(data => this.data.next(data))\n ).pipe(\n finalize(() => this.isPending.next(false)),\n catchError((err) => {\n if(updatedOptions.displayError) this.handleErrorWithSnackBar(err)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n }\n\n postRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {\n\n this.isPending.next(true);\n this.data.next(null)\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.createRecordRequest;\n const requests = this.createRequest(func, updatedOptions, data);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(tap(data => this.data.next(data)))\n .pipe(\n finalize(() => this.isPending.next(false)),\n catchError((err) => {\n if(updatedOptions.displayError) this.handleErrorWithSnackBar(err)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n }\n\n putRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {\n\n this.isPending.next(true);\n this.data.next(null)\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.updateRecordRequest;\n const requests = this.createRequest(func, updatedOptions, data);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(tap(data => this.data.next(data)))\n .pipe(\n finalize(() => this.isPending.next(false)),\n catchError((err) => {\n if(updatedOptions.displayError) this.handleErrorWithSnackBar(err)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n }\n\n deleteRequest<T>(options: ApiRequest, params?: any[]) {\n\n this.isPending.next(true);\n this.data.next(null)\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.deleteRecordRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(tap(data => this.data.next(data)))\n .pipe(\n finalize(() => this.isPending.next(false)),\n catchError((err) => {\n if(updatedOptions.displayError) this.handleErrorWithSnackBar(err)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n }\n\n downloadRequest<T>(options: ApiRequest, params?: any[], saveAs?: string) {\n\n this.isPending.next(true);\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.downloadFileRequest;\n const requests = this.createRequest(func, updatedOptions)\n\n return this.createObservable<T>(updatedOptions, requests, func.name)\n .pipe(\n catchError((err) => {\n this.error.next(true)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n\n }\n\n private createObservable<T>(options: ApiRequest, request$: Observable<T>, funcName: string) {\n\n const polling = options.polling ? (options.polling > 0 ? true : false) : false;\n const isPolling =\n polling &&\n !(funcName === 'deleteRecordRequest' || funcName === 'updateRecordRequest' || funcName === 'createRecordRequest')\n ? true\n : false;\n\n this.polling$.next();\n\n const polling$ =\n (isPolling && options.polling) || 0 >= 3\n ? request$.pipe(\n requestPolling((options.polling || 0) + 1, this.polling$, this.isPending),\n tap(() => this.countdown.next(0)),\n tap(() => {\n if (!options.polling) return;\n const count = options.polling ? options.polling : 0;\n // console.log('COUNT:', count);\n countdown(count)\n .pipe(\n map((x: number) => {\n // console.log('XX:', count, x);\n const pollingInSec = options.polling || 0;\n const percentageCompleted = ((pollingInSec - x) / pollingInSec) * 100;\n return Math.round(percentageCompleted);\n })\n )\n .subscribe((countDownValue: number) => {\n // console.log(this.countdown.value, countDownValue);\n this.countdown.next(countDownValue);\n });\n }),\n )\n : request$.pipe(\n catchError((err: any) => {\n\n if (err instanceof HttpErrorResponse) {\n this.error.next(true);\n return this.handleError(err);\n }\n\n return throwError(() => err);\n }),\n // finalize(() => this.isPending.next(false))\n )\n\n return polling$.pipe(\n (options?.retry && options.retry.times > 0)\n ? delayedRetry((options.retry.delay || 3) * 1000, (options.retry.times || 0) - 1)\n : (source: Observable<T>) => source,\n catchError((err: any, caught: Observable<T>) => {\n\n if (err instanceof HttpErrorResponse) {\n this.error.next(true);\n if(isPolling) this.stopPolling();\n return this.handleError(err);\n }\n\n return throwError(() => err);\n })\n );\n }\n\n private createRequest(func: Function, options: ApiRequest, data?: any | any[]) {\n const dataItem = this.prepareRequestData(options, data, func.name);\n return func.bind(this)(dataItem.options, dataItem.data);\n }\n\n private prepareRequestData(options: ApiRequest, data: any, funcName: string) {\n\n if ((options.mapper && funcName === 'updateRecordRequest') || funcName === 'createRecordRequest') {\n if (options?.mapper) {\n data = options.mapper\n ? Array.isArray(data)\n ? map((item) => options.mapper(item))\n : options.mapper(data)\n : data;\n }\n } else {\n if (options?.adapter) {\n data = Array.isArray(data)\n ? map((item) => options.adapter(item))\n : options.adapter(data)\n }\n }\n\n return { options: options, data: data };\n }\n\n // MISC\n\n private handleError(error: Response | any) {\n this.error.next(error.message || `${error.status} - ${error.statusText}`)\n return throwError(() => error)\n }\n\n private handleErrorWithSnackBar(error: Response | any) {\n\n const displayError = ToastDisplay.adapt({\n message: error.message || `${error.status} - ${error.statusText}`,\n action: 'OK',\n color: ToastColors.ERROR,\n icon: 'error',\n duration: 5 * 1000, //5 seconds\n })\n\n this.toastMessage.toastMessage(displayError)\n\n }\n\n private stopPolling() {\n this.isPending.next(false);\n this.polling$.next();\n }\n\n private defineReqOptions(options: any, params?: any[]) {\n\n const req = ApiRequest.adapt(options)\n if(req?.path) req.path = (params) ? [...req.path, ...params] : req.path\n\n const optionsReq = (req)? req : ApiRequest.adapt()\n const updatedOptions = this.objectMergerService.mergeOptions(optionsReq)\n\n return updatedOptions\n\n }\n\n // BATCH REQUESTS\n\n /**\n * Execute multiple HTTP requests with configurable execution strategy\n * @param requests Array of ApiRequest configurations\n * @param options Optional batch configuration (all properties optional)\n * @returns Observable emitting array of data in the order of requests provided\n */\n getBatchRequests<U = T>(\n requests: ApiRequest[],\n options?: BatchOptions\n ): Observable<U[]> {\n const batchOptions = BatchOptions.adapt(options);\n\n const mode = batchOptions.mode || 'sequential';\n\n if (mode === 'parallel') {\n return this.getParallelRequest(requests, batchOptions);\n } else {\n return this.getSequentialRequest(requests, batchOptions);\n }\n }\n\n /**\n * Execute requests sequentially (one at a time, in order)\n * @param requests Array of ApiRequest configurations\n * @param options Optional batch configuration\n * @returns Observable emitting array of data when all requests complete\n */\n getSequentialRequest<U = T>(\n requests: ApiRequest[],\n options?: BatchOptions\n ): Observable<U[]> {\n const batchOptions = BatchOptions.adapt(options);\n const results: U[] = new Array(requests.length);\n\n return from(requests).pipe(\n concatMap((req, index) => {\n return this.getRequest<U>(req).pipe(\n tap(data => {\n results[index] = data;\n }),\n catchError(error => this.handleSequentialError(req, error, index, batchOptions))\n );\n }),\n toArray(),\n map(() => results)\n );\n }\n\n /**\n * Execute requests in parallel with concurrency control\n * @param requests Array of ApiRequest configurations\n * @param options Optional batch configuration with concurrency limit\n * @returns Observable emitting array of data when all requests complete\n */\n getParallelRequest<U = T>(\n requests: ApiRequest[],\n options?: BatchOptions\n ): Observable<U[]> {\n const batchOptions = BatchOptions.adapt(options);\n const concurrency = batchOptions.concurrency || 3;\n const results: U[] = new Array(requests.length);\n\n return from(requests).pipe(\n mergeMap((req, index) => {\n return this.getRequest<U>(req).pipe(\n tap(data => {\n results[index] = data;\n }),\n catchError(error => this.handleParallelError(req, error, index, batchOptions))\n );\n }, concurrency),\n toArray(),\n map(() => results)\n );\n }\n\n /**\n * Execute multiple HTTP requests and emit individual state changes in real-time\n * @param requests Array of ApiRequest configurations\n * @param options Optional batch configuration (all properties optional)\n * @returns Observable stream of individual request states\n */\n getBatchRequestsStream<U = T>(\n requests: ApiRequest[],\n options?: BatchOptions\n ): Observable<BatchRequestState<U>> {\n const batchOptions = BatchOptions.adapt(options);\n const mode = batchOptions.mode || 'sequential';\n\n if (mode === 'parallel') {\n return this.getParallelStream(requests, batchOptions);\n } else {\n return this.getSequentialStream(requests, batchOptions);\n }\n }\n\n /**\n * Execute requests sequentially and emit state changes\n */\n private getSequentialStream<U>(\n requests: ApiRequest[],\n options: BatchOptions\n ): Observable<BatchRequestState<U>> {\n return from(requests).pipe(\n concatMap((req, index) => {\n const pending$: Observable<BatchRequestState<U>> = of({\n index,\n request: req,\n isPending: true\n });\n\n const result$: Observable<BatchRequestState<U>> = this.getRequest<U>(req).pipe(\n map((data) => ({\n index,\n request: req,\n isPending: false,\n data\n }) as BatchRequestState<U>),\n catchError((error) => of({\n index,\n request: req,\n isPending: false,\n error\n } as BatchRequestState<U>))\n );\n\n return pending$.pipe(\n concatMap(() => result$)\n );\n })\n );\n }\n\n /**\n * Execute requests in parallel and emit state changes\n */\n private getParallelStream<U>(\n requests: ApiRequest[],\n options: BatchOptions\n ): Observable<BatchRequestState<U>> {\n const concurrency = options.concurrency || 3;\n\n return from(requests).pipe(\n mergeMap((req, index) => {\n const pending$: Observable<BatchRequestState<U>> = of({\n index,\n request: req,\n isPending: true\n });\n\n const result$: Observable<BatchRequestState<U>> = this.getRequest<U>(req).pipe(\n map((data) => ({\n index,\n request: req,\n isPending: false,\n data\n }) as BatchRequestState<U>),\n catchError((error) => of({\n index,\n request: req,\n isPending: false,\n error\n } as BatchRequestState<U>))\n );\n\n return pending$.pipe(\n concatMap(() => result$)\n );\n }, concurrency)\n );\n }\n\n private handleSequentialError<U>(\n request: ApiRequest,\n error: any,\n index: number,\n options: BatchOptions\n ): Observable<U> {\n if (options.logErrors !== false) {\n console.error(`Batch request ${index} failed:`, error);\n }\n\n if (options.stopOnError) {\n return throwError(() => error);\n }\n\n if (options.ignoreErrors) {\n return of(undefined as unknown as U);\n }\n\n return throwError(() => error);\n }\n\n private handleParallelError<U>(\n request: ApiRequest,\n error: any,\n index: number,\n options: BatchOptions\n ): Observable<U> {\n if (options.logErrors !== false) {\n console.error(`Batch request ${index} failed:`, error);\n }\n\n if (options.ignoreErrors) {\n return of(undefined as unknown as U);\n }\n\n return of(undefined as unknown as U);\n }\n}\n\n","import { HttpClient, HttpEvent, HttpEventType, HttpHeaderResponse } from '@angular/common/http';\nimport { Injectable, inject, signal, computed } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, finalize, map } from 'rxjs/operators';\n\nimport { ApiRequest } from '../request-manager-state-service/models/api-request.model';\nimport { StreamType } from '../request-manager-state-service/models/stream-type.enum';\nimport { PathQueryService, HeadersService } from '../utils';\nimport { requestStreaming, StreamConfig } from './rxjs-operators/request-streaming';\nimport { WebsocketService } from '../ws-manager-service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RequestSignalsService extends WebsocketService {\n\n private http = inject(HttpClient);\n private pathQueryService = inject(PathQueryService);\n private headersService = inject(HeadersService);\n\n isPending = signal(false);\n progress = signal(0);\n\n isIdle = computed(() => !this.isPending());\n\n // Overload for non-streaming requests\n getRecordRequest<T>(options: ApiRequest): Observable<T>;\n // Overload for streaming requests\n getRecordRequest<T>(options: ApiRequest & { stream: true }): Observable<T[]>;\n // Implementation\n getRecordRequest<T>(options: ApiRequest): Observable<any> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildCombinedHeaders(options);\n\n this.isPending.set(true);\n\n return (options.stream)\n ? this.http.get<any>(urlPath, {\n ...headers,\n observe: 'events',\n responseType: 'text',\n reportProgress: true\n }).pipe(\n requestStreaming({ streamType: options.streamType || StreamType.AI_STREAMING }),\n this.requestStreamingOperator(options),\n this.handleFinalize()\n )\n : this.http.get<T>(urlPath, headers).pipe(\n this.request(options),\n this.handleFinalize()\n );\n }\n\n // Overload for non-streaming requests\n createRecordRequest<T>(options: ApiRequest, data: any): Observable<T>;\n // Overload for streaming requests\n createRecordRequest<T>(options: ApiRequest & { stream: true }, data: any): Observable<T[]>;\n // Implementation\n createRecordRequest<T>(options: ApiRequest, data: any): Observable<any> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildCombinedHeaders(options);\n\n this.isPending.set(true);\n\n return (options.stream)\n ? this.http.post<any>(urlPath, data, {\n ...headers,\n observe: 'events',\n responseType: 'text',\n reportProgress: true\n }).pipe(\n requestStreaming({ streamType: options.streamType || StreamType.AI_STREAMING }),\n this.requestStreamingOperator(options),\n this.handleFinalize()\n )\n : this.http.post<T>(urlPath, data, headers).pipe(\n this.request(options),\n this.handleFinalize()\n );\n }\n\n updateRecordRequest<T>(options: ApiRequest, data: any): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildHeaders(options);\n\n this.isPending.set(true);\n\n return this.http.put<any>(urlPath, data, headers).pipe(\n this.request(options),\n this.handleFinalize()\n );\n }\n\n deleteRecordRequest<T>(options: ApiRequest): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildHeaders(options);\n\n this.isPending.set(true);\n\n return this.http.delete<any>(urlPath, headers).pipe(\n this.request(options),\n this.handleFinalize()\n );\n }\n\n private buildUrlPath(options: ApiRequest): string {\n return this.pathQueryService.buildAPIPath(options.server, options.path);\n }\n\n private buildHeaders(options: ApiRequest): any {\n return this.headersService.generateHeaders(options.headers);\n }\n\n private buildCombinedHeaders(options: ApiRequest): any {\n const headers = this.headersService.generateHeaders(options.headers);\n return this.combineHeaders(headers, options.stream || false);\n }\n\n private request<T>(options: ApiRequest): (source: Observable<any>) => Observable<T> {\n return (source$: Observable<any>): Observable<T> => {\n return source$.pipe(\n map(data => {\n if (!data || (Array.isArray(data) && data.length === 0)) {\n return data;\n }\n if (options?.adapter) {\n return Array.isArray(data)\n ? data.map((item: any) => options.adapter(item))\n : options.adapter(data);\n }\n return data;\n })\n );\n };\n }\n\n private requestStreamingOperator<T>(options: ApiRequest): (source: Observable<T[]>) => Observable<T[]> {\n return (source$: Observable<T[]>): Observable<T[]> => {\n return source$.pipe(\n map(data => {\n if (!data || (Array.isArray(data) && data.length === 0)) {\n return data;\n }\n if (options?.adapter) {\n return data.map((item: any) => options.adapter(item));\n }\n return data;\n })\n );\n };\n }\n\n downloadFileRequest(options: ApiRequest): Observable<any> {\n this.isPending.set(true);\n\n const urlPath = this.buildUrlPath(options);\n\n return this.http.get(urlPath, { responseType: 'blob', observe: 'events', reportProgress: true })\n .pipe(\n map((event: HttpEvent<any>) => {\n this.isPending.set(true);\n\n if (event instanceof HttpHeaderResponse) {\n if (event.status !== 200) {\n this.isPending.set(false);\n throw new Error('Download failed');\n }\n }\n\n switch (event.type) {\n case HttpEventType.DownloadProgress:\n const status = (event.total) ? Math.round(event.loaded / (event.total || 1) * 100) : 100;\n this.progress.set(status);\n return status;\n\n case HttpEventType.Response:\n try {\n const fileNamePath = (options?.saveAs) ? options.saveAs : (options.path) ? options.path[options.path.length - 1] : [];\n const header_content = event.headers.get('Content-Disposition') || '';\n const file = (header_content) ? header_content.split('=')[1].substring(0, header_content.split('=')[1].length) : '';\n\n const fileName = (fileNamePath !== '') ? fileNamePath : file;\n\n if (fileName === '') {\n this.isPending.set(false);\n throw new Error('Save File: (file name and extension) not found in Headers or Path');\n }\n\n this.downloadFile(fileName, event.body);\n this.isPending.set(false);\n\n return 100;\n\n } catch (error) {\n throw new Error('Download failed');\n }\n\n default:\n this.isPending.set(false);\n return 0;\n }\n }),\n catchError(err => {\n return throwError(() => err);\n })\n );\n }\n\n private handleFinalize(): (source: Observable<any>) => Observable<any> {\n return finalize(() => this.isPending.set(false));\n }\n\n private downloadFile(file: string, fileData: any) {\n const navigatorAny = window.navigator as any;\n const extension = file.split('.')[1]?.toLowerCase();\n const newBlob = new Blob([fileData], { type: this.createFileType(extension) });\n\n if (navigatorAny.msSaveOrOpenBlob) {\n navigatorAny.msSaveOrOpenBlob(newBlob, file);\n } else {\n const link = document.createElement('a');\n const url = window.URL.createObjectURL(newBlob);\n link.href = url;\n link.download = file;\n link.click();\n window.URL.revokeObjectURL(url);\n }\n }\n\n private createFileType(ext: string): string {\n let fileType = \"\";\n\n if (ext === 'pdf' || ext === 'csv') fileType = `application/${ext}`;\n else if (ext === 'jpeg' || ext === 'jpg' || ext === 'png') fileType = `image/${ext}`;\n else if (ext === 'txt') fileType = 'text/plain';\n else if (ext === 'ppt' || ext === 'pot' || ext === 'pps' || ext === 'ppa') fileType = 'application/vnd.ms-powerpoint';\n else if (ext === 'pptx') fileType = 'application/vnd.openxmlformats-officedocument.presentationml.presentation';\n else if (ext === 'doc' || ext === 'dot') fileType = 'application/msword';\n else if (ext === 'docx') fileType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n else if (ext === 'xls' || ext === 'xlt' || ext === 'xla') fileType = 'application/vnd.ms-excel';\n else if (ext === 'xlsx') fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n\n return fileType;\n }\n\n private combineHeaders(headers: any, isStreaming: boolean) {\n return (isStreaming)\n ? {\n ...headers,\n observe: 'events',\n responseType: 'text',\n reportProgress: true,\n Accept: 'text/event-stream'\n }\n : headers;\n }\n}\n","import { Inject, inject, Injectable, Injector, Optional, signal } from '@angular/core';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Observable, Subject, throwError, from, of } from 'rxjs';\nimport { tap, map, finalize, catchError, concatMap, mergeMap, toArray, concat } from 'rxjs/operators';\n\nimport { ApiRequest } from '../request-manager-state-service/models/api-request.model';\nimport { RequestSignalsService } from './request-signals.service';\nimport { requestPolling, countdown, delayedRetry } from './rxjs-operators';\n\nimport { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigOptions, BatchOptions, BatchResult, BatchRequestState } from '../../models';\nimport { ObjectMergerService } from '../utils/object-merger.service';\nimport { WebSocketManagerService } from '../ws-manager-service/websocket-service';\nimport { MessageTrackerService } from '../ws-manager-service/message-tracker.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HTTPManagerSignalsService<T> extends RequestSignalsService {\n\n toastMessage = inject(ToastMessageDisplayService);\n ng_injector = inject(Injector);\n objectMergerService = inject(ObjectMergerService);\n wsManager = inject(WebSocketManagerService);\n messageTracker = inject(MessageTrackerService);\n\n // Delegate WebSocket observables to WebSocketManagerService (singleton)\n override connectionStatus$ = this.wsManager.connectionStatus$;\n override messages$ = this.messageTracker.messages$;\n override subscribedChannels$ = this.wsManager.subscribedChannels$;\n\n // ✅ Replaced BehaviorSubjects with Angular signals\n countdown = signal<number>(0);\n error = signal<string | boolean>(false);\n data = signal<any>(null);\n\n private polling$ = new Subject<void>();\n\n config = ApiRequest.adapt();\n\n constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {\n super();\n this.config = configOptions\n ? ApiRequest.adapt(configOptions.httpRequestOptions)\n : this.config;\n }\n\n // ═══════════════════════════════════════════════════════════════════════════\n // WEBSOCKET METHODS (Delegated to WebSocketManagerService singleton)\n // ═══════════════════════════════════════════════════════════════════════════\n\n /**\n * Connect to WebSocket server\n */\n override connect(options: any, jwtToken: string): void {\n this.wsManager.connect(options, jwtToken);\n }\n\n /**\n * Disconnect from WebSocket server\n */\n override disconnect(): void {\n this.wsManager.disconnect();\n }\n\n /**\n * Subscribe to a channel\n */\n override subscribeToChannel(channel: string, userData?: any): void {\n this.messageTracker.subscribeToChannel(channel, userData);\n }\n\n /**\n * Subscribe to multiple channels\n */\n override subscribeToChannels(channels: string[], userData?: any): void {\n channels.forEach(channel => this.messageTracker.subscribeToChannel(channel, userData));\n }\n\n /**\n * Unsubscribe from a channel\n */\n override unsubscribeFromChannel(channel: string): void {\n this.wsManager.unsubscribeFromChannel(channel);\n }\n\n /**\n * Get currently subscribed channels\n */\n override getSubscribedChannels(): Set<string> {\n return this.wsManager.getSubscribedChannels();\n }\n\n /**\n * Send broadcast message\n */\n override sendBroadcast(content: any): void {\n this.wsManager.sendBroadcast(content);\n }\n\n /**\n * Send message in channel (state manager message)\n */\n override sendMessageInChannel(channel: string, content: any): void {\n this.wsManager.sendMessageInChannel(channel, content);\n }\n\n /**\n * Send channel message\n */\n override sendChannelMessage(channel: string, content: any): void {\n this.wsManager.sendChannelMessage(channel, content);\n }\n\n /**\n * Send message to multiple channels\n */\n override sendChannelMessageToChannels(channels: string[], content: any): void {\n this.wsManager.sendChannelMessageToChannels(channels, content);\n }\n\n /**\n * Send message to user\n */\n override sendMessageToUser(user: string, content: any): void {\n this.wsManager.sendMessageToUser(user, content);\n }\n\n /**\n * Get all channels\n */\n override getAllChannels(): void {\n this.wsManager.getAllChannels();\n }\n\n /**\n * Create channel\n */\n override createChannel(channel: string): void {\n this.wsManager.createChannel(channel);\n }\n\n /**\n * Delete channel\n */\n override deleteChannel(channel: string): void {\n this.wsManager.deleteChannel(channel);\n }\n\n /**\n * Get users in channel\n */\n override getUsersInChannel(channel: string): void {\n this.wsManager.getUsersInChannel(channel);\n }\n\n /**\n * Create notification channel\n */\n override createNotificationChannel(channel: string): void {\n this.wsManager.createNotificationChannel(channel);\n }\n\n /**\n * Get notification channels\n */\n override getNotificationChannels(): void {\n this.wsManager.getNotificationChannels();\n }\n\n /**\n * Get today's notification channels\n */\n override getTodaysNotificationChannels(): void {\n this.wsManager.getTodaysNotificationChannels();\n }\n\n /**\n * Subscribe to notification channel\n */\n override subscribeToNotificationChannel(channel: string, options?: any, user?: any): void {\n this.wsManager.subscribeToNotificationChannel(channel, options, user);\n }\n\n /**\n * Unsubscribe from notification channel\n */\n override unsubscribeFromNotificationChannel(channel: string): void {\n this.wsManager.unsubscribeFromNotificationChannel(channel);\n }\n\n /**\n * Send notification to channel\n */\n override sendNotification(channel: string, content: any): void {\n this.wsManager.sendNotification(channel, content);\n }\n\n // REQUESTS\n getRequest<T>(options?: ApiRequest, params?: any[]) {\n this.isPending.set(true);\n this.data.set(null);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.getRecordRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n tap(data => this.data.set(data)),\n finalize(() => this.isPending.set(false)),\n catchError((err) => {\n if (updatedOptions.displayError) this.handleErrorWithSnackBar(err);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n postRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {\n this.isPending.set(true);\n this.data.set(null);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.createRecordRequest;\n const requests = this.createRequest(func, updatedOptions, data);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n tap(data => this.data.set(data)),\n finalize(() => this.isPending.set(false)),\n catchError((err) => {\n if (updatedOptions.displayError) this.handleErrorWithSnackBar(err);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n putRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {\n this.isPending.set(true);\n this.data.set(null);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.updateRecordRequest;\n const requests = this.createRequest(func, updatedOptions, data);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n tap(data => this.data.set(data)),\n finalize(() => this.isPending.set(false)),\n catchError((err) => {\n if (updatedOptions.displayError) this.handleErrorWithSnackBar(err);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n deleteRequest<T>(options: ApiRequest, params?: any[]) {\n this.isPending.set(true);\n this.data.set(null);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.deleteRecordRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n tap(data => this.data.set(data)),\n finalize(() => this.isPending.set(false)),\n catchError((err) => {\n if (updatedOptions.displayError) this.handleErrorWithSnackBar(err);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n downloadRequest<T>(options: ApiRequest, params?: any[], saveAs?: string) {\n this.isPending.set(true);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.downloadFileRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n catchError((err) => {\n this.error.set(true);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n // --- private helpers ---\n private createObservable<T>(options: ApiRequest, request$: Observable<T>, funcName: string) {\n const polling =\n options.polling ? (options.polling > 0 ? true : false) : false;\n\n const isPolling =\n polling &&\n !(funcName === 'deleteRecordRequest' ||\n funcName === 'updateRecordRequest' ||\n funcName === 'createRecordRequest');\n\n this.polling$.next();\n\n const polling$ =\n (isPolling && options.polling) || 0 >= 3\n ? request$.pipe(\n requestPolling((options.polling || 0) + 1, this.polling$, this.isPending),\n tap(() => this.countdown.set(0)),\n tap(() => {\n if (!options.polling) return;\n const count = options.polling ? options.polling : 0;\n countdown(count)\n .pipe(\n map((x: number) => {\n const pollingInSec = options.polling || 0;\n const percentageCompleted = ((pollingInSec - x) / pollingInSec) * 100;\n return Math.round(percentageCompleted);\n })\n )\n .subscribe((countDownValue: number) => {\n this.countdown.set(countDownValue);\n });\n }),\n )\n : request$.pipe(\n catchError((err: any) => {\n if (err instanceof HttpErrorResponse) {\n this.error.set(true);\n return this.handleError(err);\n }\n return throwError(() => err);\n })\n );\n\n return polling$.pipe(\n options?.retry && options.retry.times > 0\n ? delayedRetry((options.retry.delay || 3) * 1000, (options.retry.times || 0) - 1)\n : (source: Observable<T>) => source,\n catchError((err: any, caught: Observable<T>) => {\n if (err instanceof HttpErrorResponse) {\n this.error.set(true);\n if (isPolling) this.stopPolling();\n return this.handleError(err);\n }\n return throwError(() => err);\n })\n );\n }\n\n private createRequest(func: Function, options: ApiRequest, data?: any | any[]) {\n const dataItem = this.prepareRequestData(options, data, func.name);\n return func.bind(this)(dataItem.options, dataItem.data);\n }\n\n private prepareRequestData(options: ApiRequest, data: any, funcName: string) {\n if ((options.mapper && funcName === 'updateRecordRequest') || funcName === 'createRecordRequest') {\n if (options?.mapper) {\n data = options.mapper\n ? Array.isArray(data)\n ? map((item) => options.mapper(item))\n : options.mapper(data)\n : data;\n }\n } else {\n if (options?.adapter) {\n data = Array.isArray(data)\n ? map((item) => options.adapter(item))\n : options.adapter(data);\n }\n }\n return { options: options, data: data };\n }\n\n private handleError(error: Response | any) {\n this.error.set(error.message || `${error.status} - ${error.statusText}`);\n return throwError(() => error);\n }\n\n private handleErrorWithSnackBar(error: Response | any) {\n const displayError = ToastDisplay.adapt({\n message: error.message || `${error.status} - ${error.statusText}`,\n action: 'OK',\n color: ToastColors.ERROR,\n icon: 'error',\n duration: 5 * 1000,\n });\n this.toastMessage.toastMessage(displayError);\n }\n\n private stopPolling() {\n this.isPending.set(false);\n this.polling$.next();\n }\n\n private defineReqOptions(options: any, params?: any[]) {\n const req = ApiRequest.adapt(options);\n if (req?.path) req.path = params ? [...req.path, ...params] : req.path;\n\n const optionsReq = req ? req : ApiRequest.adapt();\n const updatedOptions = this.objectMergerService.mergeOptions(optionsReq);\n\n return updatedOptions;\n }\n\n // BATCH REQUESTS\n\n /**\n * Execute multiple HTTP requests with configurable execution strategy\n * @param requests Array of ApiRequest configurations\n * @param options Optional batch configuration (all properties optional)\n * @returns Observable emitting array of data in the order of requests provided\n */\n getBatchRequests<U = T>(\n requests: ApiRequest[],\n options?: BatchOptions\n ): Observable<U[]> {\n const batchOptions = BatchOptions.adapt(options);\n\n const mode = batchOptions.mode || 'sequential';\n\n if (mode === 'parallel') {\n return this.getParallelRequest(requests, batchOptions);\n } else {\n return this.getSequentialRequest(requests, batchOptions);\n }\n }\n\n /**\n * Execute requests sequentially (one at a time, in order)\n * @param requests Array of ApiRequest configurations\n * @param options Optional batch configuration\n * @returns Observable emitting array of data when all requests complete\n */\n getSequentialRequest<U = T>(\n requests: ApiRequest[],\n options?: BatchOptions\n ): Observable<U[]> {\n const batchOptions = BatchOptions.adapt(options);\n const results: U[] = new Array(requests.length);\n\n return from(requests).pipe(\n concatMap((req, index) => {\n return this.getRequest<U>(req).pipe(\n tap(data => {\n results[index] = data;\n }),\n catchError(error => this.handleSequentialError(req, error, index, batchOptions))\n );\n }),\n toArray(),\n map(() => results)\n );\n }\n\n /**\n * Execute requests in parallel with concurrency control\n * @param requests Array of ApiRequest configurations\n * @param options Optional batch configuration with concurrency limit\n * @returns Observable emitting array of data when all requests complete\n */\n getParallelRequest<U = T>(\n requests: ApiRequest[],\n options?: BatchOptions\n ): Observable<U[]> {\n const batchOptions = BatchOptions.adapt(options);\n const concurrency = batchOptions.concurrency || 3;\n const results: U[] = new Array(requests.length);\n\n return from(requests).pipe(\n mergeMap((req, index) => {\n return this.getRequest<U>(req).pipe(\n tap(data => {\n results[index] = data;\n }),\n catchError(error => this.handleParallelError(req, error, index, batchOptions))\n );\n }, concurrency),\n toArray(),\n map(() => results)\n );\n }\n\n /**\n * Execute multiple HTTP requests and emit individual state changes in real-time\n * @param requests Array of ApiRequest configurations\n * @param options Optional batch configuration (all properties optional)\n * @returns Observable stream of individual request states\n */\n getBatchRequestsStream<U = T>(\n requests: ApiRequest[],\n options?: BatchOptions\n ): Observable<BatchRequestState<U>> {\n const batchOptions = BatchOptions.adapt(options);\n const mode = batchOptions.mode || 'sequential';\n\n if (mode === 'parallel') {\n return this.getParallelStream(requests, batchOptions);\n } else {\n return this.getSequentialStream(requests, batchOptions);\n }\n }\n\n /**\n * Execute requests sequentially and emit state changes\n */\n private getSequentialStream<U>(\n requests: ApiRequest[],\n options: BatchOptions\n ): Observable<BatchRequestState<U>> {\n return from(requests).pipe(\n concatMap((req, index) => {\n const pending$: Observable<BatchRequestState<U>> = of({\n index,\n request: req,\n isPending: true\n });\n\n const result$: Observable<BatchRequestState<U>> = this.getRequest<U>(req).pipe(\n map((data) => ({\n index,\n request: req,\n isPending: false,\n data\n }) as BatchRequestState<U>),\n catchError((error) => of({\n index,\n request: req,\n isPending: false,\n error\n } as BatchRequestState<U>))\n );\n\n return pending$.pipe(\n concatMap(() => result$)\n );\n })\n );\n }\n\n /**\n * Execute requests in parallel and emit state changes\n */\n private getParallelStream<U>(\n requests: ApiRequest[],\n options: BatchOptions\n ): Observable<BatchRequestState<U>> {\n const concurrency = options.concurrency || 3;\n\n return from(requests).pipe(\n mergeMap((req, index) => {\n const pending$: Observable<BatchRequestState<U>> = of({\n index,\n request: req,\n isPending: true\n });\n\n const result$: Observable<BatchRequestState<U>> = this.getRequest<U>(req).pipe(\n map((data) => ({\n index,\n request: req,\n isPending: false,\n data\n }) as BatchRequestState<U>),\n catchError((error) => of({\n index,\n request: req,\n isPending: false,\n error\n } as BatchRequestState<U>))\n );\n\n return pending$.pipe(\n concatMap(() => result$)\n );\n }, concurrency)\n );\n }\n\n private handleSequentialError<U>(\n request: ApiRequest,\n error: any,\n index: number,\n options: BatchOptions\n ): Observable<U> {\n if (options.logErrors !== false) {\n console.error(`Batch request ${index} failed:`, error);\n }\n\n if (options.stopOnError) {\n return throwError(() => error);\n }\n\n if (options.ignoreErrors) {\n return of(undefined as unknown as U);\n }\n\n return throwError(() => error);\n }\n\n private handleParallelError<U>(\n request: ApiRequest,\n error: any,\n index: number,\n options: BatchOptions\n ): Observable<U> {\n if (options.logErrors !== false) {\n console.error(`Batch request ${index} failed:`, error);\n }\n\n if (options.ignoreErrors) {\n return of(undefined as unknown as U);\n }\n\n return of(undefined as unknown as U);\n }\n}\n","import { RetryOptions } from \"../../request-manager-services\"\nimport { WSOptions } from \"./ws-options.model\"\nimport { StreamType } from \"./stream-type.enum\"\n\nexport interface ApiRequestInterface {\n server: string\n path?: any[]\n headers?: any\n adapter?: any\n mapper?: any\n polling?: number // seconds (undefined | 0 = none)\n retry?: RetryOptions\n stream?: boolean\n streamType?: StreamType\n displayError?: boolean\n saveAs?: string\n fileContentHeader?: string\n ws?: WSOptions // Websocket Options\n env?: string // Environment for WebSocket channel naming\n}\n\nexport class ApiRequest implements ApiRequestInterface {\n\n constructor(\n public server = '',\n public path?: any[],\n public headers?: any,\n public adapter?: any,\n public mapper?: any,\n public polling?: number,\n public retry?: RetryOptions,\n public stream?: boolean,\n public streamType?: StreamType,\n public displayError?: boolean,\n public saveAs?: string,\n public fileContentHeader?: string,\n public ws?: WSOptions,\n public env?: string, // Environment for WebSocket channel naming\n ) {}\n\n static adapt(item?: any): ApiRequest {\n\n const server = Array.isArray(item?.server) ? item.server.join('/') : item?.server || '';\n\n return new ApiRequest(\n server,\n (item?.path) ? item.path : [],\n (item?.headers) ? item.headers : {},\n item?.adapter,\n item?.mapper,\n item?.polling ? Math.floor(item.polling) : 0,\n item?.retry ? RetryOptions.adapt(item.retry) : RetryOptions.adapt(),\n (item?.stream) ? item.stream : false,\n item?.streamType || StreamType.AI_STREAMING,\n (item?.displayError) ? item.displayError : false,\n item?.saveAs,\n item?.fileContentHeader,\n item?.ws,\n item?.env || 'dev', // Default to 'dev' environment\n )\n\n }\n\n}\n","export interface RequestOptionsInterface {\n path: any[],\n headers: any,\n}\n\nexport class RequestOptions implements RequestOptionsInterface {\n\n constructor(\n public path: any[] = [],\n public headers = {},\n ) {}\n\n static adapt(item?: any): RequestOptions {\n\n return new RequestOptions(\n item?.path,\n item?.headers,\n )\n\n }\n\n}\n","import { RetryOptions } from \"../../request-manager-services\"\n\nexport interface WSOptionsInterface {\n id: string,\n wsServer: string,\n jwtToken: string,\n permissions?: string[],\n channels?: string[],\n wsUpdateChannels?: string[],\n user?: any,\n retry?: RetryOptions\n}\n\nexport class WSOptions implements WSOptionsInterface {\n\n constructor(\n public id: string = '',\n public wsServer: string = '',\n public jwtToken: string = '',\n public permissions?: string[],\n public channels?: string[],\n public wsUpdateChannels?: string[],\n public user?: any,\n public retry?: RetryOptions\n ) {}\n\n static adapt(item?: any): WSOptions {\n\n return new WSOptions(\n item?.id,\n item?.wsServer,\n item?.jwtToken,\n (item?.permissions) ? item.permissions.split(',').map((p: string) => p.trim()) : [],\n item?.channels,\n item?.wsUpdateChannels,\n item?.user,\n item?.retry\n )\n\n }\n\n}\n","import { Inject, Injectable, Optional, inject } from '@angular/core';\n\nimport { ApiRequest } from '../request-manager-state-service/models';\nimport { SettingOptions } from '../local-storage-manager-service';\nimport { UtilsService } from './utils.service';\n\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigHTTPOptions, ConfigOptions, LocalStorageOptions } from '../request-manager-services';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ObjectMergerService {\n\n utils = inject(UtilsService);\n\n constructor(@Inject(CONFIG_SETTINGS_TOKEN) @Optional() private configOptions?: ConfigOptions) {\n if (!this.configOptions) this.configOptions = ConfigOptions.adapt()\n }\n\n mergeOptions(options = ApiRequest.adapt()) {\n\n const configForRoot = (this.configOptions?.httpRequestOptions) ? this.configOptions.httpRequestOptions : ConfigHTTPOptions.adapt()\n const mergedOptions = ApiRequest.adapt(options)\n\n mergedOptions.server = (options && options.server === '') ? configForRoot?.server || '' : options.server\n\n mergedOptions.path = [ ...options.path || [], ...configForRoot?.path || [] ]\n\n mergedOptions.headers = { ...options.headers || {}, ...configForRoot?.headers || {} }\n\n mergedOptions.retry = (options && (options?.retry?.times !== 0 || options?.retry?.delay !== 3)) ? options.retry : configForRoot?.retry || { times: 0, delay: 3 };\n\n mergedOptions.polling = (options && options?.polling !== 0) ? options.polling : configForRoot?.polling || 0;\n\n mergedOptions.displayError = (options && options?.displayError) ? options.displayError : configForRoot?.displayError || false;\n\n mergedOptions.stream = (options && options?.stream) ? options.stream : configForRoot?.stream || false;\n\n return mergedOptions;\n\n }\n\n mergeStorageOptions(options = SettingOptions.adapt()) {\n\n const configForRoot = (this.configOptions?.LocalStorageOptions) ? this.configOptions.LocalStorageOptions : LocalStorageOptions.adapt()\n const configForRootOptions = configForRoot.options || LocalStorageOptions.adapt().options\n\n const mergedOptions = SettingOptions.adapt(options)\n\n // storage type\n mergedOptions.storage = (options && (typeof options.storage !== 'undefined')) ? options.storage : (configForRootOptions?.storage ?? 0)\n\n // expires: prefer explicit numeric expires; if not provided, compute from expiresIn string; otherwise use config default\n // if an explicit, non-zero numeric expires is provided, use it\n if (options && (typeof options.expires !== 'undefined') && options.expires !== null && Number(options.expires) > 0) {\n mergedOptions.expires = Number(options.expires);\n } else if (options && options.expiresIn) {\n // compute numeric epoch from expiresIn string using UtilsService if available\n try {\n mergedOptions.expires = this.utils ? this.utils.expires(options.expiresIn) : 0;\n } catch {\n mergedOptions.expires = 0;\n }\n } else {\n mergedOptions.expires = configForRootOptions?.expires ?? 0;\n }\n\n // keep expiresIn string if explicitly provided, otherwise use config default\n mergedOptions.expiresIn = (options && (typeof options.expiresIn !== 'undefined')) ? options.expiresIn : (configForRootOptions?.expiresIn || '')\n\n mergedOptions.encrypted = (options && (typeof options.encrypted !== 'undefined')) ? options.encrypted : (configForRootOptions?.encrypted || false)\n\n return mergedOptions;\n\n }\n\n}\n","import { Inject, Injectable, OnDestroy, Optional, inject } from '@angular/core';\nimport { ComponentStore } from '@ngrx/component-store';\nimport { withLatestFrom, map, tap } from 'rxjs/operators';\n\nimport { UtilsService } from '../utils/utils.service';\nimport { SymmetricalEncryptionService } from '../utils/encryption/symmetrical-encryption.service';\n\nimport { StorageOption, StorageType } from './models';\nimport { SettingOptions } from './models/setting-options.model';\nimport { StorageData } from './models/storage-data.model';\nimport { EncryptionTestService } from '../utils/encryption/encryption-test.service';\nimport { interval } from 'rxjs';\nimport { AppService } from '../utils/app.service';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigOptions } from '../request-manager-services';\nimport { ObjectMergerService } from '../utils/object-merger.service';\n\nexport interface State {\n localStores: StorageData[]\n sessionStores: StorageData[]\n settings: StorageOption[]\n}\n\nconst storage: State = {\n localStores: [],\n sessionStores: [],\n settings: [],\n};\n\n@Injectable({ providedIn: 'root' })\nexport class LocalStorageManagerService extends ComponentStore<State> implements OnDestroy {\n\n storageName = 'storage'\n storageSettingsName = 'global-storage'\n defaultOptions = SettingOptions.adapt()\n\n stateRetrieved = false\n encrypted = false\n\n app = inject(AppService)\n utils = inject(UtilsService)\n objectMergerService = inject(ObjectMergerService)\n encryption = inject(SymmetricalEncryptionService)\n encryptionTest = inject(EncryptionTestService)\n\n // SELECTORS\n\n private readonly data$ = this.select((state) => state)\n\n readonly stores$ = this.select((state) => state.settings)\n\n readonly storeExists$ = (store: string) => this.select(\n this.data$,\n (data) => data.settings.find(item => item.name === store) ? true : false\n )\n\n readonly store$ = (store: string) => this.select(\n this.data$,\n (data) => {\n store = store.toLowerCase()\n const foundStore = data.settings.find(item => item.name === store)\n\n if(foundStore) {\n\n const options = SettingOptions.adapt(foundStore.options)\n\n const found = foundStore.options?.storage === StorageType.GLOBAL\n ? data.localStores.find(item => item.id === foundStore.id) as StorageData\n : data.sessionStores.find(item => item.id === foundStore.id) as StorageData\n\n if(!found) {\n this.deleteStore({ name: store })\n return\n }\n\n if(!this.app?.appID) {\n console.warn('No App ID found - AppId not Provided')\n return\n }\n\n let storageData = found.data;\n if (options.encrypted) {\n const decryptedData = this.encryption.decrypt(found.data, this.app.appID);\n if (decryptedData !== null) {\n storageData = decryptedData;\n } else {\n console.warn(`Failed to decrypt data for store: ${store}`);\n storageData = found.data;\n }\n }\n\n try {\n return (this.isString(storageData)) ? JSON.parse(storageData) : storageData;\n } catch (error) {\n console.warn(`Failed to parse storage data for store: ${store}`, error);\n return storageData; // Return raw data if parsing fails\n }\n\n } else {\n return null\n }\n\n }\n )\n\n readonly settings$ = this.select(state => (state) ? state.settings : storage.settings)\n\n readonly setting$ = (store: string) => this.select(\n this.data$,\n (state) => {\n const foundSetting = state.settings.find(item => item.name === store)\n return (foundSetting) ? foundSetting : null\n }\n )\n\n persistence$ = this.data$\n .subscribe(data => {\n if(this.stateRetrieved) this.persistState(data)\n })\n\n startTimer() {\n const timer$ = interval(1000 * 3).pipe(\n withLatestFrom(this.data$),\n map(([_, state]) => state),\n tap((state) => {\n\n const expired: StorageOption[] = this.expired(state) ? this.expired(state) : []\n\n if (expired.length > 0) {\n\n const ids = expired.map((item) => item.id)\n\n const updatedState: State = {\n ...state,\n localStores: state.localStores.filter((item) => !ids.includes(item.id)),\n sessionStores: state.sessionStores.filter((item) => !ids.includes(item.id)),\n settings: state.settings.filter((item) => !ids.includes(item.id)),\n };\n\n this.persistState(updatedState)\n this.updateState(updatedState)\n\n }\n })\n );\n\n timer$.subscribe()\n }\n\n private updateState = this.updater((state, updatedState: State) => ({\n ...updatedState,\n }))\n\n\n constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {\n\n super(storage)\n\n this.storageName = configOptions?.LocalStorageOptions?.storageName || this.storageName\n this.storageSettingsName = configOptions?.LocalStorageOptions?.storageSettingsName || this.storageSettingsName\n this.defaultOptions = configOptions?.LocalStorageOptions?.options || this.defaultOptions\n\n this.retrieveState()\n this.startTimer()\n }\n\n readonly setStore = this.updater((state: State, store: { id: string, name: string, data: any, options: SettingOptions }): any => {\n\n const settings = StorageOption.adapt(store)\n store.name = store.name.toLowerCase()\n settings.options = this.objectMergerService.mergeStorageOptions(settings.options)\n\n const type = store.options.storage\n const hasStore = this.hasGlobalStorage(type, store.id)\n\n store.name = this.validStoreName(store.name)\n\n if(!hasStore) {\n console.warn(`No such Store: ${store.name}`)\n return state\n } else {\n\n const str = this.encryptionTest.isEncrypted(store.data) ? store.data : JSON.stringify(store.data)\n const dataStr = (this.isObjectOrArray(str)) ? (store.options.encrypted) ? this.encryption.encrypt(str, this.app.appID) : store.data : store.data\n\n const localData = (dataStr && settings.options?.storage === StorageType.GLOBAL) ? [{ data: dataStr, id: settings.id }] : []\n const sessionData = (dataStr && settings.options?.storage === StorageType.SESSION) ? [{ data: dataStr, id: settings.id }] : []\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n settings: [...state.settings, ...[settings]],\n }\n\n }\n\n })\n\n readonly createStore = this.updater((state: State, store: { id?: string, name: string, data: any, options: SettingOptions }): any => {\n\n store.name = store.name.toLowerCase()\n store.options = this.objectMergerService.mergeStorageOptions(store.options)\n const settings = StorageOption.adapt(store)\n settings.options = this.objectMergerService.mergeStorageOptions(settings.options)\n const foundStore = state?.settings.some(item => item.name === store.name)\n\n const expires = (settings.options?.expiresIn) ? this.utils.expires(settings.options?.expiresIn) : 0\n if(settings.options) settings.options.expires = expires\n\n store.name = this.validStoreName(store.name)\n\n if(foundStore) {\n return state\n } else {\n if(!this.isObjectOrArray(store.data)) {\n console.warn('Data must ba an Object or Array')\n return\n }\n\n store.data = (this.isString(store.data)) ? JSON.parse(store.data) : store.data\n const dataStr = (store.options.encrypted) ? this.encryption.encrypt(store.data, this.app.appID) : store.data\n\n const localData = (settings.options?.storage === StorageType.GLOBAL) ? [{ data: dataStr, id: settings.id }] : []\n const sessionData = (settings.options?.storage === StorageType.SESSION) ? [{ data: dataStr, id: settings.id }] : []\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n settings: [...state.settings, ...[settings]],\n }\n\n }\n\n })\n\n readonly updateStore = this.updater((state: State, store: { name: string, data: any }): any => {\n\n store.name = store.name.toLowerCase()\n store.name = this.validStoreName(store.name)\n\n const settings = state.settings.find(item => item.name === store.name)\n\n if(settings) {\n\n const type = settings.options?.storage\n const hasStore = this.hasGlobalStorage(type, settings.id || '')\n\n if(!hasStore) {\n console.warn(`No such Store: ${store.name}`)\n } else {\n\n const dataStr = (settings.options?.encrypted) ? this.encryption.encrypt(store.data, this.app.appID) : store.data\n\n const localData = (dataStr && settings.options?.storage === StorageType.GLOBAL) ? [{ data: dataStr, id: settings.id }] : []\n const sessionData = (dataStr && settings.options?.storage === StorageType.SESSION) ? [{ data: dataStr, id: settings.id }] : []\n\n state.localStores = state.localStores.filter(item => item.id !== settings.id)\n state.sessionStores = state.sessionStores.filter(item => item.id !== settings.id)\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n }\n\n }\n }\n\n return state\n\n })\n\n readonly deleteStore = this.updater((state: State, store: { name: string }): any => {\n\n store.name = store.name.toLowerCase()\n store.name = this.validStoreName(store.name)\n\n const id = state.settings.find(item => item.name === store.name)?.id\n\n if(id) {\n\n const settings = state.settings.filter(item => item.id !== id)\n const localData = state.localStores.filter(item => item.id !== id)\n const sessionData = state.sessionStores.filter(item => item.id !== id)\n\n return {\n ...state,\n localStores: [...localData],\n sessionStores: [...sessionData],\n settings: [...settings],\n }\n\n } else {\n console.warn(`No such Store: ${store.name}`)\n return state\n }\n\n })\n\n resetStore() {\n\n const newState = {\n localStores: [],\n sessionStores: [],\n settings: [],\n }\n\n this.updateState(newState)\n this.persistState(newState)\n\n }\n\n private persistState(state: State|null) {\n\n if(!state) return\n\n const strLocal = JSON.stringify(state.localStores)\n localStorage.setItem(this.storageName, strLocal)\n\n const strSession = JSON.stringify(state.sessionStores)\n sessionStorage.setItem(this.storageName, strSession)\n\n const settingsStr = this.encryption.encrypt(state.settings, this.app.appID)\n localStorage.setItem(this.storageSettingsName, settingsStr || '')\n\n }\n\n private expired(state: State|null) {\n\n if(!state) return []\n return state.settings?.filter(item => (item.options?.expires || 0) > 0 && this.utils.hasExpired(item.options?.expires || 0))\n\n }\n\n retrieveState() {\n\n const str = localStorage.getItem(this.storageSettingsName)\n\n const localStr = localStorage.getItem(this.storageName)\n const sessionStr = sessionStorage.getItem(this.storageName)\n\n let localData: StorageData[] = [];\n let sessionData: StorageData[] = [];\n let settings: StorageOption[] = [];\n\n try {\n localData = (localStr) ? JSON.parse(localStr) : [];\n } catch (error) {\n console.warn('Failed to parse local storage data:', error);\n localData = [];\n }\n\n try {\n sessionData = (sessionStr) ? JSON.parse(sessionStr) : [];\n } catch (error) {\n console.warn('Failed to parse session storage data:', error);\n sessionData = [];\n }\n\n if (str) {\n const decryptedStr = this.encryption.decrypt(str, this.app.appID);\n if (decryptedStr) {\n try {\n settings = JSON.parse(decryptedStr);\n } catch (error) {\n console.warn('Failed to parse decrypted settings:', error);\n settings = [];\n }\n } else {\n console.warn('Failed to decrypt settings data');\n settings = [];\n }\n }\n\n settings.forEach(store => {\n\n const expired = (store.options?.expires || 0) > 0 && this.utils.hasExpired(store.options?.expires || 0)\n\n if(!expired) {\n\n const hasStorage = this.hasGlobalStorage(store.options?.storage, store.id || '')\n\n if(!hasStorage) {\n this.createStore({ id: store.id, name: store.name, data: [], options: SettingOptions.adapt(store.options)})\n } else {\n const storeData = (store.options?.storage === StorageType.GLOBAL) ? localData.find(item => item.id === store.id) : sessionData.find(item => item.id === store.id)\n this.setStore({ id: store.id || '', name: store.name, data: storeData?.data, options: SettingOptions.adapt(store.options) })\n }\n\n }\n\n })\n\n this.stateRetrieved = true\n\n }\n\n private isObjectOrArray = (obj: any) => {\n\n let parsed;\n\n try {\n parsed = (typeof obj === 'object') ? obj : JSON.parse(obj)\n } catch (e) {\n return false;\n }\n\n if (Array.isArray(parsed)) {\n const allStringsOrObjectsOrNumbers = parsed.every(item =>\n typeof item === 'string' ||\n typeof item === 'object' && item !== null ||\n typeof item === 'number'\n );\n return allStringsOrObjectsOrNumbers;\n }\n\n return typeof parsed === 'object' && parsed !== null;\n\n }\n\n private isString (obj: any) {\n return (Object.prototype.toString.call(obj) === '[object String]')\n }\n\n private fixAndParseJSON(jsonString: string): any {\n const fixedString = jsonString\n .replace(/'/g, '\"')\n .replace(/([{,]\\s*)(\\w+)\\s*:/g, '$1\"$2\":')\n .replace(/,\\s*(\\}|\\])/g, '$1');\n\n try {\n return JSON.parse(fixedString);\n } catch (error: any) {\n throw new Error('Failed to parse JSON: ' + error.message);\n }\n }\n\n private validStoreName(str: string) {\n return str\n .toLowerCase() // Convert to lowercase\n .replace(/\\s+/g, '_') // Replace spaces with underscores\n .replace(/[^ -~]/g, ''); // Remove non-ASCII characters\n }\n\n private hasGlobalStorage(type: StorageType = StorageType.GLOBAL, id: string) {\n\n const strData: StorageOption[] = []\n\n if(type === StorageType.GLOBAL) {\n const str = localStorage.getItem(this.storageName)\n strData.push(...(str ? JSON.parse(str) : []))\n } else {\n const str = sessionStorage.getItem(this.storageName)\n strData.push(...(str ? JSON.parse(str) : []))\n }\n\n const found = strData.find(store => store.id === id)\n return (found) ? true : false\n\n }\n\n override ngOnDestroy() {\n this.persistence$.unsubscribe()\n }\n\n /**\n * Clears all stored data from localStorage and sessionStorage\n * Use this method to recover from corrupted data errors\n */\n clearAllStoredData(): void {\n try {\n localStorage.removeItem(this.storageSettingsName);\n localStorage.removeItem(this.storageName);\n sessionStorage.removeItem(this.storageName);\n console.log('Cleared all stored data');\n } catch (error) {\n console.error('Failed to clear stored data:', error);\n }\n }\n\n /**\n * Checks if stored data appears to be corrupted\n * Returns true if data appears corrupted\n */\n checkForCorruptedData(): boolean {\n try {\n const str = localStorage.getItem(this.storageSettingsName);\n if (str) {\n // Try to decrypt if it's encrypted\n const decryptedStr = this.encryption.decrypt(str, this.app.appID);\n if (decryptedStr !== null && decryptedStr !== undefined) {\n // Try to parse the decrypted data\n JSON.parse(decryptedStr);\n } else {\n // Decryption failed, data is likely corrupted\n return true;\n }\n }\n return false;\n } catch (error) {\n // Parsing failed, data is corrupted\n return true;\n }\n }\n\n}\n","import { Inject, Injectable, Optional, WritableSignal, signal, computed, effect, inject } from '@angular/core';\n\nimport { UtilsService } from '../utils/utils.service';\nimport { SymmetricalEncryptionService } from '../utils/encryption/symmetrical-encryption.service';\n\nimport { StorageOption, StorageType } from './models';\nimport { SettingOptions } from './models/setting-options.model';\nimport { StorageData } from './models/storage-data.model';\nimport { EncryptionTestService } from '../utils/encryption/encryption-test.service';\nimport { AppService } from '../utils/app.service';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigOptions } from '../request-manager-services';\nimport { ObjectMergerService } from '../utils/object-merger.service';\n\nexport interface State {\n localStores: StorageData[];\n sessionStores: StorageData[];\n settings: StorageOption[];\n}\n\nconst initialState: State = {\n localStores: [],\n sessionStores: [],\n settings: [],\n};\n\n@Injectable({ providedIn: 'root' })\nexport class LocalStorageSignalsManagerService {\n\n private state: WritableSignal<State> = signal(initialState);\n\n storageName = 'storage';\n storageSettingsName = 'global-storage';\n defaultOptions = SettingOptions.adapt();\n\n stateRetrieved = false;\n encrypted = false;\n\n app = inject(AppService);\n utils = inject(UtilsService);\n objectMergerService = inject(ObjectMergerService);\n encryption = inject(SymmetricalEncryptionService);\n encryptionTest = inject(EncryptionTestService);\n\n // --- SELECTORS ---\n\n readonly stores = computed(() => this.state().settings);\n\n readonly storeExists = (store: string) =>\n computed(() => !!this.state().settings.find(item => item.name === store));\n\n readonly store = (store: string) =>\n computed(() => {\n const data = this.state();\n const foundStore = data.settings.find(item => item.name === store);\n if (!foundStore) return null;\n\n const options = SettingOptions.adapt(foundStore.options);\n const found =\n options.storage === StorageType.GLOBAL\n ? data.localStores.find(item => item.id === foundStore.id)\n : data.sessionStores.find(item => item.id === foundStore.id);\n\n if (!found) {\n this.deleteStore({ name: store });\n return null;\n }\n\n if (!this.app?.appID) {\n console.warn('No App ID found - AppId not Provided');\n return null;\n }\n\n let storageData = found.data;\n if (options.encrypted) {\n const decryptedData = this.encryption.decrypt(found.data, this.app.appID);\n if (decryptedData !== null) {\n storageData = decryptedData;\n } else {\n console.warn(`Failed to decrypt data for store: ${store}`);\n storageData = found.data; // Use undecrypted data as fallback\n }\n }\n\n try {\n return this.isString(storageData) ? JSON.parse(storageData) : storageData;\n } catch (error) {\n console.warn(`Failed to parse storage data for store: ${store}`, error);\n return storageData; // Return raw data if parsing fails\n }\n });\n\n readonly settings = computed(() => this.state().settings);\n\n readonly setting = (store: string) =>\n computed(() => this.state().settings.find(item => item.name === store) ?? null);\n\n constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {\n this.storageName = configOptions?.LocalStorageOptions?.storageName || this.storageName;\n this.storageSettingsName = configOptions?.LocalStorageOptions?.storageSettingsName || this.storageSettingsName;\n this.defaultOptions = configOptions?.LocalStorageOptions?.options || this.defaultOptions;\n\n this.retrieveState();\n // Auto-persist when state changes\n effect(() => {\n if (this.stateRetrieved) {\n this.persistState(this.state());\n }\n });\n\n // Expiration timer every 3s\n setInterval(() => {\n const state = this.state();\n const expired = this.expired(state);\n if (expired.length > 0) {\n const ids = expired.map(i => i.id);\n const updated: State = {\n ...state,\n localStores: state.localStores.filter(i => !ids.includes(i.id)),\n sessionStores: state.sessionStores.filter(i => !ids.includes(i.id)),\n settings: state.settings.filter(i => !ids.includes(i.id)),\n };\n this.state.set(updated);\n this.persistState(updated);\n }\n }, 3000);\n }\n\n // --- STATE MUTATORS ---\n\n setStore(store: { id: string; name: string; data: any; options: SettingOptions }) {\n this.state.update(state => {\n const settings = StorageOption.adapt(store);\n settings.options = this.objectMergerService.mergeStorageOptions(settings.options);\n store.name = this.validStoreName(store.name);\n\n const str = this.encryptionTest.isEncrypted(store.data) ? store.data : JSON.stringify(store.data);\n const dataStr =\n this.isObjectOrArray(str) && store.options.encrypted\n ? this.encryption.encrypt(str, this.app.appID)\n : store.data;\n\n const localData =\n dataStr && settings.options?.storage === StorageType.GLOBAL\n ? [{ data: dataStr, id: settings.id }]\n : [];\n const sessionData =\n dataStr && settings.options?.storage === StorageType.SESSION\n ? [{ data: dataStr, id: settings.id }]\n : [];\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n settings: [...state.settings, settings],\n };\n });\n }\n\n createStore(store: { id?: string; name: string; data: any; options: SettingOptions }) {\n this.state.update(state => {\n const settings = StorageOption.adapt(store);\n settings.options = this.objectMergerService.mergeStorageOptions(settings.options);\n\n if (state.settings.some(item => item.name === store.name)) {\n return state;\n }\n\n if (!this.isObjectOrArray(store.data)) {\n console.warn('Data must be an Object or Array');\n return state;\n }\n\n const dataStr =\n store.options.encrypted ? this.encryption.encrypt(store.data, this.app.appID) : store.data;\n\n const localData =\n settings.options?.storage === StorageType.GLOBAL ? [{ data: dataStr, id: settings.id }] : [];\n const sessionData =\n settings.options?.storage === StorageType.SESSION ? [{ data: dataStr, id: settings.id }] : [];\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n settings: [...state.settings, settings],\n };\n });\n }\n\n updateStore(store: { name: string; data: any }) {\n this.state.update(state => {\n const settings = state.settings.find(item => item.name === store.name);\n if (!settings) return state;\n\n const dataStr =\n settings.options?.encrypted\n ? this.encryption.encrypt(store.data, this.app.appID)\n : store.data;\n\n const localData =\n settings.options?.storage === StorageType.GLOBAL ? [{ data: dataStr, id: settings.id }] : [];\n const sessionData =\n settings.options?.storage === StorageType.SESSION ? [{ data: dataStr, id: settings.id }] : [];\n\n return {\n ...state,\n localStores: [...state.localStores.filter(i => i.id !== settings.id), ...localData],\n sessionStores: [...state.sessionStores.filter(i => i.id !== settings.id), ...sessionData],\n };\n });\n }\n\n deleteStore(store: { name: string }) {\n this.state.update(state => {\n const id = state.settings.find(item => item.name === store.name)?.id;\n if (!id) return state;\n return {\n ...state,\n localStores: state.localStores.filter(i => i.id !== id),\n sessionStores: state.sessionStores.filter(i => i.id !== id),\n settings: state.settings.filter(i => i.id !== id),\n };\n });\n }\n\n resetStore() {\n const cleared: State = { localStores: [], sessionStores: [], settings: [] };\n this.state.set(cleared);\n this.persistState(cleared);\n }\n\n // --- HELPERS ---\n\n private persistState(state: State) {\n localStorage.setItem(this.storageName, JSON.stringify(state.localStores));\n sessionStorage.setItem(this.storageName, JSON.stringify(state.sessionStores));\n const settingsStr = this.encryption.encrypt(state.settings, this.app.appID);\n localStorage.setItem(this.storageSettingsName, settingsStr || '');\n }\n\n private expired(state: State) {\n return state.settings.filter(\n s => (s.options?.expires || 0) > 0 && this.utils.hasExpired(s.options?.expires!)\n );\n }\n\n retrieveState() {\n\n const str = localStorage.getItem(this.storageSettingsName);\n\n const localStr = localStorage.getItem(this.storageName);\n const sessionStr = sessionStorage.getItem(this.storageName);\n\n const localData: StorageData[] = localStr ? JSON.parse(localStr) : [];\n const sessionData: StorageData[] = sessionStr ? JSON.parse(sessionStr) : [];\n\n let settings: StorageOption[] = [];\n if (str) {\n const decryptedStr = this.encryption.decrypt(str, this.app.appID);\n if (decryptedStr) {\n try {\n settings = JSON.parse(decryptedStr);\n } catch (error) {\n console.warn('Failed to parse decrypted settings:', error);\n settings = [];\n }\n } else {\n console.warn('Failed to decrypt settings data');\n settings = [];\n }\n }\n\n settings.forEach(store => {\n\n\n // normalize options so we compare numbers and compute expires correctly\n const options = SettingOptions.adapt(store.options);\n\n // if persisted data included expiresIn but not numeric expires, compute it now\n if ((!options.expires || options.expires === 0) && options.expiresIn) {\n try {\n const computed = this.utils.expires(options.expiresIn as string);\n options.expires = computed || 0;\n } catch {\n options.expires = 0;\n }\n }\n\n const expired = (options.expires || 0) > 0 && this.utils.hasExpired(options.expires || 0);\n\n if (!expired) {\n\n const hasStorage = this.hasGlobalStorage(options.storage, store.id || '');\n\n if (!hasStorage) {\n this.createStore({ id: store.id, name: store.name, data: [], options });\n } else {\n const storeData = (options.storage === StorageType.GLOBAL)\n ? localData.find(item => item.id === store.id)\n : sessionData.find(item => item.id === store.id);\n this.setStore({ id: store.id || '', name: store.name, data: storeData?.data, options });\n }\n\n }\n\n });\n\n this.stateRetrieved = true;\n\n // Ensure all stored settings have numeric expires computed and persisted\n try {\n const current = this.state();\n let changed = false;\n const normalizedSettings = current.settings.map(s => {\n const opts = SettingOptions.adapt(s.options);\n if ((!opts.expires || opts.expires === 0) && opts.expiresIn) {\n const computed = this.utils.expires(opts.expiresIn as string) || 0;\n if (computed && computed !== opts.expires) {\n opts.expires = computed;\n changed = true;\n }\n }\n return { ...s, options: opts } as StorageOption;\n });\n\n if (changed) {\n const updated: State = { ...current, settings: normalizedSettings };\n this.state.set(updated);\n this.persistState(updated);\n }\n } catch (e) {\n // swallow normalization errors to avoid breaking init\n }\n\n }\n\n private hasGlobalStorage(type: StorageType = StorageType.GLOBAL, id: string) {\n const strData: StorageData[] = [];\n\n if (type === StorageType.GLOBAL) {\n const str = localStorage.getItem(this.storageName);\n strData.push(...(str ? JSON.parse(str) : []));\n } else {\n const str = sessionStorage.getItem(this.storageName);\n strData.push(...(str ? JSON.parse(str) : []));\n }\n\n const found = strData.find(store => store.id === id);\n return !!found;\n }\n\n private isObjectOrArray(obj: any) {\n try {\n const parsed = typeof obj === 'object' ? obj : JSON.parse(obj);\n return typeof parsed === 'object' && parsed !== null;\n } catch {\n return false;\n }\n }\n\n private isString(obj: any) {\n return Object.prototype.toString.call(obj) === '[object String]';\n }\n\n private validStoreName(str: string) {\n return str.toLowerCase().replace(/\\s+/g, '_').replace(/[^ -~]/g, '');\n }\n}\n","export interface TableSchemaDefInterface {\n table: string\n schema: string\n}\n\nexport class TableSchemaDef implements TableSchemaDefInterface {\n constructor(\n public table = 'unknown',\n public schema: string = '',\n ) {}\n\n static adapt(item?: any): TableSchemaDef {\n\n const schemaArray = (item?.schema && Array.isArray(item.schema)) ? item.schema : item.schema.split(',')\n const schema = schemaArray.map((item: string) => this.cleanString(item)).join()\n\n return new TableSchemaDef(\n (item?.table) ? this.cleanString(item.table) : 'unknown',\n schema,\n )\n\n }\n\n static cleanString(str: string): string {\n // Allow alphanumeric, spaces, underscores, and Dexie schema characters (+, &, *, [, ])\n const cleanStr = str\n .replace(/[^a-zA-Z0-9\\s_+\\&*\\[\\]]/g, '')\n .trim();\n\n return cleanStr;\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport Dexie, {Table} from 'dexie';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DbService extends Dexie {\n\n readonly storageDB = \"global_storage_db\"\n\n get db() { return this; }\n\n private dbReady: Promise<void>;\n\n constructor() {\n\n super(\"global_storage_db\");\n\n this.on('blocked', () => {\n console.warn('Database upgrade blocked! Please close other tabs/windows of this app.');\n });\n\n this.on('versionchange', () => {\n console.warn('Database version changed in another tab. Reloading...');\n window.location.reload();\n });\n\n this.dbReady = this.init();\n\n }\n\n private async init() {\n try {\n // Check if database already exists\n const dbExists = await Dexie.exists(this.storageDB);\n\n if (dbExists) {\n // Database exists - just open it without declaring version\n // This allows Dexie to use the existing schema and version\n console.log(`Database \"${this.storageDB}\" already exists. Opening with existing schema...`);\n\n if (!this.isOpen()) {\n await this.open();\n }\n\n console.log(`✅ Connected to existing database. Current version: ${this.verno}`);\n console.log(`📊 Existing tables: ${this.getTables.join(', ')}`);\n } else {\n // New database - initialize with empty schema at version 1\n console.log(`Creating new database \"${this.storageDB}\"...`);\n\n if (this.isOpen()) {\n this.close();\n }\n\n this.version(1).stores({});\n await this.open();\n console.log(`✅ New database initialized. Current version: ${this.verno}`);\n }\n } catch (err) {\n console.error('Failed to initialize database:', err);\n throw err;\n }\n }\n\n protected async createNewDatabase() {\n return this.dbReady;\n }\n\n get vr() {\n return this.verno;\n }\n\n get nextVr() {\n const v = this.verno;\n return (isNaN(v) || v === 0) ? 1 : v + 1;\n }\n\n get getTables() {\n return this.tables.map((table) => table.name);\n }\n\n async hasDatabase() {\n return await Dexie.exists(this.storageDB);\n }\n\n getTable(tableName: string): Table<any, any> | undefined {\n try {\n return this.table(tableName);\n } catch (error) {\n return undefined;\n }\n }\n\n tableExists(tableName: string): boolean {\n return this.tables.some(t => t.name === tableName);\n }\n\n protected async updateTable(tableName: string, find: { key: string, value: string | number }, data: any): Promise<boolean> {\n const table = this.getTable(tableName);\n if (!table || !find || !find.key) return false;\n\n try {\n const count = await table.where(find.key).equals(find.value).modify(data);\n return count > 0;\n } catch (error) {\n console.error('Error updating table:', error);\n return false;\n }\n }\n\n protected async createTable(tableName: string, schema: string) {\n if (!tableName || !schema) return;\n\n await this.dbReady;\n\n const safeTableName = this.cleanTableName(tableName);\n const safeSchema = schema.trim();\n\n if (this.tableExists(safeTableName)) return;\n\n const currentSchema = this.getCurrentSchema();\n console.log('Current Schema before update:', currentSchema);\n\n currentSchema[safeTableName] = safeSchema;\n\n const nextVersion = this.verno + 1;\n console.log(`Creating table ${safeTableName}. Upgrading to version ${nextVersion}. New Schema:`, currentSchema);\n\n if (this.isOpen()) {\n this.close();\n }\n\n this.version(nextVersion).stores(currentSchema);\n\n try {\n await this.open();\n const created = this.tables.some(t => t.name === safeTableName);\n if (!created) {\n console.error(`CRITICAL: Table ${safeTableName} was NOT created after upgrade! Tables found:`, this.tables.map(t => t.name));\n } else {\n console.log(`Database opened successfully version ${this.verno}. Table ${safeTableName} verified.`);\n }\n } catch (err) {\n console.error('Error opening database after schema update:', err);\n }\n }\n\n protected async DBOpened() {\n if (!this.isOpen()) {\n try {\n await this.open();\n return true;\n } catch (err) {\n return false;\n }\n }\n return true;\n }\n\n private getCurrentSchema(): { [key: string]: string } {\n const schema: { [key: string]: string } = {};\n\n if (!this.tables || this.tables.length === 0) {\n return schema;\n }\n\n this.tables.forEach(table => {\n const primKey = table.schema.primKey;\n const indexes = table.schema.indexes;\n\n let schemaStr = \"\";\n\n if (primKey.auto) schemaStr += \"++\";\n\n if (Array.isArray(primKey.keyPath)) {\n schemaStr += `[${primKey.keyPath.join('+')}]`;\n } else {\n schemaStr += primKey.keyPath || \"\";\n }\n\n indexes.forEach(idx => {\n schemaStr += \",\";\n if (idx.unique) schemaStr += \"&\";\n if (idx.multi) schemaStr += \"*\";\n\n if (Array.isArray(idx.keyPath)) {\n schemaStr += `[${idx.keyPath.join('+')}]`;\n } else {\n schemaStr += idx.keyPath || \"\";\n }\n });\n\n schema[table.name] = schemaStr;\n });\n return schema;\n }\n\n protected cleanTableName(str: string): string {\n return str\n .replace(/[^a-zA-Z0-9\\s_]/g, '')\n .replace(/\\s+/g, '_')\n .trim()\n .toLowerCase();\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { DbService } from './db.storage.service';\n\nimport { TableSchemaDef } from './models/table-schema';\nimport { EMPTY, from, Observable, of } from 'rxjs';\nimport { map, switchMap, tap } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DatabaseManagerService extends DbService {\n\n constructor() {\n super()\n }\n\n getDatabaseTables() {\n return from(this.DBOpened()).pipe(\n map(() => this.tables.map((item: any) => item.name))\n )\n }\n\n databaseExists(): Observable<boolean> {\n return from(this.hasDatabase());\n }\n\n hasDatabaseTable(table: string): Observable<boolean> {\n const tableName = this.cleanTableName(table);\n return from(this.DBOpened()).pipe(\n map(() => {\n return this.tableExists(tableName)\n })\n )\n }\n\n getDatabaseTable(table: string): Observable<any> {\n const tableName = this.cleanTableName(table);\n return from(this.DBOpened()).pipe(\n map(() => {\n const found = this.getTable(tableName);\n if(!found) {\n console.warn('No Such Table:', tableName)\n return null;\n }\n return found;\n })\n )\n }\n\n getDatabaseTableSchema(table: string): Observable<string[]> {\n const tableName = this.cleanTableName(table);\n return this.getDatabaseTable(tableName).pipe(\n map((dbTable: any) => {\n if(!dbTable) return []\n const cols = dbTable.schema.indexes.map((col: any) => col.name)\n const pri = dbTable.schema.primKey.name\n return [pri, ...cols]\n })\n )\n }\n\n createDatabaseTable(tableDef: TableSchemaDef) {\n return from(this.createTable(tableDef.table, tableDef.schema)).pipe(\n switchMap(() => this.DBOpened())\n )\n }\n\n updateDatabaseTableSchema(tableDef: TableSchemaDef) {\n return from(this.createTable(tableDef.table, tableDef.schema)).pipe(\n switchMap(() => this.getDatabaseTable(tableDef.table))\n )\n }\n\n // CRUD\n findTableRecords(table: string, column: string, value: any) {\n const tableName = this.cleanTableName(table);\n return this.getDatabaseTable(tableName).pipe(\n switchMap((tableData: any) => {\n if (!tableData) {\n console.warn(`findTableRecords: Table '${tableName}' not found`);\n return from([]);\n }\n return from(tableData.where(column).equals(value).toArray());\n })\n );\n }\n\n findTableRecord(table: string, column: string, value: any) {\n const tableName = this.cleanTableName(table);\n return this.findTableRecords(tableName, column, value).pipe(\n map((records: any) => records && records.length > 0 ? records[0] : null)\n );\n }\n\n getTableRecords(table: string) {\n const tableName = this.cleanTableName(table);\n return this.getDatabaseTable(tableName).pipe(\n switchMap((tableData: any) => {\n if (!tableData) {\n console.warn(`getTableRecords: Table '${tableName}' not found`);\n return from([]);\n }\n return from(tableData.toArray());\n })\n );\n }\n\n getTableRecord(table: string, id: number) {\n const tableName = this.cleanTableName(table);\n return this.getDatabaseTable(tableName).pipe(\n switchMap((tableData: any) => {\n if (!tableData) {\n console.warn(`getTableRecord: Table '${tableName}' not found`);\n return from([null]);\n }\n return from(tableData.get(id)).pipe(\n map((record: any) => record || null)\n );\n })\n );\n }\n\n createTableRecord(table: string, record: any) {\n const tableName = this.cleanTableName(table);\n return this.createTableRecords(tableName, [record])\n .pipe(\n map((item: any) => item ? item[0] : null))\n }\n\n createTableRecords(table: string, records: any[]) {\n const tableName = this.cleanTableName(table);\n return from(this.DBOpened()).pipe(\n switchMap(() => {\n if (!this.tables.some(t => t.name === tableName)) {\n console.error(`createTableRecords: Table '${tableName}' does not exist in DB version ${this.verno}. Available:`, this.tables.map(t => t.name));\n return EMPTY;\n }\n\n const tableInstance = this.table(tableName);\n\n // Extract schema fields directly from the table instance\n const schema = tableInstance.schema;\n const validFields = [\n schema.primKey.name,\n ...schema.indexes.map(idx => idx.name)\n ];\n\n const insertRecords = records.map((record: any) => {\n const objectFromSchema: { [key: string]: any } = {};\n validFields.forEach((field: string) => {\n if (field) {\n objectFromSchema[field] = (record as any)[field] ?? null;\n }\n });\n return objectFromSchema;\n });\n\n console.log(`createTableRecords: Bulk putting ${insertRecords.length} records into ${tableName}`);\n\n return from(tableInstance.bulkPut(insertRecords)).pipe(\n map(() => insertRecords)\n );\n })\n );\n }\n\n updateTableRecord(table: string, record: any) {\n const tableName = this.cleanTableName(table);\n return this.updateTableRecords(tableName, [record])\n .pipe(\n map(item => item.length > 0 ? item[0] : null)\n )\n }\n\n updateTableRecords(table: string, records: any[]) {\n\n const tableName = this.cleanTableName(table);\n\n return this.getDatabaseTable(tableName).pipe(\n\n switchMap((tableData: any) => {\n\n return this.getDatabaseTableSchema(tableName).pipe(\n\n switchMap((schema: string[]) => {\n\n const insertRecords = records.map((record: any) => {\n\n const objectFromSchema: { [key: string]: any } = {}\n\n schema.forEach((field: string) => {\n const data = (record as any)[field] ?? null\n objectFromSchema[field] = data\n })\n\n return objectFromSchema\n\n })\n\n return from(tableData.bulkPut(insertRecords)).pipe(\n map(() => insertRecords)\n );\n\n })\n\n )\n\n })\n\n )\n\n }\n\n deleteTableRecord<T>(table: string, id: number) {\n const tableName = this.cleanTableName(table);\n return this.deleteTableRecords(tableName, [id])\n .pipe(\n map(item => item.length > 0 ? item[0] : null)\n )\n }\n\n deleteTableRecords(table: string, ids: number[]) {\n const tableName = this.cleanTableName(table);\n return this.getDatabaseTable(tableName).pipe(\n\n switchMap((tableData: any) => {\n\n return this.getDatabaseTableSchema(tableName).pipe(\n\n switchMap((schema: string[]) => {\n\n console.log(`deleteTableRecords: Starting delete of ${ids.length} records from ${table}. IDs:`, ids);\n\n return from(tableData.bulkDelete(ids)).pipe(\n map(() => ids)\n );\n\n })\n\n )\n\n })\n\n )\n\n }\n\n clearTable(table: string) {\n const tableName = this.cleanTableName(table);\n console.log(`clearTable: Starting clear for table: ${tableName}`);\n\n try {\n const tableInstance = this.table(tableName);\n if (!tableInstance) {\n console.warn(`clearTable: Table '${tableName}' not found`);\n return of([]);\n }\n\n console.log(`clearTable: Clearing table '${tableName}'...`);\n\n // Use table.clear() directly and wrap in Observable\n return from(Promise.resolve().then(() => {\n return tableInstance.clear();\n })).pipe(\n tap(() => console.log(`clearTable: ✅ Table '${tableName}' cleared successfully`)),\n map(() => [])\n );\n } catch (error) {\n console.error(`clearTable: ❌ Error:`, error);\n return of([]);\n }\n }\n \n}\n","import { WSUser } from \"./ws-user.model\";\n\nexport interface ChannelMessageInterface {\n messageId?: number, // NEW: Sequential ID per channel\n channel?: string, // NEW: Channel name\n isReplay?: boolean, // NEW: Replay indicator\n sessionId: any,\n content: any,\n timestamp?: string,\n}\n\nexport class ChannelMessage implements ChannelMessageInterface {\n\n constructor(\n public messageId?: number,\n public channel?: string,\n public isReplay?: boolean,\n public sessionId: any = null,\n public content: any = null,\n public timestamp?: string,\n ) {}\n\n static adapt(item?: any): ChannelMessage {\n\n return new ChannelMessage(\n item?.messageId,\n item?.channel,\n item?.isReplay,\n item?.sessionId || item?.id, // Support both for backward compatibility\n item?.content,\n item?.timestamp,\n )\n\n }\n\n}\n","import { inject, Inject, Injectable, InjectionToken } from '@angular/core';\nimport { ComponentStore } from '@ngrx/component-store';\n\nimport { BehaviorSubject, Observable, of, Subject, timer, merge, Subscription } from 'rxjs';\nimport { tap, switchMap, concatMap, scan, delay, take, map, distinctUntilChanged, takeUntil, takeWhile, filter, catchError } from 'rxjs/operators';\nimport { DatabaseStorage } from '../../models/database-storage.model';\nimport { ApiRequest, RequestOptions, WSOptions } from './models';\nimport { WSUser } from '../ws-manager-service/models';\nimport { HTTPManagerService, DataType } from '../request-manager-services';\nimport { DatabaseManagerService } from '../database-manager-service';\nimport { TableSchemaDef } from '../database-manager-service/models/table-schema';\nimport { LocalStorageManagerService, StorageType } from '../local-storage-manager-service';\nimport { SettingOptions } from '../local-storage-manager-service/models/setting-options.model';\nimport { UtilsService } from '../..';\nimport { ChannelMessage } from '../ws-manager-service/models/channel-message.model';\nimport { WebSocketManagerService } from '../ws-manager-service/websocket-service';\nimport { LoggerService } from '../../services/utils/logger.service';\n\nconst API_OPTS = new InjectionToken<ApiRequest>('API_OPTS');\n\n/**\n * Channel type enum for different communication purposes\n * - STATE: Private channels for state synchronization (SYS- prefix)\n * - MESSAGE: Public messaging/communication channels (PUB- prefix)\n * - NOTIFICATION: Notification channels with DB persistence (MES- prefix)\n */\nexport enum ChannelType {\n STATE = 'SYS',\n MESSAGE = 'PUB',\n NOTIFICATION = 'MES'\n}\n\n/**\n * Utility function to create prefixed channel name\n * @param channelType - The type of channel\n * @param channelName - The base channel name\n * @returns Prefixed channel name (e.g., 'SYS-USERS123')\n */\nexport function createChannelName(channelType: ChannelType, channelName: string): string {\n return `${channelType}-${channelName}`;\n}\n\nexport interface APIStateManagerData<T> {\n data: T[]\n dataObject: T | null\n}\n\nconst defaultState: APIStateManagerData<any> = {\n data: [],\n dataObject: null,\n};\n\n@Injectable()\nexport class HTTPManagerStateService<T extends { id: number|string }> extends ComponentStore<APIStateManagerData<T>> {\n\n httpManagerService = inject(HTTPManagerService)\n dbManagerService = inject(DatabaseManagerService)\n localStorageManagerService = inject(LocalStorageManagerService)\n utils = inject(UtilsService)\n logger = inject(LoggerService)\n\n error$ = this.httpManagerService.error$\n isPending$ = this.httpManagerService.isPending$.pipe(delay(1))\n\n // PAGINATION\n private page = new BehaviorSubject<number>(0)\n page$ = this.page.asObservable()\n\n private totalPages = new BehaviorSubject<number>(0)\n totalPages$ = this.totalPages.asObservable()\n\n private percentage = new BehaviorSubject<number>(0)\n percentage$ = this.percentage.asObservable()\n\n private hasDatabase = false\n\n streamedResponse = []\n\n // WS\n private maxRetries: number\n private retryDelay: number\n private shouldRetry = true\n\n // Track connection status subscription to prevent duplicates\n private connectionStatusSubscription?: Subscription\n\n private databaseOptions?: DatabaseStorage\n\n private wsRetryAttempts = new BehaviorSubject<number>(0)\n wsRetryAttempts$ = this.wsRetryAttempts.asObservable()\n\n private wsNextRetry: BehaviorSubject<number>\n wsNextRetry$: Observable<number>\n\n\n private messages = new BehaviorSubject<any[]>([])\n messages$ = this.messages.asObservable()\n\n private userListByChannel = new BehaviorSubject<Map<string, any[]>>(new Map())\n userListByChannel$ = this.userListByChannel.asObservable()\n\n // Convenience observable that returns users for a specific channel\n getUsersForChannel$(channel: string) {\n return this.userListByChannel$.pipe(\n map(channelMap => channelMap.get(channel) || [])\n )\n }\n\n // Returns all unique users across all channels\n private userList = new BehaviorSubject<any[]>([])\n userList$ = this.userList.asObservable()\n\n private user = new BehaviorSubject<WSUser|null>(null)\n user$ = this.user.asObservable()\n\n private channels = new BehaviorSubject<string[]|null>(null)\n channels$ = this.channels.asObservable()\n\n // In-memory notification channels (from server)\n private notificationChannels = new BehaviorSubject<string[]>([])\n notificationChannels$ = this.notificationChannels.asObservable()\n\n // Today's notification channels (from database - channels with data for today)\n private todaysNotificationChannels = new BehaviorSubject<string[]>([])\n todaysNotificationChannels$ = this.todaysNotificationChannels.asObservable()\n\n // Notification messages (MES- channels)\n private notificationMessages = new BehaviorSubject<any[]>([])\n notificationMessages$ = this.notificationMessages.asObservable()\n\n private latestNotification = new Subject<any>()\n latestNotification$ = this.latestNotification.asObservable()\n\n private communicationMessages = new BehaviorSubject<any[]>([])\n communicationMessages$ = this.communicationMessages.asObservable()\n\n private latestCommunicationMessages = new BehaviorSubject<any|null>(null)\n latestCommunicationMessages$ = this.latestCommunicationMessages.asObservable()\n\n private userAction = new BehaviorSubject<any|null>(null)\n userAction$ = this.userAction.asObservable()\n\n // Message queue for WebSocket communication (processed when connection is established)\n private static wsCommunicationQueue: Array<{method: string, path?: string|number[]}> = [];\n\n // Store our own sessionId for filtering out own messages\n private ownSessionId: string | null = null;\n\n wsOptions = WSOptions.adapt()\n\n // Expose raw WS connection status directly to UI (from singleton WebSocketManagerService)\n public connectionStatus$: Observable<boolean> = this.httpManagerService.connectionStatus$\n\n constructor(\n @Inject(API_OPTS) private apiOptions = ApiRequest.adapt(),\n @Inject(\"dataType\") private dataType: DataType | undefined,\n database?: DatabaseStorage\n ) {\n\n super(defaultState);\n\n try {\n this.databaseOptions = database\n this.hasDatabase = (database?.table) ? true : false\n this.maxRetries = this.apiOptions.ws?.retry?.times || 3\n this.retryDelay = (this.apiOptions.ws?.retry?.delay && this.apiOptions.ws.retry.delay * 1000) || 5 * 1000\n\n // Start next retry countdown at 0 to avoid showing 5000 pre-connection\n this.wsNextRetry = new BehaviorSubject<number>(0)\n this.wsNextRetry$ = this.wsNextRetry.asObservable()\n\n this.setApiRequestOptions(apiOptions, dataType, database)\n\n if (this.databaseOptions && this.databaseOptions.table) {\n\n this.localStorageManagerService.createStore({\n name: this.databaseOptions.table,\n data: { ...this.databaseOptions, ...{ expires: this.utils.expires(this.databaseOptions.expiresIn)} },\n options: SettingOptions.adapt({\n storage: StorageType.GLOBAL,\n encrypted: false,\n })\n })\n\n this.initDBStorage()\n\n }\n } catch (error) {\n this.logger.error('HTTPManagerStateService', 'Error initializing', error);\n // Initialize with safe defaults\n this.databaseOptions = undefined;\n this.maxRetries = 3;\n this.retryDelay = 5000;\n this.wsNextRetry = new BehaviorSubject<number>(0);\n this.wsNextRetry$ = this.wsNextRetry.asObservable();\n }\n\n }\n\n /**\n * Add appropriate prefix to a channel name if not already present\n */\n private prefixChannel(channel: string, type: ChannelType): string {\n const prefix = `${type}-`;\n if (channel.startsWith(prefix)) {\n return channel;\n }\n // Remove any other known prefix before adding the correct one\n const cleanChannel = this.stripChannelPrefix(channel);\n return `${type}-${cleanChannel}`;\n }\n\n /**\n * Remove any known prefix from a channel name\n */\n private stripChannelPrefix(channel: string): string {\n for (const type of Object.values(ChannelType)) {\n const prefix = `${type}-`;\n if (channel.startsWith(prefix)) {\n return channel.slice(prefix.length);\n }\n }\n return channel;\n }\n\n /**\n * Get the base channel name without prefix (for display/user reference)\n */\n getBaseChannelName(channel: string): string {\n return this.stripChannelPrefix(channel);\n }\n\n setApiRequestOptions(apiOptions?: ApiRequest, dataType?: DataType, database?: DatabaseStorage) {\n\n this.logger.debug('StateStore', '🔧 setApiRequestOptions called', {\n hasWs: !!apiOptions?.ws,\n wsId: apiOptions?.ws?.id,\n wsServer: apiOptions?.ws?.wsServer,\n path: apiOptions?.path\n });\n\n this.apiOptions = ApiRequest.adapt(apiOptions)\n this.dataType = (dataType) ? dataType : DataType.ARRAY\n\n // Only update database options if a database parameter is explicitly provided\n if (database !== undefined) {\n this.hasDatabase = (database?.table) ? true : false\n this.databaseOptions = (this.hasDatabase) ? DatabaseStorage.adapt(database) : undefined\n }\n\n if(this.apiOptions.ws && this.apiOptions.ws.id !== '') {\n\n // Auto-prefix channel ID for private state manager channels\n // This ensures state manager channels are separate from user-defined channels\n this.apiOptions.ws.id = this.prefixChannel(this.apiOptions.ws.id, ChannelType.STATE);\n this.logger.debug('StateStore', `🔒 Private state channel configured`, { channelId: this.apiOptions.ws.id });\n\n // Store our own sessionId for filtering incoming messages\n this.ownSessionId = sessionStorage.getItem('WSID') || null;\n this.logger.debug('StateStore', `🆔 Stored own sessionId for message filtering`, { sessionId: this.ownSessionId });\n this.logger.debug('StateStore', `🔍 WebSocket configuration`, {\n channelId: this.apiOptions.ws.id,\n wsServer: this.apiOptions.ws.wsServer,\n sessionId: this.ownSessionId,\n path: this.apiOptions.path\n });\n\n // Initialize WebSocket connection if not already connected\n this.logger.debug('StateStore', '🔌 Checking WebSocket connection status...');\n this.logger.debug('StateStore', '🔌 Is connected?', { connected: WebSocketManagerService.isConnected() });\n\n if (!WebSocketManagerService.isConnected()) {\n this.logger.debug('StateStore', '🔌 WebSocket not connected, will initialize via effect');\n // initWS is an effect that triggers when setApiRequestOptions is called with ws config\n // The effect is already triggered by calling setApiRequestOptions above\n }\n\n if (this.apiOptions.ws?.retry) {\n this.maxRetries = this.apiOptions.ws.retry.times || 3\n this.retryDelay = (this.apiOptions.ws.retry.delay && this.apiOptions.ws.retry.delay * 1000) || 5 * 1000\n this.wsNextRetry.next(this.retryDelay)\n }\n\n // Validate wsServer before attempting connection\n if (!this.apiOptions.ws.wsServer || this.apiOptions.ws.wsServer === '') {\n this.logger.error('StateStore', 'WSOptions invalid: wsServer is missing or empty');\n return;\n }\n\n // Clean up previous subscription to prevent duplicate handlers\n if (this.connectionStatusSubscription) {\n this.connectionStatusSubscription.unsubscribe();\n this.connectionStatusSubscription = undefined;\n }\n\n // Setup connection status monitoring (internal subscription to drive retry counters)\n this.connectionStatusSubscription = this.setupConnectionStatus().subscribe();\n\n // Make initial connection attempt\n this.logger.debug('StateStore', '🔄 Initial WebSocket connection attempt...');\n this.httpManagerService.connect(this.apiOptions.ws as WSOptions, this.apiOptions.ws.jwtToken || '');\n\n // Initialize WS effect to handle messages\n this.initWS(this.apiOptions.ws as WSOptions);\n\n } else {\n this.logger.warn('StateStore', 'WSOptions invalid Id: empty');\n }\n }\n\n // WebSocket\n private setupConnectionStatus(): Observable<boolean> {\n return this.httpManagerService.connectionStatus$.pipe(\n distinctUntilChanged(),\n tap(status => {\n if (status === true) {\n this.logger.debug('StateStore', '🟢 WebSocket connection is open')\n } else {\n this.logger.debug('StateStore', '🔴 WebSocket connection is closed')\n }\n }),\n switchMap(status => {\n\n if (status === true) {\n this.shouldRetry = true\n this.wsRetryAttempts.next(0);\n this.wsNextRetry.next(0);\n return of(true);\n }\n\n if (!this.shouldRetry) return of(false)\n\n const countdownEnder$ = new Subject<void>();\n\n // Immediately reflect upcoming retry delay in seconds on UI\n const seconds = this.retryDelay / 1000;\n this.wsNextRetry.next(seconds);\n\n return timer(0, this.retryDelay)\n .pipe(\n take(this.maxRetries),\n tap(i => {\n\n const attempt = i + 1;\n this.wsRetryAttempts.next(attempt);\n countdownEnder$.next();\n\n // Validate WS options; abort retries if invalid\n const hasValidWS = !!(this.apiOptions.ws && this.apiOptions.ws.wsServer && this.apiOptions.ws.wsServer !== '');\n\n if (!hasValidWS) {\n this.shouldRetry = false;\n this.wsNextRetry.next(0);\n this.wsRetryAttempts.next(0);\n return; // Skip connect and countdown\n }\n\n console.log(`🔄 Retry attempt #${attempt}/${this.maxRetries}`);\n this.httpManagerService.connect(this.apiOptions.ws as WSOptions, this.apiOptions.ws!.jwtToken || '');\n\n if (attempt === this.maxRetries) {\n this.wsNextRetry.next(0)\n // console.error(`🚨 FAILED CONNECTION: Tried #${attempt} times`);\n } else {\n // console.log(`⚠️ Retry Attempt #${attempt}: Retrying in ${this.retryDelay / 1000}s`);\n const seconds = this.retryDelay / 1000;\n\n timer(0, 1000).pipe(\n map(tick => seconds - tick),\n takeWhile(val => val >= 0),\n takeUntil(countdownEnder$)\n ).subscribe(remaining => {\n this.wsNextRetry.next(remaining);\n })\n\n }\n\n }),\n map(() => false)\n )\n })\n );\n }\n\n // WebSocket\n readonly initWS = this.effect<WSOptions>((wsOptions$) =>\n wsOptions$.pipe(\n switchMap((wsOptions) =>\n merge(\n this.httpManagerService.connectionStatus$.pipe(\n tap((isConnected: any) => {\n if (isConnected) {\n // Subscribe to our private SYS- state channel so we receive stateMangerMessage broadcasts\n // This is the critical subscription that enables multi-client state syncing\n const stateChannel = wsOptions?.id || this.apiOptions.ws?.id;\n if (stateChannel) {\n console.log(`🔒 [STATE STORE] Subscribing to state channel: ${stateChannel}`);\n this.httpManagerService.subscribeToChannel(stateChannel);\n }\n\n // Process queued wsCommunication calls when connection becomes true\n if (HTTPManagerStateService.wsCommunicationQueue.length > 0) {\n console.log(`🔄 Processing ${HTTPManagerStateService.wsCommunicationQueue.length} queued WS messages`);\n while (HTTPManagerStateService.wsCommunicationQueue.length > 0) {\n const queued = HTTPManagerStateService.wsCommunicationQueue.shift()!;\n this.sendWsCommunication(queued.method, queued.path);\n }\n }\n }\n })\n ),\n this.httpManagerService.messages$.pipe(\n tap((message: any) => {\n if (!message) return\n\n // CRITICAL DEBUG: Log EVERY message received\n console.log('🔍 [STATE STORE] Received WebSocket message:', {\n type: message.type,\n channel: message.channel,\n sessionId: message.data?.sessionId?.id || message.sessionId?.id,\n content: message.content || message.data?.content,\n timestamp: new Date().toISOString()\n });\n\n // Add message to messages array\n const currentMessages = this.messages.value\n this.messages.next([...currentMessages, message])\n\n console.log('Received:', message)\n\n // Debug: Log all message types\n this.logger.debug('StateStore', '📨 Message type', { type: message.type })\n\n if (message.error === 'JWT_INVALID') {\n this.shouldRetry = false\n this.httpManagerService.disconnect()\n }\n\n if (message.type === 'success') {\n if(message.data.id !== this.user.value?.id) {\n const user = WSUser.adapt(message.data)\n this.user.next(user)\n }\n }\n\n switch (message.type) {\n case 'channelsList':\n\n this.logger.debug('StateStore', '💬 Channels', { channels: message.channels })\n this.logger.debug('StateStore', '🔍 channelsList received, checking connection status...')\n this.logger.debug('StateStore', '🔍 WebSocket connected', { connected: WebSocketManagerService.isConnected() })\n\n // Extract channel names from metadata objects (new format) or use strings directly (old format)\n const channelNames = message.channels.map((c: any) => {\n // Handle new format: {name: string, canSubscribe: boolean}\n if (typeof c === 'object' && c.name) {\n return c.name;\n }\n // Handle old format: string\n return c;\n });\n\n // Auto-subscribe to all channels from the list\n if (channelNames && channelNames.length > 0) {\n this.logger.debug('StateStore', '📥 Auto-subscribing to channels', { count: channelNames.length })\n this.subscribeToChannels(channelNames)\n } else {\n this.logger.warn('StateStore', '⚠️ No channels to subscribe to')\n }\n\n this.channels.next(channelNames)\n\n break;\n\n case 'success':\n // Success messages - check for subscription confirmation\n this.logger.info('StateStore', `✅ Success`, { message: message.message })\n if (message.message?.includes('Subscribed to channel:')) {\n // Extract channel name from message: \"Subscribed to channel: PUB-chat\"\n const channelName = message.message.split('Subscribed to channel:')[1]?.trim()\n this.logger.debug('StateStore', `✅ Subscription confirmed for channel`, { channel: channelName })\n WebSocketManagerService.addSubscribedChannel(channelName)\n }\n break;\n\n case 'subscribed':\n this.logger.debug('StateStore', `✅ Subscription confirmed`, { channel: message.channel })\n // Track as subscribed now that server confirmed\n WebSocketManagerService.addSubscribedChannel(message.channel);\n break;\n\n case 'unsubscribed':\n this.logger.debug('StateStore', `🔓 Unsubscription confirmed`, { channel: message.channel })\n break;\n\n case 'info':\n // Already subscribed or other info messages\n this.logger.info('StateStore', `ℹ️ Info`, { message: message.message })\n // If it's an \"Already subscribed\" message, treat it as subscription confirmation\n if (message.message?.includes('Already subscribed to channel:')) {\n // Extract channel name from message: \"Already subscribed to channel: PUB-chat\"\n const channelName = message.message.split('Already subscribed to channel:')[1]?.trim()\n console.log(`✅ Treating info as subscription confirmation for channel: ${channelName}`)\n WebSocketManagerService.addSubscribedChannel(channelName)\n }\n break;\n\n case 'stateMangerMessage':\n // CRITICAL DEBUG: Log channel comparison\n console.log('🔍 [STATE STORE] stateMangerMessage received:', {\n messageChannel: message.channel,\n ourChannel: this.apiOptions.ws?.id,\n channelsMatch: message.channel === this.apiOptions.ws?.id,\n senderSessionId: message.data.sessionId?.id,\n ourSessionId: this.ownSessionId\n });\n\n // Compare sender's session ID with our own sessionId\n // message.data.sessionId is an object with 'id' property from server\n const stateManagerSenderId = message.data.sessionId?.id || message.data.sessionId;\n console.log('🔍 State Manager: Sender sessionId:', stateManagerSenderId, 'Own sessionId:', this.ownSessionId);\n if(stateManagerSenderId !== this.ownSessionId) {\n console.log('💬 State Manager Message:', message.data)\n console.log('📥 Fetching record with path:', message.data.content.path, 'method:', message.data.content.method)\n this.userAction.next(message.data)\n this.fetchRecord(RequestOptions.adapt({ path: message.data.content.path }), message.data.content.method)\n } else {\n console.log('⏭️ Skipping own message (sessionId match)');\n }\n break;\n\n case 'channelMessage':\n // Handle channel-based messages (from sendChannelMessage)\n // Structure: { type: 'channelMessage', messageId, channel, sessionId, content, timestamp }\n // Skip messages from self\n const senderSessionId = message.sessionId?.id || message.sessionId;\n if (senderSessionId === this.ownSessionId) {\n console.log('🔇 Skipping message from self (sessionId match)');\n break;\n }\n\n console.log('💬 Channel Message received:', message);\n\n // Determine which channels this message was sent to\n const messageChannels = message.channel ? [message.channel] : [];\n\n // Construct expected channel path (without env prefix)\n const myPath = this.apiOptions.path || [];\n const myPathString = myPath.join('/');\n\n // Check if any of the message channels CONTAIN our path\n const isWsUpdateChannel = messageChannels.some((ch: string) => {\n // Strip SYS- prefix if present for comparison\n const cleanChannel = ch.replace('SYS-', '');\n // Check if channel contains our path (or starts with it)\n const matches = cleanChannel === myPathString ||\n cleanChannel.startsWith(myPathString + '/') ||\n cleanChannel.includes(myPathString);\n console.log(`🔍 Channel check: ${ch} contains ${myPathString}? ${matches}`);\n return matches;\n });\n\n // If it's the expected channel, trigger fetchRecord like stateManagerMessage\n if (isWsUpdateChannel && message.content?.path) {\n console.log('🔍 Message received on expected channel (path match):', myPathString);\n console.log('📄 Content:', message.content);\n\n console.log('📥 Fetching record for channel:', myPathString);\n const path = message.content.path;\n const method = message.content.method || 'UPDATE';\n this.userAction.next({ sessionId: message.sessionId, content: message.content });\n this.fetchRecord(RequestOptions.adapt({ path }), method);\n\n } else if (message.content) {\n // Handle message content directly\n console.log('📄 Processing message content:', message.content);\n this.appendMessages(ChannelMessage.adapt({\n sessionId: message.sessionId,\n content: message.content,\n }));\n\n } else {\n console.log('⚠️ Message does not contain data.content.path, skipping fetchRecord');\n }\n\n // Keep existing functionality for backward compatibility\n if (message.data?.content && !isWsUpdateChannel) {\n this.appendMessages(ChannelMessage.adapt({\n sessionId: message.data.sessionId,\n content: message.data.content,\n }));\n }\n break;\n\n case 'usersInChannel':\n console.log(`👥 Users in channel \"${message.channel}\":`, message.data.users)\n\n // Update channel-specific user list\n const currentMap = new Map(this.userListByChannel.value)\n currentMap.set(message.channel, message.data.users)\n this.userListByChannel.next(currentMap)\n\n // Update legacy userList with unique users across all channels\n const allUsers = Array.from(currentMap.values()).flat()\n const uniqueUsers = allUsers.filter((user, index, self) =>\n index === self.findIndex(u => u.id === user.id)\n )\n this.userList.next(uniqueUsers)\n break;\n\n case 'notificationChannelsList':\n console.log('📢 Notification Channels (in-memory):', message.channels)\n // Extract channel names from metadata objects (new format) or use strings directly (old format)\n const notifyChannelNames = message.channels.map((c: any) => {\n if (typeof c === 'object' && c.name) {\n return c.name;\n }\n return c;\n });\n this.notificationChannels.next(notifyChannelNames || [])\n break;\n\n case 'todaysNotificationChannelsList':\n console.log('📢 Today\\'s Notification Channels (from DB):', message.channels)\n // Extract channel names from metadata objects (new format) or use strings directly (old format)\n const todaysNotifyChannelNames = message.channels.map((c: any) => {\n if (typeof c === 'object' && c.name) {\n return c.name;\n }\n return c;\n });\n this.todaysNotificationChannels.next(todaysNotifyChannelNames || [])\n break;\n\n case 'notificationSubscribed':\n console.log(`📢 Notification subscription confirmed: ${message.channel}`, message.notifications)\n // Set historical notifications from subscription\n if (message.notifications && Array.isArray(message.notifications)) {\n this.notificationMessages.next(message.notifications)\n }\n break;\n\n case 'notificationUnsubscribed':\n console.log(`📢 Notification unsubscription confirmed: ${message.channel}`)\n break;\n\n case 'notification':\n console.log('📢 Notification received:', message)\n // Add to notifications array\n const currentNotifications = this.notificationMessages.value\n this.notificationMessages.next([...currentNotifications, message])\n // Emit as latest notification\n this.latestNotification.next(message)\n break;\n\n default:\n // Messages are already added at the beginning of the tap\n break\n }\n })\n )\n )\n )\n )\n );\n\n appendMessages(message: any) {\n const currentMessages = this.communicationMessages.value\n this.communicationMessages.next([...currentMessages, message])\n this.latestMessage()\n }\n\n latestMessage() {\n const messages = this.communicationMessages.value\n const latestMessage = messages[messages.length -1]\n this.latestCommunicationMessages.next(latestMessage)\n }\n\n clearMessages() {\n this.communicationMessages.next([])\n }\n\n get ApiRequestOptions() {\n return this.apiOptions\n }\n\n readonly initDBStorage = this.effect<void>((trigger$) =>\n trigger$.pipe(\n tap(() => {\n if (this.dataType !== DataType.ARRAY) console.warn('Database storage requires dataType to be ARRAY')\n if (!this.apiOptions.adapter) console.warn('Database storage requires an adapter to define the data shape')\n if (this.databaseOptions && this.databaseOptions?.table === '') console.warn('Database storage requires a table name')\n }),\n filter(() => this.dataType === DataType.ARRAY && !!this.apiOptions.adapter && !!this.databaseOptions?.table),\n switchMap(() => {\n const sampleData = this.apiOptions.adapter?.({}) || {}\n const schemaKeys = Object.keys(sampleData).filter(key => sampleData[key] !== undefined)\n\n let schema = '++id'\n\n if (schemaKeys.length > 0) {\n const otherKeys = schemaKeys.filter(k => k !== 'id')\n if (otherKeys.length > 0) {\n schema += ', ' + otherKeys.join(', ')\n }\n }\n\n const tableDef = TableSchemaDef.adapt({\n table: this.databaseOptions?.table,\n schema: schema\n });\n\n return this.dbManagerService.createDatabaseTable(tableDef)\n })\n )\n )\n\n initializeState(data: any) {\n this.setData$(data)\n }\n\n // --------------------------------------------------------------------------------------------------\n // SELECTORS\n readonly data$ = this.select(({ data, dataObject }) => {\n const isArray =( this.dataType === DataType.ARRAY) ? true : false\n return (isArray) ? data : dataObject\n })\n\n readonly selectRecord$ = (id: number) => this.select(\n this.data$,\n (data) => {\n if (this.dataType === DataType.ARRAY && Array.isArray(data)) {\n return data.find(item => item.id === id) as T | null\n } else {\n return (data as T).id === id ? data : null\n }\n }\n )\n\n // --------------------------------------------------------------------------------------------------\n\n // UPDATERS\n private readonly setData$ = this.updater((state: APIStateManagerData<T>, data: T | T[] | any) => {\n\n if (!data) return state;\n\n if (this.dataType === DataType.ARRAY) {\n\n const dataArray = Array.isArray(data) ? data : [data]\n\n const stateDataSample = (state.data.length > 0) ? Object.keys(state.data[0]) : []\n const newDataSample = (dataArray.length > 0) ? Object.keys(dataArray[0]) : []\n\n const isSame = (state.data.length === 0) ? false : stateDataSample.every((value, index) => value === newDataSample[index])\n const updatedData = (!isSame && dataArray.length !== 0) ? this.updateArrayState([], dataArray) : this.updateArrayState(state.data, dataArray)\n\n return { ...state, data: updatedData, dataObject: null } as APIStateManagerData<T>;\n\n } else {\n const dataObject = this.isEmpty(data) ? null : data;\n return { ...state, data: [], dataObject: dataObject } as APIStateManagerData<T>;\n }\n\n })\n\n private updateArrayState(currentData: any[], newData: any[]): any[] {\n\n const filterCurrentData = () => {\n const ids = this.streamedResponse.map((obj: any) => obj.id)\n return currentData.filter(obj => (obj.id) ? ids.includes(obj.id) : obj)\n }\n\n const filteredCurrentData = (this.httpManagerService.isPending.value) ? currentData : filterCurrentData()\n\n const updatedData = filteredCurrentData.map(item => {\n const newItem = newData.find(newItem => {\n const hasId = (newItem?.id && item?.id) ? true : false\n return (hasId) ? newItem.id === item.id : JSON.stringify(newItem) === JSON.stringify(item)\n })\n return (newItem) ? { ...item, ...newItem } : item\n })\n\n const addedData = newData.filter(newItem => {\n return !filteredCurrentData.some(item => {\n const hasId = (newItem?.id && item?.id) ? true : false\n return (hasId) ? item.id === newItem.id : JSON.stringify(newItem) === JSON.stringify(item)\n })\n })\n\n return [...updatedData, ...addedData]\n\n }\n\n private readonly addData$ = this.updater((state: APIStateManagerData<T>, data: T) => {\n\n if (this.dataType === DataType.ARRAY) {\n const exists = state.data.some(item => item.id === data.id);\n\n if (exists) {\n const updatedData = state.data.map(item =>\n item.id === data.id ? data : item\n );\n\n return { ...state, data: updatedData };\n } else {\n const newState = [...state.data, data];\n return { ...state, data: newState };\n }\n } else {\n return { ...state, dataObject: data };\n }\n\n })\n\n private readonly deleteData$ = this.updater((state: APIStateManagerData<T>, data: T & { id: number }) => {\n if (this.dataType === DataType.ARRAY) {\n const newState = state.data.filter(item => item.id !== data.id)\n return { ...state, ...{ data: newState } }\n } else {\n return { ...state, ...{ dataObject: null } }\n }\n })\n\n private readonly updateData$ = this.updater((state: APIStateManagerData<T>, data: T) => {\n\n if (this.dataType === DataType.ARRAY) {\n\n const objIndex = state.data.findIndex(item => item.id === data.id)\n\n if (objIndex > -1) {\n const newState = [...state.data]\n newState[objIndex] = data\n return { ...state, ...{ data: newState } }\n }\n\n return state\n\n } else {\n return { ...state, ...{ dataObject: data } }\n }\n\n })\n\n // --------------------------------------------------------------------------------------------------\n // EFFECTS\n\n readonly clearRecords = this.effect(data =>\n data.pipe(\n\n tap(() => {\n\n if (this.dataType === DataType.ARRAY) {\n this.setData$([])\n } else {\n this.setData$({})\n }\n\n }),\n concatMap(() => {\n if (this.hasDatabase && this.databaseOptions?.table) {\n\n const currentData = this.get()?.data;\n const idsToDelete = Array.isArray(currentData) ? currentData.map((r: any) => r.id) : [];\n\n if (idsToDelete.length > 0) {\n return this.dbManagerService.deleteTableRecords(this.databaseOptions.table, idsToDelete);\n }\n\n }\n return of(null);\n })\n ))\n\n // --------------------------------------------------------------------------------------------------\n // CRUD OPERATIONS\n\n // FETCH RECORDS\n readonly fetchRecords = (options?: RequestOptions) =>\n this.effect<any>(() =>\n of(RequestOptions.adapt(options)).pipe(\n switchMap(() => {\n\n this.streamedResponse = []\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n const fetchFromAPI = () => {\n\n return this.httpManagerService.getRequest(requestOptions, options?.path).pipe(\n tap((data: any) => {\n data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data\n this.setData$(data)\n }),\n concatMap((data: any) => {\n if (this.hasDatabase && this.databaseOptions?.table && Array.isArray(data) && data.length > 0) {\n\n this.localStorageManagerService.updateStore({\n name: this.databaseOptions!.table,\n data: { ...this.databaseOptions, ...{ expires: this.utils.expires(this.databaseOptions!.expiresIn)} }\n })\n\n return this.dbManagerService.createTableRecords(this.databaseOptions.table, data);\n }\n return of(data);\n })\n );\n\n }\n\n if (this.hasDatabase && this.databaseOptions?.table) {\n\n return this.dbManagerService.databaseExists().pipe(\n switchMap((dbExists: boolean) => {\n\n if (!dbExists) {\n const initObs: Observable<any> = this.initDBStorageAsync();\n return initObs.pipe(\n switchMap(() => fetchFromAPI())\n );\n }\n\n return this.dbManagerService.hasDatabaseTable(this.databaseOptions!.table).pipe(\n switchMap((tableExists: boolean): Observable<any> => {\n\n if (!tableExists) {\n const initObs: Observable<any> = this.initDBStorageAsync();\n return initObs.pipe(\n switchMap(() => fetchFromAPI())\n );\n }\n\n return this.localStorageManagerService.store$(this.databaseOptions!.table).pipe(\n take(1),\n switchMap((storeData: any) => {\n\n const expires = storeData?.expires || 0;\n const hasExpired = expires > 0 && this.utils.hasExpired(expires);\n\n if (hasExpired) {\n return this.dbManagerService.clearTable(this.databaseOptions!.table).pipe(\n switchMap(() => fetchFromAPI()),\n tap(() => {\n this.localStorageManagerService.updateStore({\n name: this.databaseOptions!.table,\n data: { ...this.databaseOptions, ...{ expires: this.utils.expires(this.databaseOptions!.expiresIn)} }\n })\n })\n );\n }\n\n return this.dbManagerService.getTableRecords(this.databaseOptions!.table).pipe(\n switchMap((dbData: any) => {\n\n if (Array.isArray(dbData) && dbData.length > 0) {\n this.setData$(dbData);\n return of(dbData);\n }\n\n return fetchFromAPI();\n\n })\n );\n })\n );\n\n })\n );\n })\n );\n\n }\n\n return fetchFromAPI();\n\n })\n )\n )\n\n private initDBStorageAsync() {\n\n if (this.dataType !== DataType.ARRAY) {\n console.warn('Database storage requires dataType to be ARRAY');\n return of(null);\n }\n\n if (!this.apiOptions.adapter) {\n console.warn('Database storage requires an adapter to define the data shape');\n return of(null);\n }\n\n if (!this.databaseOptions?.table) {\n console.warn('Database storage requires a table name');\n return of(null);\n }\n\n const sampleData = this.apiOptions.adapter?.({}) || {};\n const schemaKeys = Object.keys(sampleData).filter(key => sampleData[key] !== undefined);\n\n let schema = '++id';\n\n if (schemaKeys.length > 0) {\n const otherKeys = schemaKeys.filter(k => k !== 'id');\n if (otherKeys.length > 0) {\n schema += ', ' + otherKeys.join(', ');\n }\n }\n\n const tableDef = TableSchemaDef.adapt({\n table: this.databaseOptions?.table,\n schema: schema\n });\n\n return this.dbManagerService.createDatabaseTable(tableDef);\n\n }\n\n // FETCH RECORD\n readonly fetchRecord = (options: RequestOptions, method: string) =>\n this.effect<any>(() =>\n of(RequestOptions.adapt(options)).pipe(\n tap(() => console.log('🔄 fetchRecord effect triggered with path:', options?.path, 'method:', method)),\n switchMap((options) => {\n\n this.streamedResponse = []\n\n // Temporarily update apiOptions.path with the path from the WebSocket message\n // This ensures the request goes to the correct endpoint\n const originalPath = this.apiOptions.path;\n if (options?.path && Array.isArray(options.path)) {\n this.apiOptions.path = options.path;\n console.log('🔧 Temporarily set apiOptions.path to:', options.path);\n }\n\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n console.log('🌐 Making GET request to path:', this.apiOptions.path)\n return this.httpManagerService.getRequest(requestOptions)\n .pipe(\n tap((data: any) => {\n console.log('📦 fetchRecord received data:', data)\n\n // Restore original path after request completes\n this.apiOptions.path = originalPath;\n console.log('🔧 Restored apiOptions.path to:', originalPath);\n\n data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data\n\n const id = (options as any).path?.length ? options.path[options.path.length -1] : null\n\n if(method === 'DELETE') {\n console.log('🗑️ Deleting record with id:', id)\n this.deleteData$({ id } as T & { id: number })\n }\n if(method === 'UPDATE') {\n console.log('✏️ Updating record:', data)\n this.updateData$(data)\n }\n if(method === 'CREATE') {\n console.log('➕ Adding record:', data)\n this.addData$(data)\n }\n\n }),\n concatMap((data: any) => {\n if (this.hasDatabase && this.databaseOptions?.table) {\n const id = (options as any).path?.length ? options.path[options.path.length -1] : null\n\n if(method === 'DELETE' && id) return this.dbManagerService.deleteTableRecord(this.databaseOptions.table, id)\n if(method === 'UPDATE' && data) return this.dbManagerService.updateTableRecord(this.databaseOptions.table, data)\n if(method === 'CREATE' && data) {\n // Validate that data has a valid id before saving to IndexedDB\n if (data && (data.id !== undefined && data.id !== null && data.id !== '')) {\n console.log('💾 Saving to IndexedDB:', { table: this.databaseOptions.table, id: data.id, data });\n return this.dbManagerService.createTableRecord(this.databaseOptions.table, data);\n } else {\n console.warn('⚠️ Skipping IndexedDB save: data.id is invalid', data);\n }\n }\n }\n return of(data)\n })\n )\n\n })\n )\n )\n\n // CREATE RECORD\n readonly createRecord = (data: any|null, options?: RequestOptions) =>\n this.effect<any>(() =>\n of(data).pipe(\n switchMap((data: any) => {\n\n this.streamedResponse = []\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.postRequest(data, requestOptions, options?.path)\n .pipe(\n tap((data: any) => {\n data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data\n this.addData$(data)\n // Always call wsCommunication - it will queue if not connected\n this.wsCommunication('CREATE', [...options?.path || [], data.id])\n }),\n concatMap((data: any) => {\n if (this.hasDatabase && this.databaseOptions?.table && data?.id) {\n return this.dbManagerService.createTableRecord(this.databaseOptions.table, data);\n }\n return of(data);\n })\n )\n\n })\n )\n )\n\n // UPDATE RECORD\n readonly updateRecord = (data: any|null, options?: RequestOptions) =>\n this.effect<any>(() =>\n of(data).pipe(\n concatMap((data: any) => {\n\n this.streamedResponse = []\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.putRequest(data, requestOptions, options?.path)\n .pipe(\n tap((data: any) => {\n data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data\n this.updateData$(data)\n // Always call wsCommunication - it will queue if not connected\n this.wsCommunication('UPDATE', [...options?.path || []])\n }),\n concatMap((data: any) => {\n if (this.hasDatabase && this.databaseOptions?.table && data?.id) {\n return this.dbManagerService.updateTableRecord(this.databaseOptions.table, data);\n }\n return of(data);\n })\n )\n\n })\n )\n )\n\n // DELETE RECORD\n readonly deleteRecord = (options?: RequestOptions) =>\n this.effect<any>(() =>\n of(options).pipe(\n concatMap((data: any) => {\n\n this.streamedResponse = []\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.deleteRequest(requestOptions, options?.path)\n .pipe(\n tap((data: any) => {\n data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data\n this.deleteData$(data)\n // Always call wsCommunication - it will queue if not connected\n this.wsCommunication('DELETE', [...options?.path || []])\n }),\n concatMap((data: any) => {\n if (this.hasDatabase && this.databaseOptions?.table && data?.id) {\n return this.dbManagerService.deleteTableRecord(this.databaseOptions.table, data.id);\n }\n return of(data);\n })\n )\n\n })\n )\n )\n\n // --------------------------------------------------------------------------------------------------\n // FETCH STREAM\n readonly createStream = (data: any|null, options?: RequestOptions) =>\n this.effect<any>(() =>\n of(data).pipe(\n tap(() => this.httpManagerService.isPending.next(true)),\n switchMap((data: any) => {\n\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.postRequest(data, requestOptions, options?.path)\n .pipe(\n tap((res: any) => {\n if(res.length > 0) this.setData$(res)\n this.streamedResponse = res\n }),\n scan((acc, res: any) => {\n\n const previous = acc.current\n const current = res\n return { previous, current };\n\n }, { previous: null, current: null }),\n tap(({ previous, current }) => {\n\n if(previous && JSON.stringify(previous) === JSON.stringify(current)) {\n this.httpManagerService.isPending.next(false)\n this.setData$([])\n } else {\n this.httpManagerService.isPending.next(true)\n }\n\n })\n )\n\n })\n )\n\n )\n\n readonly fetchStream = (options?: RequestOptions) =>\n this.effect<any>(() =>\n of(options).pipe(\n tap(() => {\n console.log('[DEBUG] fetchStream called')\n this.httpManagerService.isPending.next(true)\n }),\n switchMap((options: any) => {\n\n const requestOptions = this.updateRequestOptions(options?.headers)\n requestOptions.stream = true\n\n console.log('[DEBUG] Making streaming request:', requestOptions)\n\n return this.httpManagerService.getRequest(requestOptions, options?.path)\n .pipe(\n tap((res: any) => {\n console.log('[DEBUG] Streaming response received:', res)\n\n // Always update state with streaming data\n if (res && res.length > 0) {\n console.log('[DEBUG] Updating state with streaming data:', res)\n this.setData$(res)\n this.streamedResponse = res\n } else {\n console.log('[DEBUG] No streaming data or empty array:', res)\n }\n }),\n map((res: any) => {\n console.log('[DEBUG] Returning data to subscribers:', res)\n return res // Return the data so subscribers can receive it\n }),\n catchError((error) => {\n console.error('[DEBUG] Streaming error:', error)\n this.httpManagerService.isPending.next(false)\n return of([])\n })\n )\n\n }),\n )\n )\n\n // WEBSOCKET COMMUNICATION (STATE MANAGER)\n private wsCommunication(method: string, path?: string|number[]) {\n if (!this.apiOptions.ws) {\n console.warn('wsCommunication called but no WebSocket options configured');\n return;\n }\n\n // If connected, send immediately (check singleton WebSocketManagerService)\n if (WebSocketManagerService.isConnected()) {\n this.sendWsCommunication(method, path);\n } else {\n // Queue the message to be sent when connection is established\n console.log(`⏳ Queuing WS message (not connected): ${method} ${path ? JSON.stringify(path) : ''}`);\n HTTPManagerStateService.wsCommunicationQueue.push({ method, path });\n }\n }\n\n /**\n * Actually send the WebSocket message (called when connected or from queue)\n */\n private sendWsCommunication(method: string, path?: string|number[]) {\n if (this.apiOptions.ws) {\n const wsServer = this.apiOptions.ws.id;\n\n // Guard: Don't send if channel is empty\n if (!wsServer || wsServer === '') {\n console.error('❌ Cannot send WS message: Channel ID is empty!');\n return;\n }\n\n // DEBUG: Log what we're sending\n console.log('🔍 [DEBUG] sendWsCommunication called:', {\n wsServer,\n wsServerType: typeof wsServer,\n wsServerEmpty: wsServer === '' || wsServer === null || wsServer === undefined,\n method,\n path,\n user: this.apiOptions.ws.user,\n fullPayload: { method, path, user: this.apiOptions.ws.user }\n });\n\n this.httpManagerService.sendMessageInChannel(wsServer, { method, path, user: this.apiOptions.ws.user });\n } else {\n console.error('❌ [DEBUG] sendWsCommunication: apiOptions.ws is undefined!');\n }\n }\n\n /**\n * Send a message to channel(s)\n * @param message - The message content\n * @param channels - Optional array of channel names (passed as-is, caller should include prefix)\n * Use 'allChannels' to broadcast to all\n */\n wsMessaging(message: ChannelMessage, channels?: string[]) {\n\n const user = this.user.value\n const messageInfo = ChannelMessage.adapt({ ...message, fromUser: user })\n\n console.log('📤 wsMessaging called with channels:', channels);\n\n if (WebSocketManagerService.isConnected() && this.apiOptions.ws) {\n\n // If specific channels provided, send to each channel\n // Channels are passed as-is - caller is responsible for including the correct prefix\n if (channels && channels.length > 0) {\n console.log(`📤 Sending to ${channels.length} channel(s):`, channels);\n\n // Send single message with all channels (more efficient)\n const user = this.user.value;\n const messageData = {\n sessionId: user,\n content: messageInfo\n };\n\n this.httpManagerService.sendChannelMessageToChannels(channels, messageData);\n } else {\n // Fallback to the primary WS channel (already prefixed with SYS-)\n const wsChannel = this.apiOptions.ws.id;\n console.log(`📤 Sending to state channel:`, wsChannel);\n this.httpManagerService.sendChannelMessage(wsChannel, messageInfo);\n }\n\n }\n\n }\n\n /**\n * Subscribe to a messaging channel\n * @param channel - Base channel name (MES- prefix added automatically)\n */\n subscribeToMessageChannel(channel: string) {\n if (WebSocketManagerService.isConnected()) {\n const prefixedChannel = this.prefixChannel(channel, ChannelType.MESSAGE);\n this.httpManagerService.subscribeToChannel(prefixedChannel);\n console.log(`💬 Subscribed to message channel: ${prefixedChannel}`);\n } else {\n console.warn('Cannot subscribe to message channel: WebSocket not connected.');\n }\n }\n\n /**\n * Unsubscribe from a messaging channel\n * @param channel - Base channel name (MES- prefix added automatically)\n */\n unsubscribeFromMessageChannel(channel: string) {\n if (WebSocketManagerService.isConnected()) {\n const prefixedChannel = this.prefixChannel(channel, ChannelType.MESSAGE);\n this.httpManagerService.unsubscribeFromChannel(prefixedChannel);\n console.log(`💬 Unsubscribed from message channel: ${prefixedChannel}`);\n } else {\n console.warn('Cannot unsubscribe from message channel: WebSocket not connected.');\n }\n }\n\n // --------------------------------------------------------------------------------------------------\n // CHANNEL MANAGEMENT (Raw channels - no automatic prefix)\n\n /**\n * Subscribe to a single channel (no automatic prefix)\n * Use subscribeToMessageChannel() for MES- prefixed channels\n */\n subscribeToChannel(channel: string) {\n if (WebSocketManagerService.isConnected()) {\n // Get current user data to send with subscription\n const currentUser = this.user.value;\n console.log('👤 Subscribing with user:', currentUser)\n this.httpManagerService.subscribeToChannel(channel, currentUser);\n } else {\n console.warn('Cannot subscribe: WebSocket not connected.');\n }\n }\n\n /**\n * Subscribe to multiple channels at once\n */\n subscribeToChannels(channels: string[]) {\n if (WebSocketManagerService.isConnected()) {\n // Get current user data to send with subscription\n const currentUser = this.user.value;\n console.log('👤 Subscribing to', channels.length, 'channels with user:', currentUser)\n this.httpManagerService.subscribeToChannels(channels, currentUser);\n } else {\n console.warn('Cannot subscribe: WebSocket not connected.');\n }\n }\n\n /**\n * Unsubscribe from a channel\n */\n unsubscribeFromChannel(channel: string) {\n if (WebSocketManagerService.isConnected()) {\n this.httpManagerService.unsubscribeFromChannel(channel);\n } else {\n console.warn('Cannot unsubscribe: WebSocket not connected.');\n }\n }\n\n /**\n * Get observable of currently subscribed channels\n */\n get subscribedChannels$(): Observable<Set<string>> {\n return this.httpManagerService.subscribedChannels$;\n }\n\n /**\n * Get current subscribed channels synchronously\n */\n getSubscribedChannels(): Set<string> {\n return this.httpManagerService.getSubscribedChannels();\n }\n\n /**\n * Create a new channel on the server\n */\n createChannel(channel: string) {\n if (WebSocketManagerService.isConnected()) {\n this.httpManagerService.createChannel(channel);\n } else {\n console.warn('Cannot create channel: WebSocket not connected.');\n }\n }\n\n /**\n * Delete a channel from the server\n */\n deleteChannel(channel: string) {\n if (WebSocketManagerService.isConnected()) {\n this.httpManagerService.deleteChannel(channel);\n } else {\n console.warn('Cannot delete channel: WebSocket not connected.');\n }\n }\n\n /**\n * Request list of all channels from server\n */\n getAllChannels() {\n if (WebSocketManagerService.isConnected()) {\n this.httpManagerService.getAllChannels();\n } else {\n console.warn('Cannot get channels: WebSocket not connected.');\n }\n }\n\n /**\n * Get users in a specific channel\n */\n getUsersInChannel(channel: string) {\n if (WebSocketManagerService.isConnected()) {\n this.httpManagerService.getUsersInChannel(channel);\n } else {\n console.warn('Cannot get users: WebSocket not connected.');\n }\n }\n\n // --------------------------------------------------------------------------------------------------\n // NOTIFICATION CHANNELS (MES- prefix - managed automatically)\n\n /**\n * Create a notification channel on the server\n * @param channel - Base channel name (MES- prefix added automatically)\n */\n createNotificationChannel(channel: string) {\n if (WebSocketManagerService.isConnected()) {\n const prefixedChannel = this.prefixChannel(channel, ChannelType.NOTIFICATION);\n this.httpManagerService.createNotificationChannel(prefixedChannel);\n console.log(`📢 Creating notification channel: ${prefixedChannel}`);\n } else {\n console.warn('Cannot create notification channel: WebSocket not connected.');\n }\n }\n\n /**\n * Request list of all notification channels from server (in-memory)\n */\n getNotificationChannels() {\n if (WebSocketManagerService.isConnected()) {\n this.httpManagerService.getNotificationChannels();\n } else {\n console.warn('Cannot get notification channels: WebSocket not connected.');\n }\n }\n\n /**\n * Request list of today's notification channels from database\n * Returns unique channels that have notifications posted today\n */\n getTodaysNotificationChannels() {\n if (WebSocketManagerService.isConnected()) {\n this.httpManagerService.getTodaysNotificationChannels();\n } else {\n console.warn('Cannot get today\\'s notification channels: WebSocket not connected.');\n }\n }\n\n /**\n * Subscribe to a notification channel with optional date filters\n * @param channel - Base channel name (MES- prefix added automatically)\n */\n subscribeToNotificationChannel(channel: string, options?: { startEpoch?: number; endEpoch?: number }, user?: any) {\n if (WebSocketManagerService.isConnected()) {\n const prefixedChannel = this.prefixChannel(channel, ChannelType.NOTIFICATION);\n this.httpManagerService.subscribeToNotificationChannel(prefixedChannel, options, user);\n console.log(`📢 Subscribing to notification channel: ${prefixedChannel}`);\n } else {\n console.warn('Cannot subscribe to notification channel: WebSocket not connected.');\n }\n }\n\n /**\n * Unsubscribe from a notification channel\n * @param channel - Base channel name (MES- prefix added automatically)\n */\n unsubscribeFromNotificationChannel(channel: string) {\n if (WebSocketManagerService.isConnected()) {\n const prefixedChannel = this.prefixChannel(channel, ChannelType.NOTIFICATION);\n this.httpManagerService.unsubscribeFromNotificationChannel(prefixedChannel);\n console.log(`📢 Unsubscribing from notification channel: ${prefixedChannel}`);\n } else {\n console.warn('Cannot unsubscribe from notification channel: WebSocket not connected.');\n }\n }\n\n /**\n * Send a notification to a channel\n * @param channel - Base channel name (MES- prefix added automatically)\n */\n sendNotification(channel: string, content: any) {\n if (WebSocketManagerService.isConnected()) {\n const prefixedChannel = this.prefixChannel(channel, ChannelType.NOTIFICATION);\n this.httpManagerService.sendNotification(prefixedChannel, content);\n console.log(`📢 Sending notification to channel: ${prefixedChannel}`);\n } else {\n console.warn('Cannot send notification: WebSocket not connected.');\n }\n }\n\n // --------------------------------------------------------------------------------------------------\n // MISC\n\n /**\n * Clear/flush all records from the database table\n * Does not clear localStorage metadata (expires info)\n * Does not re-fetch from API - leaves state empty for manual refresh\n */\n clearDatabase() {\n\n if (!this.hasDatabase || !this.databaseOptions?.table) return;\n\n const tableName = this.databaseOptions.table;\n\n this.dbManagerService.clearTable(tableName).subscribe({\n next: () => {\n if (this.dataType === DataType.ARRAY) {\n this.setData$([]);\n } else {\n this.setData$({});\n }\n },\n error: (err) => {\n console.error(`❌ Error clearing table ${tableName}:`, err);\n }\n });\n }\n\n private isEmpty(obj: any) {\n return Object.keys(obj).length === 0\n }\n\n private updateRequestOptions(headers?: any): ApiRequest {\n\n const options = ApiRequest.adapt({ ...this.apiOptions })\n\n options.headers = (headers)\n ? { ...options.headers, ...headers }\n : { ...options.headers }\n\n return options\n }\n\n}\n","import { SettingOptions } from \"../../local-storage-manager-service\";\n\nexport interface StateStorageOptionsInterface {\n store?: string;\n options?: SettingOptions;\n model?: (state: any) => any;\n}\n\nexport class StateStorageOptions implements StateStorageOptionsInterface {\n\n constructor(\n public store?: string,\n public options?: SettingOptions,\n public model?: (state: any) => any\n ) {}\n\n static adapt(item?: any): StateStorageOptions {\n return new StateStorageOptions(\n item?.store ?? 'temp',\n item?.options ? SettingOptions.adapt(item.options) : SettingOptions.adapt(),\n item?.model\n );\n }\n}\n","import { LocalStorageManagerService } from '../local-storage-manager-service/local-storage-manager.service';\nimport { inject, Injectable } from '@angular/core';\nimport { ComponentStore } from '@ngrx/component-store';\nimport { StateStorageOptions } from './models/state-storage-options.model';\nimport { Subscription, take } from 'rxjs';\n\nexport interface StateStoreManagerData<T> {}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StoreStateManagerService<T extends object = StateStoreManagerData<any>> extends ComponentStore<T> {\n\n localStorageManagerService = inject(LocalStorageManagerService)\n\n subscriptions = new Subscription\n settings: any = null\n\n private isRestoring = false\n\n constructor(\n private options: StateStorageOptions = StateStorageOptions.adapt()\n ) {\n super(StoreStateManagerService.init(options))\n this.init(options)\n }\n\n private static init(options: StateStorageOptions): any {\n\n const model = options?.model\n return (model) ? (model as () => any)() : {}\n\n }\n\n init(options?: StateStorageOptions) {\n\n this.settings = options\n\n this.localStorageManagerService.createStore({\n name: this.settings?.store,\n data: this.settings?.model(),\n options: this.settings?.options,\n })\n\n this.localStorageManagerService.store$(this.settings?.store)\n .subscribe(data => this.setState(data))\n\n }\n\n restoreState(): Subscription {\n\n return this.localStorageManagerService.store$(this.settings?.store)\n .pipe(take(1))\n .subscribe(data => {\n this.updateData(data)\n })\n\n }\n\n updateState(state: any) {\n if(this.isRestoring) return\n this.localStorageManagerService.updateStore({\n name: this.settings?.store,\n data: state\n })\n\n }\n\n // Selectors\n readonly data$ = this.select((state: any) => {\n const model = this.options.model;\n return (typeof model === 'function' && !model.prototype) ? model(state) : state\n });\n\n // Updaters\n readonly updateData = this.updater((state, data: any) => {\n\n const key = Object.keys(data)[0]\n const hasKey = Object.keys(state).includes(key)\n\n if (!hasKey) return state\n const newState = { ...state, [key]: data[key] }\n this.updateState(newState)\n return { ...state, ...newState }\n\n })\n\n}\n","import { Injectable, inject, WritableSignal, signal, computed, effect } from '@angular/core';\n\nimport { LocalStorageSignalsManagerService } from '../local-storage-manager-service/local-storage-signals-manager.service';\nimport { StateStorageOptions } from './models/state-storage-options.model';\nimport { SettingOptions } from '../local-storage-manager-service';\n\nexport interface StateStoreManagerData<T> {}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StoreStateManagerSignalsService<T extends object = StateStoreManagerData<any>> {\n\n private localStorageManagerService = inject(LocalStorageSignalsManagerService);\n private state = signal<T | null>(null);\n private isRestoring = false;\n private settings: StateStorageOptions | null = null;\n\n // Public readonly signals for consumers\n readonly data = this.state.asReadonly();\n\n // Computed signal for transformed data\n readonly transformedData = computed(() => {\n const s = this.state();\n if (!s || !this.settings?.model) return s;\n return this.settings.model(s);\n });\n\n constructor() {\n }\n\n init(options: StateStorageOptions) {\n this.settings = options;\n const storeName = options.store ?? 'temp';\n\n // Create store in localStorage\n this.localStorageManagerService.createStore({\n name: storeName,\n data: options.model ? options.model({}) : {},\n options: options.options ?? SettingOptions.adapt(),\n });\n\n // Set initial state\n const initialState = (options.model ? options.model({}) : {}) as T;\n this.state.set(initialState);\n\n // Auto-sync when localStorage data changes\n effect(() => {\n const storeData = this.localStorageManagerService.store(storeName)();\n if (storeData && !this.isRestoring) {\n this.state.set(storeData as T);\n }\n });\n }\n\n restoreState() {\n if (!this.settings) return;\n const storeName = this.settings.store ?? 'temp';\n const storeData = this.localStorageManagerService.store(storeName)();\n if (storeData) {\n this.updateData(storeData as Partial<T>);\n }\n }\n\n updateState(state: Partial<T>) {\n if (this.isRestoring || !this.settings) return;\n const storeName = this.settings.store ?? 'temp';\n\n this.state.update(current => ({\n ...current!,\n ...state\n } as T));\n\n // Auto-persist to localStorage\n this.localStorageManagerService.updateStore({\n name: storeName,\n data: this.state()\n });\n }\n\n updateData(data: Partial<T>) {\n const key = Object.keys(data)[0];\n const currentState = this.state();\n\n if (!currentState || !key) {\n return;\n }\n\n const newState = { ...currentState, [key]: data[key as keyof T] } as T;\n this.state.set(newState);\n this.updateState(newState);\n }\n\n resetState() {\n if (!this.settings) return;\n const storeName = this.settings.store ?? 'temp';\n const initialState = (this.settings.model ? this.settings.model({}) : {}) as T;\n this.state.set(initialState);\n this.localStorageManagerService.updateStore({\n name: storeName,\n data: initialState\n });\n }\n}\n","\n// export * from \"./database-manager-services/index\";\nexport * from \"./local-storage-manager-service/index\";\n\nexport * from \"./request-manager-services/index\";\nexport * from \"./request-manager-state-service/index\";\n\n// Explicitly re-export to avoid conflicts\nexport { WebSocketMessageService } from \"./ws-manager-service/index\";\nexport { StateMessage, StateMessageInterface } from \"./ws-manager-service/index\";\nexport { PublicMessage, PublicMessageInterface } from \"./ws-manager-service/index\";\nexport { NotificationMessage, NotificationMessageInterface } from \"./ws-manager-service/index\";\n// ChannelType is already exported from request-manager-state-service\n\nexport * from \"./store-state-manager-service/index\";\nexport * from \"./database-manager-service/index\";\n\nexport * from \"./utils/index\";\n","export interface ErrorDisplaySettingsInterface {\n displayTime: number\n position: string\n}\n\nexport class ErrorDisplaySettings implements ErrorDisplaySettingsInterface {\n\n constructor(\n public displayTime = 3 * 1000,\n public position = 'top'\n ) {}\n\n static adapt(item?: any): ErrorDisplaySettings {\n\n return new ErrorDisplaySettings(\n (item?.displayTime) ? item.displayTime * 1000 : 3 * 1000,\n item?.position,\n )\n\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class WithCredentialsInterceptor implements HttpInterceptor {\n\n intercept(req: HttpRequest<any>, next: HttpHandler):\n Observable<HttpEvent<any>> {\n\n req = req.clone({ withCredentials: true })\n\n return next.handle(req);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';\nimport { Observable, Subscription } from 'rxjs';\nimport { LangChangeEvent, TranslateService } from '@ngx-translate/core';\n\n@Injectable()\nexport class RequestHeadersInterceptor implements HttpInterceptor {\n\n subscriptions = new Subscription()\n language = 'en-CA'\n\n get currentDate() {\n\n const date = new Date()\n\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const day = String(date.getDate()).padStart(2, '0')\n\n return `${year}-${month}-${day}`\n\n }\n\n constructor(\n private translate: TranslateService\n ) {\n this.subscriptions.add(\n this.translate.onLangChange\n .subscribe((params: LangChangeEvent) => {\n this.language = `${params.lang}-CA`\n })\n )\n }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n request = request.clone({\n setHeaders: {\n 'Content-Type': 'application/json',\n 'Accept-Language': this.language || 'en-CA',\n 'Current-Date': this.currentDate\n }\n })\n\n return next.handle(request)\n\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe()\n }\n}\n\n","import { inject, Injectable } from '@angular/core'\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpErrorResponse } from '@angular/common/http'\nimport { Observable, catchError, throwError } from 'rxjs'\n\nimport { ToastMessageDisplayService, ToastDisplay, ToastColors } from 'toast-message-display'\n\n@Injectable()\nexport class RequestErrorInterceptor implements HttpInterceptor {\n\n toastMessage = inject(ToastMessageDisplayService)\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n return next.handle(req).pipe(\n\n catchError((error: HttpErrorResponse) => {\n\n const displayError = ToastDisplay.adapt({\n message: 'This is a toast message. This is an Error!!',\n action: 'OK',\n color: ToastColors.SUCCESS,\n icon: 'info',\n duration: 5 * 1000, //5 seconds\n })\n\n if (error.status >= 400 && error.status < 500) {\n\n displayError.color = ToastColors.WARN\n displayError.message = error.error || `${error.status}: ${error.statusText}`\n\n console.error('Client Error:', {\n status: error.status,\n message: error.message,\n error: error.error,\n text: error.statusText,\n })\n\n this.toastMessage.toastMessage(displayError)\n\n } else if (error.status >= 500) {\n\n displayError.color = ToastColors.ERROR\n displayError.message = error.error || `${error.status}: ${error.statusText}`\n\n console.error('Server Error:', {\n status: error.status,\n message: error.message,\n error: error.error,\n text: error.statusText,\n })\n\n this.toastMessage.toastMessage(displayError)\n\n }\n\n return throwError(() => error)\n\n })\n\n )\n }\n\n}\n\n\n","import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\nimport { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\nexport const PROXY_CONFIG = new InjectionToken<Record<string, any>>('PROXY_CONFIG');\n\n@Injectable()\nexport class ProxyDebuggerInterceptor implements HttpInterceptor {\n\n constructor(@Optional() @Inject(PROXY_CONFIG) private proxyConfig: Record<string, any>) {}\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n if (!this.proxyConfig) {\n return next.handle(req);\n }\n\n const headers = req.headers.keys().reduce((acc, key) => {\n acc[key] = req.headers.get(key) || '';\n return acc;\n }, {} as Record<string, string>);\n\n for (const proxyPath in this.proxyConfig) {\n if (this.proxyConfig.hasOwnProperty(proxyPath)) {\n const proxyDetails = this.proxyConfig[proxyPath];\n const regex = new RegExp('^' + proxyPath.replace('/', '').replace('*', '(.*)'));\n\n if (regex.test(req.url)) {\n const target = proxyDetails.target;\n const endpoint = req.url.replace(regex, '$1');\n const actualPath = target + '/' + endpoint;\n\n console.log('Request Proxied:', {\n requestUrl: req.url,\n requestPayload: req.body,\n headers: headers,\n proxyPath: proxyPath,\n actualPath: actualPath,\n });\n }\n }\n }\n\n return next.handle(req);\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { ProgressSpinnerMode } from '@angular/material/progress-spinner';\nimport { Subscription, timer } from 'rxjs';\n\n@Component({\n selector: 'app-download-file',\n templateUrl: './download-file.component.html',\n styleUrls: ['./download-file.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class DownloadFileComponent implements OnInit {\n\n private subscriptions = new Subscription();\n\n @Input() event?: Function;\n @Input() displayError = 3; // seconds\n @Input() diameter = 32;\n @Input() mode: ProgressSpinnerMode = 'determinate';\n @Input() isPending = false;\n\n @Input() active = false;\n @Input() disabled = false;\n\n @Output() error = new EventEmitter<void>();\n\n private _progress = 0;\n @Input() set progress(value: any) {\n this._progress = value ?? 0;\n }\n\n get progress() {\n return this._progress;\n }\n\n private _hasError = false;\n private errorTimerActive = false;\n\n @Input() set hasError(value: boolean | any) {\n\n this._hasError = !!value;\n\n if (this._hasError && !this.errorTimerActive) {\n this.errorTimerActive = true;\n this.active = false;\n this.error.emit()\n this.subscriptions.add(\n timer(this.displayError * 1000)\n .subscribe((err) => {\n this._hasError = false;\n this.errorTimerActive = false;\n })\n );\n }\n\n }\n\n get hasError() {\n return this._hasError;\n }\n\n ngOnInit() {}\n\n onAction() {\n this.isPending = false\n if (this.event) this.event()\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe()\n }\n}\n","@if (!isPending) {\n @if (hasError) {\n <div class=\"width center-txt\" style=\"margin-bottom: 4px;\">\n <mat-icon color=\"warn\" class=\"warn-icon\">warning</mat-icon>\n </div>\n } @else {\n @if (active) {\n <div class=\"container-obj\">\n <div class=\"centered-obj-div\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"44\"\n ></mat-progress-spinner>\n </div>\n </div>\n } @else {\n <button data-tracking=\"export-btn\" mat-icon-button (click)=\"onAction()\" class=\"icon-button\" [disabled]=\"disabled\">\n <mat-icon class=\"custom-icon\">file_download</mat-icon>\n </button>\n }\n }\n} @else {\n @if ((progress > 0 && progress < 100)) {\n <div\n class=\"spinner-container\"\n >\n <div class=\"spinner-background\">\n {{progress}}%\n </div>\n <mat-progress-spinner\n color=\"primary\"\n [mode]=\"mode\"\n [value]=\"progress\"\n [diameter]=\"44\"\n ></mat-progress-spinner>\n </div>\n } @else {\n <div class=\"container-obj\">\n <div class=\"centered-obj-div\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"44\"\n ></mat-progress-spinner>\n </div>\n </div>\n }\n}\n\n\n\n\n","export interface DownloadLabelsInterface {\n error: string;\n action: string;\n icon: string;\n}\n\nexport class DownloadLabels implements DownloadLabelsInterface {\n constructor(\n public error = '',\n public action = '',\n public icon = 'error',\n ) {}\n\n static adapt(item?: any): DownloadLabelsInterface {\n return new DownloadLabels(\n item?.error,\n item?.action,\n item?.icon,\n )\n\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { catchError, distinctUntilChanged, finalize } from 'rxjs/operators';\n\nimport { ToastColors, ToastDisplay } from 'toast-message';\n\nimport { DownloadLabels } from './models/download-labels-model';\nimport { HTTPManagerService } from '../../../services/request-manager-services';\nimport { ApiRequest } from '../../../services';\nimport { Subscription, throwError } from 'rxjs';\n\n@Component({\n selector: 'app-file-downloader',\n templateUrl: './file-downloader.component.html',\n styleUrls: ['./file-downloader.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class FileDownloaderComponent extends HTTPManagerService<any> implements OnInit {\n\n @Input() delayError = 3\n @Input() apiRequest: ApiRequest = ApiRequest.adapt()\n @Input() displayErrorMessage = false\n\n @Input() saveFileAs?: string\n\n _labels = DownloadLabels.adapt()\n @Input() set labels(value: DownloadLabels) {\n this._labels = (value) ? DownloadLabels.adapt(value) : DownloadLabels.adapt()\n }\n\n active = false\n\n subscription = new Subscription()\n\n get labels() {\n return this._labels\n }\n\n @Output() completed = new EventEmitter<void>()\n @Output() failed = new EventEmitter<string>()\n\n @Input() disabled = false\n\n constructor() {\n super()\n }\n\n ngOnInit() {\n\n }\n\n onDownloadStreaming() {\n\n if (this.active) return;\n this.active = true;\n\n return this.downloadRequest(this.apiRequest, [])\n .pipe(\n distinctUntilChanged(),\n catchError((err) => {\n\n this.onError(err.message)\n this.active = false\n this.failed.emit(err)\n\n return throwError(() => err)\n\n }),\n finalize(() => {\n if (!this.active) return\n this.active = false\n this.completed.emit()\n })\n )\n .subscribe()\n }\n\n\n onError(message: string) {\n\n if(!message || !this.displayErrorMessage) return\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.ERROR,\n icon: 'error',\n });\n\n this.active = false\n\n this.toastMessage.toastMessage(display);\n\n }\n\n OnDestroy() {\n this.subscription.unsubscribe()\n }\n\n}\n","<app-download-file\n [disabled]=\"disabled\"\n [displayError]=\"3\"\n [event]=\"onDownloadStreaming.bind(this)\"\n [isPending]=\"(isPending$ | async) || false\"\n [progress]=\"(progress$ | async)\"\n [hasError]=\"(error$ | async)\"\n (error)=\"onError(labels.error)\"\n [active]=\"active\"\n></app-download-file>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ThemePalette } from '@angular/material/core';\nimport { ProgressSpinnerMode } from '@angular/material/progress-spinner';\n\n@Component({\n selector: 'app-spinner',\n templateUrl: './spinner.component.html',\n styleUrls: ['./spinner.component.scss'],\n standalone: false\n})\nexport class SpinnerComponent implements OnInit {\n\n @Input() color: ThemePalette;\n\n @Input() diameter?: number;\n @Input() display?: string | number;\n @Input() mode?: ProgressSpinnerMode;\n @Input() strokeWidth?: number;\n @Input() value = 0\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","<div class=\"spinner-background\">{{display}}</div>\n<mat-progress-spinner\n [color]=\"color\"\n [diameter]=\"diameter\"\n [mode]=\"mode || 'indeterminate'\"\n [strokeWidth]=\"strokeWidth\"\n [value]=\"value\">\n</mat-progress-spinner>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { DownloadFileComponent } from './download-file/download-file.component';\nimport { FileDownloaderComponent } from './file-downloader.component';\n\nimport { SpinnerComponent } from './spinner/spinner.component';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatButtonModule } from '@angular/material/button';\n\n@NgModule({\n imports: [\n CommonModule,\n MatIconModule,\n MatProgressSpinnerModule,\n MatButtonModule,\n ],\n declarations: [\n SpinnerComponent,\n DownloadFileComponent,\n FileDownloaderComponent,\n ],\n exports: [\n FileDownloaderComponent\n ]\n})\nexport class FileDownloaderModule { }\n","export type DisplayType = 'snackbar' | 'dialog' | 'carousel' | 'banner' | 'inline';\n\nexport interface DisplayConfigInterface {\n type: DisplayType;\n supportsMarkdown?: boolean;\n stackable?: boolean;\n queueBehavior?: 'replace' | 'queue' | 'ignore';\n autoDismiss?: number;\n width?: string;\n height?: string;\n}\n\nexport class DisplayConfig implements DisplayConfigInterface {\n constructor(\n public type: DisplayType = 'snackbar',\n public supportsMarkdown?: boolean,\n public stackable?: boolean,\n public queueBehavior?: 'replace' | 'queue' | 'ignore',\n public autoDismiss?: number,\n public width?: string,\n public height?: string\n ) {}\n\n static adapt(item?: any): DisplayConfig {\n return new DisplayConfig(\n item?.type,\n item?.supportsMarkdown,\n item?.stackable,\n item?.queueBehavior,\n item?.autoDismiss,\n item?.width,\n item?.height\n );\n }\n}\n","import { DisplayConfig } from './display-config.model';\nimport { CommunicationMessage } from './communication-message.model';\n\nexport interface DisplayRuleInterface {\n id: string;\n name?: string;\n match: (message: CommunicationMessage) => boolean;\n display: DisplayConfig;\n}\n\nexport class DisplayRule implements DisplayRuleInterface {\n constructor(\n public id: string = '',\n public name?: string,\n public match: (message: CommunicationMessage) => boolean = () => false,\n public display: DisplayConfig = DisplayConfig.adapt(),\n ) {}\n\n static adapt(item?: any): DisplayRule {\n return new DisplayRule(\n item?.id,\n item?.name,\n item?.match,\n item?.display ? DisplayConfig.adapt(item.display) : DisplayConfig.adapt(),\n );\n }\n}\n\n","export interface SlideInterface {\n title: string;\n message: string;\n image?: string;\n icon?: string;\n}\n\nexport class Slide implements SlideInterface {\n constructor(\n public title: string = '',\n public message: string = '',\n public image?: string,\n public icon?: string\n ) {}\n\n static adapt(item?: any): Slide {\n return new Slide(\n item?.title,\n item?.message,\n item?.image,\n item?.icon\n );\n }\n}\n","export interface ActionInterface {\n label: string;\n action: 'close' | 'navigate' | 'callback' | 'custom';\n target?: string;\n callback?: string;\n primary?: boolean;\n}\n\nexport class Action implements ActionInterface {\n constructor(\n public label: string = '',\n public action: 'close' | 'navigate' | 'callback' | 'custom' = 'close',\n public target?: string,\n public callback?: string,\n public primary?: boolean\n ) {}\n\n static adapt(item?: any): Action {\n return new Action(\n item?.label,\n item?.action,\n item?.target,\n item?.callback,\n item?.primary\n );\n }\n}\n","import { Slide } from './slide.model';\nimport { Action } from './action.model';\nimport { DisplayConfig } from './display-config.model';\n\nexport interface MessageContentInterface {\n displayConfig?: DisplayConfig;\n title?: string;\n message: string;\n slides?: Slide[];\n image?: string;\n images?: string[];\n actions?: Action[];\n messageType?: string;\n icon?: string;\n data?: any;\n}\n\nexport class MessageContent implements MessageContentInterface {\n constructor(\n public displayConfig?: DisplayConfig,\n public title?: string,\n public message: string = '',\n public slides?: Slide[],\n public image?: string,\n public images?: string[],\n public actions?: Action[],\n public messageType?: string,\n public icon?: string,\n public data?: any\n ) {}\n\n static adapt(item?: any): MessageContent {\n return new MessageContent(\n item?.displayConfig ? DisplayConfig.adapt(item.displayConfig) : undefined,\n item?.title,\n item?.message,\n item?.slides ? item.slides.map((slideItem: any) => Slide.adapt(slideItem)) : [],\n item?.image,\n item?.images,\n item?.actions ? item.actions.map((actionItem: any) => Action.adapt(actionItem)) : [],\n item?.messageType,\n item?.icon,\n item?.data\n );\n }\n}\n\nexport interface CommunicationMessageInterface {\n type: string;\n messageId?: number;\n channel?: string;\n sessionId?: { id: string };\n timestamp?: string;\n content: MessageContent;\n}\n\nexport class CommunicationMessage implements CommunicationMessageInterface {\n constructor(\n public type: string = '',\n public messageId?: number,\n public channel?: string,\n public sessionId?: { id: string },\n public timestamp?: string,\n public content: MessageContent = MessageContent.adapt()\n ) {}\n\n static adapt(item?: any): CommunicationMessage {\n return new CommunicationMessage(\n item?.type,\n item?.messageId,\n item?.channel,\n item?.sessionId,\n item?.timestamp,\n item?.content ? MessageContent.adapt(item.content) : MessageContent.adapt()\n );\n }\n}\n","import { DisplayRule } from '../models/display-rule.interface';\n\nexport const defaultDisplayRules: DisplayRule[] = [\n {\n id: 'carousel',\n name: 'Carousel',\n match: (message) => message.content?.displayConfig?.type === 'carousel',\n display: {\n type: 'carousel',\n supportsMarkdown: true,\n stackable: false\n }\n },\n {\n id: 'dialog',\n name: 'Dialog',\n match: (message) => message.content?.displayConfig?.type === 'dialog',\n display: {\n type: 'dialog',\n supportsMarkdown: true,\n stackable: true\n }\n },\n {\n id: 'default',\n name: 'Snackbar',\n match: () => true,\n display: {\n type: 'snackbar',\n supportsMarkdown: false,\n stackable: true,\n autoDismiss: 3000\n }\n }\n];\n","import { Injectable, inject } from '@angular/core';\nimport { ToastMessageDisplayService, ToastColors } from 'toast-message-display';\nimport { IDisplayStrategy } from '../models/display-strategy.interface';\nimport { CommunicationMessage } from '../models/communication-message.model';\nimport { DisplayConfig } from '../models/display-config.model';\n\n@Injectable()\nexport class SnackbarStrategy implements IDisplayStrategy {\n name = 'snackbar';\n\n private toastService = inject(ToastMessageDisplayService);\n\n canHandle(message: CommunicationMessage): boolean {\n return true; // Always can handle (fallback strategy)\n }\n\n display(message: CommunicationMessage, config: DisplayConfig): void {\n const messageText = this.extractMessage(message.content);\n\n this.toastService.toastMessage(\n {\n message: messageText,\n color: ToastColors.INFO,\n icon: 'info',\n action: 'DONE'\n },\n config.autoDismiss ?? 3000\n );\n }\n\n private extractMessage(content: any): string {\n if (!content) return '';\n\n // Try nested content structure (backward compatibility)\n if (content.content?.message) {\n return content.content.message;\n }\n\n // Try direct message\n if (content.message) {\n return content.message;\n }\n\n return '';\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { IDisplayStrategy } from '../models/display-strategy.interface';\nimport { DisplayRule } from '../models/display-rule.interface';\nimport { CommunicationMessage } from '../models/communication-message.model';\nimport { defaultDisplayRules } from '../rules/default-display-rules';\nimport { SnackbarStrategy } from '../strategies/snackbar.strategy';\n\n@Injectable({ providedIn: 'root' })\nexport class MessageDisplayRouterService {\n\n private snackbarStrategy = inject(SnackbarStrategy);\n\n // All available strategies\n private strategies: IDisplayStrategy[] = [\n this.snackbarStrategy\n // DialogStrategy will be added in Phase 2\n // CarouselStrategy will be added in Phase 3\n ];\n\n // Rules are evaluated in order - first match wins\n private rules: DisplayRule[] = defaultDisplayRules;\n\n display(message: CommunicationMessage): void {\n console.log('📨 MessageDisplayRouterService: Processing message:', message);\n\n // Find FIRST matching rule (order matters!)\n const matchingRule = this.rules.find(rule => rule.match(message));\n\n // Get the rule (will be 'default' if nothing else matches)\n const rule = matchingRule || this.rules[this.rules.length - 1];\n\n console.log(`🎯 MessageDisplayRouterService: Matched rule '${rule.id}' (${rule.name})`);\n console.log(` → Display type: ${rule.display.type}`);\n\n // Get strategy for the display type\n const strategy = this.strategies.find(s => s.name === rule.display.type);\n\n if (!strategy) {\n console.warn(`⚠️ MessageDisplayRouterService: No strategy found for type '${rule.display.type}', falling back to snackbar`);\n // Fallback to snackbar if strategy not found\n this.snackbarStrategy.display(message, rule.display);\n return;\n }\n\n // Execute display\n console.log(`🚀 MessageDisplayRouterService: Executing ${strategy.name} strategy`);\n strategy.display(message, rule.display);\n }\n\n registerStrategies(strategies: IDisplayStrategy[]): void {\n strategies.forEach(strategy => {\n if (!this.strategies.find(s => s.name === strategy.name)) {\n this.strategies.push(strategy);\n console.log(`✅ Registered strategy: ${strategy.name}`);\n }\n });\n }\n\n setRules(rules: DisplayRule[]): void {\n this.rules = rules;\n console.log(`📋 MessageDisplayRouterService: Rules updated (${rules.length} rules)`);\n }\n}\n","export interface ClientInfoInterface {\n domain: string\n service: string\n id: number\n name: string\n}\n\nexport class ClientInfo implements ClientInfoInterface {\n\n constructor(\n public domain = '',\n public service = '',\n public id = 0,\n public name = '',\n ) {}\n\n static adapt(item?: any): ClientInfo {\n\n return new ClientInfo(\n item?.domain,\n item?.service,\n item?.id,\n (item?.first_name || item?.last_name) ? `${item?.first_name} ${item?.last_name}` : '',\n )\n\n }\n\n}\n\n\n","export interface ClientInfoMapperInterface {\n id: number\n first_name: string\n last_name: string\n email: string\n}\n\nexport class ClientInfoMapper implements ClientInfoMapperInterface {\n\n constructor(\n public id = 0,\n public first_name = '',\n public last_name = '',\n public email = '',\n ) {}\n\n static adapt(item?: any): ClientInfoMapper {\n\n const first_name = (item?.name) ? item.name.split(' ')[0] : ''\n const last_name = (item?.name) ? item.name.split(' ')[1] : ''\n\n return new ClientInfoMapper(\n item?.id,\n first_name,\n last_name,\n item?.email,\n )\n\n }\n\n}\n\n\n","export interface AIPromptInterface {\n response: string\n}\n\nexport class AIPrompt implements AIPromptInterface {\n\n constructor(\n public response = '',\n ) {}\n\n static adapt(item?: any): AIPrompt {\n\n return new AIPrompt(\n item?.response,\n )\n\n }\n\n}\n","import { Component, Input, OnInit, ViewChild, inject } from '@angular/core'\n\nimport { BehaviorSubject, EMPTY, Observable, throwError } from 'rxjs'\nimport { FormArray, FormBuilder, Validators } from '@angular/forms'\n\nimport { ClientInfo } from './models/sample-client-info'\nimport { ClientInfoMapper } from './models/sample-mapper-client-info'\nimport { AIPrompt } from './models/sample-ai-prompt'\nimport { ApiRequest, HTTPManagerService, StreamType } from '../..'\nimport { catchError, map, tap } from 'rxjs/operators'\n\nimport { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display'\n\n@Component({\n selector: 'app-request-manager-basic-demo',\n templateUrl: './request-manager-basic-demo.component.html',\n styleUrls: ['./request-manager-basic-demo.component.scss'],\n providers: [HTTPManagerService],\n standalone: false\n})\nexport class RequestManagerBasicDemoComponent implements OnInit {\n\n server = 'http://localhost:8080'\n adapter?: Function\n mapper?: Function\n\n displayedColumns: string[] = []\n\n // Dynamic columns based on data structure\n getColumnsFromData(data: any[]): string[] {\n if (!data || data.length === 0) {\n return []\n }\n\n const firstRecord = data[0]\n if (!firstRecord || typeof firstRecord !== 'object') {\n return []\n }\n\n // Extract all keys from the first record, excluding null/undefined\n return Object.keys(firstRecord).filter(key =>\n firstRecord[key] !== null && firstRecord[key] !== undefined\n )\n }\n\n // Update displayed columns when data changes\n updateDisplayedColumns(data: any[]): void {\n this.displayedColumns = this.getColumnsFromData(data)\n console.log('[DEMO] Updated columns:', this.displayedColumns)\n }\n\n // Helper to check if value is an object\n isObject(value: any): boolean {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n }\n\n private fb = inject(FormBuilder)\n private toastMessage = inject(ToastMessageDisplayService)\n\n questionControl = this.fb.control(\"\", [Validators.required])\n\n httpManagerService = inject(HTTPManagerService)\n\n isPending$ = this.httpManagerService.isPending$\n countdown$ = this.httpManagerService.countdown$\n\n GET_error$ = new BehaviorSubject<string>('')\n POST_error$ = new BehaviorSubject<string>('')\n PUT_error$ = new BehaviorSubject<string>('')\n DELETE_error$ = new BehaviorSubject<string>('')\n\n STREAM_error$ = new BehaviorSubject<string>('')\n STREAM_AI_error$ = new BehaviorSubject<string>('')\n\n GET$?: Observable<any>\n POST$?: Observable<any>\n PUT$?: Observable<any>\n DELETE$?: Observable<any>\n\n STREAM$?: Observable<any>\n STREAM_AI$?: Observable<any>\n\n requestParams = {\n GET: ApiRequest.adapt(),\n POST: ApiRequest.adapt(),\n PUT: ApiRequest.adapt(),\n DELETE: ApiRequest.adapt(),\n STREAM: ApiRequest.adapt(),\n }\n\n streamTypes = [\n { id: 'JSON', value: 'json' },\n { id: 'NDJSON', value: 'ndjson' },\n { id: 'AI Streaming', value: 'ai_streaming' },\n { id: 'Event Stream', value: 'event_stream' },\n { id: 'Auto', value: 'auto' },\n ]\n\n streamType = 'Auto'\n\n @ViewChild(\"failedState\", { static: true }) failedState: any\n @ViewChild(\"pollingState\", { static: true }) pollingState: any\n\n downloadRequest = ApiRequest.adapt({\n server: 'assets/images',\n path: ['lego.png'],\n saveAs: 'john.jpg', // Optional\n headers: { 'Authorization': 'Bearer Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6InJ0c0ZULWItN0x1WTdEVlllU05LY0lKN1ZuYyJ9.eyJhdWQiOiI4ODhhMzFjZS01OWQzLTRhMTItYTU5Ni04ZDYyZjY0MWI1MDUiLCJpc3MiOiJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vNmY0MTE5ODItY2YyMy00ZTQ1LTk0NDktNGI2MDdiN2E4OGVjL3YyLjAiLCJpYXQiOjE3NjU4MzQxNDksIm5iZiI6MTc2NTgzNDE0OSwiZXhwIjoxNzY1ODM5NzQ2LCJhY2N0IjowLCJhaW8iOiJBV1FBbS84YUFBQUFVUEZOYUhSZkZ4ZVkwRWthcFBzdWZaNG1QYXV6YVRoODRRZUtQRzkrbEFIVE5XanVwQy9ZSjEwK2IrMktWVlJSSXZRNFpwS2xyWTFGd0xRZmtXOTNLbkRNckxSeEMzWTVOOGlQREZ4b1liZExucW1QL1N1ZE1pRW1Va05tTklSWSIsImF6cCI6Ijg4OGEzMWNlLTU5ZDMtNGExMi1hNTk2LThkNjJmNjQxYjUwNSIsImF6cGFjciI6IjAiLCJncm91cHMiOlsiZWE2ZDk5YjAtNDgyNC00MDU0LTk0MTQtZDNhOTZkZDA3MjRiIl0sIm5hbWUiOiJHVExDIEFwcCBTdXBlciBBZG1pbiIsIm9pZCI6IjI2NzUxY2I2LWNlMDEtNDMzMC05OTc0LWZjMzgxMjQ3YTEzYyIsInByZWZlcnJlZF91c2VybmFtZSI6Imd0bGMwMDNAZ3RsYy5jYSIsInJoIjoiMS5BUzRBZ2hsQmJ5UFBSVTZVU1V0Z2UzcUk3TTR4aW9qVFdSSktwWmFOWXZaQnRRVm1BYTR1QUEuIiwicm9sZXMiOlsiZ3RsYy5hY2wuc3VwZXJhZG1pbiJdLCJzY3AiOiJHVExDX0FwcGxpY2F0aW9uIiwic2lkIjoiMDAzZjVhZDktZmJmNi1jZTkyLTg3MjItMWEzNDExYjMzMDJiIiwic3ViIjoiS0RYQ3drVlhUbTRUUmcwaTkxbXZDZzgtQ29uLXpWbk5FQ2Y5LVg0dkpzUSIsInRpZCI6IjZmNDExOTgyLWNmMjMtNGU0NS05NDQ5LTRiNjA3YjdhODhlYyIsInVwbiI6Imd0bGMwMDNAZ3RsYy5jYSIsInV0aSI6InpBaTJoMmpVUUVHbVY0RTJXMWxqQUEiLCJ2ZXIiOiIyLjAiLCJ3aWRzIjpbImI3OWZiZjRkLTNlZjktNDY4OS04MTQzLTc2YjE5NGU4NTUwOSJdLCJ4bXNfZnRkIjoiUDJraW1ZM0tqc1BTRndxNHlZdmJ0bGhrSUk3d2tXNmFpcW1FQ1BaNEdja0JkWE5sWVhOMExXUnpiWE0ifQ.LzppoggMm27smSAy9SamtPN95vCzdELCAfhtOj5n_T_H6g9xCmNRLS9FaUFQMau6Qvl0lROKl7WDklTswLFkfxbIxCBWtXdL-LTqT5cDURSJAll8vC3zlN3Hg9pAFBUVZFRolt6Z7LvPdI3pvUOQs0yFwVzp9k6cLF8aemKdwKQrMX3XXua1MfBWZcqQ4WiBVNmKh8w6yQB35I4u5WqdFnu33nUGb-kvc18SOpoUfiJnlV-PudaEzFXdU3CjAaMEcuPFv5xLwWJKuhU73dNH4EyQDFMVGtcIHNnieOfiY_nK2_0-5DM6aI40UIRK6Bt-HmMQpnbhLps5y3ep6Z7RNw' } // Optional\n })\n\n // downloadRequest = ApiRequest.adapt({\n // server: 'oidc/ai/file'\n // })\n\n sampleClientData = {\n id: 0,\n name: \"Old School Dates\",\n domain: \"osd.com\",\n service: \"osd\",\n spiffe: \"osd.com/osd\",\n secret: \"SMOPECXP-OS4P-USOG-X2II-3XMD1FQDR3IJX\",\n created: 1693003138,\n modified: 1693003138,\n icon: \"\",\n imageFile: \"\",\n email: \"wavecoders@gmail.com\"\n }\n\n requestForm = this.fb.group({\n path: this.fb.control<string>(\"ai/\"),\n headers: this.fb.array([]),\n adapter: [null],\n mapper: [null],\n retry: this.fb.group({\n times: [3],\n delay: [3],\n }),\n polling: [3],\n })\n\n AIType = 0\n\n sampleAdaptors = [\n { label: \"ClientInfo Basic\", value: ClientInfo.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n sampleMappers = [\n { label: \"Mapper Basic\", value: ClientInfoMapper.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n get retry() {\n return this.requestForm.get('retry')?.value\n }\n\n get headers(): FormArray {\n return this.requestForm.get('headers') as FormArray\n }\n\n get isValid() {\n this.requestForm.markAllAsTouched()\n return this.requestForm.valid\n }\n\n hasId = (arr: any[]) => {\n if (arr.length === 0) return false\n return !isNaN(arr[arr.length - 1])\n }\n\n props = (adapter: any) => {\n return (adapter) ? adapter() : null\n }\n\n // server = `http://sample-endpoint/as/authorization.oauth2`\n\n arrayObjectsToObjects = (arr: any[]) => {\n return Array.isArray(arr) ? arr.reduce((obj, item) => Object.assign(obj, { [item.key]: item.value }), {}) : {}\n }\n\n constructor() { }\n\n ngOnInit() {\n\n // const reqGet2 = ApiRequest.adapt({\n // server,\n // path: ['clients'],\n // headers: { authentication: \"Bearer <KEY>\" },\n // adapter: ClientInfo,\n // dataType: DataType.OBJECT,\n // // concurrent: false,\n // // polling: 3, //seconds\n // })\n\n // const req2 = [1024,1025,1026].map(item => {\n // return this.httpManagerService.getRequest<ClientInfo[]>(reqGet2, [item])\n // .pipe(\n // catchError(error => {\n // return throwError(() => new Error(error.error.message))\n // })\n // )\n // })\n\n // forkJoin(req2)\n // .subscribe(res => console.log(res))\n\n }\n\n onStreamType(type: string) {\n this.streamType = type\n }\n\n addHeader() {\n const header = this.fb.group({\n key: ['', Validators.required],\n value: ['']\n })\n this.headers.push(header)\n }\n\n removeHeader(index: number) {\n this.headers.removeAt(index)\n }\n\n compileRequest() {\n\n const requestParams = this.requestForm.value\n\n requestParams.headers = this.arrayObjectsToObjects(\n requestParams.headers || []\n )\n\n const pathReq = (requestParams.path === \"\") ? [] : (requestParams.path || \"\").split(\"/\")\n\n if (!this.pollingState.checked) requestParams.polling = 0\n\n if (!this.failedState.checked) {\n requestParams.retry = { times: 0,delay: 0 }\n }\n\n const apiOptions = ApiRequest.adapt(requestParams)\n apiOptions.path = []\n apiOptions.server = this.server\n apiOptions.adapter = this.adapter\n apiOptions.mapper = this.mapper\n return { apiOptions: apiOptions, path: pathReq }\n\n }\n\n onGetRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n this.requestParams.GET = reqParams.apiOptions\n\n this.GET$ = EMPTY //Cancels Previous\n this.GET_error$.next('')\n\n this.GET$ = this.httpManagerService.getRequest<ClientInfo[]>({...reqParams.apiOptions}, reqParams.path)\n .pipe(\n // tap((data) => console.log(\"API GET response\", data)),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'GET'))\n })\n )\n\n }\n\n onCreateRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n this.requestParams.POST = reqParams.apiOptions\n\n this.POST$ = EMPTY //Cancels Previous\n this.POST_error$.next('')\n\n console.log(\"POST\", this.sampleClientData)\n console.log(\"POST\", reqParams.apiOptions)\n console.log(\"POST\", reqParams.path)\n\n this.POST$ = this.httpManagerService.postRequest<ClientInfo>(this.sampleClientData, reqParams.apiOptions, reqParams.path)\n .pipe(\n // tap((data) => console.log(\"API POST response\", data)),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'POST'))\n })\n )\n\n }\n\n onUpdateRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n if(!this.hasId(reqParams.path)) {\n console.log(\"Missing ID\")\n return\n }\n\n this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length-1])\n this.requestParams.PUT = reqParams.apiOptions\n\n this.PUT$ = EMPTY //Cancels Previous\n this.PUT_error$.next('')\n\n this.PUT$ = this.httpManagerService.putRequest<any>(this.sampleClientData, reqParams.apiOptions, reqParams.path)\n .pipe(\n // tap((data) => console.log(\"API PUT response\", data)),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'PUT'))\n })\n )\n\n }\n\n onDeleteRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n this.requestParams.DELETE = reqParams.apiOptions\n\n if(!this.hasId(reqParams.path)) {\n console.log(\"Missing ID\")\n return\n }\n\n this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length-1])\n this.requestParams.DELETE = reqParams.apiOptions\n\n this.DELETE$ = EMPTY //Cancels Previous\n this.DELETE_error$.next('')\n\n this.DELETE$ = this.httpManagerService.deleteRequest<ClientInfo>(reqParams.apiOptions, reqParams.path)\n .pipe(\n // tap((data) => console.log(\"API DELETE response\", data)),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'DELETE'))\n })\n )\n\n }\n\n onStreamPostRequest() {\n\n if (!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n let payload = {}\n let apiPath: string[] = reqParams.path\n let apiOptions = reqParams.apiOptions\n let responseMapper: (items: any) => any = (items) => items.response\n\n if (this.AIType === 0) {\n\n // API request\n payload = { prompt: this.questionControl.value }\n\n } else {\n\n // Local Ollama request\n apiOptions.server = \"api\"\n apiPath = [\"generate\"]\n apiOptions.stream = true\n apiOptions.streamType = this.streamType as StreamType\n payload = {\n model: \"phi3:latest\",\n prompt: this.questionControl.value,\n stream: true,\n }\n\n responseMapper = (items) => items.map((word: any) => word.response).flat().join('')\n\n }\n\n this.requestParams.STREAM = apiOptions\n this.STREAM_AI$ = EMPTY\n this.STREAM_AI_error$.next('')\n\n this.STREAM_AI$ = this.httpManagerService.postRequest<any>(payload, apiOptions, apiPath).pipe(\n map(responseMapper),\n tap(() => this.questionControl.reset()),\n catchError(error => throwError(() => this.errorHandling(error, 'STREAM')))\n )\n\n }\n\n\n onStreamRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n reqParams.apiOptions.stream = true\n reqParams.apiOptions.streamType = StreamType.NDJSON\n\n this.requestParams.GET = reqParams.apiOptions\n this.STREAM$ = this.httpManagerService.getRequest<ClientInfo[]>(reqParams.apiOptions, reqParams.path)\n .pipe(\n tap((data) => {\n console.log(\"API STREAM response\", data)\n if (data && data.length > 0) {\n this.updateDisplayedColumns(data)\n }\n }),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'STREAM'))\n })\n )\n\n }\n\n onDownloadCompleted() {\n\n const message = \"Download Completed\"\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.SUCCESS,\n icon: 'sentiment_satisfied_alt',\n })\n\n this.toastMessage.toastMessage(display)\n }\n\n onDownloadFailed(err: string) {\n\n const message = \"Download Failed\"\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.ERROR,\n icon: 'warning',\n })\n\n this.toastMessage.toastMessage(display)\n }\n\n errorHandling(err: any, type: string) {\n if(type === 'GET') this.GET_error$.next(err.message)\n if(type === 'POST') this.POST_error$.next(err.message)\n if(type === 'PUT') this.PUT_error$.next(err.message)\n if(type === 'DELETE') this.DELETE_error$.next(err.message)\n if(type === 'STREAM') this.STREAM_error$.next(err.message)\n }\n\n onSelectAIType(type: number) {\n this.AIType = type\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <h2>\n HTTP Basic Request Manager Setup\n </h2>\n\n <div style=\"margin-bottom: 1rem; margin-top: 2rem;\">\n @if ((isPending$ | async)) {\n <mat-progress-bar mode=\"indeterminate\"\n ></mat-progress-bar>\n }\n @if (pollingState.checked && !(isPending$ | async)) {\n <mat-progress-bar mode=\"determinate\"\n [value]=\"(this.countdown$ | async)\"\n ></mat-progress-bar>\n }\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onGetRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if ((GET_error$ | async); as get_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ get_error }}</mat-error>\n </div>\n }\n\n @if ((GET$ | async); as dataRecord) {\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(GET$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n }\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">POST Request</h2>\n <div>\n <button mat-raised-button (click)=\"onCreateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if ((POST_error$ | async); as post_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ post_error }}</mat-error>\n </div>\n }\n\n @if ((POST$ | async); as dataRecord) {\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(POST$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n }\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">PUT Request</h2>\n <div>\n <button mat-raised-button (click)=\"onUpdateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if ((PUT_error$ | async); as put_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ put_error }}</mat-error>\n </div>\n }\n\n <h3>Include Record ID in the RestPath</h3>\n\n @if ((PUT$ | async); as dataRecord) {\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(PUT$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n }\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">DELETE Request</h2>\n <div>\n <button mat-raised-button (click)=\"onDeleteRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <h3>Include Record ID in the RestPath</h3>\n\n @if ((DELETE_error$ | async); as delete_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ delete_error }}</mat-error>\n </div>\n }\n\n @if ((DELETE$ | async); as dataRecord) {\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(DELETE$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n }\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">Streaming GET Request</h2>\n <div style=\"display: flex; gap: 1rem; align-items: center;\">\n <div style=\"display: flex; gap: 1rem; align-items: center;\">\n {{ streamType }}\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon>data_usage</mat-icon>\n </button>\n </div>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let item of streamTypes\" (click)=\"onStreamType(item.id)\">{{ item.value }}</button>\n </mat-menu>\n <button mat-raised-button (click)=\"onStreamRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <!-- <div *ngIf=\"(STREAM_error$ | async) as stream_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ stream_error }}</mat-error>\n </div> -->\n\n <div style=\"margin-top: 1rem;\">\n @if ((STREAM$ | async); as data) {\n <div class=\"container\">\n <table mat-table [dataSource]=\"data\" class=\"mat-elevation-z8\">\n\n <!-- Dynamic columns -->\n <ng-container *ngFor=\"let column of displayedColumns\" [matColumnDef]=\"column\">\n <th mat-header-cell *matHeaderCellDef> {{ column | titlecase }} </th>\n <td mat-cell *matCellDef=\"let element\">\n @if (isObject(element[column]); as objValue) {\n <pre style=\"margin: 0; font-size: 0.8em; white-space: pre-wrap;\">{{ objValue | json }}</pre>\n } @else {\n {{ element[column] }}\n }\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n\n <!-- Debug info -->\n <div style=\"margin-top: 1rem; font-size: 0.8em; color: #666;\">\n Columns: {{ displayedColumns.join(', ') }} | Records: {{ data.length }}\n </div>\n </div>\n }\n </div>\n\n</div>\n\n<div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n</div>\n\n<div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1; padding-top: .5rem;\">AI -@if (AIType === 1) {\n <span>STREAMING</span>\n } POST Request</h2>\n <div style=\"display: flex; gap: 1rem;\">\n <button mat-raised-button [matMenuTriggerFor]=\"menu\" style=\"min-width: 120px;\">\n <mat-icon>lan</mat-icon>\n @if (AIType === 0) {\n <span>Server</span>\n } @else {\n Local\n }\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"onSelectAIType(0)\">Server</button>\n <button mat-menu-item (click)=\"onSelectAIType(1)\">Local</button>\n </mat-menu>\n <div>\n <button mat-raised-button (click)=\"onStreamPostRequest()\" class=\"btn\">Ask Me</button>\n </div>\n </div>\n </div>\n\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Ask me a Question</mat-label>\n <textarea matInput placeholder=\"Why is the sky blue?\" [formControl]=\"questionControl\"></textarea>\n </mat-form-field>\n </div>\n\n @if ((STREAM_AI_error$ | async); as stream_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ stream_error }}</mat-error>\n </div>\n }\n\n @if (AIType === 1) {\n <div style=\"color: red;\">\n You must have Ollama active and the 'phi3:latest' model to use this feature.\n </div>\n } @else {\n <span style=\"color: gray;\">\n Define the RestPath to the API endpoint that will handle the AI request.\n Use: 'ai/chat' for server\n </span>\n }\n\n <div>\n @if ((STREAM_AI$ | async); as data) {\n <div style=\"margin-top: 1rem; font-size: 1.2rem; border-radius: 1rem; border: black 1px solid; padding: 2rem;\">\n <p style=\"margin-bottom: .5rem; white-space:pre-wrap; line-height: 1.6rem;\">{{data}}</p>\n </div>\n }\n </div>\n\n</div>\n\n<div style=\"margin-top: 1.5rem; margin-bottom: 1rem; line-height: 1.5rem;\">\n <mat-divider></mat-divider>\n</div>\n\n<div>\n <div style=\"display: flex;\">\n <h2 style=\"flex:1; margin-bottom: 0; padding-top: .5rem; display: flex;\">\n <div>\n Download File\n </div>\n <div style=\"flex:1; margin-left: 1rem;\">\n <mat-slide-toggle #disable>\n @if (disable.checked) {\n <span>\n Enable\n </span>\n } @else {\n Disable\n }\n </mat-slide-toggle>\n </div>\n </h2>\n <div>\n <app-file-downloader\n [disabled]=\"disable.checked\"\n [delayError]=\"3\"\n [apiRequest]=\"downloadRequest\"\n (completed)=\"onDownloadCompleted()\"\n (failed)=\"onDownloadFailed($event)\"\n ></app-file-downloader>\n </div>\n </div>\n</div>\n\n</div>\n","export interface ClientInfoInterface {\n domain: string\n service: string\n id: number\n name: string\n}\n\nexport class ClientInfo implements ClientInfoInterface {\n\n constructor(\n public domain = '',\n public service = '',\n public id = 0,\n public name = '',\n ) {}\n\n static adapt(item?: any): ClientInfo {\n\n return new ClientInfo(\n item?.domain,\n item?.service,\n item?.id,\n (item?.first_name || item?.last_name) ? `${item?.first_name} ${item?.last_name}` : '',\n )\n\n }\n\n}\n\n\n","export interface ClientInfoMapperInterface {\n id: number\n first_name: string\n last_name: string\n email: string\n}\n\nexport class ClientInfoMapper implements ClientInfoMapperInterface {\n\n constructor(\n public id = 0,\n public first_name = '',\n public last_name = '',\n public email = '',\n ) {}\n\n static adapt(item?: any): ClientInfoMapper {\n\n const first_name = (item?.name) ? item.name.split(' ')[0] : ''\n const last_name = (item?.name) ? item.name.split(' ')[1] : ''\n\n return new ClientInfoMapper(\n item?.id,\n first_name,\n last_name,\n item?.email,\n )\n\n }\n\n}\n\n\n","import { Injectable } from '@angular/core';\n\nimport { DataType, DatabaseStorage } from '../../../models';\nimport { HTTPManagerStateService, ApiRequest, RequestOptions } from '../../../services';\n\nimport { ClientInfo } from '../../request-manager-demo/models/sample-client-info';\nimport { ClientInfoMapper } from '../../request-manager-demo/models/sample-mapper-client-info';\n\n@Injectable()\nexport class StateManagerDemoService extends HTTPManagerStateService<any> {\n\n constructor() {\n super(\n ApiRequest.adapt({\n server: \"\",\n path: [],\n headers: {},\n adapter: ClientInfo.adapt,\n mapper: ClientInfoMapper.adapt,\n stream: false,\n }),\n DataType.ARRAY,\n DatabaseStorage.adapt()\n )\n }\n\n setAPIOptions(apiOptions: ApiRequest, dataType: DataType, database?: DatabaseStorage) {\n this.setApiRequestOptions(apiOptions, dataType, database)\n }\n\n getClients() {\n\n // const headers = {\n // auth: \"sample-auth-token\"\n // }\n // const sampleOptions = RequestOptions.adapt({ path: [\"id\", 12], headers, sample: true })\n this.fetchRecords()\n\n }\n\n createClient(data: any) {\n\n // const headers = {\n // auth: \"sample-auth-token\"\n // }\n\n // const sampleOptions = RequestOptions.adapt({ path: [\"id\", 12], headers, sample: true })\n this.createRecord(data)\n\n }\n\n updateClient(data: ClientInfo) {\n\n // const headers = {\n // auth: \"sample-auth-token\"\n // }\n data.id = 1031\n const sampleOptions = RequestOptions.adapt({ path: [data.id] })\n this.updateRecord(data, sampleOptions)\n\n }\n\n deleteClient(data: ClientInfo) {\n\n // const headers = {\n // auth: \"sample-auth-token\"\n // }\n\n data.id = 1031\n const sampleOptions = RequestOptions.adapt({ path: [data.id] })\n this.deleteRecord(sampleOptions)\n\n }\n\n streamRequest() {\n console.log('[DEMO SERVICE] streamRequest called')\n \n const headers = {\n auth: \"sample-auth-token\"\n }\n\n console.log('[DEMO SERVICE] Calling fetchStream with headers:', headers)\n this.fetchStream()\n\n }\n\n}\n","export interface AIPromptInterface {\n response: string\n}\n\nexport class AIPrompt implements AIPromptInterface {\n\n constructor(\n public response = '',\n ) {}\n\n static adapt(item?: any): AIPrompt {\n\n return new AIPrompt(\n item?.response,\n )\n\n }\n\n}\n","import { Component, Input, OnInit, ViewChild, inject } from '@angular/core';\n\nimport { StateManagerDemoService } from './services/state-manager-demo.service';\nimport { FormBuilder, Validators, FormArray } from '@angular/forms';\n\nimport { Observable, BehaviorSubject, EMPTY, map, tap, catchError, throwError } from 'rxjs';\n\nimport { ClientInfo } from '../request-manager-demo/models/sample-client-info';\nimport { ClientInfoMapper } from '../request-manager-demo/models/sample-mapper-client-info';\nimport { AIPrompt } from '../request-manager-demo/models/sample-ai-prompt';\n\nimport { DataType } from '../../models';\nimport { DatabaseStorage } from '../../models/database-storage.model';\nimport { HTTPManagerService, ApiRequest, StreamType } from '../../services';\n\n\n@Component({\n selector: 'app-request-manager-state-demo',\n templateUrl: './request-manager-state-demo.component.html',\n styleUrls: ['./request-manager-state-demo.component.scss'],\n providers: [StateManagerDemoService, HTTPManagerService],\n standalone: false\n})\nexport class RequestManagerStateDemoComponent implements OnInit {\n\n @Input() server = 'http://localhost:8080'\n @Input() adapter?: Function\n @Input() mapper?: Function\n\n stateManagerDemoService = inject(StateManagerDemoService)\n\n displayedColumns: string[] = []\n \n // Dynamic columns based on data structure\n getColumnsFromData(data: any[]): string[] {\n if (!data || data.length === 0) {\n return []\n }\n \n const firstRecord = data[0]\n if (!firstRecord || typeof firstRecord !== 'object') {\n return []\n }\n \n // Extract all keys from the first record, excluding null/undefined\n return Object.keys(firstRecord).filter(key => \n firstRecord[key] !== null && firstRecord[key] !== undefined\n )\n }\n\n // Update displayed columns when data changes\n updateDisplayedColumns(data: any[]): void {\n this.displayedColumns = this.getColumnsFromData(data)\n console.log('[STATE DEMO] Updated columns:', this.displayedColumns)\n }\n\n // Helper to check if value is an object\n isObject(value: any): boolean {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n }\n\n // Helper to safely get data length\n getDataLength(data: any): number {\n if (Array.isArray(data)) {\n return data.length\n }\n return 0\n }\n\n selectedRecord$?: Observable<ClientInfo|null>\n\n fb = inject(FormBuilder)\n\n streamTypes = [\n { id: 'JSON', value: 'json' },\n { id: 'NDJSON', value: 'ndjson' },\n { id: 'AI Streaming', value: 'ai_streaming' },\n { id: 'Event Stream', value: 'event_stream' },\n { id: 'Auto', value: 'auto' },\n ]\n\n streamType = 'Auto'\n\n httpManagerService = inject(HTTPManagerService)\n\n isPending$ = this.stateManagerDemoService.isPending$\n error$ = this.stateManagerDemoService.error$\n\n countdown$ = this.httpManagerService.countdown$\n\n GET_error$ = new BehaviorSubject<string>('')\n POST_error$ = new BehaviorSubject<string>('')\n PUT_error$ = new BehaviorSubject<string>('')\n DELETE_error$ = new BehaviorSubject<string>('')\n\n STREAM_error$ = new BehaviorSubject<string>('')\n STREAM_AI_error$ = new BehaviorSubject<string>('')\n\n GET$ = new BehaviorSubject<any>(null)\n POST$ = new BehaviorSubject(null)\n PUT$ = new BehaviorSubject(null)\n DELETE$ = new BehaviorSubject(null)\n\n STREAM = new BehaviorSubject(null)\n STREAM$ = this.STREAM.asObservable()\n\n STREAM_AI = new BehaviorSubject<{response: string}[]>([])\n STREAM_AI$ = this.STREAM_AI.asObservable()\n .pipe(\n map((items: any) => (items) ? items.map((item: any) => item.response) : []),\n map((items: any) => items.join('\\n').trim()),\n )\n\n @ViewChild(\"failedState\", { static: true }) failedState: any\n @ViewChild(\"pollingState\", { static: true }) pollingState: any\n\n questionControl = this.fb.control(\"\", [Validators.required])\n\n requestType = ''\n\n prompts: string[] = []\n\n AIType = 0\n\n get dataObservable$() {\n\n switch (this.requestType) {\n case 'GET':\n return this.GET$\n\n case 'PUT':\n return this.PUT$\n\n case 'POST':\n return this.POST$\n\n case 'DELETE':\n return this.DELETE$\n\n case 'STREAM':\n return this.STREAM\n\n case 'STREAM_AI':\n return this.STREAM_AI\n\n default:\n return this.GET$\n break;\n }\n\n }\n\n sampleClientData = {\n id: 0,\n name: \"Old School Dates\",\n domain: \"osd.com\",\n service: \"osd\",\n spiffe: \"osd.com/osd\",\n secret: \"SMOPECXP-OS4P-USOG-X2II-3XMD1FQDR3IJX\",\n created: 1693003138,\n modified: 1693003138,\n icon: \"\",\n imageFile: \"\",\n }\n\n selectedRecord = this.fb.control(null)\n\n requestForm = this.fb.group({\n datatype: this.fb.control('ARRAY'),\n path: this.fb.control<string>(\"ai/\"),\n headers: this.fb.array([]),\n adapter: [null],\n mapper: [null],\n retry: this.fb.group({\n times: [3],\n delay: [3],\n }),\n polling: [3],\n database: this.fb.group({\n table: [''],\n expiresIn: ['1m'],\n })\n })\n\n get hasChanged() {\n return this.requestForm.dirty || this.requestForm.untouched\n }\n\n get dataType() {\n return this.requestForm.get(\"datatype\")?.value\n }\n\n get database() {\n return this.requestForm.get(\"database\")?.value\n }\n\n get retry() {\n return this.requestForm.get(\"retry\")?.value\n }\n\n sampleAdaptors = [\n { label: \"ClientInfo Basic\", value: ClientInfo.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n sampleMappers = [\n { label: \"Mapper Basic\", value: ClientInfoMapper.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n get headers(): FormArray {\n return this.requestForm.get('headers') as FormArray\n }\n\n get isValid() {\n this.requestForm.markAllAsTouched()\n return this.requestForm.valid\n }\n\n // server = `http://sample-endpoint/as/authorization.oauth2`\n\n arrayObjectsToObjects = (arr: any[]) => {\n return Array.isArray(arr) ? arr.reduce((obj, item) => Object.assign(obj, { [item.key]: item.value }), {}) : {}\n }\n\n props = (adapter: any) => {\n return (adapter) ? adapter() : null\n }\n\n constructor() { }\n\n ngOnInit() {\n\n this.stateManagerDemoService.data$.pipe(\n tap((data) => console.log(\"API STREAM_AI response\", data)),\n )\n\n this.error$.pipe(\n tap((data) => {\n debugger\n console.log(\"API STREAM response\", data)\n }),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'STREAM'))\n })\n )\n\n this.selectedRecord.valueChanges\n .subscribe((data: ClientInfo|null) => {\n this.selectedRecord$ = (data) ? this.stateManagerDemoService.selectRecord$(data.id) : EMPTY\n })\n\n this.stateManagerDemoService.data$\n .pipe(\n tap((data: any) => {\n console.log('[COMPONENT] State data received:', data)\n\n switch (this.requestType) {\n case 'GET':\n console.log('[COMPONENT] Updating GET$ with data:', data)\n this.GET$.next(data)\n break;\n\n case 'PUT':\n console.log('[COMPONENT] Updating PUT$ with data:', data)\n this.PUT$.next(data)\n break;\n\n case 'POST':\n console.log('[COMPONENT] Updating POST$ with data:', data)\n this.POST$.next(data)\n break;\n\n case 'DELETE':\n console.log('[COMPONENT] Updating DELETE$ with data:', data)\n this.DELETE$.next(data)\n break;\n\n case 'STREAM':\n console.log('[COMPONENT] Updating STREAM$ with data:', data)\n this.STREAM.next(data)\n // Update table columns dynamically based on streaming data\n if (data && Array.isArray(data) && data.length > 0) {\n this.updateDisplayedColumns(data)\n }\n break;\n\n case 'STREAM_AI':\n console.log('[COMPONENT] Updating STREAM_AI$ with data:', data)\n this.STREAM_AI.next(data)\n break;\n\n default:\n console.log('[COMPONENT] No requestType set, ignoring data')\n break;\n }\n\n })\n ).subscribe()\n\n }\n\n onStreamType(type: string) {\n this.streamType = type\n }\n\n addHeader() {\n const header = this.fb.group({\n key: ['', Validators.required],\n value: ['']\n });\n this.headers.push(header)\n }\n\n removeHeader(index: number) {\n this.headers.removeAt(index)\n }\n\n compileRequest() {\n\n const requestParams = this.requestForm.value\n\n requestParams.headers = this.arrayObjectsToObjects(\n requestParams.headers || []\n )\n\n const pathReq = (requestParams.path === \"\") ? [] : (requestParams.path || \"\").split(\"/\")\n\n if (!this.pollingState.checked) requestParams.polling = 0\n\n if (!this.failedState.checked) {\n requestParams.retry = { times: 0,delay: 0 }\n }\n\n const currentOptions = ApiRequest.adapt(requestParams)\n currentOptions.path = []\n currentOptions.server = this.server\n currentOptions.adapter = this.adapter\n currentOptions.mapper = this.mapper\n const apiOptions = ApiRequest.adapt({ ...currentOptions, path: pathReq })\n\n return { apiOptions: apiOptions, path: pathReq }\n\n }\n\n onSetStateOptions() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n const db = DatabaseStorage.adapt(this.database)\n const type = this.dataType === \"ARRAY\" ? DataType.ARRAY : DataType.OBJECT\n this.stateManagerDemoService.setAPIOptions(reqParams.apiOptions, type, db)\n\n this.requestForm.markAsPristine()\n }\n\n onClearRecords() {\n this.stateManagerDemoService.clearRecords()\n }\n\n onGetRequest() {\n this.requestType = 'GET'\n this.stateManagerDemoService.getClients()\n }\n\n onCreateRequest() {\n this.requestType = 'POST'\n this.stateManagerDemoService.createClient(this.sampleClientData)\n }\n\n onUpdateRequest() {\n this.requestType = 'PUT'\n this.stateManagerDemoService.updateClient(this.sampleClientData)\n }\n\n onDeleteRequest() {\n this.requestType = 'DELETE'\n this.stateManagerDemoService.deleteClient(this.sampleClientData)\n }\n\n onStreamRequest() {\n console.log('[COMPONENT] onStreamRequest called')\n\n if(!this.isValid) {\n console.log('[COMPONENT] Form invalid, aborting')\n return\n }\n\n console.log('[COMPONENT] Compiling request...')\n const reqParams = this.compileRequest()\n\n console.log('[COMPONENT] Setting stream options:', reqParams.apiOptions)\n reqParams.apiOptions.stream = true\n reqParams.apiOptions.streamType = this.streamType as StreamType\n this.requestType = 'STREAM'\n\n console.log('[COMPONENT] Calling streamRequest...')\n this.stateManagerDemoService.streamRequest()\n\n }\n\n errorHandling(err: any, type: string) { console.log(err, type)\n if(type === 'GET') this.GET_error$.next(err.message)\n if(type === 'POST') this.POST_error$.next(err.message)\n if(type === 'PUT') this.PUT_error$.next(err.message)\n if(type === 'DELETE') this.DELETE_error$.next(err.message)\n if(type === 'STREAM') this.STREAM_error$.next(err.message)\n if(type === 'STREAM_AI') this.STREAM_AI_error$.next(err.message)\n }\n\n onSelectAIType(type: number) {\n this.AIType = type\n }\n\n onClearHistory() {\n this.prompts = []\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <h2>\n HTTP Request State Manager\n </h2>\n\n <div [formGroup]=\"requestForm\" style=\"margin-top: 2rem;\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>State Data Type</mat-label>\n <mat-select formControlName=\"datatype\">\n <mat-option value=\"ARRAY\">Array</mat-option>\n <mat-option value=\"OBJECT\">Object</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Adapter (Model)</mat-label>\n <mat-select formControlName=\"adapter\" #adapterSelect>\n <mat-option>None</mat-option>\n @for (adapter of sampleAdaptors; track adapter) {\n <mat-option [value]=\"adapter.value\">\n {{adapter.label}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mapper (Model)</mat-label>\n <mat-select formControlName=\"mapper\" #mapperSelect>\n <mat-option>None</mat-option>\n @for (mapper of sampleMappers; track mapper) {\n <mat-option [value]=\"mapper.value\">\n {{mapper.label}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n\n @if (adapterSelect.value || mapperSelect.value) {\n <div style=\"display: flex; margin-bottom: 2rem;\">\n <div style=\"flex:1\" class=\"box\">\n <h3>Adapter (Incoming)</h3>\n @if (adapterSelect.value) {\n <div>\n {{ props(adapterSelect.value) | json }}\n </div>\n } @else {\n No Transformation\n }\n </div>\n <div style=\"flex:1\" class=\"box\">\n <h3>Mapper (Outgoing)</h3>\n @if (mapperSelect.value) {\n <div>\n {{ props(mapperSelect.value) | json }}\n </div>\n } @else {\n No Transformation\n }\n </div>\n </div>\n }\n\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>RestPath (/ delimited)</mat-label>\n <input matInput placeholder=\"clients/list\" formControlName=\"path\">\n </mat-form-field>\n </div>\n <div>\n <div formArrayName=\"headers\">\n @for (task of headers.controls; track task; let i = $index) {\n <div [formGroupName]=\"i\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Key</mat-label>\n <input matInput placeholder=\"authentication\" formControlName=\"key\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Value</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"value\">\n </mat-form-field>\n <div style=\"margin-top: .5rem;\">\n <button mat-icon-button (click)=\"removeHeader(i)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n <button mat-stroked-button (click)=\"addHeader()\">Add Header</button>\n </div>\n <div style=\"margin-top: 2rem; display: flex; flex-direction:column; gap: 1rem;\">\n <div>\n <mat-slide-toggle #failedState>Retry on Failed</mat-slide-toggle>\n @if (failedState.checked) {\n <div style=\"display: flex; gap: .5rem; margin-top: 1rem;\" formGroupName=\"retry\">\n <mat-form-field appearance=\"outline\">\n <mat-label>#of Times</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"times\" value=\"3\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Delay Until Next</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"delay\" value=\"3\">\n </mat-form-field>\n </div>\n }\n </div>\n <div>\n <mat-slide-toggle #pollingState>Polling</mat-slide-toggle>\n @if (pollingState.checked) {\n <div>\n <mat-form-field appearance=\"outline\" style=\"margin-top: 1rem\">\n <mat-label>#of Seconds</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"polling\" value=\"3\">\n </mat-form-field>\n </div>\n }\n </div>\n <div>\n <mat-slide-toggle #DBState>Database Storage</mat-slide-toggle>\n @if (DBState.checked) {\n <div style=\"display: flex; gap: .5rem; margin-top: 1rem\" formGroupName=\"database\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Table Name</mat-label>\n <input matInput placeholder=\"table\" formControlName=\"table\" value=\"\">\n </mat-form-field>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Expires In</mat-label>\n <mat-select formControlName=\"expiresIn\">\n <mat-option value=\"1m\">One Minute</mat-option>\n <mat-option value=\"1h\">One Hour</mat-option>\n <mat-option value=\"1d\">One Day</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n }\n </div>\n <div style=\"margin-top: 1rem; display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onSetStateOptions()\" [disabled]=\"!hasChanged\">\n Set API Request Options\n </button>\n </div>\n <div>\n @if ((error$ | async); as error) {\n <mat-error>\n {{ error }}\n </mat-error>\n }\n </div>\n </div>\n </div>\n\n <div style=\"margin-bottom: 1rem; margin-top: 2rem;\">\n @if ((isPending$ | async)) {\n <mat-progress-bar mode=\"indeterminate\"\n ></mat-progress-bar>\n }\n @if (pollingState.checked) {\n <div>\n @if (!(isPending$ | async) && (this.countdown$ | async) || -1 > 0) {\n <mat-progress-bar mode=\"determinate\"\n [value]=\"(this.countdown$ | async)\"\n ></mat-progress-bar>\n }\n </div>\n }\n\n </div>\n\n @if ((GET$ | async); as data) {\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1;\">CURRENT STATE ({{ dataType }})</h2>\n </div>\n @if (data.length > 1) {\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Records</mat-label>\n <mat-select [formControl]=\"selectedRecord\" [disabled]=\"data === null && data?.length === 0\">\n <mat-option [value]=\"\">None</mat-option>\n @for (item of data; track item) {\n <mat-option [value]=\"item\">\n {{item.name || (item.first_name) | titlecase}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n }\n @if ((dataObservable$ | async); as dataRecord) {\n <div>\n @if ((selectedRecord$ | async); as record) {\n <div>\n {{ record | json }}\n </div>\n } @else {\n No Record Selected from State\n }\n </div>\n }\n <div style=\"margin-top: 1rem;\">\n @if (data !== null && data?.length > 0) {\n <span>\n State contains a Total of {{ data.length }} Records\n </span>\n } @else {\n No Records\n }\n <div style=\"display: flex; gap: .5rem; text-align: end; justify-content: flex-end;\">\n <button class=\"btn\" mat-stroked-button (click)=\"onClearRecords()\">Clear</button>\n </div>\n </div>\n </div>\n }\n\n\n\n\n <div style=\"margin-top: 1rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">GET Request ({{ dataType }})</h2>\n <div>\n <button mat-raised-button (click)=\"onGetRequest()\" [disabled]=\"hasChanged\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if ((GET_error$ | async); as get_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ get_error }}</mat-error>\n </div>\n }\n\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(GET$ | async) | jsonv\"></div> -->\n @if ((GET$ | async); as getData) {\n <div>{{ getData | json }}</div>\n }\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">POST Request</h2>\n <div>\n <button mat-raised-button (click)=\"onCreateRequest()\" [disabled]=\"hasChanged\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if ((POST_error$ | async); as post_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ post_error }}</mat-error>\n </div>\n }\n\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(POST$ | async) | jsonv\"></div> -->\n @if ((POST$ | async); as postData) {\n <div>{{ postData | json }}</div>\n }\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">PUT Request</h2>\n <div>\n <button mat-raised-button (click)=\"onUpdateRequest()\" [disabled]=\"hasChanged\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if ((PUT_error$ | async); as put_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ put_error }}</mat-error>\n </div>\n }\n\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(PUT$ | async) | jsonv\"></div> -->\n @if ((PUT$ | async); as putData) {\n <div>{{ putData | json }}</div>\n }\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">DELETE Request</h2>\n <div>\n <button mat-raised-button (click)=\"onDeleteRequest()\" [disabled]=\"hasChanged\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if ((DELETE_error$ | async); as delete_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ delete_error }}</mat-error>\n </div>\n }\n\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(DELETE$ | async) | jsonv\"></div> -->\n @if ((DELETE$ | async); as deleteData) {\n <div>{{ deleteData | json }}</div>\n }\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">Streaming GET Request</h2>\n <div style=\"display: flex; gap: 1rem; align-items: center;\">\n <div style=\"display: flex; gap: 1rem; align-items: center;\">\n {{ streamType }}\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon>data_usage</mat-icon>\n </button>\n </div>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let item of streamTypes\" (click)=\"onStreamType(item.id)\">{{ item.value }}</button>\n </mat-menu>\n <button mat-raised-button (click)=\"onStreamRequest()\" class=\"btn\" [disabled]=\"hasChanged\">Request</button>\n </div>\n </div>\n\n @if ((STREAM_error$ | async); as stream_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ stream_error }}</mat-error>\n </div>\n }\n\n <div style=\"margin-top: 1rem;\">\n @if ((STREAM$ | async); as data) {\n <div class=\"container\">\n <table mat-table [dataSource]=\"data\" class=\"mat-elevation-z8\">\n\n <!-- Dynamic columns -->\n <ng-container *ngFor=\"let column of displayedColumns\" [matColumnDef]=\"column\">\n <th mat-header-cell *matHeaderCellDef> {{ column | titlecase }} </th>\n <td mat-cell *matCellDef=\"let element\">\n @if (isObject(element[column]); as objValue) {\n <pre style=\"margin: 0; font-size: 0.8em; white-space: pre-wrap;\">{{ objValue | json }}</pre>\n } @else {\n {{ element[column] }}\n }\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n\n <!-- Debug info -->\n <div style=\"margin-top: 1rem; font-size: 0.8em; color: #666;\">\n Columns: {{ displayedColumns.join(', ') }} | Data received\n </div>\n </div>\n }\n </div>\n\n </div>\n\n</div>\n","import { Component, Input, OnInit, ViewChild, inject } from '@angular/core'\n\nimport { BehaviorSubject, EMPTY, Observable, throwError, of } from 'rxjs'\nimport { FormArray, FormBuilder, Validators } from '@angular/forms'\nimport { catchError, tap, map } from 'rxjs/operators'\n\nimport { ClientInfo } from './models/sample-client-info'\nimport { ClientInfoMapper } from './models/sample-mapper-client-info'\nimport { AIPrompt } from './models/sample-ai-prompt'\nimport { ApiRequest, HTTPManagerService, StreamType, BatchOptions, BatchRequestState, BatchProgress, calculateBatchProgress } from '../..'\n\nimport { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display'\n\n@Component({\n selector: 'app-request-manager-demo',\n templateUrl: './request-manager-demo.component.html',\n styleUrls: ['./request-manager-demo.component.scss'],\n providers: [HTTPManagerService],\n standalone: false\n})\nexport class RequestManagerDemoComponent implements OnInit {\n\n @Input() server = 'http://localhost:8080'\n @Input() adapter?: Function\n @Input() mapper?: Function\n\n displayedColumns: string[] = []\n\n // Dynamic columns based on data structure\n getColumnsFromData(data: any[]): string[] {\n if (!data || data.length === 0) {\n return []\n }\n\n const firstRecord = data[0]\n if (!firstRecord || typeof firstRecord !== 'object') {\n return []\n }\n\n // Extract all keys from the first record, excluding null/undefined\n return Object.keys(firstRecord).filter(key =>\n firstRecord[key] !== null && firstRecord[key] !== undefined\n )\n }\n\n // Update displayed columns when data changes\n updateDisplayedColumns(data: any[]): void {\n this.displayedColumns = this.getColumnsFromData(data)\n console.log('[DEMO] Updated columns:', this.displayedColumns)\n }\n\n // Helper to check if value is an object\n isObject(value: any): boolean {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n }\n\n private fb = inject(FormBuilder)\n private toastMessage = inject(ToastMessageDisplayService)\n\n questionControl = this.fb.control(\"\", [Validators.required])\n\n httpManagerService = inject(HTTPManagerService)\n\n isPending$ = this.httpManagerService.isPending$\n countdown$ = this.httpManagerService.countdown$\n\n GET_error$ = new BehaviorSubject<string>('')\n POST_error$ = new BehaviorSubject<string>('')\n PUT_error$ = new BehaviorSubject<string>('')\n DELETE_error$ = new BehaviorSubject<string>('')\n\n STREAM_error$ = new BehaviorSubject<string>('')\n STREAM_AI_error$ = new BehaviorSubject<string>('')\n\n GET$?: Observable<any>\n POST$?: Observable<any>\n PUT$?: Observable<any>\n DELETE$?: Observable<any>\n\n STREAM$?: Observable<any>\n STREAM_AI$?: Observable<any>\n\n // Batch request properties\n parallelBatch$?: Observable<any[]>\n sequentialBatch$?: Observable<any[]>\n parallelExecutionTime?: number\n sequentialExecutionTime?: number\n parallelResults?: any[]\n sequentialResults?: any[]\n isParallelLoading = false\n isSequentialLoading = false\n parallelError?: string\n sequentialError?: string\n\n // Parallel batch states for individual request tracking\n parallelBatchStates: (BatchRequestState<any> | undefined)[] = []\n\n // Sequential batch states for individual request tracking\n sequentialBatchStates: (BatchRequestState<any> | undefined)[] = []\n\n // Stream batch request properties\n streamBatchStates: (BatchRequestState<any> | undefined)[] = []\n streamProgress?: BatchProgress\n streamExecutionTime?: number\n isStreamLoading = false\n streamError?: string\n\n // Computed properties for filtered states (removes undefined)\n get filteredParallelStates(): BatchRequestState<any>[] {\n return this.parallelBatchStates.filter(s => s !== undefined) as BatchRequestState<any>[]\n }\n\n get filteredSequentialStates(): BatchRequestState<any>[] {\n return this.sequentialBatchStates.filter(s => s !== undefined) as BatchRequestState<any>[]\n }\n\n get filteredStreamStates(): BatchRequestState<any>[] {\n return this.streamBatchStates.filter(s => s !== undefined) as BatchRequestState<any>[]\n }\n\n requestParams = {\n GET: ApiRequest.adapt(),\n POST: ApiRequest.adapt(),\n PUT: ApiRequest.adapt(),\n DELETE: ApiRequest.adapt(),\n STREAM: ApiRequest.adapt(),\n }\n\n streamTypes = [\n { id: 'JSON', value: 'json' },\n { id: 'NDJSON', value: 'ndjson' },\n { id: 'AI Streaming', value: 'ai_streaming' },\n { id: 'Event Stream', value: 'event_stream' },\n { id: 'Auto', value: 'auto' },\n ]\n\n streamType = 'Auto'\n\n @ViewChild(\"failedState\", { static: true }) failedState: any\n @ViewChild(\"pollingState\", { static: true }) pollingState: any\n\n downloadRequest = ApiRequest.adapt({\n server: 'assets/images',\n path: ['lego.png'],\n saveAs: 'john.jpg', // Optional\n headers: { 'Authorization': 'Bearer Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6InJ0c0ZULWItN0x1WTdEVlllU05LY0lKN1ZuYyJ9.eyJhdWQiOiI4ODhhMzFjZS01OWQzLTRhMTItYTU5Ni04ZDYyZjY0MWI1MDUiLCJpc3MiOiJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vNmY0MTE5ODItY2YyMy00ZTQ1LTk0NDktNGI2MDdiN2E4OGVjL3YyLjAiLCJpYXQiOjE3NjU4MzQxNDksIm5iZiI6MTc2NTgzNDE0OSwiZXhwIjoxNzY1ODM5NzQ2LCJhY2N0IjowLCJhaW8iOiJBV1FBbS84YUFBQUFVUEZOYUhSZkZ4ZVkwRWthcFBzdWZaNG1QYXV6YVRoODRRZUtQRzkrbEFIVE5XanVwQy9ZSjEwK2IrMktWVlJSSXZRNFpwS2xyWTFGd0xRZmtXOTNLbkRNckxSeEMzWTVOOGlQREZ4b1liZExucW1QL1N1ZE1pRW1Va05tTklSWSIsImF6cCI6Ijg4OGEzMWNlLTU5ZDMtNGExMi1hNTk2LThkNjJmNjQxYjUwNSIsImF6cGFjciI6IjAiLCJncm91cHMiOlsiZWE2ZDk5YjAtNDgyNC00MDU0LTk0MTQtZDNhOTZkZDA3MjRiIl0sIm5hbWUiOiJHVExDIEFwcCBTdXBlciBBZG1pbiIsIm9pZCI6IjI2NzUxY2I2LWNlMDEtNDMzMC05OTc0LWZjMzgxMjQ3YTEzYyIsInByZWZlcnJlZF91c2VybmFtZSI6Imd0bGMwMDNAZ3RsYy5jYSIsInJoIjoiMS5BUzRBZ2hsQmJ5UFBSVTZVU1V0Z2UzcUk3TTR4aW9qVFdSSktwWmFOWXZaQnRRVm1BYTR1QUEuIiwicm9sZXMiOlsiZ3RsYy5hY2wuc3VwZXJhZG1pbiJdLCJzY3AiOiJHVExDX0FwcGxpY2F0aW9uIiwic2lkIjoiMDAzZjVhZDktZmJmNi1jZTkyLTg3MjItMWEzNDExYjMzMDJiIiwic3ViIjoiS0RYQ3drVlhUbTRUUmcwaTkxbXZDZzgtQ29uLXpWbk5FQ2Y5LVg0dkpzUSIsInRpZCI6IjZmNDExOTgyLWNmMjMtNGU0NS05NDQ5LTRiNjA3YjdhODhlYyIsInVwbiI6Imd0bGMwMDNAZ3RsYy5jYSIsInV0aSI6InpBaTJoMmpVUUVHbVY0RTJXMWxqQUEiLCJ2ZXIiOiIyLjAiLCJ3aWRzIjpbImI3OWZiZjRkLTNlZjktNDY4OS04MTQzLTc2YjE5NGU4NTUwOSJdLCJ4bXNfZnRkIjoiUDJraW1ZM0tqc1BTRndxNHlZdmJ0bGhrSUk3d2tXNmFpcW1FQ1BaNEdja0JkWE5sWVhOMExXUnpiWE0ifQ.LzppoggMm27smSAy9SamtPN95vCzdELCAfhtOj5n_T_H6g9xCmNRLS9FaUFQMau6Qvl0lROKl7WDklTswLFkfxbIxCBWtXdL-LTqT5cDURSJAll8vC3zlN3Hg9pAFBUVZFRolt6Z7LvPdI3pvUOQs0yFwVzp9k6cLF8aemKdwKQrMX3XXua1MfBWZcqQ4WiBVNmKh8w6yQB35I4u5WqdFnu33nUGb-kvc18SOpoUfiJnlV-PudaEzFXdU3CjAaMEcuPFv5xLwWJKuhU73dNH4EyQDFMVGtcIHNnieOfiY_nK2_0-5DM6aI40UIRK6Bt-HmMQpnbhLps5y3ep6Z7RNw' } // Optional\n })\n\n // downloadRequest = ApiRequest.adapt({\n // server: 'oidc/ai/file'\n // })\n\n sampleClientData = {\n id: 0,\n name: \"Old School Dates\",\n domain: \"osd.com\",\n service: \"osd\",\n spiffe: \"osd.com/osd\",\n secret: \"SMOPECXP-OS4P-USOG-X2II-3XMD1FQDR3IJX\",\n created: 1693003138,\n modified: 1693003138,\n icon: \"\",\n imageFile: \"\",\n email: \"wavecoders@gmail.com\"\n }\n\n requestForm = this.fb.group({\n path: this.fb.control<string>(\"ai/\"),\n headers: this.fb.array([]),\n adapter: [null],\n mapper: [null],\n retry: this.fb.group({\n times: [3],\n delay: [3],\n }),\n polling: [3],\n })\n\n AIType = 0\n\n sampleAdaptors = [\n { label: \"ClientInfo Basic\", value: ClientInfo.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n sampleMappers = [\n { label: \"Mapper Basic\", value: ClientInfoMapper.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n get retry() {\n return this.requestForm.get('retry')?.value\n }\n\n get headers(): FormArray {\n return this.requestForm.get('headers') as FormArray\n }\n\n get isValid() {\n this.requestForm.markAllAsTouched()\n return this.requestForm.valid\n }\n\n hasId = (arr: any[]) => {\n if (arr.length === 0) return false\n return !isNaN(arr[arr.length - 1])\n }\n\n props = (adapter: any) => {\n return (adapter) ? adapter() : null\n }\n\n // server = `http://sample-endpoint/as/authorization.oauth2`\n\n arrayObjectsToObjects = (arr: any[]) => {\n return Array.isArray(arr) ? arr.reduce((obj, item) => Object.assign(obj, { [item.key]: item.value }), {}) : {}\n }\n\n constructor() { }\n\n ngOnInit() {\n\n // const reqGet2 = ApiRequest.adapt({\n // server,\n // path: ['clients'],\n // headers: { authentication: \"Bearer <KEY>\" },\n // adapter: ClientInfo,\n // dataType: DataType.OBJECT,\n // // concurrent: false,\n // // polling: 3, //seconds\n // })\n\n // const req2 = [1024,1025,1026].map(item => {\n // return this.httpManagerService.getRequest<ClientInfo[]>(reqGet2, [item])\n // .pipe(\n // catchError(error => {\n // return throwError(() => new Error(error.error.message))\n // })\n // )\n // })\n\n // forkJoin(req2)\n // .subscribe(res => console.log(res))\n\n }\n\n onStreamType(type: string) {\n this.streamType = type\n }\n\n addHeader() {\n const header = this.fb.group({\n key: ['', Validators.required],\n value: ['']\n })\n this.headers.push(header)\n }\n\n removeHeader(index: number) {\n this.headers.removeAt(index)\n }\n\n compileRequest() {\n\n const requestParams = this.requestForm.value\n\n requestParams.headers = this.arrayObjectsToObjects(\n requestParams.headers || []\n )\n\n const pathReq = (requestParams.path === \"\") ? [] : (requestParams.path || \"\").split(\"/\")\n\n if (!this.pollingState.checked) requestParams.polling = 0\n\n if (!this.failedState.checked) {\n requestParams.retry = { times: 0,delay: 0 }\n }\n\n const apiOptions = ApiRequest.adapt(requestParams)\n apiOptions.path = []\n apiOptions.server = this.server\n apiOptions.adapter = this.adapter\n apiOptions.mapper = this.mapper\n return { apiOptions: apiOptions, path: pathReq }\n\n }\n\n onGetRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n this.requestParams.GET = reqParams.apiOptions\n\n this.GET$ = EMPTY //Cancels Previous\n this.GET_error$.next('')\n\n this.GET$ = this.httpManagerService.getRequest<ClientInfo[]>({...reqParams.apiOptions}, reqParams.path)\n .pipe(\n // tap((data) => console.log(\"API GET response\", data)),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'GET'))\n })\n )\n\n }\n\n onCreateRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n this.requestParams.POST = reqParams.apiOptions\n\n this.POST$ = EMPTY //Cancels Previous\n this.POST_error$.next('')\n\n console.log(\"POST\", this.sampleClientData)\n console.log(\"POST\", reqParams.apiOptions)\n console.log(\"POST\", reqParams.path)\n\n this.POST$ = this.httpManagerService.postRequest<ClientInfo>(this.sampleClientData, reqParams.apiOptions, reqParams.path)\n .pipe(\n // tap((data) => console.log(\"API POST response\", data)),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'POST'))\n })\n )\n\n }\n\n onUpdateRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n if(!this.hasId(reqParams.path)) {\n console.log(\"Missing ID\")\n return\n }\n\n this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length-1])\n this.requestParams.PUT = reqParams.apiOptions\n\n this.PUT$ = EMPTY //Cancels Previous\n this.PUT_error$.next('')\n\n this.PUT$ = this.httpManagerService.putRequest<any>(this.sampleClientData, reqParams.apiOptions, reqParams.path)\n .pipe(\n // tap((data) => console.log(\"API PUT response\", data)),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'PUT'))\n })\n )\n\n }\n\n onDeleteRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n this.requestParams.DELETE = reqParams.apiOptions\n\n if(!this.hasId(reqParams.path)) {\n console.log(\"Missing ID\")\n return\n }\n\n this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length-1])\n this.requestParams.DELETE = reqParams.apiOptions\n\n this.DELETE$ = EMPTY //Cancels Previous\n this.DELETE_error$.next('')\n\n this.DELETE$ = this.httpManagerService.deleteRequest<ClientInfo>(reqParams.apiOptions, reqParams.path)\n .pipe(\n // tap((data) => console.log(\"API DELETE response\", data)),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'DELETE'))\n })\n )\n\n }\n\n onStreamPostRequest() {\n\n if (!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n let payload = {}\n let apiPath: string[] = reqParams.path\n let apiOptions = reqParams.apiOptions\n let responseMapper: (items: any) => any = (items) => items.response\n\n if (this.AIType === 0) {\n\n // API request\n payload = { prompt: this.questionControl.value }\n\n } else {\n\n // Local Ollama request\n apiOptions.server = \"api\"\n apiPath = [\"generate\"]\n apiOptions.stream = true\n apiOptions.streamType = this.streamType as StreamType\n payload = {\n model: \"phi3:latest\",\n prompt: this.questionControl.value,\n stream: true,\n }\n\n responseMapper = (items) => items.map((word: any) => word.response).flat().join('')\n\n }\n\n this.requestParams.STREAM = apiOptions\n this.STREAM_AI$ = EMPTY\n this.STREAM_AI_error$.next('')\n\n this.STREAM_AI$ = this.httpManagerService.postRequest<any>(payload, apiOptions, apiPath).pipe(\n map(responseMapper),\n tap(() => this.questionControl.reset()),\n catchError(error => throwError(() => this.errorHandling(error, 'STREAM')))\n )\n\n }\n\n\n onStreamRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n reqParams.apiOptions.stream = true\n reqParams.apiOptions.streamType = StreamType.NDJSON\n\n this.requestParams.GET = reqParams.apiOptions\n this.STREAM$ = this.httpManagerService.getRequest<ClientInfo[]>(reqParams.apiOptions, reqParams.path)\n .pipe(\n tap((data) => {\n console.log(\"API STREAM response\", data)\n if (data && data.length > 0) {\n this.updateDisplayedColumns(data)\n }\n }),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'STREAM'))\n })\n )\n\n }\n\n onDownloadCompleted() {\n\n const message = \"Download Completed\"\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.SUCCESS,\n icon: 'sentiment_satisfied_alt',\n })\n\n this.toastMessage.toastMessage(display)\n }\n\n onDownloadFailed(err: string) {\n\n const message = \"Download Failed\"\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.ERROR,\n icon: 'warning',\n })\n\n this.toastMessage.toastMessage(display)\n }\n\n errorHandling(err: any, type: string) {\n if(type === 'GET') this.GET_error$.next(err.message)\n if(type === 'POST') this.POST_error$.next(err.message)\n if(type === 'PUT') this.PUT_error$.next(err.message)\n if(type === 'DELETE') this.DELETE_error$.next(err.message)\n if(type === 'STREAM') this.STREAM_error$.next(err.message)\n }\n\n onSelectAIType(type: number) {\n this.AIType = type\n }\n\n // ═══════════════════════════════════════════════════════════════════════════\n // BATCH REQUEST DEMO METHODS\n // ═══════════════════════════════════════════════════════════════════════════\n\n /**\n * Execute parallel batch request - fetch 5 users from JSONPlaceholder with individual states\n */\n onExecuteParallelBatch() {\n this.isParallelLoading = true\n this.parallelError = undefined\n this.parallelExecutionTime = undefined\n this.parallelResults = undefined\n\n const requests = this.createBatchRequests(\n 'https://jsonplaceholder.typicode.com',\n ['users'],\n [1, 2, 3, 4, 5]\n )\n\n const startTime = performance.now()\n\n this.httpManagerService.getParallelRequest(requests, BatchOptions.adapt({\n concurrency: 3,\n ignoreErrors: true,\n logErrors: true\n })).pipe(\n tap(results => {\n this.parallelResults = results\n this.parallelExecutionTime = performance.now() - startTime\n this.isParallelLoading = false\n }),\n catchError(error => {\n this.parallelError = error.message || 'Parallel batch failed'\n this.isParallelLoading = false\n return throwError(() => error)\n })\n ).subscribe()\n }\n\n /**\n * Execute sequential batch request - fetch 5 todos from JSONPlaceholder with individual states\n */\n onExecuteSequentialBatch() {\n this.isSequentialLoading = true\n this.sequentialError = undefined\n this.sequentialExecutionTime = undefined\n this.sequentialResults = undefined\n\n const requests = this.createBatchRequests(\n 'https://jsonplaceholder.typicode.com',\n ['todos'],\n [1, 2, 3, 4, 5]\n )\n\n const startTime = performance.now()\n\n this.httpManagerService.getSequentialRequest(requests, BatchOptions.adapt({\n stopOnError: false,\n ignoreErrors: true,\n logErrors: true\n })).pipe(\n tap(results => {\n this.sequentialResults = results\n this.sequentialExecutionTime = performance.now() - startTime\n this.isSequentialLoading = false\n }),\n catchError(error => {\n this.sequentialError = error.message || 'Sequential batch failed'\n this.isSequentialLoading = false\n return throwError(() => error)\n })\n ).subscribe()\n }\n\n /**\n * Execute stream batch request - fetch 5 posts with real-time state updates\n */\n onExecuteStreamBatch() {\n this.isStreamLoading = true\n this.streamError = undefined\n this.streamExecutionTime = undefined\n this.streamBatchStates = []\n this.streamProgress = undefined\n\n const requests = this.createBatchRequests(\n 'https://jsonplaceholder.typicode.com',\n ['posts'],\n [1, 2, 3, 4, 5]\n )\n\n const startTime = performance.now()\n\n this.httpManagerService.getBatchRequestsStream(requests, {\n mode: 'parallel',\n concurrency: 3,\n stopOnError: false,\n ignoreErrors: true,\n logErrors: true\n }).pipe(\n tap(state => {\n this.streamBatchStates[state.index] = state\n this.streamProgress = calculateBatchProgress(this.streamBatchStates.filter(s => s !== undefined) as BatchRequestState<any>[]);\n\n if (!state.isPending) {\n this.streamExecutionTime = performance.now() - startTime\n }\n\n this.isStreamLoading = this.streamBatchStates.some(s => s && s.isPending)\n }),\n catchError(error => {\n this.streamError = error.message || 'Stream batch failed'\n this.isStreamLoading = false\n return throwError(() => error)\n })\n ).subscribe()\n }\n\n /**\n * Type guard for pending state\n */\n isPendingState(state: BatchRequestState<any>): boolean {\n return state.isPending === true\n }\n\n /**\n * Type guard for success state\n */\n isSuccessState(state: BatchRequestState<any>): boolean {\n return state.isPending === false && state.data !== undefined\n }\n\n /**\n * Type guard for error state\n */\n isErrorState(state: BatchRequestState<any>): boolean {\n return state.isPending === false && state.error !== undefined\n }\n\n /**\n * Helper to create batch requests from IDs\n */\n private createBatchRequests(\n baseUrl: string,\n basePath: string[],\n ids: number[]\n ): ApiRequest[] {\n return ids.map(id =>\n ApiRequest.adapt({\n server: baseUrl,\n path: [...basePath, id]\n })\n )\n }\n\n /**\n * Check if result is successful (not undefined)\n */\n isSuccess(result: any): boolean {\n return result !== undefined && result !== null\n }\n\n /**\n * Format execution time for display\n */\n formatTime(ms: number): string {\n if (ms < 1000) {\n return `${Math.round(ms)}ms`\n }\n return `${(ms / 1000).toFixed(2)}s`\n }\n\n /**\n * Get success count from results array\n */\n getSuccessCount(results?: any[]): number {\n if (!results) return 0\n return results.filter(r => r !== undefined).length\n }\n\n /**\n * Get failure count from results array\n */\n getFailureCount(results?: any[]): number {\n if (!results) return 0\n return results.filter(r => r === undefined).length\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <h2>\n HTTP Request Manager\n </h2>\n\n <div [formGroup]=\"requestForm\" style=\"margin-top: 2rem;\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Adapter (Model)</mat-label>\n <mat-select formControlName=\"adapter\" #adapterSelect>\n <mat-option>None</mat-option>\n @for (adapter of sampleAdaptors; track adapter) {\n <mat-option [value]=\"adapter.value\">\n {{adapter.label}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mapper (Model)</mat-label>\n <mat-select formControlName=\"mapper\" #mapperSelect>\n <mat-option>None</mat-option>\n @for (mapper of sampleMappers; track mapper) {\n <mat-option [value]=\"mapper.value\">\n {{mapper.label}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n @if (adapterSelect.value || mapperSelect.value) {\n <div style=\"display: flex; margin-bottom: 2rem;\">\n <div style=\"flex:1\" class=\"box\">\n <h3>Adapter (Incoming)</h3>\n @if (adapterSelect.value) {\n <div>\n {{ props(adapterSelect.value) | json }}\n </div>\n } @else {\n No Transformation\n }\n </div>\n <div style=\"flex:1\" class=\"box\">\n <h3>Mapper (Outgoing)</h3>\n @if (mapperSelect.value) {\n <div>\n {{ props(mapperSelect.value) | json }}\n </div>\n } @else {\n No Transformation\n }\n </div>\n </div>\n }\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>RestPath (/ delimited)</mat-label>\n <input matInput placeholder=\"clients/list\" formControlName=\"path\">\n </mat-form-field>\n </div>\n <div>\n <div formArrayName=\"headers\">\n @for (task of headers.controls; track task; let i = $index) {\n <div [formGroupName]=\"i\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Key</mat-label>\n <input matInput placeholder=\"authentication\" formControlName=\"key\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Value</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"value\">\n </mat-form-field>\n <div style=\"margin-top: .5rem;\">\n <button mat-icon-button (click)=\"removeHeader(i)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n <button mat-stroked-button (click)=\"addHeader()\" class=\"btn\">Add Header</button>\n </div>\n <div style=\"margin-top: 2rem; display: flex; flex-direction:column; gap: 1rem;\">\n <div>\n <mat-slide-toggle #failedState>Retry on Failed</mat-slide-toggle>\n @if (failedState.checked) {\n <div style=\"display: flex; gap: .5rem; margin-top: 1rem;\" formGroupName=\"retry\">\n <mat-form-field appearance=\"outline\">\n <mat-label>#of Times</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"times\" value=\"3\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Delay Until Next</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"delay\" value=\"3\">\n </mat-form-field>\n </div>\n }\n </div>\n <div>\n <mat-slide-toggle #pollingState>Polling</mat-slide-toggle>\n @if (pollingState.checked) {\n <div>\n <mat-form-field appearance=\"outline\" style=\"margin-top: 1rem\">\n <mat-label>#of Seconds</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"polling\" value=\"3\">\n </mat-form-field>\n </div>\n }\n </div>\n </div>\n </div>\n\n <div style=\"margin-bottom: 1rem; margin-top: 2rem;\">\n @if ((isPending$ | async)) {\n <mat-progress-bar mode=\"indeterminate\"\n ></mat-progress-bar>\n }\n @if (pollingState.checked && !(isPending$ | async)) {\n <mat-progress-bar mode=\"determinate\"\n [value]=\"(this.countdown$ | async)\"\n ></mat-progress-bar>\n }\n </div>\n\n <div style=\"margin-top: 1rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onGetRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if ((GET_error$ | async); as get_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ get_error }}</mat-error>\n </div>\n }\n\n @if ((GET$ | async); as dataRecord) {\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(GET$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n }\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">POST Request</h2>\n <div>\n <button mat-raised-button (click)=\"onCreateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if ((POST_error$ | async); as post_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ post_error }}</mat-error>\n </div>\n }\n\n @if ((POST$ | async); as dataRecord) {\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(POST$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n }\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">PUT Request</h2>\n <div>\n <button mat-raised-button (click)=\"onUpdateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if ((PUT_error$ | async); as put_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ put_error }}</mat-error>\n </div>\n }\n\n <h3>Include Record ID in the RestPath</h3>\n\n @if ((PUT$ | async); as dataRecord) {\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(PUT$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n }\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">DELETE Request</h2>\n <div>\n <button mat-raised-button (click)=\"onDeleteRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <h3>Include Record ID in the RestPath</h3>\n\n @if ((DELETE_error$ | async); as delete_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ delete_error }}</mat-error>\n </div>\n }\n\n @if ((DELETE$ | async); as dataRecord) {\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(DELETE$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n }\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">Streaming GET Request</h2>\n <div style=\"display: flex; gap: 1rem; align-items: center;\">\n <div style=\"display: flex; gap: 1rem; align-items: center;\">\n {{ streamType }}\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon>data_usage</mat-icon>\n </button>\n </div>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let item of streamTypes\" (click)=\"onStreamType(item.id)\">{{ item.value }}</button>\n </mat-menu>\n <button mat-raised-button (click)=\"onStreamRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <!-- <div *ngIf=\"(STREAM_error$ | async) as stream_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ stream_error }}</mat-error>\n </div> -->\n\n <div style=\"margin-top: 1rem;\">\n @if ((STREAM$ | async); as data) {\n <div class=\"container\">\n <table mat-table [dataSource]=\"data\" class=\"mat-elevation-z8\">\n\n <!-- Dynamic columns -->\n <ng-container *ngFor=\"let column of displayedColumns\" [matColumnDef]=\"column\">\n <th mat-header-cell *matHeaderCellDef> {{ column | titlecase }} </th>\n <td mat-cell *matCellDef=\"let element\">\n @if (isObject(element[column]); as objValue) {\n <pre style=\"margin: 0; font-size: 0.8em; white-space: pre-wrap;\">{{ objValue | json }}</pre>\n } @else {\n {{ element[column] }}\n }\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n\n <!-- Debug info -->\n <div style=\"margin-top: 1rem; font-size: 0.8em; color: #666;\">\n Columns: {{ displayedColumns.join(', ') }} | Records: {{ data.length }}\n </div>\n </div>\n }\n </div>\n\n</div>\n\n<div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n</div>\n\n<div style=\"margin-top: 2rem\">\n <!-- Parallel Requests Section -->\n <div>\n <div style=\"display: flex; align-items: center; gap: 1rem; margin-bottom: 1rem;\">\n <h2 style=\"flex: 1; margin: 0;\">Parallel Requests</h2>\n <button\n mat-raised-button\n color=\"primary\"\n (click)=\"onExecuteParallelBatch()\"\n [disabled]=\"isParallelLoading\"\n style=\"min-width: 200px;\">\n <mat-icon>sync</mat-icon>\n <span style=\"margin-left: 8px;\">\n {{ isParallelLoading ? 'Loading...' : 'Fetch 5 Users' }}\n </span>\n </button>\n </div>\n\n <!-- Loading Indicator -->\n @if (isParallelLoading) {\n <div style=\"margin: 1rem 0;\">\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n <p style=\"margin-top: 0.5rem; color: #666;\">\n Executing parallel requests (concurrency: 3)...\n </p>\n </div>\n }\n\n <!-- Results -->\n @if (parallelResults) {\n <div style=\"margin: 1rem 0;\">\n <mat-card appearance=\"outlined\">\n <mat-card-content>\n <div style=\"display: grid; gap: 0.5rem;\">\n @for (result of parallelResults; track $index; let i = $index) {\n <div\n style=\"padding: 0.75rem; border-radius: 4px; border: 1px solid;\n {{ result ? 'background: #e3f2fd; border-color: #2196f3;' :\n 'background: #ffebee; border-color: #f44336;' }}\">\n @if (result) {\n <div style=\"display: flex; align-items: center; gap: 0.5rem; justify-content: space-between;\">\n <div style=\"display: flex; align-items: center; gap: 0.5rem;\">\n <mat-icon style=\"color: #2196f3; font-size: 18px;\">check_circle</mat-icon>\n <strong>User #{{ result.id }}:</strong>\n <span>{{ result.name }}</span>\n </div>\n <span style=\"color: #2196f3; font-weight: bold;\">Complete</span>\n </div>\n } @else {\n <div style=\"display: flex; align-items: center; gap: 0.5rem; justify-content: space-between;\">\n <div style=\"display: flex; align-items: center; gap: 0.5rem;\">\n <mat-icon style=\"color: #f44336; font-size: 18px;\">error</mat-icon>\n <strong>Request {{ i + 1 }}:</strong>\n <span>Failed</span>\n </div>\n <span style=\"color: #f44336; font-weight: bold;\">Error</span>\n </div>\n }\n </div>\n }\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n }\n\n <!-- Execution Metrics -->\n @if (parallelExecutionTime !== undefined) {\n <div style=\"background: #f5f5f5; padding: 1rem; border-radius: 4px; margin: 1rem 0;\">\n <div style=\"display: flex; gap: 2rem;\">\n <div>\n <strong>⏱Execution Time:</strong>\n <span style=\"margin-left: 0.5rem; color: #4caf50;\">\n {{ formatTime(parallelExecutionTime) }}\n </span>\n </div>\n <div>\n <strong>Mode:</strong>\n <span style=\"margin-left: 0.5rem;\">Parallel</span>\n </div>\n </div>\n </div>\n }\n\n <!-- Error Display -->\n @if (parallelError) {\n <div style=\"margin-top: 1rem;\">\n <mat-error>{{ parallelError }}</mat-error>\n </div>\n }\n </div>\n\n <!-- Sequential Requests Section -->\n <div>\n <div style=\"display: flex; align-items: center; gap: 1rem; margin-bottom: 1rem;\">\n <h2 style=\"flex: 1; margin: 0;\">Sequential Requests</h2>\n <button\n mat-raised-button\n color=\"accent\"\n (click)=\"onExecuteSequentialBatch()\"\n [disabled]=\"isSequentialLoading\"\n style=\"min-width: 200px;\">\n <mat-icon>timeline</mat-icon>\n <span style=\"margin-left: 8px;\">\n {{ isSequentialLoading ? 'Loading...' : 'Fetch 5 Todos' }}\n </span>\n </button>\n </div>\n\n <!-- Loading Indicator -->\n @if (isSequentialLoading) {\n <div style=\"margin: 1rem 0;\">\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n <p style=\"margin-top: 0.5rem; color: #666;\">\n Executing sequential requests (one at a time)...\n </p>\n </div>\n }\n\n <!-- Results -->\n @if (sequentialResults) {\n <div style=\"margin: 1rem 0;\">\n <mat-card appearance=\"outlined\">\n <mat-card-content>\n <div style=\"display: grid; gap: 0.5rem;\">\n @for (result of sequentialResults; track $index; let i = $index) {\n <div\n style=\"padding: 0.75rem; border-radius: 4px; border: 1px solid;\n {{ result ? 'background: #e3f2fd; border-color: #2196f3;' :\n 'background: #ffebee; border-color: #f44336;' }}\">\n @if (result) {\n <div style=\"display: flex; align-items: center; gap: 0.5rem; justify-content: space-between;\">\n <div style=\"display: flex; align-items: center; gap: 0.5rem;\">\n <mat-icon style=\"color: #2196f3; font-size: 18px;\">check_circle</mat-icon>\n <strong>Todo #{{ result.id }}:</strong>\n <span style=\"flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\">\n {{ result.title }}\n </span>\n </div>\n </div>\n } @else {\n <div style=\"display: flex; align-items: center; gap: 0.5rem; justify-content: space-between;\">\n <div style=\"display: flex; align-items: center; gap: 0.5rem;\">\n <mat-icon style=\"color: #f44336; font-size: 18px;\">error</mat-icon>\n <strong>Request {{ i + 1 }}:</strong>\n <span>Failed</span>\n </div>\n <span style=\"color: #f44336; font-weight: bold;\">Error</span>\n </div>\n }\n </div>\n }\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n }\n\n <!-- Execution Metrics -->\n @if (sequentialExecutionTime !== undefined) {\n <div style=\"background: #f5f5f5; padding: 1rem; border-radius: 4px; margin: 1rem 0;\">\n <div style=\"display: flex; gap: 2rem;\">\n <div>\n <strong>Execution Time:</strong>\n <span style=\"margin-left: 0.5rem; color: #4caf50;\">\n {{ formatTime(sequentialExecutionTime) }}\n </span>\n </div>\n <div>\n <strong>Mode:</strong>\n <span style=\"margin-left: 0.5rem;\">Sequential</span>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Stream Mode Section -->\n <div>\n <div style=\"display: flex; align-items: center; gap: 1rem; margin-bottom: 1rem;\">\n <h2 style=\"flex: 1; margin: 0;\">Stream Mode (Real-time States)</h2>\n <button\n mat-raised-button\n color=\"primary\"\n (click)=\"onExecuteStreamBatch()\"\n [disabled]=\"isStreamLoading\"\n style=\"min-width: 200px;\">\n <mat-icon>auto_awesome</mat-icon>\n <span style=\"margin-left: 8px;\">\n {{ isStreamLoading ? 'Loading...' : 'Fetch 5 Posts' }}\n </span>\n </button>\n </div>\n\n <!-- Loading Indicator -->\n @if (isStreamLoading) {\n <div style=\"margin: 1rem 0;\">\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n <p style=\"margin-top: 0.5rem; color: #666;\">\n Executing parallel requests with real-time state updates...\n </p>\n </div>\n }\n\n <!-- Progress Bar -->\n @if (streamProgress) {\n <div style=\"background: #f5f5f5; padding: 1rem; border-radius: 4px; margin: 1rem 0;\">\n <div style=\"display: flex; gap: 2rem; margin-bottom: 0.5rem;\">\n <div>\n <strong>Execution Time:</strong>\n <span style=\"margin-left: 0.5rem; color: #4caf50;\">\n {{ formatTime(streamExecutionTime || 0) }}\n </span>\n </div>\n <div>\n <strong>Progress:</strong>\n <span style=\"margin-left: 0.5rem;\">\n {{ streamProgress.completed }} / {{ streamProgress.total }} completed\n </span>\n </div>\n <div>\n <strong>Pending:</strong>\n <span style=\"margin-left: 0.5rem;\">\n {{ streamProgress.pending }}\n </span>\n </div>\n <div>\n <strong>Failed:</strong>\n <span style=\"margin-left: 0.5rem;\">\n {{ streamProgress.failed }}\n </span>\n </div>\n </div>\n <mat-progress-bar\n mode=\"determinate\"\n [value]=\"streamProgress.percent\"\n color=\"accent\">\n </mat-progress-bar>\n <p style=\"margin-top: 0.5rem; text-align: right; color: #666;\">\n {{ streamProgress.percent }}%\n </p>\n </div>\n }\n\n <!-- Error Display -->\n @if (streamError) {\n <div style=\"margin-top: 1rem;\">\n <mat-error>{{ streamError }}</mat-error>\n </div>\n }\n\n <!-- Individual Request States -->\n @if (streamBatchStates.length > 0) {\n <div style=\"margin-top: 1rem;\">\n <mat-card appearance=\"outlined\">\n <mat-card-content>\n <div style=\"display: grid; gap: 0.5rem;\">\n @for (state of filteredStreamStates; track state.index; let i = $index) {\n <div\n style=\"padding: 0.75rem; border-radius: 4px; border: 1px solid;\n {{ isPendingState(state) ? 'background: #fff3e0; border-color: #ff9800;' :\n isSuccessState(state) ? 'background: #e3f2fd; border-color: #2196f3;' :\n 'background: #ffebee; border-color: #f44336;' }}\">\n @if (isPendingState(state)) {\n <div style=\"display: flex; align-items: center; gap: 0.5rem;\">\n <mat-spinner diameter=\"16\" style=\"margin-right: 0.5rem;\"></mat-spinner>\n <strong>Request {{ state.index + 1 }}:</strong>\n <span>Loading...</span>\n </div>\n } @else if (isSuccessState(state)) {\n <div style=\"display: flex; align-items: center; gap: 0.5rem;\">\n <mat-icon style=\"color: #2196f3; font-size: 18px;\">check_circle</mat-icon>\n <strong>Post #{{ state.data.id }}:</strong>\n <span style=\"flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\">\n {{ state.data.title }}\n </span>\n </div>\n } @else {\n <div style=\"display: flex; align-items: center; gap: 0.5rem;\">\n <mat-icon style=\"color: #f44336; font-size: 18px;\">error</mat-icon>\n <strong>Request {{ state.index + 1 }}:</strong>\n <span>Failed</span>\n <mat-chip style=\"margin-left: auto; font-size: 0.8em; background: #f44336; color: white;\">\n Error\n </mat-chip>\n </div>\n }\n </div>\n }\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n }\n </div>\n\n <!-- Comparison Info -->\n <div style=\"padding: 1rem; background: whitesmoke; border-radius: 4px; border: 1px solid #ccc;\">\n <h4 style=\"margin-top: 0;\">Key Differences</h4>\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 1rem;\">\n <div>\n <strong>Parallel:</strong>\n <ul style=\"margin: 0.5rem 0 0 1rem; padding: 0;\">\n <li>Faster execution (concurrent)</li>\n <li>Multiple requests simultaneously</li>\n <li>Results may complete out of order</li>\n <li>Best for: Independent requests</li>\n </ul>\n </div>\n <div>\n <strong>Sequential:</strong>\n <ul style=\"margin: 0.5rem 0 0 1rem; padding: 0;\">\n <li>Slower execution (one-by-one)</li>\n <li>Requests execute in order</li>\n <li>Results always in request order</li>\n <li>Best for: Dependent requests</li>\n </ul>\n </div>\n </div>\n </div>\n</div>\n\n</div>\n","import { Component, Inject, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { LocalStorageManagerService, SettingOptions, StorageOption, StorageType } from '../../services/local-storage-manager-service';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { BehaviorSubject, EMPTY, Observable, of } from 'rxjs';\nimport { ConfigOptions, LocalStorageOptions, UtilsService } from '../../services';\nimport { switchMap, tap, map } from 'rxjs/operators';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\n\n@Component({\n selector: 'app-local-storage-demo',\n templateUrl: './local-storage-demo.component.html',\n styleUrls: ['./local-storage-demo.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class LocalStorageDemoComponent implements OnInit {\n\n fb = inject(FormBuilder)\n utils = inject(UtilsService)\n\n type$ = new BehaviorSubject(StorageType.GLOBAL)\n get type() {\n return (this.typeControl.value) ? +this.typeControl.value : 0\n }\n\n typeControl = this.fb.control(StorageType.GLOBAL.toString())\n\n localStorageManagerService = inject(LocalStorageManagerService)\n\n settings$: Observable<any> = this.localStorageManagerService.settings$\n\n setting$ = (store: string) => this.localStorageManagerService.setting$(store)\n\n storageForm = this.fb.group({\n store: this.fb.control<string|null>(null),\n type: 'local',\n settingType: 'local',\n encrypted: false,\n data: this.fb.control<string>('', Validators.required),\n })\n\n newStoreForm = this.fb.group({\n name: this.fb.control<string|null>(null, Validators.required),\n storage: 'local',\n encrypted: false,\n data: this.fb.control<string>('', Validators.required),\n expiresIn: this.fb.control('0')\n })\n\n store$?: Observable<any>\n\n storeData$ = this.storageForm.get('store')?.valueChanges\n .pipe(\n switchMap((data: any) => {\n return data\n ? this.localStorageManagerService.store$(data.name)\n : of('')\n }),\n tap(data => {\n this.storageForm.get('data')?.patchValue(data, { emitEvent: false })\n })\n )\n\n expiresIn = (epoch: number) => this.utils.expiresIn(epoch)\n\n get isValid() {\n return this.newStoreForm.valid\n }\n\n get isValidData() {\n return this.storageForm.valid\n }\n\n isValidJSON = (str: string) => {\n try {\n JSON.parse(str)\n return true\n } catch (e) {\n return false\n }\n }\n\n displayedColumns: string[] = ['name', 'id', 'encrypted', 'expires', \"option\"];\n\n filterData = (values: SettingOptions[]) => {\n if(!values) return []\n return values.filter((item: any) => item.options.storage === +this.type)\n }\n\n data$?: Observable<any>\n\n store: any\n\n create = false\n\n storeProps?: LocalStorageOptions\n options?: SettingOptions\n\n constructor(@Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) { }\n\n ngOnInit() {\n\n this.storeProps = this.configOptions?.LocalStorageOptions\n this.options = this.storeProps?.options\n\n if(this.options?.storage) {\n this.typeControl.patchValue(this.options.storage.toString())\n this.typeControl.disable()\n } else {\n this.typeControl.enable()\n }\n\n if(this.options?.expiresIn) {\n this.newStoreForm.get('expiresIn')?.patchValue(this.options.expiresIn)\n this.newStoreForm.get('expiresIn')?.disable()\n } else {\n this.newStoreForm.get('expiresIn')?.enable()\n }\n\n if(this.options?.encrypted) {\n this.newStoreForm.get('encrypted')?.patchValue(this.options.encrypted)\n this.newStoreForm.get('encrypted')?.disable()\n } else {\n this.newStoreForm.get('encrypted')?.enable()\n }\n\n }\n\n onCreateStore() {\n\n if(!this.isValid) return\n\n const store = this.newStoreForm.value\n if(!store.name || store.name === '') return\n\n const options = { storage: this.type, encrypted: store.encrypted, expiresIn: store.expiresIn }\n\n this.localStorageManagerService.createStore({\n name: store.name,\n data: store.data,\n options: SettingOptions.adapt(options)\n })\n\n this.newStoreForm.reset()\n this.create = false\n }\n\n onUpdateStore(store: any) {\n\n if(!this.storageForm.valid) return\n\n const storeData = this.storageForm.value\n\n const data = JSON.parse(storeData.data || '')\n\n const type = (storeData.type === 'local') ? StorageType.GLOBAL : StorageType.SESSION\n\n this.localStorageManagerService.updateStore({\n name: store.name,\n data\n })\n\n }\n\n onSelectedRow(store: any) {\n this.store = store\n this.data$ = this.localStorageManagerService.store$(store.name).pipe(map(item => JSON.stringify(item)))\n this.create = false\n }\n\n onCreate() {\n this.onCancel()\n this.create = true\n }\n\n onDelete(store: StorageOption) {\n\n this.localStorageManagerService.deleteStore({\n name: store.name,\n })\n\n this.onCancel()\n }\n\n onCancel() {\n this.data$ = EMPTY\n this.store = null\n this.create = false\n }\n\n onUpdate(store: StorageOption, data: any) {\n\n this.localStorageManagerService.updateStore({\n name: store.name,\n data: JSON.parse(data)\n })\n\n this.onCancel()\n\n }\n\n onReset() {\n this.localStorageManagerService.resetStore()\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <div style=\"display: flex; gap: 1rem\">\n <h2 style=\"padding-top: .5rem; display: flex;\">\n <div style=\"padding-top: .5rem;\">Local Storage Manager</div>\n <div>\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon>info</mat-icon>\n </button>\n </div>\n </h2>\n <span style=\"flex:1\"></span>\n <div style=\"padding-top: .25rem;\">\n <mat-button-toggle-group name=\"storage\" [formControl]=\"typeControl\" (change)=\"onCancel()\">\n <mat-button-toggle value=\"0\">Local Storage</mat-button-toggle>\n <mat-button-toggle value=\"1\">Session Storage</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n <div style=\"margin-top: .25rem;\">\n <button mat-icon-button (click)=\"onCreate()\">\n <mat-icon>add</mat-icon>\n </button>\n </div>\n </div>\n\n <ng-container *ngIf=\"storeProps?.storageName || storeProps?.storageSettingsName\">\n <div style=\"display: flex; gap: .5rem; flex-direction: column; border: gray solid thin; background-color: whitesmoke; padding: 1rem;\"\n >\n <div style=\"display: flex;\">\n <div *ngIf=\"storeProps?.storageSettingsName\" style=\"flex:1\">\n Database: <b>{{ storeProps?.storageSettingsName }}</b>\n </div>\n <div *ngIf=\"storeProps?.storageName\" style=\"flex:1\">\n Data: <b>{{ storeProps?.storageName }}</b>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div style=\"margin-top: 2rem;\" [formGroup]=\"newStoreForm\" *ngIf=\"create; else LIST\">\n\n <h2>Create Store</h2>\n\n <div style=\"display: flex; gap: 1rem;\">\n <div style=\"flex:1\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Store Name</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"name\">\n </mat-form-field>\n </div>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Expires In...</mat-label>\n <mat-select formControlName=\"expiresIn\">\n <mat-option value=\"0\">None</mat-option>\n <mat-option value=\"30s\">30 Seconds</mat-option>\n <mat-option value=\"1mn\">1 Minute</mat-option>\n <mat-option value=\"1hr\">1 Hour</mat-option>\n <mat-option value=\"1d\">1 Day</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"margin-top: 1rem;\">\n <mat-slide-toggle formControlName=\"encrypted\">Encrypted</mat-slide-toggle>\n </div>\n </div>\n\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex: 1;\">\n <mat-label>Data (Must be an Object or Array of any)</mat-label>\n <textarea matInput placeholder=\"[]\" formControlName=\"data\" #json></textarea>\n </mat-form-field>\n </div>\n <mat-error *ngIf=\"!isValidJSON(json.value)\">Not Valid Data</mat-error>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onCreateStore()\" [disabled]=\"!(isValid && isValidJSON(json.value))\">\n Save Store\n </button>\n </div>\n\n </div>\n\n <ng-template #LIST>\n\n <div style=\"margin-top: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n{{ settings$ | async | json }}\n <div *ngIf=\"filterData(settings$ | async) as data\">\n <ng-container *ngIf=\"data.length > 0; else NO_DATA\">\n <table mat-table [dataSource]=\"data\">\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> Store </th>\n <td mat-cell *matCellDef=\"let element\" style=\"font-weight: bold; text-transform: uppercase;\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"encrypted\">\n <th mat-header-cell *matHeaderCellDef style=\"text-align: center;\"> Encrypted </th>\n <td mat-cell *matCellDef=\"let element\" style=\"text-align: center;\">\n <ng-container *ngIf=\"element.options.encrypted; else NO\">YES</ng-container>\n <ng-template #NO><span style=\"color:gray\">NO</span></ng-template>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"expires\">\n <th mat-header-cell *matHeaderCellDef style=\"text-align: center;\"> Expires </th>\n <td mat-cell *matCellDef=\"let element\" style=\"text-align: center;\">\n <ng-container *ngIf=\"element.options.expires !== 0; else NO_DATA\">\n {{expiresIn(element.options.expires)}}\n </ng-container>\n <ng-template #NO_DATA>\n ∞\n </ng-template>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"option\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell *matCellDef=\"let element\" style=\"padding-right: 0;\">\n <div style=\"display: flex;justify-content: flex-end;\">\n <button mat-icon-button color=\"warn\" (click)=\"onDelete(element); $event.stopPropagation()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" (click)=\"onSelectedRow(row)\"></tr>\n </table>\n </ng-container>\n\n <ng-template #NO_DATA>\n <h3 style=\"margin-top: 1rem;\">No Data</h3>\n </ng-template>\n\n <div *ngIf=\"(data$ | async) as data\" style=\"margin-top: 2rem;\">\n <div style=\"margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <h3>STORE: <span style=\"font-weight: bold;\">{{ store.name | uppercase }}</span></h3>\n <h3>SETTINGS: {{ setting$(store.name) | async | json }}</h3>\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex: 1;\">\n <mat-label>Data (Must be an Object or Array of any)</mat-label>\n <textarea matInput placeholder=\"[]\" #json [value]=\"data\"></textarea>\n </mat-form-field>\n </div>\n <mat-error *ngIf=\"!isValidJSON(json.value)\">Not Valid Data</mat-error>\n\n <div style=\"display: flex; gap: .5rem;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onCancel()\">Cancel</button>\n <button mat-stroked-button (click)=\"onUpdate(store, json.value)\" [disabled]=\"!(isValidJSON(json.value))\">Update</button>\n </div>\n </div>\n </div>\n\n </ng-template>\n\n <div style=\"margin-top: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <button mat-stroked-button (click)=\"onReset()\">Delete All Stores</button>\n </div>\n\n</div>\n\n\n<mat-menu #menu=\"matMenu\">\n <div style=\"padding: 1rem;\">\n <p>Please note that the LocalStorage (encryption) and management of data is dependant on initializing the APP_ID</p>\n <p>Must provide a value for <b>APP_ID</b> in AppModule->Providers</p>\n <mat-divider></mat-divider>\n <div style=\"font-size: smaller; margin-top: .5rem;\">\n <p>Example: UUID (self.crypto.randomUUID() to generate)</p>\n <div style=\"background-color: whitesmoke; padding: 1rem;\">\n {<br>\n provide: APP_ID,<br>\n useValue: \"056991ac-3537-43ab-b5b9-83edf6554eff\",<br>\n }\n </div>\n </div>\n </div>\n</mat-menu>\n","export interface OIDCClientInterface {\n spiffe: string\n id: number\n first_name: string\n last_name: string\n email: string\n}\n\nexport class OIDCClient implements OIDCClientInterface {\n\n constructor(\n public spiffe: string = '',\n public id: number = 0,\n public first_name: string = '',\n public last_name: string = '',\n public email: string = '',\n ) {}\n\n static adapt(item?: any): OIDCClient {\n\n return new OIDCClient(\n item?.spiffe,\n item?.id,\n item?.first_name,\n item?.last_name,\n item?.email,\n )\n\n }\n\n}\n","import { Injectable } from '@angular/core';\n\nimport { DatabaseStorage, DataType, RetryOptions } from '../../../models';\nimport { HTTPManagerStateService, ApiRequest } from '../../../services';\nimport { OIDCClient } from '../models/oidc-client.model';\n\n/**\n * StateServiceDemo - Core state management and WebSocket connection service\n *\n * Handles:\n * - WebSocket connection setup\n * - Base HTTP state management\n * - Connection status and retry logic\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class StateServiceDemo extends HTTPManagerStateService<any> {\n\n attempts$ = this.wsRetryAttempts$;\n nextRetry$ = this.wsNextRetry$;\n\n constructor() {\n super(\n ApiRequest.adapt({\n server: '',\n retry: RetryOptions.adapt({\n times: 3,\n delay: 1,\n }),\n adapter: OIDCClient.adapt,\n }),\n DataType.ARRAY,\n DatabaseStorage.adapt({\n table: 'ws_demo_data',\n expiresIn: '5mn',\n })\n );\n }\n\n /**\n * Initialize WebSocket connection with server configuration\n * @param server - Backend server URL\n * @param wsServer - WebSocket server URL\n * @param jwtToken - JWT authentication token\n * @param user - User information\n * @param path - Path for constructing channel name (e.g., ['ai','tests'])\n */\n updateConnection(server: string, wsServer: string, jwtToken: string, user: any, path: (string|number)[] = ['ai','tests']) {\n // Construct channel name from path: ['ai','tests'] → 'ai/tests'\n const channelId = path.join('/');\n\n this.setApiRequestOptions({\n server,\n path, // Set the path for HTTP requests\n retry: RetryOptions.adapt({\n times: 3,\n delay: 1,\n }),\n adapter: OIDCClient.adapt,\n ws: {\n id: channelId, // Use path-based channel ID instead of hardcoded 'USERS123'\n wsServer,\n jwtToken,\n user,\n retry: RetryOptions.adapt({\n times: 10,\n delay: 5,\n }),\n }\n });\n\n this.userAction$.subscribe(user => {\n console.log('User Action:', user);\n });\n }\n\n /**\n * Get all available channels\n */\n override getAllChannels() {\n this.httpManagerService.getAllChannels();\n }\n\n /**\n * Subscribe to a channel\n */\n override subscribeToChannel(channel: string) {\n super.subscribeToChannel(channel);\n }\n\n /**\n * Unsubscribe from a channel\n */\n override unsubscribeFromChannel(channel: string) {\n super.unsubscribeFromChannel(channel);\n }\n\n // =====================\n // Notification Channel Methods (MES- prefix)\n // These override methods from HTTPManagerStateService\n // =====================\n\n /**\n * Create a notification channel (MES- prefix)\n */\n override createNotificationChannel(channel: string) {\n super.createNotificationChannel(channel);\n }\n\n /**\n * Get all notification channels list (in-memory)\n */\n override getNotificationChannels() {\n super.getNotificationChannels();\n }\n\n /**\n * Get today's notification channels from database\n * Returns unique channels that have notifications posted today\n */\n override getTodaysNotificationChannels() {\n super.getTodaysNotificationChannels();\n }\n\n /**\n * Define and load previous day's notification channels from database\n * Creates channels in memory and broadcasts updated list\n */\n definePreviousNotificationChannels() {\n const options = ApiRequest.adapt({\n path: ['notifications', 'channels', 'define-previous']\n });\n\n this.httpManagerService.postRequest({}, options).subscribe({\n next: (response: any) => {\n console.log('📋 Previous day channels loaded:', response);\n // The server will broadcast updated channel list to all WebSocket clients\n },\n error: (error) => {\n console.error('❌ Failed to load previous day channels:', error);\n }\n });\n }\n\n /**\n * Subscribe to notification channel with optional date filters\n */\n override subscribeToNotificationChannel(channel: string, options?: { startEpoch?: number; endEpoch?: number }, user?: any) {\n super.subscribeToNotificationChannel(channel, options, user);\n }\n\n /**\n * Unsubscribe from notification channel\n */\n override unsubscribeFromNotificationChannel(channel: string) {\n super.unsubscribeFromNotificationChannel(channel);\n }\n\n /**\n * Send a notification to a channel\n */\n override sendNotification(channel: string, content: any) {\n super.sendNotification(channel, content);\n }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ChannelMessage } from '../../../services/ws-manager-service/models/channel-message.model';\nimport { StateServiceDemo } from './state-service-demo.service';\n\n/**\n * MessageServiceDemo - Channel messaging service (PUB- prefix channels)\n *\n * Handles:\n * - Sending messages to channels\n * - Channel subscription for messaging\n * - Real-time message broadcast\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class MessageServiceDemo {\n\n private stateService = inject(StateServiceDemo);\n\n // Expose observables from state service\n channels$ = this.stateService.channels$;\n subscribedChannels$ = this.stateService.subscribedChannels$;\n communicationMessages$ = this.stateService.communicationMessages$;\n latestCommunicationMessages$ = this.stateService.latestCommunicationMessages$;\n connectionStatus$ = this.stateService.connectionStatus$;\n user$ = this.stateService.user$;\n data$ = this.stateService.data$;\n\n /**\n * Helper to ensure channel has PUB- prefix\n */\n private toPublicChannel(channel: string): string {\n return channel.startsWith('PUB-') ? channel : `PUB-${channel}`;\n }\n\n /**\n * Helper to strip PUB- prefix for display\n */\n private fromPublicChannel(channel: string): string {\n return channel.startsWith('PUB-') ? channel.replace('PUB-', '') : channel;\n }\n\n /**\n * Create a new public channel\n */\n createChannel(channel: string) {\n const publicChannel = this.toPublicChannel(channel);\n this.stateService.createChannel(publicChannel);\n }\n\n /**\n * Get all available channels\n */\n getAllChannels() {\n this.stateService.getAllChannels();\n }\n\n /**\n * Subscribe to a channel to receive messages\n */\n subscribeToChannel(channel: string) {\n const publicChannel = this.toPublicChannel(channel);\n this.stateService.subscribeToChannel(publicChannel);\n }\n\n /**\n * Unsubscribe from a channel\n */\n unsubscribeFromChannel(channel: string) {\n const publicChannel = this.toPublicChannel(channel);\n this.stateService.unsubscribeFromChannel(publicChannel);\n }\n\n /**\n * Send a message to one or more channels\n */\n sendMessage(data: ChannelMessage, channels?: string[]) {\n const publicChannels = channels?.map(ch => this.toPublicChannel(ch));\n console.log('sendMessage', data, 'to channels:', publicChannels);\n this.stateService.wsMessaging(data, publicChannels);\n }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { StateServiceDemo } from './state-service-demo.service';\n\n/**\n * Notification message interface\n */\nexport interface NotificationMessage {\n id: number;\n channel: string;\n created: number; // epoch seconds\n user_name: string;\n sessionId: any;\n content: any;\n}\n\n/**\n * NotificationServiceDemo - Notification channel service (MES- prefix channels)\n *\n * Handles:\n * - Creating notification channels\n * - Subscribing to notifications with date filters\n * - Sending notifications (persisted to database)\n * - Receiving real-time and historical notifications\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NotificationServiceDemo {\n\n private stateService = inject(StateServiceDemo);\n\n // Notification channels from state service (in-memory - contains MES- channels from server)\n notificationChannels$ = this.stateService.notificationChannels$;\n\n // Today's notification channels from database (channels with data for today)\n todaysNotificationChannels$ = this.stateService.todaysNotificationChannels$;\n\n private subscribedNotificationChannelsSubject = new BehaviorSubject<Set<string>>(new Set());\n subscribedNotificationChannels$ = this.subscribedNotificationChannelsSubject.asObservable();\n\n // Notification messages from state service\n notificationMessages$ = this.stateService.notificationMessages$;\n\n // Latest notification from state service\n latestNotification$ = this.stateService.latestNotification$;\n\n // Expose connection status from state service\n connectionStatus$ = this.stateService.connectionStatus$;\n\n /**\n * Create a notification channel\n * NOTE: MES- prefix is added automatically by HTTPManagerStateService\n */\n createNotificationChannel(channel: string) {\n console.log('📢 createNotificationChannel:', channel);\n this.stateService.createNotificationChannel(channel);\n }\n\n /**\n * Get all notification channels (in-memory)\n */\n getNotificationChannels() {\n console.log('📢 getNotificationChannels');\n this.stateService.getNotificationChannels();\n }\n\n /**\n * Get today's notification channels from database\n * Returns unique channels that have notifications posted today\n */\n getTodaysNotificationChannels() {\n console.log('📢 getTodaysNotificationChannels (from DB)');\n this.stateService.getTodaysNotificationChannels();\n }\n\n /**\n * Define and load previous day's notification channels from database\n * Creates channels in memory and broadcasts updated list\n */\n definePreviousNotificationChannels() {\n console.log('📢 definePreviousNotificationChannels');\n this.stateService.definePreviousNotificationChannels();\n }\n\n /**\n * Subscribe to a notification channel with optional date filter\n * NOTE: MES- prefix is added automatically by HTTPManagerStateService\n * @param channel Base channel name (without MES- prefix)\n * @param options { startEpoch?, endEpoch? }\n * @param user User info for subscription\n */\n subscribeToNotificationChannel(channel: string, options?: { startEpoch?: number; endEpoch?: number }, user?: any) {\n // Add MES- prefix for local tracking (to match what state service sends)\n const prefixedChannel = channel.startsWith('MES-') ? channel : `MES-${channel}`;\n console.log('📢 subscribeToNotificationChannel:', prefixedChannel, options);\n\n // Add to local subscribed channels immediately for UI feedback\n const currentSubs = this.subscribedNotificationChannelsSubject.value;\n currentSubs.add(prefixedChannel);\n this.subscribedNotificationChannelsSubject.next(new Set(currentSubs));\n\n // Send subscription request to server (state service adds MES- prefix)\n this.stateService.subscribeToNotificationChannel(channel, options, user);\n }\n\n /**\n * Unsubscribe from a notification channel\n * NOTE: MES- prefix is added automatically by HTTPManagerStateService\n */\n unsubscribeFromNotificationChannel(channel: string) {\n // Add MES- prefix for local tracking (to match what state service sends)\n const prefixedChannel = channel.startsWith('MES-') ? channel : `MES-${channel}`;\n console.log('📢 unsubscribeFromNotificationChannel:', prefixedChannel);\n\n // Remove from local subscribed channels immediately for UI feedback\n const currentSubs = this.subscribedNotificationChannelsSubject.value;\n currentSubs.delete(prefixedChannel);\n this.subscribedNotificationChannelsSubject.next(new Set(currentSubs));\n\n // Send unsubscription request to server (state service adds MES- prefix)\n this.stateService.unsubscribeFromNotificationChannel(channel);\n }\n\n /**\n * Send a notification to a channel\n * NOTE: MES- prefix is added automatically by HTTPManagerStateService\n */\n sendNotification(channel: string, content: any, user?: any) {\n const notificationContent = {\n sessionId: {\n id: user?.id,\n ldap: user?.ldap,\n name: user?.name,\n email: user?.email,\n color: user?.color,\n },\n ...content\n };\n\n console.log('📢 sendNotification:', channel, notificationContent);\n\n // State service adds MES- prefix\n this.stateService.sendNotification(channel, notificationContent);\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { RandomNumber } from '../../../../services/utils/encryption/random';\nimport { RetryOptions, DataType, DatabaseStorage } from '../../../../models';\n\nimport { HTTPManagerStateService, ApiRequest, RequestOptions } from '../../../../services';\n\nimport { OIDCClient } from '../../models/oidc-client.model';\nimport { UserData } from '../../models/user-data.model';\nimport { ChannelMessage } from '../../../../services/ws-manager-service/models/channel-message.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StateDataRequestService extends HTTPManagerStateService<any> {\n\n attempts$ = this.wsRetryAttempts$\n nextRetry$ = this.wsNextRetry$\n\n path: (string|number)[] = ['ai','tests']\n\n constructor() {\n super(\n ApiRequest.adapt({\n server: '',\n retry: RetryOptions.adapt({\n times: 3,\n delay: 1,\n }),\n adapter: OIDCClient.adapt,\n ws: {\n id: ``,\n // wsChannels: ['allChannels'],\n // access: ['read,write,delete,update'],\n wsServer: '',\n jwtToken: '',\n user: UserData.adapt(),\n retry: RetryOptions.adapt({\n times: 3,\n delay: 10,\n }),\n }\n }),\n DataType.ARRAY,\n DatabaseStorage.adapt({\n table: 'ws_demo_data',\n expiresIn: '5mn',\n })\n )\n }\n\n updateConnection(\n server: string,\n wsServer: string,\n jwtToken: string,\n user: any,\n path: (string|number)[] = [],\n ) {\n\n this.path = path\n\n this.setApiRequestOptions({\n server,\n retry: RetryOptions.adapt({\n times: 3,\n delay: 1,\n }),\n adapter: OIDCClient.adapt,\n ws: {\n id: this.path.join('/'),\n wsServer,\n jwtToken,\n user, // general info about user\n retry: RetryOptions.adapt({\n times: 3,\n delay: 10,\n }),\n }\n })\n\n }\n\n addData() {\n\n const num = RandomNumber(1000, 9999)\n\n const newData = {\n \"spiffe\": `sample.com/developer/${num}`,\n \"last_name\": \"boni\",\n \"email\": \"mikeboni@hotmail.com\",\n \"first_name\": \"mike\"\n }\n\n this.createRecord(newData, RequestOptions.adapt({ path: this.path }) )\n\n }\n\n sendMessage(data: ChannelMessage) {\n console.log('sendMessage', data)\n this.wsMessaging(data)\n }\n\n getData() {\n this.fetchRecords(RequestOptions.adapt({ path: this.path }) )\n }\n\n updateData(data: any) {\n const sampleOptions = RequestOptions.adapt({ path: [...this.path, data.id] })\n console.log('updateData', sampleOptions)\n this.updateRecord(data, sampleOptions)\n\n }\n\n deleteData(data: any) {\n const sampleOptions = RequestOptions.adapt({ path: [...this.path, data.id] })\n console.log('deleteData', sampleOptions)\n this.deleteRecord(sampleOptions)\n }\n\n}\n","import { Component, inject, Input, OnInit } from '@angular/core';\nimport { RandomNumber } from '../../../../services/utils/encryption/random';\n\nimport { StateDataRequestService } from '../services/state-data-request.service';\nimport { switchMap, timer, map, startWith } from 'rxjs';\nimport { WebSocketMessageService } from '../../../../services/ws-manager-service/services/websocket-message.service';\nimport { StateMessage } from '../../../../services/ws-manager-service/models/state-message.model';\n\n@Component({\n selector: 'app-ws-data-control',\n templateUrl: './ws-data-control.component.html',\n styleUrls: ['./ws-data-control.component.scss'],\n standalone: false\n})\nexport class WsDataControlComponent implements OnInit {\n\n @Input() server!: string;\n @Input() wsServer!: string;\n @Input() jwtToken!: string;\n @Input() user!: any;\n @Input() path: (string|number)[] = ['ai','tests'];\n\n stateDataRequestService = inject(StateDataRequestService)\n webSocketMessageService = inject(WebSocketMessageService)\n\n user$ = this.stateDataRequestService.user$\n users$ = this.stateDataRequestService.userList$\n\n userAction$ = this.stateDataRequestService.userAction$\n .pipe(\n switchMap((action) =>\n timer(3 * 1000).pipe(\n map(() => null),\n startWith(action)\n )\n )\n );\n\n data$ = this.stateDataRequestService.data$;\n\n isUser = (user: any, userItem: any) => {\n return user.sessionId === userItem.sessionId\n }\n\n ngOnInit() {\n this.stateDataRequestService.updateConnection(this.server, this.wsServer, this.jwtToken, this.user, this.path);\n this.stateDataRequestService.getData()\n }\n\n onGetData() {\n this.stateDataRequestService.getData()\n }\n\n onAddData() {\n this.stateDataRequestService.addData()\n }\n\n onUpdateData(data: any[]) {\n\n const num = RandomNumber(1000, 9999)\n\n const newData = {\n \"spiffe\": `wavecoders.com/developer/${num}`,\n \"id\": 63,\n \"last_name\": \"boni\",\n \"email\": \"mikeboni@hotmail.com\",\n \"first_name\": \"mike\"\n }\n\n this.stateDataRequestService.updateData(newData)\n\n }\n\n onRemoveData(data: any) {\n const lastRec = data[data.length -1]\n this.stateDataRequestService.deleteData(lastRec)\n }\n\n /**\n * Test direct state message via WebSocketMessageService\n * Sends an UPDATE message that should trigger fetchRecord() in the state manager\n *\n * @param recordId - The record ID to update (default: 63)\n * @param useFakeSessionId - If true, uses a fake sessionId to avoid filtering (default: true)\n * @param customSessionId - Optional custom sessionId (overrides useFakeSessionId if provided)\n */\n onTestDirectStateMessage(recordId: number = 63, useFakeSessionId: boolean = true, customSessionId?: string) {\n // Get actual sessionId from sessionStorage (stored by HTTPManagerStateService)\n const actualSessionId = sessionStorage.getItem('WSID') || 'unknown';\n\n // Determine sessionId to use\n let sessionId: string;\n if (customSessionId) {\n sessionId = customSessionId;\n } else if (useFakeSessionId) {\n sessionId = `test-${Date.now()}`;\n } else {\n // Use actual sessionId (will be filtered out by receiver)\n sessionId = actualSessionId;\n }\n\n // Build StateMessage with same structure as CRUD operations\n const stateMessage: StateMessage = {\n sessionId: {\n id: sessionId,\n name: useFakeSessionId ? 'Test Sender' : (this.user?.name || 'Current User')\n },\n content: {\n method: 'UPDATE',\n path: ['ai', 'tests', recordId],\n user: {\n id: sessionId,\n name: useFakeSessionId ? 'Test Sender' : (this.user?.name || 'Current User')\n }\n }\n };\n\n console.log('🧪 [TEST] Sending direct state message:', {\n recordId,\n sessionId,\n actualSessionId,\n useFakeSessionId,\n stateMessage\n });\n\n const success = this.webSocketMessageService.sendStateMessage(\n ['ai', 'tests'],\n stateMessage\n );\n\n console.log('🧪 [TEST] Message sent:', {\n success,\n actualSessionId,\n sentSessionId: sessionId,\n expectedBehavior: success\n ? 'Server will broadcast to SYS-ai/tests subscribers'\n : 'Failed to send (check connection)',\n receiverBehavior: sessionId !== actualSessionId\n ? 'Receiver will process message and call fetchRecord()'\n : 'Receiver will filter out (sessionId match)'\n });\n }\n\n}\n","@if ((data$ | async); as data) {\n <div style=\"margin: 1rem;\">\n @if ((users$ |async); as users) {\n <div>\n @if (users.length > 0) {\n <h3 style=\"margin: 0;\">Connected Users</h3>\n } @else {\n <h3 style=\"margin: 0;\">No Users</h3>\n }\n <mat-chip-set>\n @for (user of users; track $index) {\n <mat-chip\n [class.user-chip--primary]=\"isUser(user, (user$ | async))\"\n [style.color]=\"isUser(user, (user$ | async)) ? '#fff' : null\"\n [disableRipple]=\"true\"\n >\n {{ user.name || user.ldap || user.id || 'Anonymous' }}\n </mat-chip>\n }\n </mat-chip-set>\n </div>\n }\n <div style=\"margin-top: 1rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div class=\"box\" style=\"margin-bottom: 1rem;\" *ngIf=\"(userAction$ | async) as userAction\">\n {{ userAction?.content?.user?.name }} has {{ userAction?.content?.method }}\n </div>\n\n <h3 style=\"margin: 0;\">Data Actions</h3>\n <div style=\"display: flex; gap: 1rem; margin-bottom: 1rem;\">\n <button mat-stroked-button (click)=\"onGetData()\">Get Data</button>\n <div style=\"flex:1\"></div>\n <button mat-stroked-button color=\"accent\" (click)=\"onUpdateData(data)\">Update Data</button>\n <button mat-stroked-button color=\"warn\" (click)=\"onRemoveData(data)\">Remove Data</button>\n <button mat-stroked-button color=\"primary\" (click)=\"onAddData()\">Add Data</button>\n </div>\n\n <h3 style=\"margin: 0; margin-top: 1rem;\">WebSocketMessageService Test</h3>\n\n <p style=\"font-size: 0.875rem; color: #666; margin: 0;\">\n <strong>Note:</strong> \"Fake SessionId\" will be received and processed. \"Current SessionId\" will be filtered out (self-message).\n @if (data.length > 0) {\n <div>\n <table mat-table [dataSource]=\"data\" style=\"border: 1px solid grey;\">\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n <ng-container matColumnDef=\"spiffe\">\n <th mat-header-cell *matHeaderCellDef> Spiffe </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.spiffe}} </td>\n </ng-container>\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.first_name}} {{element.last_name}}</td>\n </ng-container>\n <ng-container matColumnDef=\"email\">\n <th mat-header-cell *matHeaderCellDef> Email </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.email}} </td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"['id', 'spiffe', 'name', 'email']\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['id', 'spiffe', 'name', 'email'];\"></tr>\n </table>\n <div style=\"border: 1px solid grey; padding: .5rem; border-top: none;\">\n <h3 style=\"margin: 0;\">Total Records {{ data.length }}</h3>\n </div>\n </div>\n } @else {\n <div style=\"margin-top: 1rem; font-style: italic;\">\n No Data Available\n </div>\n }\n\n <div style=\"margin-bottom: 1rem; margin-top: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"display: flex; gap: 0.5rem; margin-bottom: 1rem;\">\n <button mat-flat-button color=\"primary\" (click)=\"onTestDirectStateMessage(63, true)\">\n Test UPDATE (Fake Id)\n </button>\n <button mat-stroked-button (click)=\"onTestDirectStateMessage(63, false)\">\n Test UPDATE (Current Id)\n </button>\n <button mat-stroked-button (click)=\"onTestDirectStateMessage(63, false, 'custom-session-123')\">\n Test UPDATE (Custom Id)\n </button>\n </div>\n\n </div>\n}\n\n","import { Component, inject, Input, OnInit, OnDestroy } from '@angular/core';\nimport { MessageServiceDemo } from '../../services/message-service-demo.service';\nimport { StateServiceDemo } from '../../services/state-service-demo.service';\nimport { FormBuilder, FormControl, Validators } from '@angular/forms';\nimport { Observable, combineLatest, map, EMPTY, Subject, takeUntil, filter, take, startWith, distinctUntilChanged } from 'rxjs';\n\nimport { ChannelMessage } from '../../../../services/ws-manager-service/models/channel-message.model';\nimport { MessageDisplayRouterService } from '../../../../message-display/services/message-display-router.service';\n\n@Component({\n selector: 'app-ws-messaging',\n templateUrl: './ws-messaging.component.html',\n styleUrls: ['./ws-messaging.component.css'],\n standalone: false\n})\nexport class WsMessagingComponent implements OnInit, OnDestroy {\n\n @Input() server!: string;\n @Input() wsServer!: string;\n @Input() jwtToken!: string;\n @Input() user!: any;\n @Input() path: (string|number)[] = ['ai','tests']; // Default path for channel name\n\n private destroy$ = new Subject<void>();\n\n fb = inject(FormBuilder);\n messageService = inject(MessageServiceDemo);\n stateService = inject(StateServiceDemo);\n messageDisplayService = inject(MessageDisplayRouterService);\n\n // Only show public channels (starting with \"PUB-\"), strip prefix for display\n // SYS- channels are private/internal and hidden from users\n channels$ = this.messageService.channels$.pipe(\n map(channels => channels\n ?.filter(channel => channel.startsWith('PUB-'))\n .map(channel => channel.replace('PUB-', '')) || []\n ),\n startWith([] as string[]),\n distinctUntilChanged((prev, curr) => prev.length === curr.length && prev.every((v, i) => v === curr[i]))\n );\n\n // Track subscribed public channels only, strip prefix for display\n subscribedChannels$ = this.messageService.subscribedChannels$.pipe(\n map(set => Array.from(set)\n .filter(channel => channel.startsWith('PUB-'))\n .map(channel => channel.replace('PUB-', ''))\n ),\n startWith([] as string[]),\n distinctUntilChanged((prev, curr) => prev.length === curr.length && prev.every((v, i) => v === curr[i]))\n );\n\n user$ = this.stateService.user$;\n\n data$ = this.stateService.data$;\n\n connectionStatus$ = this.stateService.connectionStatus$;\n\n // Form for creating new channels\n newChannelName = this.fb.control<string>('', [Validators.required, Validators.minLength(2)])\n\n // Form for selecting channels to send to and message content\n messages = this.fb.group({\n selectedChannels: this.fb.control<string[]>([], Validators.required),\n content: this.fb.control<string|null>(null, Validators.required),\n })\n\n get selectedChannels() {\n return this.messages.get('selectedChannels') as FormControl\n }\n\n get content() {\n return this.messages.get('content') as FormControl\n }\n\n communicationMessages$ = this.messageService.communicationMessages$;\n latestCommunicationMessages$ = this.messageService.latestCommunicationMessages$;\n\n chat$: Observable<{ user: any, messages: any[]}|any> = combineLatest([this.user$, this.communicationMessages$])\n .pipe(\n map(([user, messages]: any) => ({ user, messages })),\n map(obj => {\n\n if(!obj.user) return EMPTY\n\n const mainUser = ''\n\n const messages = obj.messages.map((item: any) => {\n // Message transformation logic\n })\n\n return { user: mainUser, messages }\n\n })\n );\n\n ngOnInit() {\n\n this.stateService.updateConnection(this.server, this.wsServer, this.jwtToken, this.user, this.path);\n\n // Only trigger once when connection becomes true\n this.connectionStatus$.pipe(\n filter(status => status === true),\n take(1),\n takeUntil(this.destroy$)\n ).subscribe(() => {\n // Wait a moment for subscription to be processed, then fetch channels\n setTimeout(() => {\n console.log('📋 Fetching channels after connection...');\n this.messageService.getAllChannels();\n }, 500); // 500ms delay to ensure subscription is processed\n });\n\n // Subscribe to latest messages and display using rule-based routing\n this.latestCommunicationMessages$.pipe(\n filter(message => !!message),\n takeUntil(this.destroy$)\n ).subscribe((message: any) => {\n console.log('🔔 Message received, routing to display:', message);\n\n // NEW: Delegate to MessageDisplayRouterService\n // The message payload determines the display type via rules\n this.messageDisplayService.display(message);\n\n // OLD: Hardcoded snackbar (removed)\n // const messageContent = message.content?.content?.message || message.content?.message || '';\n // this.toastService.toastMessage(...);\n });\n\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Create a new public channel without auto-subscribing\n * NOTE: PUB- prefix is added by messageService.createChannel\n */\n onCreateChannel() {\n if (this.newChannelName.invalid) return;\n\n const channelName = this.newChannelName.value?.trim();\n if (channelName) {\n // Pass base channel name - service adds PUB- prefix\n this.messageService.createChannel(channelName);\n this.newChannelName.reset();\n // Server will broadcast updated channel list to all clients automatically\n }\n }\n\n /**\n * Subscribe to a channel to receive messages\n * NOTE: PUB- prefix is added by messageService.subscribeToChannel\n */\n onSubscribeToChannel(channel: string) {\n // Pass base channel name - service adds PUB- prefix\n this.messageService.subscribeToChannel(channel);\n // Reset channel selection when subscriptions change\n this.selectedChannels.reset([]);\n }\n\n /**\n * Unsubscribe from a channel\n * NOTE: PUB- prefix is added by messageService.unsubscribeFromChannel\n */\n onUnsubscribeFromChannel(channel: string) {\n // Pass base channel name - service adds PUB- prefix\n this.messageService.unsubscribeFromChannel(channel);\n // Reset channel selection when subscriptions change\n this.selectedChannels.reset([]);\n }\n\n /**\n * Handle chip toggle for subscribe/unsubscribe\n */\n onChipToggle(event: any, channel: string) {\n const isSelected = event.selected;\n\n console.log('🎯 Chip toggle event:', {\n channel,\n isSelected,\n option: event.source\n });\n\n if (isSelected) {\n this.onSubscribeToChannel(channel);\n } else {\n this.onUnsubscribeFromChannel(channel);\n }\n }\n\n /**\n * Check if currently subscribed to a channel\n * Compares display names (without PUB- prefix)\n */\n isSubscribed(channel: string, subscribedChannels: string[]): boolean {\n return subscribedChannels.includes(channel);\n }\n\n onSendMessage() {\n this.messages.markAllAsTouched()\n\n if (this.messages.invalid) return\n\n const channelsToSend = this.selectedChannels.value as string[]\n if (channelsToSend.length === 0) return\n\n // Get user from observable - subscribe once\n this.user$.pipe(take(1)).subscribe(user => {\n if (!user) {\n console.error('❌ No user found');\n return;\n }\n\n // Pass base channel names - service adds PUB- prefix\n const message = ChannelMessage.adapt({\n sessionId: { // user object with 'id' as the ID field\n id: user.id,\n ldap: user.ldap,\n name: user.name,\n email: user.email,\n },\n content: { message: this.messages.value.content },\n })\n\n this.messageService.sendMessage(message, channelsToSend);\n this.content.reset();\n });\n\n }\n\n}\n","\n @if ((data$ | async); as data) {\n @if ((user$ | async); as user) {\n <div style=\"display: flex; gap: 1rem; flex-direction: column; margin-top: 1rem;\">\n\n <!-- Channel Creation Section -->\n <div style=\"padding: 1rem; background: #e3f2fd; border-radius: 4px;\">\n <strong>Create New Channel</strong>\n <div style=\"display: flex; flex-direction: column; margin-top: 0.5rem;\">\n <mat-form-field appearance=\"outline\" style=\"width: 100%;\">\n <mat-label>Channel Name</mat-label>\n <input matInput [formControl]=\"newChannelName\" placeholder=\"Enter channel name\"\n (keydown.enter)=\"onCreateChannel()\">\n </mat-form-field>\n <div style=\"display: flex; justify-content: flex-end; margin-top: -0.5rem;\">\n <button mat-raised-button color=\"primary\" (click)=\"onCreateChannel()\"\n [disabled]=\"newChannelName.invalid\">\n Create Channel\n </button>\n </div>\n </div>\n </div>\n\n <!-- Messaging Section - only show when subscribed to channels -->\n @if ((subscribedChannels$ | async); as subscribedChannels) {\n @if (subscribedChannels.length > 0) {\n <div style=\"padding: 1rem; background: #fff3e0; border-radius: 4px;\" [formGroup]=\"messages\">\n <strong>Send Message</strong>\n <!-- Debug: Show subscribed channels count -->\n <div style=\"font-size: 0.8rem; color: #666; margin-bottom: 0.5rem;\">\n Subscribed to {{ subscribedChannels.length }} channel(s): {{ subscribedChannels | json }}\n </div>\n\n <!-- Channel Selection with Checkboxes -->\n <div style=\"margin-top: 0.5rem;\">\n <mat-form-field appearance=\"outline\" style=\"width: 100%;\">\n <mat-label>Select Channels</mat-label>\n <mat-select formControlName=\"selectedChannels\" multiple>\n <mat-select-trigger>\n @if (selectedChannels.value?.length === 1) {\n {{ selectedChannels.value[0] }}\n } @else if (selectedChannels.value?.length > 1) {\n {{ selectedChannels.value[0] }} (+{{ selectedChannels.value.length - 1 }} {{ selectedChannels.value.length === 2 ? 'other' : 'others' }})\n }\n </mat-select-trigger>\n @for (channel of subscribedChannels; track channel; let i = $index) {\n <mat-option [value]=\"channel\">{{ channel }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- Message Input -->\n <div style=\"display: flex; flex-direction: column;\">\n <mat-form-field style=\"width: 100%;\" appearance=\"outline\">\n <mat-label>Message</mat-label>\n <textarea\n matInput placeholder=\"Type your message...\"\n formControlName=\"content\"\n (keydown.enter)=\"onSendMessage(); $event.preventDefault()\"\n ></textarea>\n </mat-form-field>\n <div style=\"display: flex; justify-content: flex-end; margin-top: -0.5rem;\">\n <button mat-raised-button color=\"primary\" (click)=\"onSendMessage()\"\n [disabled]=\"messages.invalid\">\n Send\n </button>\n </div>\n </div>\n </div>\n }\n }\n\n </div>\n }\n }\n\n <!-- Channel List with Subscription Controls using Chips -->\n @if ((channels$ | async); as channels) {\n @if ((subscribedChannels$ | async); as subscribedChannels) {\n <div style=\"padding: 1rem; background: #f5f5f5; border-radius: 4px; margin-top: 1rem;\">\n <strong>Subscribe to Channel(s)</strong>\n <div style=\"margin-top: 0.5rem;\">\n @if (channels.length === 0) {\n <div style=\"color: #666; font-style: italic;\">No channels available. Create one above.</div>\n } @else {\n <mat-chip-listbox\n aria-label=\"Channel selection\"\n [multiple]=\"true\">\n @for (channel of channels; track channel; let i = $index) {\n <mat-chip-option\n [selected]=\"isSubscribed(channel, subscribedChannels)\"\n (selectionChange)=\"onChipToggle($event, channel)\">\n {{ channel }}\n </mat-chip-option>\n }\n </mat-chip-listbox>\n }\n </div>\n </div>\n }\n }\n","import { Component, inject, Input, OnInit, OnDestroy } from '@angular/core';\nimport { NotificationServiceDemo } from '../../services/notification-service-demo.service';\nimport { StateServiceDemo } from '../../services/state-service-demo.service';\nimport { FormBuilder, FormControl, Validators } from '@angular/forms';\nimport { Subject, takeUntil, filter, startWith, distinctUntilChanged, map, tap, combineLatest } from 'rxjs';\n\n@Component({\n selector: 'app-ws-notifications',\n templateUrl: './ws-notifications.component.html',\n styleUrls: ['./ws-notifications.component.css'],\n standalone: false\n})\nexport class WsNotificationsComponent implements OnInit, OnDestroy {\n\n @Input() server!: string;\n @Input() wsServer!: string;\n @Input() jwtToken!: string;\n @Input() user!: any;\n\n private destroy$ = new Subject<void>();\n\n fb = inject(FormBuilder);\n notificationService = inject(NotificationServiceDemo);\n stateService = inject(StateServiceDemo);\n\n // Combine in-memory channels and today's DB channels, dedupe and strip prefix for display\n todaysNotificationChannels$ = combineLatest([\n this.notificationService.notificationChannels$.pipe(startWith([] as string[])),\n this.notificationService.todaysNotificationChannels$.pipe(startWith([] as string[]))\n ]).pipe(\n tap(([inMemory, fromDb]) => console.log('📢 In-memory channels:', inMemory, 'DB channels:', fromDb)),\n map(([inMemory, fromDb]) => {\n // Merge both sources and dedupe\n const allChannels = [...(inMemory || []), ...(fromDb || [])];\n const uniqueChannels = [...new Set(allChannels)]\n .filter(channel => channel.startsWith('MES-'))\n .map(channel => channel.replace('MES-', ''));\n return uniqueChannels.sort();\n }),\n tap(channels => console.log('📢 Combined channels for display:', channels)),\n distinctUntilChanged((prev, curr) => prev.length === curr.length && prev.every((v, i) => v === curr[i]))\n );\n\n // Track subscribed notification channels, strip prefix for display\n subscribedNotificationChannels$ = this.notificationService.subscribedNotificationChannels$.pipe(\n map(set => Array.from(set)\n .filter(channel => channel.startsWith('MES-'))\n .map(channel => channel.replace('MES-', ''))\n ),\n startWith([] as string[]),\n distinctUntilChanged((prev, curr) => prev.length === curr.length && prev.every((v, i) => v === curr[i]))\n );\n\n // Notification messages\n notificationMessages$ = this.notificationService.notificationMessages$;\n\n connectionStatus$ = this.stateService.connectionStatus$;\n\n /**\n * Helper to ensure channel has MES- prefix for outgoing communication\n */\n private toNotificationChannel(channel: string): string {\n return channel.startsWith('MES-') ? channel : `MES-${channel}`;\n }\n\n // Form for creating new notification channels\n newChannelName = this.fb.control<string>('', [Validators.required, Validators.minLength(2)]);\n\n // Channel connection selection\n selectedConnectionChannel = this.fb.control<string | null>(null);\n connectedChannel: string | null = null;\n\n // Table columns for notifications display\n displayedColumns: string[] = ['date', 'user', 'message'];\n\n // Form for date filter when subscribing\n dateFilter = this.fb.group({\n startDate: this.fb.control<Date | null>(null),\n endDate: this.fb.control<Date | null>(null),\n });\n\n // Form for sending notifications\n notificationForm = this.fb.group({\n content: this.fb.control<string | null>(null, Validators.required),\n });\n\n get content() {\n return this.notificationForm.get('content') as FormControl;\n }\n\n /**\n * Check if currently connected to a channel\n */\n isChannelConnected(subscribedChannels: string[]): boolean {\n return this.connectedChannel !== null && subscribedChannels.includes(this.connectedChannel);\n }\n\n /**\n * Connect to the selected channel\n */\n onConnectToChannel() {\n const channel = this.selectedConnectionChannel.value;\n if (!channel) return;\n\n this.connectedChannel = channel;\n this.onSubscribeToChannel(channel);\n }\n\n /**\n * Disconnect from the current channel\n */\n onDisconnectFromChannel() {\n if (this.connectedChannel) {\n this.onUnsubscribeFromChannel(this.connectedChannel);\n this.connectedChannel = null;\n }\n }\n\n ngOnInit() {\n // Request today's notification channels when connection is established\n this.connectionStatus$.pipe(\n filter(isConnected => isConnected),\n takeUntil(this.destroy$)\n ).subscribe(() => {\n // Request the list of today's notification channels from database\n this.notificationService.getTodaysNotificationChannels();\n });\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Create a new notification channel\n */\n onCreateChannel() {\n if (this.newChannelName.invalid) return;\n\n const channelName = this.newChannelName.value?.trim();\n if (channelName) {\n this.notificationService.createNotificationChannel(channelName);\n this.newChannelName.reset();\n }\n }\n\n /**\n * Define and load previous channels\n */\n onDefinePreviousChannels() {\n this.notificationService.definePreviousNotificationChannels();\n }\n\n /**\n * Subscribe to a notification channel with optional date filter\n */\n onSubscribeToChannel(channel: string) {\n const startDate = this.dateFilter.get('startDate')?.value as Date | null;\n const endDate = this.dateFilter.get('endDate')?.value as Date | null;\n\n const options: { startEpoch?: number; endEpoch?: number } = {};\n\n if (startDate) {\n // Set to start of day\n const startOfDay = new Date(startDate);\n startOfDay.setHours(0, 0, 0, 0);\n options.startEpoch = Math.floor(startOfDay.getTime() / 1000);\n }\n if (endDate) {\n // Set to end of day\n const endOfDay = new Date(endDate);\n endOfDay.setHours(23, 59, 59, 999);\n options.endEpoch = Math.floor(endOfDay.getTime() / 1000);\n }\n\n this.notificationService.subscribeToNotificationChannel(channel, options, this.user);\n }\n\n /**\n * Unsubscribe from a notification channel\n */\n onUnsubscribeFromChannel(channel: string) {\n this.notificationService.unsubscribeFromNotificationChannel(channel);\n }\n\n /**\n * Check if currently subscribed to a channel\n */\n isSubscribed(channel: string, subscribedChannels: string[]): boolean {\n return subscribedChannels.includes(channel);\n }\n\n /**\n * Handle chip click - toggle subscription state\n */\n onChipClick(channel: string, subscribedChannels: string[]) {\n const isCurrentlySubscribed = this.isSubscribed(channel, subscribedChannels);\n if (isCurrentlySubscribed) {\n this.onUnsubscribeFromChannel(channel);\n } else {\n this.onSubscribeToChannel(channel);\n }\n }\n\n /**\n * Send a notification\n */\n onSendNotification() {\n this.notificationForm.markAllAsTouched();\n\n if (this.notificationForm.invalid) return;\n\n const channel = this.connectedChannel;\n if (!channel) return;\n\n const messageContent = {\n message: this.content.value\n };\n\n this.notificationService.sendNotification(channel, messageContent, this.user);\n this.content.reset();\n }\n\n /**\n * Format epoch timestamp to readable date/time\n */\n formatTimestamp(epoch: number): string {\n return new Date(epoch * 1000).toLocaleString();\n }\n\n /**\n * Get today's date in YYYY-MM-DD format for date input default\n */\n getTodayDate(): string {\n return new Date().toISOString().split('T')[0];\n }\n\n}\n","<div style=\"display: flex; gap: 1rem; flex-direction: column; margin-top: 1rem;\">\n\n <!-- Channel Creation Section -->\n <div style=\"padding: 1rem; background: #e8f5e9; border-radius: 4px;\">\n <strong>Create Notification Channel</strong>\n <div style=\"display: flex; flex-direction: column; margin-top: 0.5rem;\">\n <mat-form-field appearance=\"outline\" style=\"width: 100%;\">\n <mat-label>Channel Name</mat-label>\n <input\n matInput\n [formControl]=\"newChannelName\"\n placeholder=\"Enter notification channel name\"\n (keydown.enter)=\"onCreateChannel()\"\n >\n </mat-form-field>\n <div style=\"display: flex; justify-content: flex-end; gap: 0.5rem;\">\n <!-- <button mat-raised-button color=\"accent\" (click)=\"onDefinePreviousChannels()\">\n Define Previous Channels\n </button> -->\n <button mat-raised-button color=\"primary\" (click)=\"onCreateChannel()\"\n [disabled]=\"newChannelName.invalid\">\n Create Channel 1\n </button>\n </div>\n </div>\n </div>\n\n <!-- Channel Connection Section - Only shown when NOT connected -->\n @if ((subscribedNotificationChannels$ | async); as subscribedChannels) {\n @if (!isChannelConnected(subscribedChannels)) {\n <div style=\"padding: 1rem; background: #e3f2fd; border-radius: 4px;\">\n <strong>Connect to Channel</strong>\n <div style=\"display: flex; gap: 1rem; margin-top: 0.5rem; flex-wrap: wrap; align-items: flex-start;\">\n <!-- Channel Selection (from today's DB data) -->\n <mat-form-field appearance=\"outline\" style=\"flex: 1; min-width: 200px;\">\n <mat-label>Select Channel</mat-label>\n <mat-select [formControl]=\"selectedConnectionChannel\" placeholder=\"Select a notification channel\">\n @for (channel of (todaysNotificationChannels$ | async) || []; track channel) {\n <mat-option [value]=\"channel\">{{ channel }}</mat-option>\n }\n @empty {\n <mat-option disabled>No channels with data for today</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <!-- Date Filter -->\n <mat-form-field appearance=\"outline\" style=\"flex: 1; min-width: 200px;\" [formGroup]=\"dateFilter\">\n <mat-label>Start Date</mat-label>\n <input matInput [matDatepicker]=\"startPicker\" formControlName=\"startDate\">\n <mat-datepicker-toggle matIconSuffix [for]=\"startPicker\"></mat-datepicker-toggle>\n <mat-datepicker #startPicker></mat-datepicker>\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" style=\"flex: 1; min-width: 200px;\" [formGroup]=\"dateFilter\">\n <mat-label>End Date</mat-label>\n <input matInput [matDatepicker]=\"endPicker\" formControlName=\"endDate\">\n <mat-datepicker-toggle matIconSuffix [for]=\"endPicker\"></mat-datepicker-toggle>\n <mat-datepicker #endPicker></mat-datepicker>\n </mat-form-field>\n </div>\n\n <div style=\"display: flex; gap: 0.5rem;\">\n <span style=\"flex:1\"></span>\n <button\n mat-raised-button color=\"primary\"\n (click)=\"onConnectToChannel()\"\n [disabled]=\"!selectedConnectionChannel.value\"\n >\n Connect\n </button>\n </div>\n </div>\n }\n }\n\n <!-- Send Notification Section -->\n @if ((subscribedNotificationChannels$ | async); as subscribedChannels) {\n @if (subscribedChannels.length > 0) {\n <div\n style=\"padding: 1rem; background: #fff8e1; border-radius: 4px;\"\n [formGroup]=\"notificationForm\"\n >\n <strong>Send Notification</strong>\n\n <!-- Notification Content -->\n <div style=\"display: flex; flex-direction: column; margin-top: 0.5rem;\">\n <mat-form-field style=\"width: 100%;\" appearance=\"outline\">\n <mat-label>Notification Message</mat-label>\n <textarea\n matInput placeholder=\"Type your notification...\"\n formControlName=\"content\"\n rows=\"2\"\n (keydown.enter)=\"onSendNotification(); $event.preventDefault()\"\n ></textarea>\n </mat-form-field>\n <div style=\"display: flex; justify-content: flex-end; margin-top: -0.5rem;\">\n <button\n mat-raised-button color=\"accent\"\n (click)=\"onSendNotification()\"\n [disabled]=\"notificationForm.invalid\"\n >\n Send Notification\n </button>\n </div>\n </div>\n </div>\n }\n }\n\n <!-- Notifications Table - Only shown when connected -->\n @if ((subscribedNotificationChannels$ | async); as subscribedChannels) {\n @if (isChannelConnected(subscribedChannels)) {\n @if ((notificationMessages$ | async); as notifications) {\n <div>\n <div style=\"display: flex; justify-content: space-between; align-items: center;\">\n <strong>Notifications ({{ notifications.length }})</strong>\n </div>\n\n @if (notifications.length > 0) {\n <div style=\"margin-top: 0.5rem; height: 400px; overflow: auto; border: 1px solid #888; border-radius: 4px;\">\n <table mat-table [dataSource]=\"notifications\" style=\"width: 100%;\">\n\n <!-- Date Column -->\n <ng-container matColumnDef=\"date\">\n <th mat-header-cell *matHeaderCellDef style=\"width: 180px;\">Date</th>\n <td mat-cell *matCellDef=\"let notification\">\n {{ formatTimestamp(notification.created) | date }}\n </td>\n </ng-container>\n\n <!-- User Column -->\n <ng-container matColumnDef=\"user\">\n <th mat-header-cell *matHeaderCellDef style=\"width: 150px;\">User</th>\n <td mat-cell *matCellDef=\"let notification\">\n <strong>{{ notification.user_name }}</strong>\n </td>\n </ng-container>\n\n <!-- Message Column -->\n <ng-container matColumnDef=\"message\">\n <th mat-header-cell *matHeaderCellDef>Message</th>\n <td mat-cell *matCellDef=\"let notification\">\n <div class=\"pill\" [style.background-color]=\"notification.content.sessionId.color || '#000000'\">\n {{ notification.content?.message || notification.content }}\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n </div>\n } @else {\n <div style=\"text-align: center; color: #666; padding: 2rem;\">\n <mat-icon style=\"font-size: 48px; height: 48px; width: 48px; opacity: 0.5;\">notifications_none</mat-icon>\n <p>No notifications yet. Waiting for notifications on this channel...</p>\n </div>\n }\n </div>\n\n <!-- Disconnect Button - Below the table -->\n <div style=\"display: flex; justify-content: right; padding: 1rem;\">\n <button mat-raised-button color=\"warn\" (click)=\"onDisconnectFromChannel()\">\n Disconnect from Channel\n </button>\n </div>\n }\n }\n }\n\n</div>\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-ws-ai-messaging',\n templateUrl: './ws-ai-messaging.component.html',\n styleUrls: ['./ws-ai-messaging.component.css'],\n standalone: false\n})\nexport class WsAiMessagingComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","<p>\n ws-ai-messaging coming soon!\n</p>\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-ws-chats',\n templateUrl: './ws-chats.component.html',\n styleUrls: ['./ws-chats.component.css'],\n standalone: false\n})\nexport class WsChatsComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","<p>\n ws-chats coming soon!\n</p>\n","import { Component, inject, OnInit, Input } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\n\nimport { HTTPManagerService } from '../../services';\nimport { StateServiceDemo } from './services';\n\n@Component({\n selector: 'app-request-manager-ws-demo',\n templateUrl: './request-manager-ws-demo.component.html',\n styleUrls: ['./request-manager-ws-demo.component.css'],\n standalone: false\n})\nexport class RequestManagerWsDemoComponent implements OnInit {\n\n httpManagerService = inject(HTTPManagerService)\n stateService = inject(StateServiceDemo)\n\n fb = inject(FormBuilder)\n\n @Input() server!: string;\n @Input() wsServer!: string;\n @Input() jwtToken!: string;\n @Input() user!: any;\n @Input() path: string[] = ['ai','tests'];\n\n user$ = this.stateService.user$\n\n attempts$ = this.stateService.wsRetryAttempts$\n nextRetry$ = this.stateService.wsNextRetry$\n\n connectionStatus$ = this.stateService.connectionStatus$\n\n data$ = this.stateService.data$;\n isPending$ = this.stateService.isPending$;\n\n ngOnInit() {\n this.stateService.updateConnection(this.server, this.wsServer, this.jwtToken, this.user, this.path);\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <h2 style=\"display: flex;\">\n <span style=\"flex:1\">HTTP Request State Manager - Websockets</span>\n @if ((connectionStatus$ | async); as connected) {\n <span>\n WS -\n <span style=\"color: green;\">Connected</span>\n </span>\n } @else {\n <span style=\"color: red;\">Disconnected {{ attempts$ | async }} - {{ nextRetry$ |async }}</span>\n }\n </h2>\n\n <div>\n\n @if ((user$ | async); as userInfo) {\n <div>\n <mat-toolbar>\n <div style=\"display: flex; flex:1\">\n <div style=\"flex:1\">{{ userInfo.name }}</div>\n <div>({{ userInfo.ldap }})</div>\n </div>\n </mat-toolbar>\n </div>\n }\n\n @if ((isPending$ | async)) {\n <div>\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n </div>\n }\n\n <mat-tab-group animationDuration=\"0ms\" [selectedIndex]=\"1\">\n\n <mat-tab label=\"WS - Data Control\">\n <!-- DATA CONTROL -->\n <app-ws-data-control\n [server]=\"server\"\n [wsServer]=\"wsServer\"\n [jwtToken]=\"jwtToken\"\n [user]=\"user\"\n [path]=\"path\"\n ></app-ws-data-control>\n\n </mat-tab>\n\n <mat-tab label=\"WS - Messaging\">\n <!-- MESSAGING -->\n <app-ws-messaging\n [server]=\"server\"\n [wsServer]=\"wsServer\"\n [jwtToken]=\"jwtToken\"\n [user]=\"user\"\n [path]=\"path\"\n ></app-ws-messaging>\n\n </mat-tab>\n\n <mat-tab label=\"WS - Notifications\">\n <!-- WS - Notifications -->\n <app-ws-notifications\n [server]=\"server\"\n [wsServer]=\"wsServer\"\n [jwtToken]=\"jwtToken\"\n [user]=\"user\"\n ></app-ws-notifications>\n </mat-tab>\n\n <mat-tab label=\"WS - Chats\" [disabled]=\"true\">\n <!-- WS - Chats -->\n <app-ws-chats></app-ws-chats>\n </mat-tab>\n\n <mat-tab label=\"WS - AI Messaging\" [disabled]=\"true\">\n <!-- WS - AI Messaging -->\n <app-ws-ai-messaging></app-ws-ai-messaging>\n </mat-tab>\n\n </mat-tab-group>\n</div>\n\n</div>\n\n","export interface SettingsInterface {\n enum_1: any\n enum_2: any\n enum_3: any\n enum_4: any\n}\n\nexport class Settings implements SettingsInterface {\n\n constructor(\n public enum_1 = [],\n public enum_2 = [],\n public enum_3 = [],\n public enum_4 = [],\n ) {}\n\n static adapt(item?: any): Settings {\n\n return new Settings(\n item?.enum_1,\n item?.enum_2,\n item?.enum_3,\n item?.enum_4,\n )\n\n }\n\n}\n","import { Injectable } from '@angular/core';\n\nimport { map } from 'rxjs';\n\nimport { SettingOptions, StorageType } from '../../../services';\nimport { StoreStateManagerService, StateStorageOptions } from '../../../services/store-state-manager-service';\nimport { Settings } from '../models/settings.model';\n\n\n@Injectable()\nexport class SettingsStateService extends StoreStateManagerService {\n\n constructor() {\n\n super(\n StateStorageOptions.adapt({\n store: 'sampleStore',\n options: SettingOptions.adapt({\n storage: StorageType.SESSION,\n encrypted: false\n }),\n model: Settings.adapt,\n }\n ))\n\n }\n\n updateEnum_1(value: any) {\n this.updateData(value)\n }\n\n updateEnum_2(value: any) {\n this.updateData(value)\n }\n\n getEnum(key: string) {\n return this.data$.pipe(\n map(item => item[key])\n )\n }\n\n getEnum_1() {\n return this.data$.pipe(\n map(item => item?.enum_1)\n )\n }\n\n}\n","import { Component, inject, OnInit } from '@angular/core';\nimport { RandomNumber } from '../../services';\nimport { SettingsStateService } from './services/settings-state.service';\n\n@Component({\n selector: 'app-store-state-manager-demo',\n templateUrl: './store-state-manager-demo.component.html',\n styleUrls: ['./store-state-manager-demo.component.css'],\n providers: [SettingsStateService],\n standalone: false\n})\nexport class StoreStateManagerDemoComponent implements OnInit {\n\n settingsStateService = inject(SettingsStateService)\n dataState$ = this.settingsStateService.data$\n\n dataEnum$ = this.settingsStateService.getEnum_1()\n\n ngOnInit() {\n }\n\n onUpdateEnum_1() {\n const rnd = RandomNumber(1000, 9999)\n this.settingsStateService.updateEnum_1({enum_1: [{ users: [1,2,3, rnd], random: rnd }]})\n }\n\n onUpdateEnum_2() {\n const rnd = RandomNumber(1000, 9999)\n this.settingsStateService.updateEnum_2({enum_2: [{ users: [1,2,3, rnd], random: rnd }]})\n }\n\n onGetEnum_1() {\n this.settingsStateService.getEnum_1().subscribe(data => console.log('DUMP:', data))\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <h2>\n <span>Store State Manager</span>\n <span style=\"margin-left: .5rem;\">\n <mat-icon color=\"accent\">fiber_new</mat-icon>\n </span>\n </h2>\n\n {{ dataState$ | async | json}}\n\n <div style=\"display: flex; gap:.5rem; margin-top: 1rem; margin-bottom: 1rem;\">\n <button mat-stroked-button (click)=\"onUpdateEnum_1()\">Update Start</button>\n <button mat-stroked-button (click)=\"onUpdateEnum_2()\">Update End</button>\n <button mat-stroked-button (click)=\"onGetEnum_1()\">Dump</button>\n </div>\n\n <div>\n <h3 style=\"margin: 0;\">Enum 1</h3>\n {{ dataEnum$ | async | json}}\n </div>\n\n</div>\n","import { Component, OnInit, inject, OnDestroy } from '@angular/core';\nimport { Subject, Observable, ReplaySubject } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { DataSource } from '@angular/cdk/collections';\n\nimport { TableSchemaDef } from '../../services/database-manager-service/models/table-schema';\nimport { DatabaseManagerService } from '../../services/database-manager-service';\n\nexport interface TableRecord {\n id: number;\n last_name: string;\n age: number;\n amount: number;\n}\n\n@Component({\n selector: 'app-database-data-demo',\n templateUrl: './database-data-demo.component.html',\n styleUrls: ['./database-data-demo.component.scss'],\n standalone: false\n})\nexport class DatabaseDataDemoComponent implements OnInit, OnDestroy {\n\n db = inject(DatabaseManagerService)\n private destroy$ = new Subject<void>();\n\n dataToDisplay: TableRecord[] = [];\n dataSource = new DatabaseDataSource(this.dataToDisplay);\n displayedColumns: string[] = ['id', 'last_name', 'age', 'amount'];\n\n names = ['Smith', 'Johnson', 'Williams', 'Brown', 'Jones', 'Garcia', 'Miller', 'Davis'];\n\n constructor() { }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n addData() {\n\n const newRecord: TableRecord = {\n id: Math.max(...this.dataToDisplay.map(r => r.id), 0) + 1,\n last_name: this.names[Math.floor(Math.random() * this.names.length)],\n age: Math.floor(Math.random() * 80) + 18,\n amount: Math.floor(Math.random() * 1000)\n };\n\n this.dataToDisplay = [...this.dataToDisplay, newRecord];\n this.db.createTableRecord('sample_table', newRecord).subscribe(\n () => this.refreshData()\n );\n\n }\n\n removeData() {\n if (this.dataToDisplay.length > 0) {\n const removedRecord = this.dataToDisplay[this.dataToDisplay.length - 1];\n this.dataToDisplay = this.dataToDisplay.slice(0, -1);\n this.db.deleteTableRecord('sample_table', removedRecord.id).subscribe(\n () => this.refreshData()\n );\n }\n }\n\n updateData() {\n\n if (this.dataToDisplay.length === 0) return;\n\n const randomIndex = Math.floor(Math.random() * this.dataToDisplay.length);\n const recordToUpdate = this.dataToDisplay[randomIndex];\n\n const updatedRecord: TableRecord = {\n ...recordToUpdate,\n last_name: this.names[Math.floor(Math.random() * this.names.length)],\n age: Math.floor(Math.random() * 80) + 18,\n amount: Math.floor(Math.random() * 1000)\n };\n\n this.dataToDisplay = this.dataToDisplay.map((r, index) =>\n index === randomIndex ? updatedRecord : r\n );\n\n this.db.updateTableRecord('sample_table', updatedRecord).subscribe(\n () => this.refreshData()\n );\n\n }\n\n clearAllData() {\n if (this.dataToDisplay.length === 0) return;\n\n const idsToDelete = this.dataToDisplay.map(r => r.id);\n this.dataToDisplay = [];\n\n this.db.deleteTableRecords('sample_table', idsToDelete).subscribe(\n () => this.refreshData()\n );\n }\n\n private refreshData() {\n this.db.getTableRecords('sample_table').subscribe(\n (records: any) => {\n this.dataToDisplay = records || [];\n this.dataSource.setData(this.dataToDisplay);\n }\n );\n }\n\n ngOnInit() {\n\n const tableDef = TableSchemaDef.adapt({\n table: 'sample_table',\n schema: '++id, last_name, age, amount'\n });\n\n this.db.createDatabaseTable(tableDef).subscribe(() => {\n console.log('Database Table Initialized');\n\n // hasTable\n this.db.hasDatabaseTable('sample_table')\n .subscribe(data => console.log('hasDatabaseTable:', data))\n\n // Tables\n this.db.getDatabaseTables()\n .subscribe(data => console.log('getDatabaseTables:', data))\n\n // getTable\n this.db.getDatabaseTable('sample_table')\n .subscribe(data => console.log('getDatabaseTable:', data))\n\n // Table Schema\n this.db.getDatabaseTableSchema('sample_table')\n .subscribe(data => console.log('getDatabaseTableSchema:', data))\n\n // Insert Table Records\n const records = [\n { id: 1, age: 12, last_name: 'Bonifacio', amount: 80 },\n { id: 2, age: 15, last_name: 'Johns', amount: 700 },\n { id: 3, age: 22, last_name: 'Kims', amount: 234 },\n { id: 4, age: 45, last_name: 'Harrys', amount: 1200 },\n ]\n\n this.db.createTableRecords('sample_table', records).subscribe(() => {\n this.refreshData();\n });\n });\n }\n\n createTable(tableDef: TableSchemaDef) {\n return this.db.createDatabaseTable(tableDef)\n }\n\n // CRUD\n findTableRecords(table: string, column: string, value: any) {\n return this.db.findTableRecords(table, column, value)\n .pipe(\n tap((data: any) => console.log('findTableRecords:', data))\n )\n }\n\n findTableRecord(table: string, column: string, value: any) {\n return this.db.findTableRecord(table, column, value)\n .pipe(\n tap((data: any) => console.log('findTableRecord:', data))\n )\n }\n\n getTableRecords(table: string) {\n return this.db.getTableRecords(table)\n .pipe(\n tap((data: any) => console.log('getTableRecords:', data))\n )\n }\n\n getTableRecord(table: string, id: number) {\n return this.db.getTableRecord(table, id)\n .pipe(\n tap((data: any) => console.log('getTableRecord:', data))\n )\n }\n\n createTableRecord<T>(table: string, record: T) {\n return this.db.createTableRecord(table, record)\n .pipe(\n tap((data: any) => console.log('createTableRecord:', data))\n )\n }\n\n updateTableRecord<T>(table: string, record: T) {\n return this.db.updateTableRecord(table, record)\n .pipe(\n tap((data: any) => console.log('updateTableRecord:', data))\n )\n }\n\n deleteTableRecord<T>(table: string, id: number) {\n return this.db.deleteTableRecord(table, id)\n .pipe(\n tap((data: any) => console.log('deleteTableRecord:', data))\n )\n }\n\n}\n\nclass DatabaseDataSource extends DataSource<TableRecord> {\n private _dataStream = new ReplaySubject<TableRecord[]>();\n\n constructor(initialData: TableRecord[]) {\n super();\n this.setData(initialData);\n }\n\n connect(): Observable<TableRecord[]> {\n return this._dataStream;\n }\n\n disconnect() {}\n\n setData(data: TableRecord[]) {\n this._dataStream.next(data);\n }\n\n}\n","<div style=\"padding: 2rem;\">\n\n <h2>\n Database Manager Service Demo\n </h2>\n\n <div style=\"margin-bottom: 1rem; display: flex; gap: 1rem;\">\n <button mat-stroked-button\n color=\"primary\"\n (click)=\"clearAllData()\"\n >\n Clear Data\n </button>\n <button mat-stroked-button\n color=\"primary\"\n (click)=\"updateData()\"\n >\n Update Data\n </button>\n <div style=\"flex:1\"></div>\n <button\n mat-stroked-button\n color=\"warn\"\n [disabled]=\"!dataToDisplay.length\"\n (click)=\"removeData()\"\n >\n Remove Data\n </button>\n <button mat-stroked-button\n color=\"primary\"\n (click)=\"addData()\"\n >\n Add Data\n </button>\n </div>\n\n <div class=\"table-container\">\n <table mat-table [dataSource]=\"dataSource\">\n\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef>ID</th>\n <td mat-cell *matCellDef=\"let element\">{{element.id}}</td>\n </ng-container>\n\n <ng-container matColumnDef=\"last_name\">\n <th mat-header-cell *matHeaderCellDef>Last Name</th>\n <td mat-cell *matCellDef=\"let element\">{{element.last_name}}</td>\n </ng-container>\n\n <ng-container matColumnDef=\"age\">\n <th mat-header-cell *matHeaderCellDef>Age</th>\n <td mat-cell *matCellDef=\"let element\">{{element.age}}</td>\n </ng-container>\n\n <ng-container matColumnDef=\"amount\">\n <th mat-header-cell *matHeaderCellDef>Amount</th>\n <td mat-cell *matCellDef=\"let element\">{{element.amount | currency}}</td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n </div>\n\n</div>\n","import { Component, Inject, Input, OnInit } from '@angular/core';\n\nimport { CONFIG_SETTINGS_TOKEN } from '../models/config-token.model';\nimport { ConfigOptions } from '../models/config-options.model';\nimport { UserData } from './request-manager-ws-demo/models/user-data.model';\n\n@Component({\n selector: 'app-http-request-services-demo',\n templateUrl: './http-request-services-demo.component.html',\n styleUrls: ['./http-request-services-demo.component.scss'],\n standalone: false\n})\nexport class HttpRequestServicesDemoComponent implements OnInit {\n\n @Input() wsServer = 'ws:'\n @Input() jwtToken = ''\n @Input() server = 'http:'\n @Input() user?: UserData\n @Input() path: string[] = ['ai','tests'];\n\n @Input() adapter?: Function\n @Input() mapper?: Function\n\n requestTypes = [\n { name: \"Http Service\", value: 'http_service' },\n // { name: \"Http Signals Service\", value: 'http_signals_service', new: true },\n { name: \"Http State Service\", value: 'http_state_service' },\n { name: \"Http State Service - Websockets\", value: 'http_state_service_ws', new: false },\n { name: \"Database Service\", value: 'database_service', divider: true, disabled: false },\n { name: \"Local Storage Service\", value: 'local_storage_service' },\n // { name: \"Local Signals Storage Service\", value: 'local_storage_signals_service', new: true },\n { name: \"Store State Manager Service\", value: 'store_state_manager', new: true },\n { name: \"Basic Http Service\", value: 'basic_http_service', divider: true },\n ]\n\n selectedService = this.requestTypes[1].value //menu selection default\n\n injectionOptions?: ConfigOptions\n\n constructor(\n @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions\n ) { }\n\n ngOnInit() {\n if(this.configOptions) this.injectionOptions = this.configOptions\n }\n\n onSelected(type: number) {\n this.selectedService = this.requestTypes[type].value\n }\n\n}\n","<mat-toolbar style=\"display:flex\">\n <div>Http Request Manager Services</div>\n <div style=\"flex:1\"></div>\n <button mat-stroked-button [matMenuTriggerFor]=\"menu\">Services</button>\n <mat-menu #menu=\"matMenu\">\n @for (type of requestTypes; track type; let i = $index) {\n @if (type?.divider) {\n <div\n style=\"margin-top: .5rem; margin-bottom: .5rem;\"\n >\n <mat-divider></mat-divider>\n </div>\n }\n <button\n mat-menu-item\n (click)=\"onSelected(i)\"\n [disabled]=\"type.disabled\"\n >\n {{ type.name }}\n </button>\n }\n\n </mat-menu>\n</mat-toolbar>\n\n<span>\n @switch (selectedService) {\n @case ('basic_http_service') {\n <p>\n <app-request-manager-basic-demo></app-request-manager-basic-demo>\n </p>\n }\n @case ('http_service') {\n <p>\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-manager-demo\n [server]=\"server\"\n [adapter]=\"adapter\"\n [mapper]=\"mapper\"\n ></app-request-manager-demo>\n </p>\n }\n <!-- <p *ngSwitchCase=\"'http_signals_service'\">\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-signals-manager-demo></app-request-signals-manager-demo>\n </p> -->\n @case ('http_state_service') {\n <p>\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-manager-state-demo\n [server]=\"server\"\n [adapter]=\"adapter\"\n [mapper]=\"mapper\"\n ></app-request-manager-state-demo>\n </p>\n }\n @case ('http_state_service_ws') {\n <p>\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-manager-ws-demo\n [server]=\"server\"\n [wsServer]=\"wsServer\"\n [jwtToken]=\"jwtToken\"\n [user]=\"user\"\n [path]=\"path\"\n ></app-request-manager-ws-demo>\n </p>\n }\n @case ('database_service') {\n <p>\n <app-database-data-demo></app-database-data-demo>\n </p>\n }\n @case ('local_storage_service') {\n <p>\n <ng-container *ngTemplateOutlet=\"LOCAL_OPTIONS\"></ng-container>\n <app-local-storage-demo></app-local-storage-demo>\n </p>\n }\n <!-- <p *ngSwitchCase=\"'local_storage_signals_service'\">\n <ng-container *ngTemplateOutlet=\"LOCAL_OPTIONS\"></ng-container>\n <app-local-storage-signals-demo></app-local-storage-signals-demo>\n</p> -->\n@case ('store_state_manager') {\n <p>\n <ng-container *ngTemplateOutlet=\"LOCAL_OPTIONS\"></ng-container>\n <app-store-state-manager-demo></app-store-state-manager-demo>\n </p>\n}\n@default {\n <p>\n Other\n </p>\n}\n}\n</span>\n\n<ng-template #HTTP_OPTIONS>\n @if (injectionOptions?.httpRequestOptions) {\n <div class=\"box\">\n <h3 style=\"font-weight: bold;\">Injection Token Detected - HTTP Options</h3>\n {{ injectionOptions?.httpRequestOptions| json }}\n </div>\n }\n</ng-template>\n\n<ng-template #LOCAL_OPTIONS>\n @if (injectionOptions?.LocalStorageOptions) {\n <ng-container class=\"box\">\n <div class=\"box\">\n <h3 style=\"font-weight: bold;\">Injection Token Detected - LocalStorage Options</h3>\n {{ injectionOptions?.LocalStorageOptions| json }}\n </div>\n </ng-container>\n }\n</ng-template>\n\n\n","import { Component, Inject, inject, OnInit, ViewEncapsulation, effect, signal, computed } from '@angular/core';\nimport { LocalStorageSignalsManagerService, SettingOptions, StorageOption, StorageType } from '../../services/local-storage-manager-service';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { ConfigOptions, LocalStorageOptions, UtilsService } from '../../services';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\n\n@Component({\n selector: 'app-local-storage-signals-demo',\n templateUrl: './local-storage-signals-demo.component.html',\n styleUrls: ['./local-storage-signals-demo.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class LocalStorageSignalsDemoComponent implements OnInit {\n\n fb = inject(FormBuilder)\n utils = inject(UtilsService)\n\n // store type is driven by the form control\n get type() {\n return (this.typeControl.value) ? +this.typeControl.value : 0;\n }\n\n typeControl = this.fb.control(StorageType.GLOBAL.toString())\n\n localStorageManagerService = inject(LocalStorageSignalsManagerService)\n\n // Use signals directly and computed values for template binding\n readonly settings = computed(() => this.localStorageManagerService.settings());\n\n // selected store (signal) and its JSON data for template\n storeSelected = signal<StorageOption | null>(null);\n selectedStoreData = computed(() => {\n const s = this.storeSelected();\n if (!s) return '';\n const computed = this.localStorageManagerService.store(s.name);\n return computed ? JSON.stringify(computed()) : '';\n });\n\n // filtered settings by selected type\n selectedType = signal<number>(StorageType.GLOBAL);\n filteredSettings = computed(() => {\n const values = this.settings() || [];\n return values.filter((item: any) => item.options.storage === +this.selectedType());\n });\n\n storageForm = this.fb.group({\n store: this.fb.control<string|null>(null),\n type: 'local',\n settingType: 'local',\n encrypted: false,\n data: this.fb.control<string>('', Validators.required),\n })\n\n newStoreForm = this.fb.group({\n name: this.fb.control<string|null>(null, Validators.required),\n storage: 'local',\n encrypted: false,\n data: this.fb.control<string>('', Validators.required),\n expiresIn: this.fb.control('0')\n })\n\n // no RxJS Observables here; template uses signals/computed directly\n\n expiresIn = (epoch: number) => this.utils.expiresIn(epoch)\n\n get isValid() {\n return this.newStoreForm.valid\n }\n\n get isValidData() {\n return this.storageForm.valid\n }\n\n isValidJSON = (str: string) => {\n try {\n JSON.parse(str)\n return true\n } catch (e) {\n return false\n }\n }\n\n displayedColumns: string[] = ['name', 'id', 'encrypted', 'expires', \"option\"];\n\n filterData = (values: StorageOption[] | null | undefined) => {\n if(!values) return []\n return values.filter((item: any) => item.options && item.options.storage === +this.type)\n }\n\n settingFor(name: string) {\n const c = this.localStorageManagerService.setting(name);\n return c ? c() : null;\n }\n\n // data and selected store\n store: any\n create = false\n\n storeProps?: LocalStorageOptions\n options?: SettingOptions\n\n constructor(@Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) { }\n\n ngOnInit() {\n\n this.storeProps = this.configOptions?.LocalStorageOptions\n this.options = this.storeProps?.options\n\n if(this.options?.storage) {\n this.typeControl.patchValue(this.options.storage.toString())\n this.typeControl.disable()\n } else {\n this.typeControl.enable()\n }\n\n if(this.options?.expiresIn) {\n this.newStoreForm.get('expiresIn')?.patchValue(this.options.expiresIn)\n this.newStoreForm.get('expiresIn')?.disable()\n } else {\n this.newStoreForm.get('expiresIn')?.enable()\n }\n\n if(this.options?.encrypted) {\n this.newStoreForm.get('encrypted')?.patchValue(this.options.encrypted)\n this.newStoreForm.get('encrypted')?.disable()\n } else {\n this.newStoreForm.get('encrypted')?.enable()\n }\n\n // nothing to synchronize - templates read computed signals directly\n\n }\n\n onCreateStore() {\n\n if(!this.isValid) return\n\n const store = this.newStoreForm.value\n if(!store.name || store.name === '') return\n\n const options = { storage: this.type, encrypted: store.encrypted, expiresIn: store.expiresIn }\n\n this.localStorageManagerService.createStore({\n name: store.name,\n data: store.data,\n options: SettingOptions.adapt(options)\n })\n\n this.newStoreForm.reset()\n this.create = false\n }\n\n onUpdateStore(store: any) {\n\n if(!this.storageForm.valid) return\n\n const storeData = this.storageForm.value\n\n const data = JSON.parse(storeData.data || '')\n\n const type = (storeData.type === 'local') ? StorageType.GLOBAL : StorageType.SESSION\n\n this.localStorageManagerService.updateStore({\n name: store.name,\n data\n })\n\n }\n\n onSelectedRow(store: any) {\n this.store = store\n this.storeSelected.set(store)\n this.create = false\n }\n\n onCreate() {\n this.onCancel()\n this.create = true\n }\n\n onDelete(store: StorageOption) {\n\n this.localStorageManagerService.deleteStore({\n name: store.name,\n })\n\n this.onCancel()\n }\n\n onCancel() {\n this.storeSelected.set(null)\n this.store = null\n this.create = false\n }\n\n onUpdate(store: StorageOption, data: any) {\n\n this.localStorageManagerService.updateStore({\n name: store.name,\n data: JSON.parse(data)\n })\n\n this.onCancel()\n\n }\n\n onReset() {\n this.localStorageManagerService.resetStore()\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <div style=\"display: flex; gap: 1rem\">\n <h2 style=\"padding-top: .5rem; display: flex;\">\n <div style=\"padding-top: .5rem;\">\n <span>Local Storage Manager</span>\n <span style=\"margin-left: .5rem;\">\n <mat-icon color=\"accent\">fiber_new</mat-icon>\n </span>\n </div>\n <div>\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon>info</mat-icon>\n </button>\n </div>\n </h2>\n <span style=\"flex:1\"></span>\n <div style=\"padding-top: .25rem;\">\n <mat-button-toggle-group name=\"storage\" [formControl]=\"typeControl\" (change)=\"onCancel()\">\n <mat-button-toggle value=\"0\">Local Storage</mat-button-toggle>\n <mat-button-toggle value=\"1\">Session Storage</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n <div style=\"margin-top: .25rem;\">\n <button mat-icon-button (click)=\"onCreate()\">\n <mat-icon>add</mat-icon>\n </button>\n </div>\n </div>\n\n <ng-container *ngIf=\"storeProps?.storageName || storeProps?.storageSettingsName\">\n <div style=\"display: flex; gap: .5rem; flex-direction: column; border: gray solid thin; background-color: whitesmoke; padding: 1rem;\"\n >\n <div style=\"display: flex;\">\n <div *ngIf=\"storeProps?.storageSettingsName\" style=\"flex:1\">\n Database: <b>{{ storeProps?.storageSettingsName }}</b>\n </div>\n <div *ngIf=\"storeProps?.storageName\" style=\"flex:1\">\n Data: <b>{{ storeProps?.storageName }}</b>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div style=\"margin-top: 2rem;\" [formGroup]=\"newStoreForm\" *ngIf=\"create; else LIST\">\n\n <h2>Create Store</h2>\n\n <div style=\"display: flex; gap: 1rem;\">\n <div style=\"flex:1\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Store Name</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"name\">\n </mat-form-field>\n </div>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Expires In...</mat-label>\n <mat-select formControlName=\"expiresIn\">\n <mat-option value=\"0\">None</mat-option>\n <mat-option value=\"30s\">30 Seconds</mat-option>\n <mat-option value=\"1mn\">1 Minute</mat-option>\n <mat-option value=\"1hr\">1 Hour</mat-option>\n <mat-option value=\"1d\">1 Day</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"margin-top: 1rem;\">\n <mat-slide-toggle formControlName=\"encrypted\">Encrypted</mat-slide-toggle>\n </div>\n </div>\n\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex: 1;\">\n <mat-label>Data (Must be an Object or Array of any)</mat-label>\n <textarea matInput placeholder=\"[]\" formControlName=\"data\" #json></textarea>\n </mat-form-field>\n </div>\n <mat-error *ngIf=\"!isValidJSON(json.value)\">Not Valid Data</mat-error>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onCreateStore()\" [disabled]=\"!(isValid && isValidJSON(json.value))\">\n Save Store\n </button>\n </div>\n\n </div>\n\n <ng-template #LIST>\n\n <div style=\"margin-top: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n{{ settings() | json }}\n <div *ngIf=\"filterData(settings()) as data\">\n <ng-container *ngIf=\"data.length > 0; else NO_DATA\">\n <table mat-table [dataSource]=\"data\">\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> Store </th>\n <td mat-cell *matCellDef=\"let element\" style=\"font-weight: bold; text-transform: uppercase;\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"encrypted\">\n <th mat-header-cell *matHeaderCellDef style=\"text-align: center;\"> Encrypted </th>\n <td mat-cell *matCellDef=\"let element\" style=\"text-align: center;\">\n <ng-container *ngIf=\"element.options.encrypted; else NO\">YES</ng-container>\n <ng-template #NO><span style=\"color:gray\">NO</span></ng-template>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"expires\">\n <th mat-header-cell *matHeaderCellDef style=\"text-align: center;\"> Expires </th>\n <td mat-cell *matCellDef=\"let element\" style=\"text-align: center;\">\n <ng-container *ngIf=\"element.options.expires !== 0; else NO_DATA\">\n {{expiresIn(element.options.expires)}}\n </ng-container>\n <ng-template #NO_DATA>\n ∞\n </ng-template>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"option\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell *matCellDef=\"let element\" style=\"padding-right: 0;\">\n <div style=\"display: flex;justify-content: flex-end;\">\n <button mat-icon-button color=\"warn\" (click)=\"onDelete(element); $event.stopPropagation()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" (click)=\"onSelectedRow(row)\"></tr>\n </table>\n </ng-container>\n\n <ng-template #NO_DATA>\n <h3 style=\"margin-top: 1rem;\">No Data</h3>\n </ng-template>\n\n <div *ngIf=\"storeSelected() as selectedStore\" style=\"margin-top: 2rem;\">\n <div style=\"margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <h3>STORE: <span style=\"font-weight: bold;\">{{ selectedStore.name | uppercase }}</span></h3>\n <h3>SETTINGS: {{ localStorageManagerService.setting(selectedStore.name) ? (localStorageManagerService.setting(selectedStore.name)() | json) : '{}' }}</h3>\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex: 1;\">\n <mat-label>Data (Must be an Object or Array of any)</mat-label>\n <textarea matInput placeholder=\"[]\" #json [value]=\"selectedStoreData()\"></textarea>\n </mat-form-field>\n </div>\n <mat-error *ngIf=\"!isValidJSON(json.value)\">Not Valid Data</mat-error>\n\n <div style=\"display: flex; gap: .5rem;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onCancel()\">Cancel</button>\n <button mat-stroked-button (click)=\"onUpdate(selectedStore, json.value)\" [disabled]=\"!(isValidJSON(json.value))\">Update</button>\n </div>\n </div>\n </div>\n\n </ng-template>\n\n <div style=\"margin-top: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <button mat-stroked-button (click)=\"onReset()\">Delete All Stores</button>\n </div>\n\n</div>\n\n\n<mat-menu #menu=\"matMenu\">\n <div style=\"padding: 1rem;\">\n <p>Please note that the LocalStorage (encryption) and management of data is dependant on initializing the APP_ID</p>\n <p>Must provide a value for <b>APP_ID</b> in AppModule->Providers</p>\n <mat-divider></mat-divider>\n <div style=\"font-size: smaller; margin-top: .5rem;\">\n <p>Example: UUID (self.crypto.randomUUID() to generate)</p>\n <div style=\"background-color: whitesmoke; padding: 1rem;\">\n {<br>\n provide: APP_ID,<br>\n useValue: \"056991ac-3537-43ab-b5b9-83edf6554eff\",<br>\n }\n </div>\n </div>\n </div>\n</mat-menu>\n","export interface ClientInfoInterface {\n domain: string\n service: string\n id: number\n name: string\n}\n\nexport class ClientInfo implements ClientInfoInterface {\n\n constructor(\n public domain = '',\n public service = '',\n public id = 0,\n public name = '',\n ) {}\n\n static adapt(item?: any): ClientInfo {\n\n return new ClientInfo(\n item?.domain,\n item?.service,\n item?.id,\n (item?.first_name || item?.last_name) ? `${item?.first_name} ${item?.last_name}` : '',\n )\n\n }\n\n}\n\n\n","export interface ClientInfoMapperInterface {\n id: number\n first_name: string\n last_name: string\n email: string\n}\n\nexport class ClientInfoMapper implements ClientInfoMapperInterface {\n\n constructor(\n public id = 0,\n public first_name = '',\n public last_name = '',\n public email = '',\n ) {}\n\n static adapt(item?: any): ClientInfoMapper {\n\n const first_name = (item?.name) ? item.name.split(' ')[0] : ''\n const last_name = (item?.name) ? item.name.split(' ')[1] : ''\n\n return new ClientInfoMapper(\n item?.id,\n first_name,\n last_name,\n item?.email,\n )\n\n }\n\n}\n\n\n","export interface AIPromptInterface {\n response: string\n}\n\nexport class AIPrompt implements AIPromptInterface {\n\n constructor(\n public response = '',\n ) {}\n\n static adapt(item?: any): AIPrompt {\n\n return new AIPrompt(\n item?.response,\n )\n\n }\n\n}\n","import { Component, OnInit, ViewChild, inject } from '@angular/core'\n\nimport { FormArray, FormBuilder, Validators } from '@angular/forms'\n\nimport { ClientInfo } from './models/sample-client-info'\nimport { ClientInfoMapper } from './models/sample-mapper-client-info'\nimport { AIPrompt } from './models/sample-ai-prompt'\nimport { ApiRequest, HTTPManagerSignalsService } from '../..'\n\nimport { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display'\n\n@Component({\n selector: 'app-request-signals-manager-demo',\n templateUrl: './request-signals-manager-demo.component.html',\n styleUrls: ['./request-signals-manager-demo.component.scss'],\n standalone: false\n})\nexport class RequestSignalsManagerDemoComponent implements OnInit {\n\n displayedColumns = ['id','name', 'lastName', 'age']\n\n private fb = inject(FormBuilder)\n private toastMessage = inject(ToastMessageDisplayService)\n\n httpManagerSignalsService = inject(HTTPManagerSignalsService)\n\n // Using signals service: signals are callable in templates (e.g. isPending())\n isPending = this.httpManagerSignalsService.isPending\n countdown = this.httpManagerSignalsService.countdown\n\n // per-operation plain results and error messages (no rxjs in component)\n GET_result: any = null\n POST_result: any = null\n PUT_result: any = null\n DELETE_result: any = null\n\n STREAM_result: any = null\n STREAM_AI_result: any = null\n\n GET_error: string = ''\n POST_error: string = ''\n PUT_error: string = ''\n DELETE_error: string = ''\n STREAM_error: string = ''\n STREAM_AI_error: string = ''\n\n requestParams = {\n GET: ApiRequest.adapt(),\n POST: ApiRequest.adapt(),\n PUT: ApiRequest.adapt(),\n DELETE: ApiRequest.adapt(),\n STREAM: ApiRequest.adapt(),\n }\n\n @ViewChild(\"failedState\", { static: true }) failedState: any\n @ViewChild(\"pollingState\", { static: true }) pollingState: any\n\n questionControl = this.fb.control(\"\", [Validators.required])\n\n downloadRequest = ApiRequest.adapt({\n server: 'assets/images',\n path: ['lego.png'],\n // saveAs: 'john.jpg' // Optional\n })\n\n // downloadRequest = ApiRequest.adapt({\n // server: 'oidc/ai/file'\n // })\n\n sampleClientData = {\n id: 0,\n name: \"Old School Dates\",\n domain: \"osd.com\",\n service: \"osd\",\n spiffe: \"osd.com/osd\",\n secret: \"SMOPECXP-OS4P-USOG-X2II-3XMD1FQDR3IJX\",\n created: 1693003138,\n modified: 1693003138,\n icon: \"\",\n imageFile: \"\",\n email: \"wavecoders@gmail.com\"\n }\n\n requestForm = this.fb.group({\n path: this.fb.control<string>(\"ai/\"),\n headers: this.fb.array([]),\n adapter: [null],\n mapper: [null],\n retry: this.fb.group({\n times: [3],\n delay: [3],\n }),\n polling: [3],\n })\n\n AIType = 0\n\n sampleAdaptors = [\n { label: \"ClientInfo Basic\", value: ClientInfo.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n sampleMappers = [\n { label: \"Mapper Basic\", value: ClientInfoMapper.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n get retry() {\n return this.requestForm.get('retry')?.value\n }\n\n get headers(): FormArray {\n return this.requestForm.get('headers') as FormArray\n }\n\n get isValid() {\n this.requestForm.markAllAsTouched()\n return this.requestForm.valid\n }\n\n hasId = (arr: any[]) => {\n if (arr.length === 0) return false\n return !isNaN(arr[arr.length - 1])\n }\n\n props = (adapter: any) => {\n return (adapter) ? adapter() : null\n }\n\n // server = `http://sample-endpoint/as/authorization.oauth2`\n\n arrayObjectsToObjects = (arr: any[]) => {\n return Array.isArray(arr) ? arr.reduce((obj, item) => Object.assign(obj, { [item.key]: item.value }), {}) : {}\n }\n\n constructor() { }\n\n ngOnInit() {\n\n // const reqGet2 = ApiRequest.adapt({\n // server,\n // path: ['clients'],\n // headers: { authentication: \"Bearer <KEY>\" },\n // adapter: ClientInfo,\n // dataType: DataType.OBJECT,\n // // concurrent: false,\n // // polling: 3, //seconds\n // })\n\n // const req2 = [1024,1025,1026].map(item => {\n // return this.httpManagerService.getRequest<ClientInfo[]>(reqGet2, [item])\n // .pipe(\n // catchError(error => {\n // return throwError(() => new Error(error.error.message))\n // })\n // )\n // })\n\n // forkJoin(req2)\n // .subscribe(res => console.log(res))\n\n }\n\n addHeader() {\n const header = this.fb.group({\n key: ['', Validators.required],\n value: ['']\n })\n this.headers.push(header)\n }\n\n removeHeader(index: number) {\n this.headers.removeAt(index)\n }\n\n compileRequest() {\n\n const requestParams = this.requestForm.value\n\n requestParams.headers = this.arrayObjectsToObjects(\n requestParams.headers || []\n )\n\n const pathReq = (requestParams.path === \"\") ? [] : (requestParams.path || \"\").split(\"/\")\n\n if (!this.pollingState.checked) requestParams.polling = 0\n\n if (!this.failedState.checked) {\n requestParams.retry = { times: 0,delay: 0 }\n }\n\n const apiOptions = ApiRequest.adapt(requestParams)\n apiOptions.path = []\n\n return { apiOptions: apiOptions, path: pathReq }\n\n }\n\n onGetRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n this.requestParams.GET = reqParams.apiOptions\n\n // reset local state\n this.GET_result = null\n this.GET_error = ''\n\n this.httpManagerSignalsService.getRequest<ClientInfo[]>(reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.GET_result = res,\n error: (err) => this.errorHandling(err, 'GET')\n })\n\n }\n\n onCreateRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n this.requestParams.POST = reqParams.apiOptions\n\n // reset local state\n this.POST_result = null\n this.POST_error = ''\n\n this.httpManagerSignalsService.postRequest<ClientInfo>(this.sampleClientData, reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.POST_result = res,\n error: (err) => this.errorHandling(err, 'POST')\n })\n\n }\n\n onUpdateRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n if(!this.hasId(reqParams.path)) {\n console.log(\"Missing ID\")\n return\n }\n\n this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length-1])\n this.requestParams.PUT = reqParams.apiOptions\n\n // reset local state\n this.PUT_result = null\n this.PUT_error = ''\n\n this.httpManagerSignalsService.putRequest<any>(this.sampleClientData, reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.PUT_result = res,\n error: (err) => this.errorHandling(err, 'PUT')\n })\n\n }\n\n onDeleteRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n this.requestParams.DELETE = reqParams.apiOptions\n\n if(!this.hasId(reqParams.path)) {\n console.log(\"Missing ID\")\n return\n }\n\n this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length-1])\n this.requestParams.DELETE = reqParams.apiOptions\n\n // reset local state\n this.DELETE_result = null\n this.DELETE_error = ''\n\n this.httpManagerSignalsService.deleteRequest<ClientInfo>(reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.DELETE_result = res,\n error: (err) => this.errorHandling(err, 'DELETE')\n })\n\n }\n\n onStreamPostRequest() {\n\n if (!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n let payload = {}\n let apiPath: string[] = reqParams.path\n let apiOptions = reqParams.apiOptions\n let responseMapper: (items: any) => any = (items) => items.response\n\n if (this.AIType === 0) {\n\n // API request\n payload = { prompt: this.questionControl.value }\n\n } else {\n\n // Local Ollama request\n apiOptions.server = \"api\"\n apiPath = [\"generate\"]\n apiOptions.stream = true\n payload = {\n model: \"phi3:latest\",\n prompt: this.questionControl.value,\n stream: true,\n }\n\n responseMapper = (items) => items.map((word: any) => word.response).flat().join('')\n\n }\n\n this.requestParams.STREAM = apiOptions\n this.STREAM_AI_result = null\n this.STREAM_AI_error = ''\n\n this.httpManagerSignalsService.postRequest<any>(payload, apiOptions, apiPath)\n .subscribe({\n next: (res) => {\n try {\n this.STREAM_AI_result = responseMapper(res)\n } catch (e) {\n this.STREAM_AI_result = res\n }\n this.questionControl.reset()\n },\n error: (err) => this.errorHandling(err, 'STREAM')\n })\n\n }\n\n\n onStreamRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n reqParams.apiOptions.stream = true\n\n this.requestParams.GET = reqParams.apiOptions\n this.STREAM_result = null\n this.STREAM_error = ''\n\n this.httpManagerSignalsService.getRequest<ClientInfo[]>(reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.STREAM_result = res,\n error: (err) => this.errorHandling(err, 'STREAM')\n })\n\n }\n\n onDownloadCompleted() {\n\n const message = \"Download Completed\"\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.SUCCESS,\n icon: 'sentiment_satisfied_alt',\n })\n\n this.toastMessage.toastMessage(display)\n }\n\n onDownloadFailed(err: string) {\n\n const message = \"Download Failed\"\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.ERROR,\n icon: 'warning',\n })\n\n this.toastMessage.toastMessage(display)\n }\n\n errorHandling(err: any, type: string) {\n const message = err?.message || String(err)\n // set local error state\n if (type === 'GET') this.GET_error = message\n if (type === 'POST') this.POST_error = message\n if (type === 'PUT') this.PUT_error = message\n if (type === 'DELETE') this.DELETE_error = message\n if (type === 'STREAM') this.STREAM_error = message\n\n // also set the shared service error signal\n this.httpManagerSignalsService.error.set(message)\n\n return err\n }\n\n onSelectAIType(type: number) {\n this.AIType = type\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <h2>\n <span>HTTP Request Signals Manager</span>\n <span style=\"margin-left: .5rem;\">\n <mat-icon color=\"accent\">fiber_new</mat-icon>\n </span>\n </h2>\n\n <div [formGroup]=\"requestForm\" style=\"margin-top: 2rem;\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Adapter (Model)</mat-label>\n <mat-select formControlName=\"adapter\" #adapterSelect>\n <mat-option>None</mat-option>\n @for (adapter of sampleAdaptors; track adapter) {\n <mat-option [value]=\"adapter.value\">\n {{adapter.label}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mapper (Model)</mat-label>\n <mat-select formControlName=\"mapper\" #mapperSelect>\n <mat-option>None</mat-option>\n @for (mapper of sampleMappers; track mapper) {\n <mat-option [value]=\"mapper.value\">\n {{mapper.label}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n @if (adapterSelect.value || mapperSelect.value) {\n <div style=\"display: flex; margin-bottom: 2rem;\">\n <div style=\"flex:1\" class=\"box\">\n <h3>Adapter (Incoming)</h3>\n @if (adapterSelect.value) {\n <div>\n {{ props(adapterSelect.value) | json }}\n </div>\n } @else {\n No Transformation\n }\n </div>\n <div style=\"flex:1\" class=\"box\">\n <h3>Mapper (Outgoing)</h3>\n @if (mapperSelect.value) {\n <div>\n {{ props(mapperSelect.value) | json }}\n </div>\n } @else {\n No Transformation\n }\n </div>\n </div>\n }\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>RestPath (/ delimited)</mat-label>\n <input matInput placeholder=\"clients/list\" formControlName=\"path\">\n </mat-form-field>\n </div>\n <div>\n <div formArrayName=\"headers\">\n @for (task of headers.controls; track task; let i = $index) {\n <div [formGroupName]=\"i\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Key</mat-label>\n <input matInput placeholder=\"authentication\" formControlName=\"key\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Value</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"value\">\n </mat-form-field>\n <div style=\"margin-top: .5rem;\">\n <button mat-icon-button (click)=\"removeHeader(i)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n <button mat-stroked-button (click)=\"addHeader()\" class=\"btn\">Add Header</button>\n </div>\n <div style=\"margin-top: 2rem; display: flex; flex-direction:column; gap: 1rem;\">\n <div>\n <mat-slide-toggle #failedState>Retry on Failed</mat-slide-toggle>\n @if (failedState.checked) {\n <div style=\"display: flex; gap: .5rem; margin-top: 1rem;\" formGroupName=\"retry\">\n <mat-form-field appearance=\"outline\">\n <mat-label>#of Times</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"times\" value=\"3\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Delay Until Next</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"delay\" value=\"3\">\n </mat-form-field>\n </div>\n }\n </div>\n <div>\n <mat-slide-toggle #pollingState>Polling</mat-slide-toggle>\n @if (pollingState.checked) {\n <div>\n <mat-form-field appearance=\"outline\" style=\"margin-top: 1rem\">\n <mat-label>#of Seconds</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"polling\" value=\"3\">\n </mat-form-field>\n </div>\n }\n </div>\n </div>\n </div>\n\n <div style=\"margin-bottom: 1rem; margin-top: 2rem;\">\n @if (isPending()) {\n <mat-progress-bar mode=\"indeterminate\"\n ></mat-progress-bar>\n }\n @if (pollingState.checked && !isPending()) {\n <mat-progress-bar mode=\"determinate\"\n [value]=\"countdown()\"\n ></mat-progress-bar>\n }\n </div>\n\n <div style=\"margin-top: 1rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onGetRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if (GET_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ GET_error }}</mat-error>\n </div>\n }\n\n @if (GET_result) {\n <div style=\"margin-top: 1rem;\">\n {{ GET_result | json }}\n </div>\n }\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">POST Request</h2>\n <div>\n <button mat-raised-button (click)=\"onCreateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if (POST_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ POST_error }}</mat-error>\n </div>\n }\n\n @if (POST_result) {\n <div style=\"margin-top: 1rem;\">\n {{ POST_result | json }}\n </div>\n }\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">PUT Request</h2>\n <div>\n <button mat-raised-button (click)=\"onUpdateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if (PUT_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ PUT_error }}</mat-error>\n </div>\n }\n\n <h3>Include Record ID in the RestPath</h3>\n\n @if (PUT_result) {\n <div style=\"margin-top: 1rem;\">\n {{ PUT_result | json }}\n </div>\n }\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">DELETE Request</h2>\n <div>\n <button mat-raised-button (click)=\"onDeleteRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <h3>Include Record ID in the RestPath</h3>\n\n @if (DELETE_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ DELETE_error }}</mat-error>\n </div>\n }\n\n @if (DELETE_result) {\n <div style=\"margin-top: 1rem;\">\n {{ DELETE_result | json }}\n </div>\n }\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">Streaming GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onStreamRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <!-- <div *ngIf=\"(STREAM_error$ | async) as stream_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ stream_error }}</mat-error>\n </div> -->\n\n <div style=\"margin-top: 1rem;\">\n @if (STREAM_result; as data) {\n <div class=\"container\">\n <table mat-table [dataSource]=\"data\">\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> First Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.name}} </td>\n </ng-container>\n <ng-container matColumnDef=\"lastName\">\n <th mat-header-cell *matHeaderCellDef> Last Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.lastName}} </td>\n </ng-container>\n <ng-container matColumnDef=\"age\">\n <th mat-header-cell *matHeaderCellDef> Age </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.age}} </td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n </div>\n }\n </div>\n\n</div>\n\n<div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n</div>\n\n<div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1; padding-top: .5rem;\">AI -@if (AIType === 1) {\n <span>STREAMING</span>\n } POST Request</h2>\n <div style=\"display: flex; gap: 1rem;\">\n <button mat-raised-button [matMenuTriggerFor]=\"menu\" style=\"min-width: 120px;\">\n <mat-icon>lan</mat-icon>\n @if (AIType === 0) {\n <span>Server</span>\n } @else {\n Local\n }\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"onSelectAIType(0)\">Server</button>\n <button mat-menu-item (click)=\"onSelectAIType(1)\">Local</button>\n </mat-menu>\n <div>\n <button mat-raised-button (click)=\"onStreamPostRequest()\" class=\"btn\">Ask Me</button>\n </div>\n </div>\n </div>\n\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Ask me a Question</mat-label>\n <textarea matInput placeholder=\"Why is the sky blue?\" [formControl]=\"questionControl\"></textarea>\n </mat-form-field>\n </div>\n\n @if (STREAM_AI_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ STREAM_AI_error }}</mat-error>\n </div>\n }\n\n @if (AIType === 1) {\n <div style=\"color: red;\">\n You must have Ollama active and the 'phi3:latest' model to use this feature.\n </div>\n } @else {\n <span style=\"color: gray;\">\n Define the RestPath to the API endpoint that will handle the AI request.\n Use: 'ai/chat' for server\n </span>\n }\n\n <div>\n @if (STREAM_AI_result) {\n <div style=\"margin-top: 1rem; font-size: 1.2rem; border-radius: 1rem; border: black 1px solid; padding: 2rem;\">\n <p style=\"margin-bottom: .5rem; white-space:pre-wrap; line-height: 1.6rem;\">{{STREAM_AI_result}}</p>\n </div>\n }\n </div>\n\n</div>\n\n<div style=\"margin-top: 1.5rem; margin-bottom: 1rem; line-height: 1.5rem;\">\n <mat-divider></mat-divider>\n</div>\n\n<div>\n <div style=\"display: flex;\">\n <h2 style=\"flex:1; margin-bottom: 0; padding-top: .5rem; display: flex;\">\n <div>\n Download File\n </div>\n <div style=\"flex:1; margin-left: 1rem;\">\n <mat-slide-toggle #disable>\n @if (disable.checked) {\n <span>\n Enable\n </span>\n } @else {\n Disable\n }\n </mat-slide-toggle>\n </div>\n </h2>\n <div>\n <app-file-downloader\n [disabled]=\"disable.checked\"\n [delayError]=\"3\"\n [apiRequest]=\"downloadRequest\"\n (completed)=\"onDownloadCompleted()\"\n (failed)=\"onDownloadFailed($event)\"\n ></app-file-downloader>\n </div>\n </div>\n</div>\n\n</div>\n","import { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\n\n\nimport { WithCredentialsInterceptor, RequestHeadersInterceptor } from './interceptors';\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { CommonModule } from '@angular/common';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatCardModule } from '@angular/material/card';\nimport { ProxyDebuggerInterceptor } from './interceptors/proxy-debugger.interceptor';\nimport { MatTabsModule } from '@angular/material/tabs';\n\nimport { ConfigOptions } from './models';\nimport { CONFIG_SETTINGS_TOKEN } from './models/config-token.model';\nimport { HTTPManagerService, LocalStorageManagerService } from './services';\n\nimport { FileDownloaderModule } from './http-request-services-demo/request-manager-demo/file-downloader/file-download.module';\nimport { ToastMessageDisplayModule, ToastMessageDisplayService } from 'toast-message-display';\n\n// Message Display System\nimport { MessageDisplayRouterService, SnackbarStrategy } from './message-display';\n\n// Fix: Import components directly instead of from public-api to avoid circular dependency\nimport { HttpRequestServicesDemoComponent } from './http-request-services-demo/http-request-services-demo.component';\nimport { DatabaseDataDemoComponent } from './http-request-services-demo/database-data-demo/database-data-demo.component';\nimport { LocalStorageDemoComponent } from './http-request-services-demo/local-storage-demo/local-storage-demo.component';\nimport { RequestManagerDemoComponent } from './http-request-services-demo/request-manager-demo/request-manager-demo.component';\nimport { RequestManagerStateDemoComponent } from './http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component';\n\nimport { LocalStorageSignalsDemoComponent } from './http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component';\nimport { RequestManagerWsDemoComponent } from './http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component';\nimport { RequestSignalsManagerDemoComponent } from './http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component';\nimport { StoreStateManagerDemoComponent } from './http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component';\n\nimport { WsDataControlComponent } from './http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component';\nimport { WsMessagingComponent } from './http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component';\nimport { WsNotificationsComponent } from './http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component';\nimport { WsAiMessagingComponent } from './http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component';\nimport { WsChatsComponent } from './http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component';\nimport { RequestManagerBasicDemoComponent } from './http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component';\n\n// import { MessengerChatModule } from 'src/app/components/messenger-chat/messenger-chat.module';\n// import { StoreStateManagerModule } from \"src/app/beta_components/store-state-manager/store-state-manager.module\";\n\n\n@NgModule({\n imports: [\n CommonModule,\n ToastMessageDisplayModule,\n FormsModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatTabsModule,\n MatSelectModule,\n MatChipsModule,\n MatMenuModule,\n MatIconModule,\n MatTableModule,\n MatButtonToggleModule,\n MatAutocompleteModule,\n MatProgressBarModule,\n MatProgressSpinnerModule,\n MatSlideToggleModule,\n MatDividerModule,\n MatFormFieldModule,\n MatInputModule,\n MatToolbarModule,\n MatSlideToggleModule,\n TranslateModule.forRoot(),\n MatSidenavModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatCardModule,\n FileDownloaderModule,\n // MessengerChatModule,\n // StoreStateManagerModule\n],\n declarations: [\n RequestManagerBasicDemoComponent,\n HttpRequestServicesDemoComponent,\n RequestManagerStateDemoComponent,\n RequestManagerDemoComponent,\n RequestSignalsManagerDemoComponent,\n LocalStorageDemoComponent,\n LocalStorageSignalsDemoComponent,\n RequestManagerWsDemoComponent,\n StoreStateManagerDemoComponent,\n DatabaseDataDemoComponent,\n WsDataControlComponent,\n WsMessagingComponent,\n WsNotificationsComponent,\n WsAiMessagingComponent,\n WsChatsComponent,\n ],\n exports: [\n HttpRequestServicesDemoComponent,\n ],\n providers: [\n { provide: HTTP_INTERCEPTORS, useClass: WithCredentialsInterceptor, multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: RequestHeadersInterceptor, multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: ProxyDebuggerInterceptor, multi: true },\n { provide: CONFIG_SETTINGS_TOKEN, useValue: ConfigOptions.adapt() },\n HTTPManagerService, LocalStorageManagerService,\n ToastMessageDisplayService,\n MessageDisplayRouterService,\n SnackbarStrategy\n ],\n})\nexport class HttpRequestManagerModule {\n\n static forRoot(config: ConfigOptions = ConfigOptions.adapt()): ModuleWithProviders<HttpRequestManagerModule> {\n return {\n ngModule: HttpRequestManagerModule,\n providers: [\n { provide: CONFIG_SETTINGS_TOKEN, useValue: ConfigOptions.adapt(config) },\n HTTPManagerService, LocalStorageManagerService //all services that need access to config\n ],\n };\n }\n\n}\n\n\n","import { Component, OnInit, signal, computed } from '@angular/core';\nimport { StoreStateManagerSignalsService } from '../../services/store-state-manager-service/store-state-manager-signals.service';\nimport { StateStorageOptions } from '../../services/store-state-manager-service/models/state-storage-options.model';\n\ninterface CounterState {\n count: number;\n lastUpdated: string;\n history: number[];\n}\n\nconst defaultCounterState: () => CounterState = () => ({\n count: 0,\n lastUpdated: new Date().toISOString(),\n history: []\n});\n\n@Component({\n selector: 'app-store-state-signals-demo',\n template: `\n <div class=\"demo-container\">\n <h2>Store State Manager Signals Demo</h2>\n <p>Signal-based state management with localStorage persistence</p>\n\n <div class=\"state-display\">\n <h3>Current State (Signal)</h3>\n <pre>{{ stateJson() }}</pre>\n </div>\n\n <div class=\"actions\">\n <button (click)=\"increment()\">Increment</button>\n <button (click)=\"decrement()\">Decrement</button>\n <button (click)=\"reset()\">Reset</button>\n <button (click)=\"addToHistory()\">Add to History</button>\n </div>\n\n <div class=\"history\">\n <h3>History: {{ historyLength() }} items</h3>\n <ul>\n @for (item of history(); track item; let i = $index) {\n <li>{{ i + 1 }}. {{ item }}</li>\n }\n </ul>\n </div>\n </div>\n `,\n styles: [`\n .demo-container {\n padding: 20px;\n max-width: 600px;\n margin: 0 auto;\n }\n .state-display {\n background: #f5f5f5;\n padding: 15px;\n border-radius: 5px;\n margin: 20px 0;\n }\n pre {\n background: #fff;\n padding: 10px;\n border: 1px solid #ddd;\n border-radius: 3px;\n }\n .actions {\n display: flex;\n gap: 10px;\n margin: 20px 0;\n }\n button {\n padding: 10px 20px;\n background: #007bff;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n }\n button:hover {\n background: #0056b3;\n }\n .history {\n margin-top: 20px;\n }\n ul {\n max-height: 200px;\n overflow-y: auto;\n }\n `]\n})\nexport class StoreStateSignalsDemoComponent implements OnInit {\n\n private stateManager!: StoreStateManagerSignalsService<CounterState>;\n\n // Signals from service\n stateJson = signal<string>('');\n historyLength = signal<number>(0);\n history = signal<number[]>([]);\n\n ngOnInit() {\n const options = StateStorageOptions.adapt({\n store: 'counter-state',\n model: defaultCounterState,\n options: {\n storage: 'global',\n encrypted: false\n }\n });\n\n this.stateManager = new StoreStateManagerSignalsService<CounterState>();\n this.stateManager.init(options);\n\n // Update signals when state changes\n this.updateSignals();\n }\n\n private updateSignals() {\n const state = this.stateManager.data();\n if (state) {\n this.stateJson.set(JSON.stringify(state, null, 2));\n this.historyLength.set(state.history.length);\n this.history.set([...state.history]);\n }\n }\n\n increment() {\n const current = this.stateManager.data();\n if (current) {\n this.stateManager.updateState({\n count: current.count + 1,\n lastUpdated: new Date().toISOString()\n });\n this.updateSignals();\n }\n }\n\n decrement() {\n const current = this.stateManager.data();\n if (current) {\n this.stateManager.updateState({\n count: current.count - 1,\n lastUpdated: new Date().toISOString()\n });\n this.updateSignals();\n }\n }\n\n reset() {\n this.stateManager.resetState();\n this.updateSignals();\n }\n\n addToHistory() {\n const current = this.stateManager.data();\n if (current) {\n this.stateManager.updateState({\n history: [...current.history, current.count],\n lastUpdated: new Date().toISOString()\n });\n this.updateSignals();\n }\n }\n}\n","/*\n * Public API Surface of http-request-manager\n */\n\nexport * from './lib/index';\nexport * from './lib/http-request-manager.module';\n\nexport * from './lib/http-request-services-demo/http-request-services-demo.component';\n\nexport * from './lib/http-request-services-demo/database-data-demo/database-data-demo.component';\nexport * from './lib/http-request-services-demo/local-storage-demo/local-storage-demo.component';\nexport * from './lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component';\nexport * from './lib/http-request-services-demo/store-state-signals-demo/store-state-signals-demo.component';\nexport * from './lib/http-request-services-demo/request-manager-demo/request-manager-demo.component';\nexport * from './lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component';\nexport * from './lib/http-request-services-demo/request-manager-ws-demo/models/user-data.model';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ChannelType","i1.WebSocketManagerService","i1.DatabaseStorage","take","i1.StateStorageOptions","catchError","i1","ToastDisplay","ToastColors","i1.DownloadFileComponent","i2","ClientInfo","AIPrompt","ClientInfoMapper","i5","i6","i7","i8","i9","i10","i11","i12.FileDownloaderComponent","map","tap","i12","i13","i14","i15","switchMap","startWith","i3","i4","distinctUntilChanged","filter","takeUntil","i4.WsDataControlComponent","i5.WsMessagingComponent","i6.WsNotificationsComponent","i7.WsAiMessagingComponent","i8.WsChatsComponent","i6.RequestManagerBasicDemoComponent","i7.RequestManagerStateDemoComponent","i8.RequestManagerDemoComponent","i9.LocalStorageDemoComponent","i10.RequestManagerWsDemoComponent","i11.StoreStateManagerDemoComponent","i12.DatabaseDataDemoComponent","i13.FileDownloaderComponent"],"mappings":"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"}
|