{"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-state-service/models/stream-config.model.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/models/stream-progress.model.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/models/stream-output.model.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/channel-presence-signals.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/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/models/upload-validation-error.model.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/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/request-manager-state-service/models/operation-result.model.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/models/stream-event-metadata.model.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/models/stream-event.model.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/models/parsing-result.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/database-manager-service/database-manager-signals.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/request-manager-state-service/http-manager-state-signals.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/models/state-operation-result.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/SQL-DixieJS service/models/sql-errors.model.ts","../../../projects/http-request-manager/src/lib/services/SQL-DixieJS service/sql-parser.ts","../../../projects/http-request-manager/src/lib/services/SQL-DixieJS service/schema-validator.ts","../../../projects/http-request-manager/src/lib/services/SQL-DixieJS service/models/execution-plan.model.ts","../../../projects/http-request-manager/src/lib/services/SQL-DixieJS service/query-planner.ts","../../../projects/http-request-manager/src/lib/services/SQL-DixieJS service/dexie-query-executor.ts","../../../projects/http-request-manager/src/lib/services/SQL-DixieJS service/dexie-sql.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/models/user-data.model.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/upload-demo/models/upload-state.model.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/upload-demo/upload-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/upload-demo/upload-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        const dateY = new Date()\n        dateY.setFullYear(dateY.getFullYear() + years, 0, 1)\n        dateY.setHours(0, 0, 0, 0)\n        value = Math.floor(dateY.getTime() / 1000)\n        break;\n      case\n      'm':\n        const months = parseInt(str.slice(0, -1))\n        const dateM = new Date()\n        dateM.setMonth(dateM.getMonth() + months, 1)\n        dateM.setHours(0, 0, 0, 0)\n        value = Math.floor(dateM.getTime() / 1000)\n        break;\n      case\n      'w':\n        const weeks = parseInt(str.slice(0, -1))\n        const dateW = new Date()\n        const daysUntilSunday = (7 - dateW.getDay()) % 7\n        dateW.setDate(dateW.getDate() + daysUntilSunday + 1 + (weeks - 1) * 7)\n        dateW.setHours(0, 0, 0, 0)\n        value = Math.floor(dateW.getTime() / 1000)\n        break;\n      case\n      'd':\n        const days = parseInt(str.slice(0, -1))\n        const dateD = new Date()\n        dateD.setDate(dateD.getDate() + days)\n        dateD.setHours(0, 0, 0, 0)\n        value = Math.floor(dateD.getTime() / 1000)\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 null\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      const message = String(error?.message || '');\n      if (message && !message.includes('Malformed UTF-8 data')) {\n        console.warn('Decryption failed');\n      }\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 static readonly DEBUG_FLAG_KEY = 'HTTP_MGR_DEBUG';\n  private debugMode: boolean;\n\n  constructor() {\n    this.debugMode = isDevMode() && this.isDebugFlagEnabled();\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  private isDebugFlagEnabled(): boolean {\n    try {\n      if (typeof globalThis === 'undefined' || !globalThis.localStorage) {\n        return true;\n      }\n\n      const value = globalThis.localStorage.getItem(LoggerService.DEBUG_FLAG_KEY);\n      if (value === null) {\n        return true;\n      }\n\n      const normalized = value.trim().toLowerCase();\n      return !['0', 'false', 'off', 'no'].includes(normalized);\n    } catch {\n      return true;\n    }\n  }\n}\n","import { StreamType } from './stream-type.enum';\n\nexport interface StreamConfigInterface {\n  streamType: StreamType;\n  totalHeader?: string;\n}\n\nexport class StreamConfigModel implements StreamConfigInterface {\n  constructor(\n    public streamType: StreamType = StreamType.AI_STREAMING,\n    public totalHeader: string = 'X-Total-Count'\n  ) {}\n\n  static adapt(item?: any): StreamConfigModel {\n    return new StreamConfigModel(\n      item?.streamType,\n      item?.totalHeader\n    );\n  }\n}\n","export interface StreamProgressInterface {\n  received: number;\n  total?: number;\n  percent: number;\n  stage: 'connecting' | 'streaming' | 'complete' | 'error';\n}\n\nexport class StreamProgressModel implements StreamProgressInterface {\n  constructor(\n    public received: number = 0,\n    public total?: number,\n    public percent: number = 0,\n    public stage: 'connecting' | 'streaming' | 'complete' | 'error' = 'connecting'\n  ) {}\n\n  static adapt(item?: any): StreamProgressModel {\n    return new StreamProgressModel(\n      item?.received,\n      item?.total,\n      item?.percent,\n      item?.stage\n    );\n  }\n}\n","import { StreamProgressModel } from './stream-progress.model';\n\nexport interface StreamOutputInterface<T = any> {\n  data: T[];\n  progress: StreamProgressModel;\n  endpoint?: string;\n}\n\nexport class StreamOutputModel<T = any> implements StreamOutputInterface<T> {\n  constructor(\n    public data: T[] = [],\n    public progress: StreamProgressModel = new StreamProgressModel(),\n    public endpoint?: string\n  ) {}\n\n  static adapt<T = any>(item?: any): StreamOutputModel<T> {\n    return new StreamOutputModel<T>(\n      Array.isArray(item?.data) ? item.data : [],\n      item?.progress ? StreamProgressModel.adapt(item.progress) : new StreamProgressModel(),\n      item?.endpoint\n    );\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';\nimport { StreamConfigModel } from '../../request-manager-state-service/models/stream-config.model';\nimport { StreamProgressModel } from '../../request-manager-state-service/models/stream-progress.model';\nimport { StreamOutputModel } from '../../request-manager-state-service/models/stream-output.model';\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: StreamConfigModel;\n  private lastParsedLength = 0; // Track parsed position to avoid duplicates\n  private totalFromHeader: number | undefined;\n\n  constructor(config?: StreamConfigModel) {\n    this.streamConfig = config || new StreamConfigModel(StreamType.AI_STREAMING);\n  }\n\n  /**\n   * Process HTTP events and extract streaming data with progress\n   */\n  process(event: any): StreamOutputModel<T> | null {\n    switch (event.type) {\n      case HttpEventType.ResponseHeader:\n        this.contentType = event.headers?.get('content-type') || '';\n        // Read total from response header if configured\n        if (this.streamConfig.totalHeader && event.headers) {\n          const totalVal = event.headers.get(this.streamConfig.totalHeader);\n          if (totalVal !== undefined && totalVal !== null) {\n            const parsed = parseInt(totalVal, 10);\n            if (!isNaN(parsed)) {\n              this.totalFromHeader = parsed;\n            }\n          }\n        }\n        return null;\n\n      case HttpEventType.DownloadProgress:\n        if (event.partialText) {\n          this.buffer = event.partialText;\n          const parsedData = this.parseBuffer();\n\n          // Only return NEW items since last parse (progressive updates)\n          const newItems = parsedData.slice(this.lastParsedLength);\n          this.lastParsedLength = parsedData.length;\n\n          // Calculate progress — prefer record count from header, fall back to byte-level\n          const total = this.totalFromHeader ?? event.total;\n          const received = this.totalFromHeader ? this.lastParsedLength : event.loaded;\n          const percent = total\n            ? Math.round((received / total) * 100)\n            : 0;\n\n          const progress = StreamProgressModel.adapt({\n            received,\n            total,\n            percent,\n            stage: 'streaming'\n          });\n\n          return StreamOutputModel.adapt<T>({\n            data: newItems.length > 0 ? newItems : [],\n            progress\n          });\n        }\n        return null;\n\n      case HttpEventType.Response:\n        if (event.body) {\n          this.buffer = typeof event.body === 'string' ? event.body : this.buffer;\n          const parsedData = this.parseBuffer();\n\n          // Calculate final progress\n          const received = this.totalFromHeader ? parsedData.length : event.loaded;\n\n          const progress = StreamProgressModel.adapt({\n            received,\n            percent: 100,\n            stage: 'complete'\n          });\n\n          return StreamOutputModel.adapt<T>({\n            data: parsedData.length > 0 ? parsedData : [],\n            progress\n          });\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    this.lastParsedLength = 0;\n    this.totalFromHeader = undefined;\n  }\n\n  /**\n   * Update configuration\n   */\n  updateConfig(config: StreamConfigModel): 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 {\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 {\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?: StreamConfigModel): OperatorFunction<any, StreamOutputModel<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 StreamOutputModel<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: StreamConfigModel): 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: StreamConfigModel): any[] {\n  const results: any[] = [];\n  const lines = buffer.split('\\n');\n\n  // If the buffer doesn't end with \\n, the last segment is an incomplete partial line — skip it\n  const completeLines = buffer.endsWith('\\n') ? lines : lines.slice(0, -1);\n\n  completeLines.filter(line => line.trim()).forEach(line => {\n    const trimmedLine = line.trim();\n    if (trimmedLine && trimmedLine.startsWith('{')) {\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: StreamConfigModel): 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: StreamConfigModel): 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: StreamConfigModel): 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: StreamConfigModel): 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, StreamOutputModel<T>> {\n  return requestStreaming<T>(StreamConfigModel.adapt({ streamType: StreamType.JSON }));\n}\n\n// Stream with NDJSON format\nexport function streamNDJSON<T = any>(): OperatorFunction<any, StreamOutputModel<T>> {\n  return requestStreaming<T>(StreamConfigModel.adapt({ streamType: StreamType.NDJSON }));\n}\n\n// Stream AI responses\nexport function streamAI<T = any>(): OperatorFunction<any, StreamOutputModel<T>> {\n  return requestStreaming<T>(StreamConfigModel.adapt({ streamType: StreamType.AI_STREAMING }));\n}\n\n// Stream Server-Sent Events\nexport function streamEvents<T = any>(): OperatorFunction<any, StreamOutputModel<T>> {\n  return requestStreaming<T>(StreamConfigModel.adapt({ streamType: StreamType.EVENT_STREAM }));\n}\n\n// Auto-detect streaming format\nexport function streamAuto<T = any>(): OperatorFunction<any, StreamOutputModel<T>> {\n  return requestStreaming<T>(StreamConfigModel.adapt({ 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: 'statemanagerMessage', 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, Subscription, timer } from 'rxjs';\nimport { take } from 'rxjs/operators';\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 isConnectingSubject = new BehaviorSubject<boolean>(false);\n  public isConnecting$ = WebSocketManagerService.isConnectingSubject.asObservable();\n  private static connectionInitialized = false;\n  private static shouldRetry = true;\n\n  // Store last options for reconnection\n  private static lastOptions: WSOptions | null = null;\n  private static lastJwtToken: string = '';\n\n\n  // Retry configuration\n  private static retryCount = 0;\n  private static retryDelay = 5000;\n  private static retrySubscription: Subscription | null = null;\n  private static maxRetries = 10;\n  private static connectionReadyNotified = false;\n  private static retryCountSubject = new BehaviorSubject<number>(0);\n  public retryCount$ = WebSocketManagerService.retryCountSubject.asObservable();\n  private static maxRetriesSubject = new BehaviorSubject<number>(10);\n  public maxRetries$ = WebSocketManagerService.maxRetriesSubject.asObservable();\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 connectionError = new BehaviorSubject<string | null>(null);\n  public connectionError$: Observable<string | null> = WebSocketManagerService.connectionError.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    // Cancel any pending retry timer before attempting a new connection\n    WebSocketManagerService.retrySubscription?.unsubscribe();\n    WebSocketManagerService.retrySubscription = null;\n    WebSocketManagerService.connectionError.next(null);\n\n    // Guard: reject non-absolute WS URLs before touching any state\n    const wsServer = options?.wsServer ?? '';\n    if (!wsServer.startsWith('ws://') && !wsServer.startsWith('wss://')) {\n      console.error(`❌ Invalid WebSocket URL: '${wsServer}'. Must be an absolute ws:// or wss:// URL.`);\n      WebSocketManagerService.isConnectingSubject.next(false);\n      WebSocketManagerService.connectionStatus.next(false);\n      WebSocketManagerService.connectionError.next(`Invalid WebSocket URL: '${wsServer}'`);\n      return;\n    }\n\n    // Reset retryCount only on a fresh (non-retry) connection\n    if (options !== WebSocketManagerService.lastOptions) {\n      WebSocketManagerService.retryCount = 0;\n      WebSocketManagerService.retryCountSubject.next(0);\n    }\n\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    // Store jwt token for retry\n    WebSocketManagerService.lastJwtToken = jwtToken;\n    WebSocketManagerService.lastOptions = options;\n\n    // Always set maxRetries and delay from latest options\n    if (options?.retry?.times) {\n      WebSocketManagerService.maxRetries = options.retry.times;\n      WebSocketManagerService.maxRetriesSubject.next(options.retry.times);\n    } else {\n      WebSocketManagerService.maxRetries = 10;\n      WebSocketManagerService.maxRetriesSubject.next(10);\n    }\n\n    if (options?.retry?.delay) {\n      WebSocketManagerService.retryDelay = options.retry.delay * 1000;\n    } else {\n      WebSocketManagerService.retryDelay = 5000;\n    }\n\n    // Reset shouldRetry flag for new connection attempts\n    WebSocketManagerService.shouldRetry = true;\n\n    // Mark as connecting — connectionStatus false while connecting, true only when connected\n    WebSocketManagerService.isConnectingSubject.next(true);\n    WebSocketManagerService.isSubscribed = false;\n    WebSocketManagerService.connectionReadyNotified = false;\n    WebSocketManagerService.subscribedChannels.next(new Set());\n    // Don't set connectionStatus to true here - only set to true when connection is actually established\n    // WebSocketManagerService.connectionStatus.next(true);\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(`📡 WebSocket handshake complete — awaiting server confirmation`);\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      WebSocketManagerService.connectionInitialized = true;\n      // Do NOT set isConnecting=false here — TCP handshake is not app-level auth.\n      // isConnecting goes false only when onmessage confirms auth or a terminal failure occurs.\n      // Do NOT set connectionStatus to true here - wait for server to confirm authentication via onmessage\n    };\n\n    WebSocketManagerService.socket.onmessage = (event) => {\n      try {\n        const data = JSON.parse(event.data);\n\n        if (data.error) {\n          WebSocketManagerService.messages.next(data);\n          if (data.error === 'JWT_INVALID' || data.error === 'AUTH_BLOCKED') {\n            console.error(`🚫 ${data.error}: ${data.message || 'Authentication error'} — stopping, no retry`);\n            WebSocketManagerService.lastOptions = null;\n            WebSocketManagerService.connectionError.next('Invalid or Expired JWT');\n            WebSocketManagerService.connectionStatus.next(false);\n            // Stop retrying for authentication errors\n            WebSocketManagerService.shouldRetry = false;\n          } else {\n            console.error(`❌ Server error: ${data.error} — will retry`);\n          }\n          WebSocketManagerService.socket?.close();\n          return;\n        }\n\n        // First valid (non-error) message confirms the server accepted auth.\n        // Notify readiness once per connection so pending intended subscriptions\n        // are replayed after the socket is actually usable.\n        if (!WebSocketManagerService.connectionReadyNotified) {\n          WebSocketManagerService.connectionReadyNotified = true;\n          // Auth confirmed — stop the connecting indicator and mark connected\n          WebSocketManagerService.isConnectingSubject.next(false);\n          WebSocketManagerService.connectionStatus.next(true);\n          console.log(`✅ Server confirmed authentication. WebSocket ready.`);\n          console.log(`🔄 Emitting reconnect event for MessageTrackerService`);\n          WebSocketManagerService.onReconnect.next();\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 = (event: CloseEvent) => {\n      console.log(`🔴 WebSocket closed (code: ${event.code})`);\n      // Do NOT set isConnecting to false here — we may be about to retry.\n      // Only terminal paths (auth error, retries exhausted) set it false.\n      WebSocketManagerService.connectionReadyNotified = false;\n      WebSocketManagerService.socket = null;\n      WebSocketManagerService.subscribedChannels.next(new Set());\n\n      if (event.code === 4000 || event.code === 4001 || event.code === 4003) {\n        WebSocketManagerService.isConnectingSubject.next(false);\n        WebSocketManagerService.connectionError.next('Invalid or Expired JWT');\n        WebSocketManagerService.connectionStatus.next(false);\n        // Stop retrying for authentication errors\n        WebSocketManagerService.shouldRetry = false;\n        return;\n      }\n\n      const maxRetries = WebSocketManagerService.maxRetries;\n      const retryDelay = WebSocketManagerService.retryDelay;\n\n      // Only retry if shouldRetry is true and we haven't exceeded max retries\n      if (WebSocketManagerService.shouldRetry && WebSocketManagerService.lastOptions && WebSocketManagerService.retryCount < maxRetries) {\n        WebSocketManagerService.retryCount++;\n        WebSocketManagerService.retryCountSubject.next(WebSocketManagerService.retryCount);\n        console.log(`🔄 Reconnect attempt ${WebSocketManagerService.retryCount}/${maxRetries}...`);\n        // Keep isConnecting true — still actively trying to connect during the retry wait\n        WebSocketManagerService.isConnectingSubject.next(true);\n        WebSocketManagerService.retrySubscription = timer(retryDelay).pipe(take(1)).subscribe(() => this.connect(WebSocketManagerService.lastOptions!, WebSocketManagerService.lastJwtToken));\n      } else {\n        console.error(`❌ WebSocket failed after ${maxRetries} retries. Giving up.`);\n        WebSocketManagerService.isConnectingSubject.next(false);\n        WebSocketManagerService.connectionStatus.next(false);\n        // Only set the error if this wasn't an intentional disconnect (lastOptions cleared in disconnect())\n        if (WebSocketManagerService.lastOptions && !WebSocketManagerService.connectionError.value) {\n          WebSocketManagerService.connectionError.next('Connection failed after maximum retries');\n        }\n        WebSocketManagerService.retryCount = maxRetries;\n        WebSocketManagerService.retryCountSubject.next(maxRetries);\n        WebSocketManagerService.shouldRetry = true;\n      }\n    };\n\n    WebSocketManagerService.socket.onerror = (error) => {\n      console.error('❌ WebSocket error:', error);\n      // Do not set isConnecting here — onclose fires immediately after onerror\n      // and is the authoritative place to decide whether to retry or give up.\n    };\n  }\n\n  /**\n   * Disconnect from WebSocket server\n   */\n  disconnect(): void {\n    // Stop retry logic BEFORE closing — onclose fires synchronously in some environments\n    // and must not see shouldRetry=true or it will schedule a reconnect.\n    WebSocketManagerService.shouldRetry = false;\n    WebSocketManagerService.lastOptions = null;\n    WebSocketManagerService.retrySubscription?.unsubscribe();\n    WebSocketManagerService.retrySubscription = null;\n    if (WebSocketManagerService.socket) {\n      console.log('🔌 Disconnecting WebSocket...');\n      WebSocketManagerService.socket.close();\n      WebSocketManagerService.socket = null;\n      WebSocketManagerService.connectionStatus.next(false);\n      WebSocketManagerService.isConnectingSubject.next(false);\n      WebSocketManagerService.connectionError.next(null);\n      WebSocketManagerService.subscribedChannels.next(new Set());\n    }\n  }\n\n  /**\n   * Clear a stale connectionError without triggering a connection attempt.\n   * Used when no wsServer is configured so the UI shows clean \"Disconnected\" state.\n   */\n  clearConnectionError(): void {\n    WebSocketManagerService.connectionError.next(null);\n    WebSocketManagerService.isConnectingSubject.next(false);\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: 'statemanagerMessage',\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    // Send flat payload to avoid double-nesting:\n    // sendMessageInChannel wraps content in { type, subscribedChannel, content },\n    // so we pass { method, path, user } directly instead of the full StateMessage\n    this.wsManagerService.sendMessageInChannel(channel, {\n      ...payload.content,\n      user: payload.sessionId\n    });\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, DestroyRef } from '@angular/core';\nimport { takeUntilDestroyed } 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  private destroyRef = inject(DestroyRef);\n\n  // Signal-based state (primary API)\n  private static connectionStatusSignal = signal<boolean>(false);\n  public readonly connectionStatus = WebSocketSignalsManagerService.connectionStatusSignal.asReadonly();\n\n  private static messagesSignal = signal<any>(null);\n  public readonly messages = WebSocketSignalsManagerService.messagesSignal.asReadonly();\n\n  private static subscribedChannelsSignal = signal<Set<string>>(new Set());\n  public readonly subscribedChannels = WebSocketSignalsManagerService.subscribedChannelsSignal.asReadonly();\n\n  private static isConnectingSignal = signal<boolean>(false);\n  public readonly isConnecting = WebSocketSignalsManagerService.isConnectingSignal.asReadonly();\n\n  private static retryCountSignal = signal<number>(0);\n  public readonly retryCount = WebSocketSignalsManagerService.retryCountSignal.asReadonly();\n\n  private static maxRetriesSignal = signal<number>(0);\n  public readonly maxRetries = WebSocketSignalsManagerService.maxRetriesSignal.asReadonly();\n\n  private static connectionErrorSignal = signal<string | null>(null);\n  public readonly connectionError = WebSocketSignalsManagerService.connectionErrorSignal.asReadonly();\n\n  constructor() {\n    this.wsManager.messages$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(message => {\n      WebSocketSignalsManagerService.messagesSignal.set(message);\n    });\n\n    this.wsManager.connectionStatus$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(status => {\n      WebSocketSignalsManagerService.connectionStatusSignal.set(status);\n    });\n\n    this.wsManager.subscribedChannels$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(channels => {\n      WebSocketSignalsManagerService.subscribedChannelsSignal.set(channels);\n    });\n\n    this.wsManager.isConnecting$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(status => {\n      WebSocketSignalsManagerService.isConnectingSignal.set(status);\n    });\n\n    this.wsManager.retryCount$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(count => {\n      WebSocketSignalsManagerService.retryCountSignal.set(count);\n    });\n\n    this.wsManager.maxRetries$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(max => {\n      WebSocketSignalsManagerService.maxRetriesSignal.set(max);\n    });\n\n    this.wsManager.connectionError$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(err => {\n      WebSocketSignalsManagerService.connectionErrorSignal.set(err);\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 { WebSocketSignalsManagerService } from './websocket-signals-manager.service';\n\n/**\n * ChannelPresenceSignalsService - Signal-based channel presence and metadata tracking.\n *\n * Tracks WebSocket messages, channel metadata, and user presence using pure signals.\n * No Observable bridges — consumers use `toObservable()` at the call site if needed.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class ChannelPresenceSignalsService {\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\n  private channelMetadataSignal = signal<Map<string, any>>(new Map());\n  public readonly channelMetadata = this.channelMetadataSignal.asReadonly();\n\n  private usersInChannelsSignal = signal<Map<string, Set<string>>>(new Map());\n  public readonly usersInChannels = this.usersInChannelsSignal.asReadonly();\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    this.messagesSignal.set(message);\n\n    if (message.channel) {\n      this.updateChannelMetadata(message.channel, message);\n    }\n\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    this.messagesSignal.set(null);\n    this.channelMetadataSignal.set(new Map());\n    this.usersInChannelsSignal.set(new Map());\n  }\n}\n","/**\n * @deprecated Use `ChannelPresenceSignalsService` instead.\n * This file is kept for backwards compatibility only.\n */\nimport { 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/**\n * @deprecated Use `ChannelPresenceSignalsService` from `channel-presence-signals.service.ts` instead.\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 { ChannelPresenceSignalsService } from \"./channel-presence-signals.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","export interface DatabaseStorageInterface {\n  table: string\n  expiresIn: string\n  deltaSync?: boolean\n}\n\nexport class DatabaseStorage implements DatabaseStorageInterface {\n\n  constructor(\n    public table = '',\n    public expiresIn: '',    public deltaSync = false,  ) {}\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      item?.deltaSync ?? false,\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  displaySuccess?: boolean;\n  displayError?: 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    public displaySuccess?: boolean,\n    public displayError?: boolean,\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      item?.displaySuccess ?? false,\n      item?.displayError ?? 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  displaySuccess?: 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    public displaySuccess?: 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      (item?.displaySuccess) ? item.displaySuccess : 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","export interface InvalidFileInfoInterface {\n  fileName: string;\n  fileSize: number;\n  fileType: string;\n  errors: string[];\n}\n\nexport class InvalidFileInfoModel implements InvalidFileInfoInterface {\n  constructor(\n    public fileName: string = '',\n    public fileSize: number = 0,\n    public fileType: string = '',\n    public errors: string[] = []\n  ) {}\n\n  static adapt(item?: any): InvalidFileInfoModel {\n    return new InvalidFileInfoModel(\n      item?.fileName,\n      item?.fileSize,\n      item?.fileType,\n      Array.isArray(item?.errors) ? item.errors : []\n    );\n  }\n}\n\nexport interface UploadValidationErrorInterface {\n  invalidFiles: InvalidFileInfoModel[];\n  validFilesCount: number;\n  totalFilesCount: number;\n}\n\nexport class UploadValidationErrorModel implements UploadValidationErrorInterface {\n  constructor(\n    public invalidFiles: InvalidFileInfoModel[] = [],\n    public validFilesCount: number = 0,\n    public totalFilesCount: number = 0\n  ) {}\n\n  static adapt(item?: any): UploadValidationErrorModel {\n    return new UploadValidationErrorModel(\n      Array.isArray(item?.invalidFiles) ? item.invalidFiles.map((f: any) => InvalidFileInfoModel.adapt(f)) : [],\n      item?.validFilesCount,\n      item?.totalFilesCount\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, filter, 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 } from './rxjs-operators/request-streaming';\nimport { StreamConfigModel } from '../request-manager-state-service/models/stream-config.model';\nimport { StreamOutputModel } from '../request-manager-state-service/models/stream-output.model';\nimport { StreamProgressModel } from '../request-manager-state-service/models/stream-progress.model';\nimport { WebsocketService } from '../ws-manager-service';\nimport { InvalidFileInfoModel, UploadValidationErrorModel } from '../../models';\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  streamProgress = new BehaviorSubject<StreamProgressModel>(StreamProgressModel.adapt({\n    received: 0,\n    total: undefined,\n    percent: 0,\n    stage: 'connecting'\n  }))\n  streamProgress$ = this.streamProgress.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(StreamConfigModel.adapt({ streamType: options.streamType || StreamType.NDJSON, totalHeader: 'X-Total-Count' })),\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(StreamConfigModel.adapt({ streamType: options.streamType || StreamType.NDJSON, totalHeader: 'X-Total-Count' })),\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<StreamOutputModel<T>>) => Observable<T[]> {\n    return (source$: Observable<StreamOutputModel<T>>): Observable<T[]> => {\n      return source$.pipe(\n        tap(output => {\n          // Update progress from stream output\n          this.progress.next(output.progress.received);\n          this.streamProgress.next(output.progress);\n        }),\n        map(output => {\n          const data = output.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  uploadFileRequest(options: ApiRequest): Observable<any> {\n    this.isPending.next(true);\n\n    const files = options.uploadFiles ? (Array.isArray(options.uploadFiles) ? options.uploadFiles : [options.uploadFiles]) : [];\n    const validation = this.validateUploadFiles(files, options);\n\n    if (validation.validFiles.length === 0) {\n      this.isPending.next(false);\n      return throwError(() => new UploadValidationErrorModel(\n        validation.invalidFiles,\n        0,\n        files.length\n      ));\n    }\n\n    const fieldName = options.uploadFieldName || (files.length === 1 ? 'file' : 'files');\n    const formData = this.buildFormData(validation.validFiles, fieldName);\n    const urlPath = this.buildUrlPath(options);\n    const method = options.uploadHttpMethod || 'POST';\n\n    return this.http.request(method, urlPath, {\n      body: formData,\n      observe: 'events',\n      reportProgress: true\n    }).pipe(\n      map((event: HttpEvent<any>) => {\n        this.isPending.next(true);\n\n        switch (event.type) {\n          case HttpEventType.UploadProgress:\n            const status = event.total ? Math.round(event.loaded / (event.total || 1) * 100) : 0;\n            this.progress.next(status);\n            return null;\n\n          case HttpEventType.Response:\n            this.isPending.next(false);\n            this.progress.next(0);\n            return event.body;\n\n          default:\n            return null;\n        }\n      }),\n      filter((body: any) => body !== null),\n      catchError(err => {\n        this.isPending.next(false);\n        this.progress.next(0);\n        return throwError(() => err);\n      })\n    );\n  }\n\n  private validateUploadFiles(files: File[], options: ApiRequest): { validFiles: File[]; invalidFiles: InvalidFileInfoModel[] } {\n    const validFiles: File[] = [];\n    const invalidFiles: InvalidFileInfoModel[] = [];\n    let totalSize = 0;\n\n    for (const file of files) {\n      const errors: string[] = [];\n\n      if (options.allowedTypes && options.allowedTypes.length > 0) {\n        const isAllowed = options.allowedTypes.some(type => {\n          if (type.endsWith('/*')) {\n            return file.type.startsWith(type.replace('/*', '/'));\n          }\n          return file.type === type;\n        });\n        if (!isAllowed) {\n          errors.push('type not allowed');\n        }\n      }\n\n      const maxFileSize = options.maxFileSize !== undefined ? options.maxFileSize : Infinity;\n      if (file.size > maxFileSize) {\n        errors.push('exceeds maxFileSize');\n      }\n\n      if (errors.length > 0) {\n        invalidFiles.push(new InvalidFileInfoModel(file.name, file.size, file.type, errors));\n      } else {\n        validFiles.push(file);\n        totalSize += file.size;\n      }\n    }\n\n    const maxTotalSize = options.maxTotalSize !== undefined ? options.maxTotalSize : Infinity;\n    if (totalSize > maxTotalSize) {\n      return {\n        validFiles: [],\n        invalidFiles: [\n          new InvalidFileInfoModel(\n            'total',\n            totalSize,\n            '',\n            ['exceeds maxTotalSize']\n          )\n        ]\n      };\n    }\n\n    return { validFiles, invalidFiles };\n  }\n\n  private buildFormData(files: File[], fieldName: string): FormData {\n    const formData = new FormData();\n    files.forEach((file) => {\n      formData.append(fieldName, file);\n    });\n    return formData;\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 { Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, interval, Observable, Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\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  /** Subscription to WebSocket messages */\n  private messagesSubscription: Subscription | null = null;\n\n  /** Subject to signal destroy for takeUntil */\n  private destroy$ = new Subject<void>();\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    interval(this.BATCH_ACK_INTERVAL_MS)\n      .pipe(takeUntil(this.destroy$))\n      .subscribe(() => this.sendAllBatchAcks());\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.destroy$.next();\n    this.destroy$.complete();\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   * 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  isConnecting$ = this.wsManager.isConnecting$\n  retryCount$ = this.wsManager.retryCount$\n  maxRetries$ = this.wsManager.maxRetries$\n  connectionError$ = this.wsManager.connectionError$\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  override streamProgress$ = this.streamProgress.asObservable();\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   * Clear any stale connection error without triggering a connection attempt\n   */\n  clearConnectionError(): void {\n    this.wsManager.clearConnectionError();\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    this.streamProgress.next({\n      received: 0,\n      total: undefined,\n      percent: 0,\n      stage: 'connecting'\n    });\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 => {\n        this.data.next(data)\n        if(updatedOptions.displaySuccess && !updatedOptions.stream) this.handleSuccessWithSnackBar(updatedOptions.successMessage)\n      }),\n      finalize(() => {\n        this.streamProgress.next({\n          ...this.streamProgress.value,\n          stage: 'complete'\n        });\n        if(updatedOptions.displaySuccess && updatedOptions.stream) this.handleSuccessWithSnackBar(updatedOptions.successMessage)\n        this.isPending.next(false)\n      }),\n      catchError((err) => {\n        if(updatedOptions.displayError) this.handleErrorWithSnackBar(err, updatedOptions.errorMessage || err?.message)\n        this.streamProgress.next({\n          ...this.streamProgress.value,\n          stage: 'error'\n        });\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(\n      tap(data => {\n        this.data.next(data)\n        if(updatedOptions.displaySuccess) this.handleSuccessWithSnackBar(updatedOptions.successMessage)\n      }),\n      finalize(() => this.isPending.next(false)),\n      catchError((err) => {\n        if(updatedOptions.displayError) this.handleErrorWithSnackBar(err, updatedOptions.errorMessage || err?.message)\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(\n      tap(data => {\n        this.data.next(data)\n        if(updatedOptions.displaySuccess) this.handleSuccessWithSnackBar(updatedOptions.successMessage)\n      }),\n      finalize(() => this.isPending.next(false)),\n      catchError((err) => {\n        if(updatedOptions.displayError) this.handleErrorWithSnackBar(err, updatedOptions.errorMessage || err?.message)\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(\n      tap(data => {\n        this.data.next(data)\n        if(updatedOptions.displaySuccess) this.handleSuccessWithSnackBar(updatedOptions.successMessage)\n      }),\n      finalize(() => this.isPending.next(false)),\n      catchError((err) => {\n        if(updatedOptions.displayError) this.handleErrorWithSnackBar(err, updatedOptions.errorMessage || err?.message)\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  uploadRequest<T>(files: File | File[], options: ApiRequest, params?: any[]) {\n\n    this.isPending.next(true);\n    this.data.next(null)\n\n    const updatedOptions = this.defineReqOptions(options, params)\n    updatedOptions.uploadFiles = files\n\n    const func = this.uploadFileRequest;\n    const requests = this.createRequest(func, updatedOptions);\n\n    return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n      tap(data => {\n        this.data.next(data)\n        if(updatedOptions.displaySuccess) this.handleSuccessWithSnackBar(updatedOptions.successMessage)\n      }),\n      finalize(() => this.isPending.next(false)),\n      catchError((err) => {\n        if(updatedOptions.displayError) this.handleErrorWithSnackBar(err, updatedOptions.errorMessage || err?.message)\n        this.isPending.next(false)\n        return this.handleError(err);\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, message?: string) {\n\n    const displayError = ToastDisplay.adapt({\n            message: 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 handleSuccessWithSnackBar(message?: string) {\n\n    const displaySuccess = ToastDisplay.adapt({\n            message: message || 'Success',\n            color: ToastColors.SUCCESS,\n            icon: 'check_circle',\n          })\n\n    this.toastMessage.toastMessage(displaySuccess)\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    successMessage?: string,\n    errorMessage?: string\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, undefined).pipe(\n          tap(data => {\n            results[index] = data;\n          }),\n          catchError(error => this.handleSequentialError(req, error, index, batchOptions))\n        );\n      }),\n      toArray(),\n      tap(() => {\n        if (batchOptions.displaySuccess) this.handleSuccessWithSnackBar(successMessage);\n      }),\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    successMessage?: string,\n    errorMessage?: string\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, undefined).pipe(\n          tap(data => {\n            results[index] = data;\n          }),\n          catchError(error => this.handleParallelError(req, error, index, batchOptions))\n        );\n      }, concurrency),\n      toArray(),\n      tap(() => {\n        if (batchOptions.displaySuccess) this.handleSuccessWithSnackBar(successMessage);\n      }),\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, filter, 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 } from './rxjs-operators/request-streaming';\nimport { StreamConfigModel } from '../request-manager-state-service/models/stream-config.model';\nimport { StreamOutputModel } from '../request-manager-state-service/models/stream-output.model';\nimport { StreamProgressModel } from '../request-manager-state-service/models/stream-progress.model';\nimport { WebsocketService } from '../ws-manager-service';\nimport { InvalidFileInfoModel, UploadValidationErrorModel } from '../../models';\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  streamProgress = signal<StreamProgressModel>(new StreamProgressModel());\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(StreamConfigModel.adapt({ streamType: options.streamType || StreamType.NDJSON, totalHeader: 'X-Total-Count' })),\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(StreamConfigModel.adapt({ streamType: options.streamType || StreamType.NDJSON, totalHeader: 'X-Total-Count' })),\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<StreamOutputModel<T>>) => Observable<T[]> {\n    return (source$: Observable<StreamOutputModel<T>>): Observable<T[]> => {\n      return source$.pipe(\n        tap(output => {\n          this.progress.set(output.progress.received);\n          this.streamProgress.set({ ...output.progress, stage: 'streaming' });\n        }),\n        map(output => {\n          const data = output.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        finalize(() => this.streamProgress.update(p => ({ ...p, stage: 'complete' }))),\n        catchError(err => {\n          this.streamProgress.update(p => ({ ...p, stage: 'error' }));\n          return throwError(() => err);\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 fileContentHeader = options.fileContentHeader || 'Content-Disposition';\n                const header_content = event.headers.get(fileContentHeader) || '';\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.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  uploadFileRequest(options: ApiRequest): Observable<any> {\n    this.isPending.set(true);\n\n    const files = options.uploadFiles ? (Array.isArray(options.uploadFiles) ? options.uploadFiles : [options.uploadFiles]) : [];\n    const validation = this.validateUploadFiles(files, options);\n\n    if (validation.validFiles.length === 0) {\n      this.isPending.set(false);\n      return throwError(() => new UploadValidationErrorModel(\n        validation.invalidFiles,\n        0,\n        files.length\n      ));\n    }\n\n    const fieldName = options.uploadFieldName || (files.length === 1 ? 'file' : 'files');\n    const formData = this.buildFormData(validation.validFiles, fieldName);\n    const urlPath = this.buildUrlPath(options);\n    const method = options.uploadHttpMethod || 'POST';\n\n    return this.http.request(method, urlPath, {\n      body: formData,\n      observe: 'events',\n      reportProgress: true\n    }).pipe(\n      map((event: HttpEvent<any>) => {\n        this.isPending.set(true);\n\n        switch (event.type) {\n          case HttpEventType.UploadProgress:\n            const status = event.total ? Math.round(event.loaded / (event.total || 1) * 100) : 0;\n            this.progress.set(status);\n            return null;\n\n          case HttpEventType.Response:\n            this.isPending.set(false);\n            this.progress.set(0);\n            return event.body;\n\n          default:\n            return null;\n        }\n      }),\n      filter((body: any) => body !== null),\n      catchError(err => {\n        this.isPending.set(false);\n        this.progress.set(0);\n        return throwError(() => err);\n      })\n    );\n  }\n\n  private validateUploadFiles(files: File[], options: ApiRequest): { validFiles: File[]; invalidFiles: InvalidFileInfoModel[] } {\n    const validFiles: File[] = [];\n    const invalidFiles: InvalidFileInfoModel[] = [];\n    let totalSize = 0;\n\n    for (const file of files) {\n      const errors: string[] = [];\n\n      if (options.allowedTypes && options.allowedTypes.length > 0) {\n        const isAllowed = options.allowedTypes.some(type => {\n          if (type.endsWith('/*')) {\n            return file.type.startsWith(type.replace('/*', '/'));\n          }\n          return file.type === type;\n        });\n        if (!isAllowed) {\n          errors.push('type not allowed');\n        }\n      }\n\n      const maxFileSize = options.maxFileSize !== undefined ? options.maxFileSize : Infinity;\n      if (file.size > maxFileSize) {\n        errors.push('exceeds maxFileSize');\n      }\n\n      if (errors.length > 0) {\n        invalidFiles.push(new InvalidFileInfoModel(file.name, file.size, file.type, errors));\n      } else {\n        validFiles.push(file);\n        totalSize += file.size;\n      }\n    }\n\n    const maxTotalSize = options.maxTotalSize !== undefined ? options.maxTotalSize : Infinity;\n    if (totalSize > maxTotalSize) {\n      return {\n        validFiles: [],\n        invalidFiles: [\n          new InvalidFileInfoModel(\n            'total',\n            totalSize,\n            '',\n            ['exceeds maxTotalSize']\n          )\n        ]\n      };\n    }\n\n    return { validFiles, invalidFiles };\n  }\n\n  private buildFormData(files: File[], fieldName: string): FormData {\n    const formData = new FormData();\n    files.forEach((file, index) => {\n      formData.append(`${fieldName}[${index}]`, file);\n    });\n    return formData;\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 { toSignal } from '@angular/core/rxjs-interop';\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 { StreamProgressModel } from '../request-manager-state-service/models/stream-progress.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<boolean>(false);\n  data = signal<any>(null);\n\n  isConnecting = toSignal(this.wsManager.isConnecting$, { initialValue: false });\n  retryCount = toSignal(this.wsManager.retryCount$, { initialValue: 0 });\n  maxRetries = toSignal(this.wsManager.maxRetries$, { initialValue: 0 });\n  connectionError = toSignal(this.wsManager.connectionError$, { initialValue: 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    this.streamProgress.set(new StreamProgressModel());\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 => {\n        this.data.set(data);\n        if (updatedOptions.displaySuccess && !updatedOptions.stream) this.handleSuccessWithSnackBar(updatedOptions.successMessage);\n      }),\n      finalize(() => {\n        if (updatedOptions.displaySuccess && updatedOptions.stream) this.handleSuccessWithSnackBar(updatedOptions.successMessage);\n        this.isPending.set(false);\n      }),\n      catchError((err) => {\n        if (updatedOptions.displayError) this.handleErrorWithSnackBar(err, updatedOptions.errorMessage || err?.message);\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 => {\n        this.data.set(data);\n        if (updatedOptions.displaySuccess) this.handleSuccessWithSnackBar(updatedOptions.successMessage);\n      }),\n      finalize(() => this.isPending.set(false)),\n      catchError((err) => {\n        if (updatedOptions.displayError) this.handleErrorWithSnackBar(err, updatedOptions.errorMessage);\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 => {\n        this.data.set(data);\n        if (updatedOptions.displaySuccess) this.handleSuccessWithSnackBar(updatedOptions.successMessage);\n      }),\n      finalize(() => this.isPending.set(false)),\n      catchError((err) => {\n        if (updatedOptions.displayError) this.handleErrorWithSnackBar(err, updatedOptions.errorMessage);\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 => {\n        this.data.set(data);\n        if (updatedOptions.displaySuccess) this.handleSuccessWithSnackBar(updatedOptions.successMessage);\n      }),\n      finalize(() => this.isPending.set(false)),\n      catchError((err) => {\n        if (updatedOptions.displayError) this.handleErrorWithSnackBar(err, updatedOptions.errorMessage);\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    this.streamProgress.set(new StreamProgressModel());\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  uploadRequest<T>(files: File | File[], options: ApiRequest, params?: any[]) {\n    this.isPending.set(true);\n    this.data.set(null);\n\n    const updatedOptions = this.defineReqOptions(options, params);\n    updatedOptions.uploadFiles = files;\n\n    const func = this.uploadFileRequest;\n    const requests = this.createRequest(func, updatedOptions);\n\n    return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n      tap(data => {\n        this.data.set(data);\n        if (updatedOptions.displaySuccess) this.handleSuccessWithSnackBar(updatedOptions.successMessage);\n      }),\n      finalize(() => this.isPending.set(false)),\n      catchError((err) => {\n        if (updatedOptions.displayError) this.handleErrorWithSnackBar(err, updatedOptions.errorMessage || err?.message);\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(true);\n    return throwError(() => error);\n  }\n\n  private handleErrorWithSnackBar(error: Response | any, message?: string) {\n    const displayError = ToastDisplay.adapt({\n      message: 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 handleSuccessWithSnackBar(message?: string) {\n    const displaySuccess = ToastDisplay.adapt({\n      message: message || 'Success',\n      color: ToastColors.SUCCESS,\n      icon: 'check_circle',\n    });\n    this.toastMessage.toastMessage(displaySuccess);\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    successMessage?: string,\n    errorMessage?: string\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, undefined).pipe(\n          tap(data => {\n            results[index] = data;\n          }),\n          catchError(error => this.handleSequentialError(req, error, index, batchOptions))\n        );\n      }),\n      toArray(),\n      tap(() => {\n        if (batchOptions.displaySuccess) this.handleSuccessWithSnackBar(successMessage);\n      }),\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    successMessage?: string,\n    errorMessage?: string\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, undefined).pipe(\n          tap(data => {\n            results[index] = data;\n          }),\n          catchError(error => this.handleParallelError(req, error, index, batchOptions))\n        );\n      }, concurrency),\n      toArray(),\n      tap(() => {\n        if (batchOptions.displaySuccess) this.handleSuccessWithSnackBar(successMessage);\n      }),\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  displaySuccess?: boolean\n  successMessage?: string\n  errorMessage?: string\n  saveAs?: string\n  fileContentHeader?: string\n  ws?: WSOptions // Websocket Options\n  env?: string // Environment for WebSocket channel naming\n  uploadFiles?: File | File[]\n  uploadFieldName?: string\n  uploadHttpMethod?: 'POST' | 'PUT'\n  allowedTypes?: string[]\n  maxFileSize?: number\n  maxTotalSize?: number\n}\n\nexport class ApiRequest implements ApiRequestInterface {\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 displaySuccess?: boolean,\n    public successMessage?: string,\n    public errorMessage?: string,\n    public saveAs?: string,\n    public fileContentHeader?: string,\n    public ws?: WSOptions,\n    public env?: string,\n    public uploadFiles?: File | File[],\n    public uploadFieldName?: string,\n    public uploadHttpMethod?: 'POST' | 'PUT',\n    public allowedTypes?: string[],\n    public maxFileSize?: number,\n    public maxTotalSize?: number,\n  ) {}\n\n  static adapt(item?: any): ApiRequest {\n    const server = Array.isArray(item?.server) ? item.server.join('/') : item?.server || '';\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?.displaySuccess ? item.displaySuccess : false,\n      item?.successMessage,\n      item?.errorMessage,\n      item?.saveAs,\n      item?.fileContentHeader,\n      item?.ws,\n      item?.env || 'dev',\n      item?.uploadFiles,\n      item?.uploadFieldName,\n      item?.uploadHttpMethod,\n      Array.isArray(item?.allowedTypes) ? item.allowedTypes : [],\n      item?.maxFileSize,\n      item?.maxTotalSize,\n    );\n  }\n}\n","export interface RequestOptionsInterface {\n    path: any[],\n    headers: any,\n  forceRefresh?: boolean,\n  ignoreQueryParams?: string[],\n  queryParamsExpiresIn?: string | number,\n}\n\nexport class RequestOptions implements RequestOptionsInterface {\n\n  constructor(\n    public path: any[] = [],\n    public headers = {},\n    public forceRefresh?: boolean,\n    public ignoreQueryParams?: string[],\n    public queryParamsExpiresIn?: string | number,\n  ) {}\n\n  static adapt(item?: any): RequestOptions {\n\n    return new RequestOptions(\n      item?.path,\n      item?.headers,\n      item?.forceRefresh,\n      Array.isArray(item?.ignoreQueryParams) ? item.ignoreQueryParams : [],\n      item?.queryParamsExpiresIn,\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","export interface OperationResultInterface {\n  success: boolean;\n  operation: 'CREATE' | 'UPDATE' | 'DELETE';\n}\n\nexport class OperationResultModel implements OperationResultInterface {\n  constructor(\n    public success: boolean = false,\n    public operation: 'CREATE' | 'UPDATE' | 'DELETE' = 'UPDATE',\n  ) {}\n\n  static adapt(item?: any): OperationResultModel {\n    return new OperationResultModel(\n      item?.success ?? false,\n      item?.operation || 'UPDATE',\n    );\n  }\n}\n","import { StreamType } from './stream-type.enum';\n\nexport interface StreamEventMetadataInterface {\n  timestamp: Date;\n  streamType: StreamType;\n  contentLength?: number;\n}\n\nexport class StreamEventMetadataModel implements StreamEventMetadataInterface {\n  constructor(\n    public timestamp: Date = new Date(),\n    public streamType: StreamType = StreamType.AI_STREAMING,\n    public contentLength?: number\n  ) {}\n\n  static adapt(item?: any): StreamEventMetadataModel {\n    return new StreamEventMetadataModel(\n      item?.timestamp,\n      item?.streamType,\n      item?.contentLength\n    );\n  }\n}\n","import { StreamEventMetadataModel } from './stream-event-metadata.model';\n\nexport interface StreamEventInterface<T = any> {\n  type: 'progress' | 'complete' | 'data';\n  data: T;\n  metadata?: StreamEventMetadataModel;\n}\n\nexport class StreamEventModel<T = any> implements StreamEventInterface<T> {\n  constructor(\n    public type: 'progress' | 'complete' | 'data' = 'data',\n    public data: T = null as any,\n    public metadata?: StreamEventMetadataModel\n  ) {}\n\n  static adapt<T = any>(item?: any): StreamEventModel<T> {\n    return new StreamEventModel<T>(\n      item?.type,\n      item?.data,\n      item?.metadata ? StreamEventMetadataModel.adapt(item.metadata) : undefined\n    );\n  }\n}\n","export interface ParsingResultInterface<T = any> {\n  success: boolean;\n  data?: T[];\n  error?: string;\n}\n\nexport class ParsingResultModel<T = any> implements ParsingResultInterface<T> {\n  constructor(\n    public success: boolean = false,\n    public data?: T[],\n    public error?: string\n  ) {}\n\n  static adapt<T = any>(item?: any): ParsingResultModel<T> {\n    return new ParsingResultModel<T>(\n      item?.success,\n      Array.isArray(item?.data) ? item.data : undefined,\n      item?.error\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].reverse().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].reverse().find(item => item.id === foundStore.id) as StorageData\n          : [...data.sessionStores].reverse().find(item => item.id === foundStore.id) as StorageData\n\n        if(!found) {\n          // console.warn('[CacheDebug] store$: settings entry found but no data entry in localStores/sessionStores', { store, foundStoreId: foundStore.id, storageType: foundStore.options?.storage })\n          this.deleteStore({ name: store })\n          return\n        }\n\n        let storageData = found.data;\n        if (options.encrypted) {\n          if(!this.app?.appID) {\n            console.warn('No App ID found - AppId not Provided, cannot decrypt encrypted store')\n            return\n          }\n\n          if (this.isString(found.data) && !this.encryptionTest.isEncrypted(found.data)) {\n            storageData = found.data;\n          } else {\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\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].reverse().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    const localStores = state.localStores.filter(item => item.id !== settings.id)\n    const sessionStores = state.sessionStores.filter(item => item.id !== settings.id)\n    const stateSettings = state.settings.filter(item => item.id !== settings.id)\n\n    return {\n      ...state,\n      localStores: [...localStores, ...localData],\n      sessionStores: [...sessionStores, ...sessionData],\n      settings: [...stateSettings, ...[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].reverse().find(item => item.name === store.name)\n\n    if(settings) {\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      return {\n        ...state,\n        localStores: [...state.localStores.filter(item => item.id !== settings.id), ...localData],\n        sessionStores: [...state.sessionStores.filter(item => item.id !== settings.id), ...sessionData],\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 plainSettings = this.tryParseSettingsArray(str);\n      if (plainSettings) {\n        settings = plainSettings;\n        const migratedSettings = this.encryption.encrypt(settings, this.app.appID);\n        if (migratedSettings) {\n          localStorage.setItem(this.storageSettingsName, migratedSettings);\n        }\n        console.warn('Recovered settings from plaintext storage and migrated to encrypted format');\n      } else {\n        const decryptedStr = this.encryption.decrypt(str, this.app.appID);\n        if (decryptedStr) {\n          const decryptedSettings = this.tryParseSettingsArray(decryptedStr);\n          if (decryptedSettings) {\n            settings = decryptedSettings;\n          } else {\n            console.warn('Failed to parse decrypted settings data. Resetting corrupted settings store.');\n            localStorage.removeItem(this.storageSettingsName);\n            settings = [];\n          }\n        } else {\n          console.warn('Failed to decrypt settings data. Resetting corrupted settings store.');\n          localStorage.removeItem(this.storageSettingsName);\n          settings = [];\n        }\n      }\n    }\n\n    settings.forEach(store => {\n\n      // normalize expiresIn → expires so TTL is always a numeric timestamp\n      if ((!store.options?.expires || store.options.expires === 0) && store.options?.expiresIn) {\n        try {\n          const computed = this.utils.expires(store.options.expiresIn as unknown as string);\n          if (store.options) store.options.expires = computed || 0;\n        } catch {\n          if (store.options) store.options.expires = 0;\n        }\n      }\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      // Use resetStore() instead of directly removing raw localStorage keys.\n      // clearAllStoredData previously only removed the raw localStorage entries, leaving\n      // the ComponentStore's in-memory BehaviorSubject untouched. Any subsequent call to\n      // store$(name) would read from the in-memory state and return the old (stale) data,\n      // because store$ is a ComponentStore selector — it reads from in-memory state, not\n      // from raw localStorage. This caused stale requestCache / queryParams to persist\n      // after a deleteDatabase() call, blocking all subsequent API requests.\n      // resetStore() correctly updates both the in-memory state AND persists to localStorage.\n      this.resetStore();\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        const plainSettings = this.tryParseSettingsArray(str);\n        if (plainSettings) {\n          return false;\n        }\n\n        const decryptedStr = this.encryption.decrypt(str, this.app.appID);\n        if (decryptedStr !== null && decryptedStr !== undefined) {\n          const decryptedSettings = this.tryParseSettingsArray(decryptedStr);\n          return !decryptedSettings;\n        }\n\n        return true;\n      }\n      return false;\n    } catch (error) {\n      // Parsing failed, data is corrupted\n      return true;\n    }\n  }\n\n  private tryParseSettingsArray(raw: any): StorageOption[] | null {\n    if (!raw) {\n      return null;\n    }\n\n    if (Array.isArray(raw)) {\n      return raw;\n    }\n\n    if (!this.isString(raw)) {\n      return null;\n    }\n\n    try {\n      const parsed = JSON.parse(raw);\n      if (Array.isArray(parsed)) {\n        return parsed;\n      }\n\n      if (this.isString(parsed)) {\n        const nestedParsed = JSON.parse(parsed);\n        if (Array.isArray(nestedParsed)) {\n          return nestedParsed;\n        }\n      }\n    } catch {\n      // Continue to fallback parser\n    }\n\n    try {\n      const fallbackParsed = this.fixAndParseJSON(raw);\n      if (Array.isArray(fallbackParsed)) {\n        return fallbackParsed;\n      }\n    } catch {\n      return null;\n    }\n\n    return null;\n  }\n\n}\n","import { DestroyRef, Inject, Injectable, Optional, WritableSignal, signal, computed, effect, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { interval } from 'rxjs';\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  destroyRef = inject(DestroyRef);\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();\nconst foundStore = [...data.settings].reverse().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        if (this.isString(found.data) && !this.encryptionTest.isEncrypted(found.data)) {\n          storageData = found.data;\n        } else {\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\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    interval(3000).pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\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    });\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      if (!this.hasGlobalStorage(store.options?.storage, store.id)) {\n        return state;\n      }\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    let localData: StorageData[] = [];\n    let sessionData: StorageData[] = [];\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    let settings: StorageOption[] = [];\n    if (str) {\n      const plainSettings = this.tryParseSettingsArray(str);\n      if (plainSettings) {\n        settings = plainSettings;\n        const migratedSettings = this.encryption.encrypt(settings, this.app.appID);\n        if (migratedSettings) {\n          localStorage.setItem(this.storageSettingsName, migratedSettings);\n        }\n        console.warn('Recovered settings from plaintext storage and migrated to encrypted format');\n      } else {\n        const decryptedStr = this.encryption.decrypt(str, this.app.appID);\n        if (decryptedStr) {\n          const decryptedSettings = this.tryParseSettingsArray(decryptedStr);\n          if (decryptedSettings) {\n            settings = decryptedSettings;\n          } else {\n            console.warn('Failed to parse decrypted settings data. Resetting corrupted settings store.');\n            localStorage.removeItem(this.storageSettingsName);\n            settings = [];\n          }\n        } else {\n          console.warn('Failed to decrypt settings data. Resetting corrupted settings store.');\n          localStorage.removeItem(this.storageSettingsName);\n          settings = [];\n        }\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  private tryParseSettingsArray(raw: any): StorageOption[] | null {\n    if (!raw) {\n      return null;\n    }\n\n    if (Array.isArray(raw)) {\n      return raw;\n    }\n\n    if (!this.isString(raw)) {\n      return null;\n    }\n\n    try {\n      const parsed = JSON.parse(raw);\n      if (Array.isArray(parsed)) {\n        return parsed;\n      }\n\n      if (this.isString(parsed)) {\n        const nestedParsed = JSON.parse(parsed);\n        if (Array.isArray(nestedParsed)) {\n          return nestedParsed;\n        }\n      }\n    } catch {\n      return null;\n    }\n\n    return null;\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';\nimport { from, Observable, of } from 'rxjs';\nimport { catchError, map, switchMap } from 'rxjs/operators';\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. Closing current database connection to allow upgrade.');\n      this.close();\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    if (this.isOpen()) {\n      this.close();\n    }\n    await this.open();\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    this.dbReady = this.dbReady.then(() => this._doCreateTable(tableName, schema));\n    await this.dbReady;\n  }\n\n  private async _doCreateTable(tableName: string, schema: string): Promise<void> {\n    const safeTableName = this.cleanTableName(tableName);\n    const safeSchema = schema.trim();\n\n    const currentSchema = this.getCurrentSchema();\n    const existingSchema = currentSchema[safeTableName]?.trim();\n\n    if (this.tableExists(safeTableName) && existingSchema === safeSchema) {\n      return;\n    }\n\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         throw new Error(`Table '${safeTableName}' was not created after schema upgrade`);\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      throw err;\n    }\n  }\n\n  protected async DBOpened() {\n    try {\n      await this.dbReady;\n      return this.isOpen();\n    } catch (err) {\n      console.error('DBOpened: init failed', err);\n      return false;\n    }\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 deleteAndReinitialize(): Observable<boolean> {\n    return from(\n      this.delete({ disableAutoOpen: false }).then(async () => {\n        console.log('[DB] Database deleted. Reopening...');\n        try {\n          await this.open();\n          this.dbReady = Promise.resolve();\n          console.log(`[DB] Reopened database. Version: ${this.verno}, Tables: ${this.getTables.join(', ')}`);\n          return this.isOpen();\n        } catch (openErr) {\n          console.error('[DB] Failed to reopen after delete:', openErr);\n          return false;\n        }\n      })\n    ).pipe(\n      catchError((err) => {\n        console.error('[DB] deleteAndReinitialize failed:', err);\n        return of(false);\n      })\n    );\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 { inject, Injectable } from '@angular/core';\nimport { DbService } from './db.storage.service';\nimport { LocalStorageManagerService } from '../local-storage-manager-service/local-storage-manager.service';\n\nimport { TableSchemaDef } from './models/table-schema';\nimport { EMPTY, from, Observable, of } from 'rxjs';\nimport { catchError, map, switchMap, tap } from 'rxjs/operators';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DatabaseManagerService extends DbService {\n\n  private localStorageManager = inject(LocalStorageManagerService);\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    const tableName = this.cleanTableName(tableDef.table);\n    return from(this.createTable(tableDef.table, tableDef.schema)).pipe(\n      switchMap(() => from(this.DBOpened())),\n      map((opened) => opened && this.tableExists(tableName)),\n      catchError((error) => {\n        console.error(`createDatabaseTable: failed for table '${tableName}'`, error);\n        return of(false);\n      })\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\n    // Keep full object payload; Dexie stores non-indexed properties as well.\n    const insertRecords = records.map((record: any) => {\n      const payload = { ...(record || {}) };\n      if (payload.id === undefined || payload.id === null || payload.id === '') {\n        delete payload.id;\n      }\n      return payload;\n    });\n\n    const writeRecords = () => from(this.DBOpened()).pipe(\n      switchMap((opened) => {\n        if (!opened) {\n          // console.error(`createTableRecords: DB not open. Cannot write to '${tableName}'.`);\n          return EMPTY;\n        }\n\n        const tableInstance = this.getTable(tableName);\n        if (!tableInstance) {\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        // 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    const recreateMissingTableAndRetry = () => {\n      const inferredSchema = this.inferSchemaFromRecords(insertRecords);\n\n      if (!inferredSchema) {\n        // console.warn(`createTableRecords: Could not infer schema for '${tableName}'. Retrying after DB reopen.`);\n        return from(this.createNewDatabase()).pipe(\n          switchMap(() => writeRecords())\n        );\n      }\n\n      const tableDef = TableSchemaDef.adapt({ table: tableName, schema: inferredSchema });\n\n      return this.createDatabaseTable(tableDef).pipe(\n        switchMap((created) => {\n          if (!created) {\n            // console.warn(`createTableRecords: Failed to recreate table '${tableName}' from inferred schema. Retrying after DB reopen.`);\n            return from(this.createNewDatabase()).pipe(\n              switchMap(() => writeRecords())\n            );\n          }\n\n          return writeRecords();\n        })\n      );\n    };\n\n    return writeRecords().pipe(\n      catchError((error) => {\n        if (!this.isMissingObjectStoreError(error)) {\n          throw error;\n        }\n\n        return recreateMissingTableAndRetry().pipe(\n          catchError((retryError) => {\n            if (!this.isMissingObjectStoreError(retryError)) {\n              console.error(`createTableRecords: Retry failed for '${tableName}'`, retryError);\n              throw retryError;\n            }\n\n            console.warn(`createTableRecords: Table '${tableName}' still missing after retry. Deleting DB and reinitializing...`);\n            return this.deleteAndReinitialize().pipe(\n              switchMap((reinitialized) => {\n                if (!reinitialized) {\n                  throw retryError;\n                }\n                const inferredSchema = this.inferSchemaFromRecords(insertRecords);\n                if (!inferredSchema) {\n                  throw retryError;\n                }\n                const tableDef = TableSchemaDef.adapt({ table: tableName, schema: inferredSchema });\n                return this.createDatabaseTable(tableDef).pipe(\n                  switchMap(() => writeRecords())\n                );\n              }),\n              catchError((finalError) => {\n                console.error(`createTableRecords: All retries exhausted for '${tableName}'`, finalError);\n                throw finalError;\n              })\n            );\n          })\n        );\n      })\n    );\n  }\n\n  private inferSchemaFromRecords(records: any[]): string | null {\n    if (!Array.isArray(records) || records.length === 0) {\n      return null;\n    }\n\n    const sample = records.find((record: any) => record && typeof record === 'object');\n    if (!sample) {\n      return null;\n    }\n\n    const fields = Object.keys(sample)\n      .filter((key) => key !== 'id')\n      .filter((key) => {\n        const value = sample[key];\n        return value === null || ['string', 'number', 'boolean'].includes(typeof value);\n      })\n      .sort();\n\n    return ['++id', ...fields].join(', ');\n  }\n\n  private isMissingObjectStoreError(error: any): boolean {\n    const name = String(error?.name || '').toLowerCase();\n    const innerName = String(error?.inner?.name || '').toLowerCase();\n    const message = String(error?.message || error?.inner?.message || '').toLowerCase();\n\n    return (\n      name.includes('notfounderror') ||\n      innerName.includes('notfounderror') ||\n      message.includes('object store') ||\n      message.includes('one of the specified object stores was not found')\n    );\n  }\n\n  updateTableRecord(table: string, record: any) {\n    const tableName = this.cleanTableName(table);\n    console.log(`🔵 updateTableRecord: INPUT table='${table}' CLEANED='${tableName}'`);\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    console.log(`🔵 updateTableRecords: INPUT table='${table}' CLEANED='${tableName}' recordCount=${records.length}`);\n\n    return this.getDatabaseTable(tableName).pipe(\n\n      switchMap((tableData: any) => {\n\n        if (!tableData) {\n          console.warn(`❌ updateTableRecords: Table '${tableName}' not found`);\n          return EMPTY;\n        }\n        console.log(`✅ updateTableRecords: Table '${tableName}' FOUND, executing bulkPut with ${records.length} records`);\n\n        const insertRecords = records.map((record: any) => {\n          const payload = { ...(record || {}) };\n          if (payload.id === undefined || payload.id === null || payload.id === '') {\n            delete payload.id;\n          }\n          return payload;\n        });\n\n        return from(tableData.bulkPut(insertRecords)).pipe(\n            map(() => insertRecords)\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\n    const tableName = this.cleanTableName(table);\n\n    this.localStorageManager.deleteStore({ name: 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      return from(Promise.resolve().then(() => {\n        return tableInstance.clear();\n      })).pipe(\n        map(() => [])\n      );\n    } catch (error) {\n      console.error(`clearTable: ❌ Error:`, error);\n      return of([]);\n    }\n  }\n\n  clearDatabase(): void {\n    this.deleteAndReinitialize().pipe(\n      tap(() => this.localStorageManager.clearAllStoredData()),\n      catchError((error) => {\n        console.error('clearDatabase: ❌ Error clearing database:', error);\n        return of(false);\n      })\n    ).subscribe();\n  }\n\n  resetDatabase(): Observable<boolean> {\n    return this.deleteAndReinitialize();\n  }\n\n}\n","import { inject, Injectable, signal } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { finalize, tap } from 'rxjs/operators';\n\nimport { DatabaseManagerService } from './database.manager.service';\nimport { TableSchemaDef } from './models/table-schema';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DatabaseManagerSignalsService {\n\n  private readonly dbManager = inject(DatabaseManagerService);\n\n  private readonly isPendingSignal = signal<boolean>(false);\n  private readonly tablesSignal = signal<string[]>([]);\n  private readonly databaseReadySignal = signal<boolean>(false);\n\n  readonly isPending = this.isPendingSignal.asReadonly();\n  readonly tables = this.tablesSignal.asReadonly();\n  readonly databaseReady = this.databaseReadySignal.asReadonly();\n\n  getDatabaseTables(): Observable<string[]> {\n    this.isPendingSignal.set(true);\n    return this.dbManager.getDatabaseTables().pipe(\n      tap((t) => this.tablesSignal.set(t)),\n      finalize(() => this.isPendingSignal.set(false))\n    );\n  }\n\n  databaseExists(): Observable<boolean> {\n    this.isPendingSignal.set(true);\n    return this.dbManager.databaseExists().pipe(\n      tap((exists) => this.databaseReadySignal.set(exists)),\n      finalize(() => this.isPendingSignal.set(false))\n    );\n  }\n\n  hasDatabaseTable(table: string): Observable<boolean> {\n    this.isPendingSignal.set(true);\n    return this.dbManager.hasDatabaseTable(table).pipe(\n      finalize(() => this.isPendingSignal.set(false))\n    );\n  }\n\n  getDatabaseTable(table: string): Observable<any> {\n    this.isPendingSignal.set(true);\n    return this.dbManager.getDatabaseTable(table).pipe(\n      finalize(() => this.isPendingSignal.set(false))\n    );\n  }\n\n  getDatabaseTableSchema(table: string): Observable<string[]> {\n    this.isPendingSignal.set(true);\n    return this.dbManager.getDatabaseTableSchema(table).pipe(\n      finalize(() => this.isPendingSignal.set(false))\n    );\n  }\n\n  createDatabaseTable(tableDef: TableSchemaDef): Observable<boolean> {\n    this.isPendingSignal.set(true);\n    return this.dbManager.createDatabaseTable(tableDef).pipe(\n      tap(() => this.getDatabaseTables().subscribe()),\n      finalize(() => this.isPendingSignal.set(false))\n    );\n  }\n\n  updateDatabaseTableSchema(tableDef: TableSchemaDef): Observable<any> {\n    this.isPendingSignal.set(true);\n    return this.dbManager.updateDatabaseTableSchema(tableDef).pipe(\n      finalize(() => this.isPendingSignal.set(false))\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, merge, Subscription } from 'rxjs';\nimport { tap, switchMap, concatMap, scan, delay, take, map, distinctUntilChanged, filter, catchError, finalize } from 'rxjs/operators';\nimport { DatabaseStorage } from '../../models/database-storage.model';\nimport { ApiRequest, RequestOptions, WSOptions, OperationResultModel } 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  private operationSuccess = new BehaviorSubject<OperationResultModel | null>(null)\n  operationSuccess$ = this.operationSuccess.asObservable()\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: any[] = []\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 readonly volatileHeaders = new Set([\n    'authorization',\n    'x-request-id',\n    'x-correlation-id',\n    'x-trace-id',\n    'x-amzn-trace-id',\n    'date',\n    'if-none-match',\n    'x-modified-since'\n  ])\n\n  private requestSignatureCache: Record<string, { GET?: string; STREAM?: string }> = {}\n  private inFlightRequestSignatures = new Set<string>()\n  private _requestCachePaths = new Map<string, string[]>()\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  public isConnecting$: Observable<boolean> = this.httpManagerService.isConnecting$\n  public wsRetryCount$: Observable<number> = this.httpManagerService.retryCount$\n  public wsMaxRetries$: Observable<number> = this.httpManagerService.maxRetries$\n  public connectionError$: Observable<string | null> = this.httpManagerService.connectionError$\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        // Use initDBStorageAsync directly - the effect initDBStorage requires subscription\n        this.initDBStorageAsync().subscribe({\n          next: () => console.log('[Constructor] Database storage initialized'),\n          error: (err: any) => console.error('[Constructor] Database storage initialization failed:', err)\n        })\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      console.log('[setApiRequestOptions] Database config:', {\n        database,\n        hasTable: !!database?.table,\n        tableValue: database?.table\n      })\n      this.hasDatabase = (database?.table) ? true : false\n      const adapted = DatabaseStorage.adapt(database)\n      console.log('[setApiRequestOptions] DatabaseStorage.adapt result:', adapted)\n      this.databaseOptions = (this.hasDatabase) ? adapted : undefined\n\n      // Trigger database table creation if table is configured\n      if (this.hasDatabase && this.databaseOptions?.table) {\n        this.localStorageManagerService.createStore({\n          name: this.databaseOptions.table,\n          data: {\n            ...this.databaseOptions,\n            expires: this.utils.expires(this.databaseOptions.expiresIn),\n          },\n          options: SettingOptions.adapt({\n            storage: StorageType.GLOBAL,\n            encrypted: false,\n          })\n        })\n\n        console.log('[setApiRequestOptions] Initializing database storage for table:', this.databaseOptions.table)\n        // Use initDBStorageAsync directly instead of the effect - effects need subscription to run\n        this.initDBStorageAsync().subscribe({\n          next: () => console.log('[setApiRequestOptions] Database storage initialized successfully'),\n          error: (err: any) => console.error('[setApiRequestOptions] Database storage initialization failed:', err)\n        })\n\n        // Pre-populate _requestCachePaths so clearRequestCacheMetadata works after browser refresh\n        // (before any GET request has run to populate it via saveRequestCacheMetadata)\n        this._requestCachePaths.set(\n          this.databaseOptions.table,\n          this.resolvePath().filter(p => typeof p === 'string' || typeof p === 'number').map(String)\n        )\n      }\n    }\n\n    if (typeof this.apiOptions.ws?.id === 'string' && this.apiOptions.ws.id !== ''\n        && typeof this.apiOptions.ws.wsServer === 'string'\n        && (this.apiOptions.ws.wsServer.startsWith('ws://') || this.apiOptions.ws.wsServer.startsWith('wss://'))) {\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.debug('StateStore', 'WS skipped: no valid wsServer or channel id configured');\n      // Reset any stale connection error so the UI shows clean \"Disconnected\" state\n      this.httpManagerService.clearConnectionError();\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      map(status => {\n\n        if (status === true) {\n          this.shouldRetry = true\n          this.wsRetryAttempts.next(0)\n          this.wsNextRetry.next(0)\n          return true\n        }\n\n        // Retry orchestration is centralized in WebSocketManagerService.connect/onclose\n        // and uses ws.retry from request options. Keep this stream as status/state only.\n        if (!this.shouldRetry) {\n          this.wsRetryAttempts.next(0)\n          this.wsNextRetry.next(0)\n          return false\n        }\n\n        const nextAttempt = Math.min(this.wsRetryAttempts.value + 1, this.maxRetries)\n        this.wsRetryAttempts.next(nextAttempt)\n        this.wsNextRetry.next(nextAttempt >= this.maxRetries ? 0 : this.retryDelay / 1000)\n        return false\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' || message.error === 'AUTH_BLOCKED') {\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 'statemanagerMessage':\n                case 'stateMangerMessage':\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 || message.data?.sessionId,\n                    ourSessionId: this.ownSessionId\n                  });\n\n                  // Handle both direct payload and StateMessage-wrapped payload:\n                  // Direct: { method, path, user }\n                  // Wrapped: { sessionId, content: { method, path } }\n                  const stateManagerSenderId = message.data?.sessionId?.id || message.data?.sessionId;\n                  const stateManagerContent = message.data?.content?.content\n                    ? message.data.content.content\n                    : message.data?.content;\n\n                  console.log('🔍 State Manager: Sender sessionId:', stateManagerSenderId, 'Own sessionId:', this.ownSessionId);\n\n                  // ALWAYS process state manager messages - even from self\n                  // This ensures originator's state stays in sync with server response\n                  // which may include server-side transformations, computed fields, or validation results\n                  console.log('💬 State Manager Message (processing regardless of sender):', {\n                    isOwnMessage: stateManagerSenderId === this.ownSessionId,\n                    path: stateManagerContent?.path,\n                    method: stateManagerContent?.method\n                  });\n\n                  this.userAction.next(message.data);\n                  this.fetchRecord(\n                    RequestOptions.adapt({ path: stateManagerContent?.path }),\n                    stateManagerContent?.method\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        console.log('[initDBStorage effect] Triggered, checking conditions:', {\n          dataType: this.dataType,\n          isARRAY: this.dataType === DataType.ARRAY,\n          hasAdapter: !!this.apiOptions?.adapter,\n          hasTable: !!this.databaseOptions?.table,\n          tableValue: this.databaseOptions?.table\n        })\n        if (this.dataType !== DataType.ARRAY) console.warn('Database storage requires dataType to be ARRAY')\n        if (!this.apiOptions.adapter) console.warn('Database storage adapter missing, using minimal or inferred schema')\n        if (this.databaseOptions && this.databaseOptions?.table === '') console.warn('Database storage requires a table name')\n      }),\n      filter(() => {\n        const shouldProceed = this.dataType === DataType.ARRAY && !!this.databaseOptions?.table\n        console.log('[initDBStorage effect] Filter result:', shouldProceed)\n        return shouldProceed\n      }),\n      switchMap(() => {\n        const schema = this.buildSchemaFromAdapter()\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 readonly mergeDeltaData$ = this.updater((state: APIStateManagerData<T>, records: T[]) => {\n\n    if (this.dataType !== DataType.ARRAY || !Array.isArray(records) || records.length === 0) {\n      return state;\n    }\n\n    const existing = [...state.data];\n    for (const record of records) {\n      const idx = existing.findIndex((r: any) => r?.id != null && record?.id != null && r.id === record.id);\n      if (idx > -1) {\n        existing[idx] = { ...existing[idx], ...record };\n      } else {\n        existing.push(record);\n      }\n    }\n\n    return { ...state, data: existing, dataObject: null } as APIStateManagerData<T>;\n\n  })\n\n  private updateArrayState(currentData: any[], newData: any[]): any[] {\n\n    // For non-streaming requests (GET), REPLACE data entirely\n    // For streaming requests, MERGE with existing data incrementally\n    if (this.streamedResponse.length === 0) {\n      // GET request: return new data as-is (replace)\n      return newData\n    }\n\n    // Streaming: merge with existing data\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)\n      ? currentData\n      : 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  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          this.clearRequestCacheMetadata(this.databaseOptions.table)\n\n          return this.dbManagerService.clearTable(this.databaseOptions.table);\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        const effectiveParams = this.getEffectiveParams(options?.path)\n        const requestSignature = this.buildRequestSignature('GET', requestOptions, effectiveParams)\n\n        const fetchFromAPI = () => {\n\n          if (this.hasDatabase && this.databaseOptions?.table) {\n            this.setCachedRequestSignature(this.databaseOptions.table, 'GET', requestSignature)\n\n            if (!this.tryBeginInFlightRequest(requestSignature)) {\n              const currentStateData = this.get()?.data\n              if (Array.isArray(currentStateData) && currentStateData.length > 0) {\n                return of(this.applyAdapter(currentStateData))\n              }\n\n              if (\n                currentStateData &&\n                !Array.isArray(currentStateData) &&\n                Object.keys(currentStateData).length > 0\n              ) {\n                return of(this.applyAdapter(currentStateData))\n              }\n\n              return of(this.dataType === DataType.ARRAY ? [] : {})\n            }\n          }\n\n          return this.httpManagerService.getRequest(requestOptions, effectiveParams).pipe(\n            tap((data: any) => {\n              // Extract array from paginated response if needed\n              // Data is already adapted by RequestService.request() pipe - no need to adapt again\n              const arrayData = (data?.results && Array.isArray(data.results)) ? data.results : data\n              this.setData$(arrayData)\n            }),\n            concatMap((data: any) => {\n              // Extract array from paginated response for database storage\n              // Data is already adapted by RequestService.request() pipe - no need to adapt again\n              const dbData = (data?.results && Array.isArray(data.results)) ? data.results : data\n              if (this.hasDatabase && this.databaseOptions?.table && Array.isArray(dbData) && dbData.length > 0) {\n                const tableName = this.databaseOptions.table\n\n                const schema = this.buildSchemaFromSample(dbData[0]);\n                const tableDef = TableSchemaDef.adapt({ table: tableName, schema });\n                const schemaSignature = this.buildSchemaSignature(schema)\n\n                // Always ensure table exists immediately before writing to avoid stale schema/store races.\n                return this.localStorageManagerService.store$(tableName).pipe(\n                  take(1),\n                  switchMap((storeData: any) => {\n                    this.localStorageManagerService.updateStore({\n                      name: tableName,\n                      data: { ...(storeData || {}), ...this.databaseOptions, expires: this.utils.expires(this.databaseOptions!.expiresIn) }\n                    })\n\n                    const ensureTable$ = this.dbManagerService.createDatabaseTable(tableDef)\n\n                    return ensureTable$.pipe(\n                      switchMap((created) => {\n                        if (!created) {\n                          console.warn('[DB STORAGE] Table create/open not ready, skipping DB write for this payload:', { table: tableName });\n                          return of(data);\n                        }\n                        return this.dbManagerService.createTableRecords(tableName, dbData).pipe(\n                          tap(() => this.saveRequestCacheMetadata(tableName, 'GET', requestSignature, schemaSignature, options))\n                        );\n                      })\n                    )\n                  }),\n                  catchError((error) => {\n                    console.error('[DB STORAGE] Failed to ensure table and write records:', { table: tableName, schema, error });\n                    return of(data);\n                  })\n                );\n              }\n              return of(data);\n            }),\n            finalize(() => {\n              if (this.hasDatabase && this.databaseOptions?.table) {\n                this.endInFlightRequest(requestSignature)\n              }\n            })\n          );\n\n        }\n\n        // console.log('[DB STORAGE] Checking database storage:', {\n        //   hasDatabase: this.hasDatabase,\n        //   table: this.databaseOptions?.table,\n        //   databaseOptions: this.databaseOptions\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                  catchError((error) => {\n                    console.warn('[DB STORAGE] initDBStorageAsync failed when DB did not exist, continuing with API:', error);\n                    return fetchFromAPI();\n                  })\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                      catchError((error) => {\n                        console.warn('[DB STORAGE] initDBStorageAsync failed when table missing, continuing with API:', error);\n                        return fetchFromAPI();\n                      })\n                    );\n                  }\n\n                  return this.localStorageManagerService.store$(this.databaseOptions!.table).pipe(\n                    take(1),\n                    switchMap((storeData: any) => {\n                      // console.log('[CacheDebug] storeData for table:', this.databaseOptions!.table, { storeData, requestCache: storeData?.requestCache, expires: storeData?.expires })\n\n                      const forceRefresh = !!(options as any)?.forceRefresh\n                      const storedSchemaSignature = this.getStoredSchemaSignature(storeData)\n\n                      const expires = storeData?.expires || 0;\n                      const hasExpired = expires > 0 && this.utils.hasExpired(expires);\n\n                      if (forceRefresh) {\n                        return fetchFromAPI();\n                      }\n\n                      if (hasExpired) {\n                        if (this.databaseOptions?.deltaSync) {\n                          // Skip clearTable — let deltaSync branch fetch only changes\n                        } else {\n                          return this.dbManagerService.clearTable(this.databaseOptions!.table).pipe(\n                            switchMap(() => fetchFromAPI())\n                          );\n                        }\n                      }\n\n                      const expectedSchema = this.buildSchemaFromAdapter()\n                      const expectedSchemaSignature = this.buildSchemaSignature(expectedSchema)\n                      // console.log('[CacheDebug] schema check:', { tableName: this.databaseOptions!.table, storedSchemaSignature, expectedSchemaSignature, mismatch: storedSchemaSignature && storedSchemaSignature !== expectedSchemaSignature })\n                      if (storedSchemaSignature && storedSchemaSignature !== expectedSchemaSignature) {\n                        const tableDef = TableSchemaDef.adapt({ table: this.databaseOptions!.table, schema: expectedSchema })\n                        return this.dbManagerService.clearTable(this.databaseOptions!.table).pipe(\n                          switchMap(() => this.dbManagerService.createDatabaseTable(tableDef)),\n                          switchMap(() => fetchFromAPI())\n                        )\n                      }\n\n                      // Delta sync branch: if deltaSync is enabled, fetch only changed records\n                      if (this.databaseOptions?.deltaSync) {\n                        const savedAt = storeData?.requestCache?.GET?.savedAt;\n\n                        if (!savedAt) {\n                          // First load with deltaSync: no cursor yet, do a full fetch\n                          return fetchFromAPI();\n                        }\n\n                        const modifiedSince = Math.floor(savedAt / 1000);\n                        const deltaHeaders = {\n                          ...(requestOptions?.headers || {}),\n                          'X-Modified-Since': modifiedSince\n                        };\n                        const deltaOptions = ApiRequest.adapt({\n                          ...requestOptions,\n                          headers: deltaHeaders\n                        });\n\n                        const tableName = this.databaseOptions!.table;\n\n                        return this.httpManagerService.getRequest(deltaOptions, effectiveParams).pipe(\n                          switchMap((data: any) => {\n                            const deltaRecords = (data?.results && Array.isArray(data.results)) ? data.results : data;\n\n                            if (Array.isArray(deltaRecords) && deltaRecords.length === 0) {\n                              // Empty delta: no data changes, just update savedAt\n                              this.saveRequestCacheMetadata(\n                                tableName,\n                                'GET',\n                                requestSignature,\n                                storedSchemaSignature ?? expectedSchemaSignature ?? undefined,\n                                options\n                              );\n                              return this.dbManagerService.getTableRecords(tableName).pipe(\n                                tap((dbData: any) => {\n                                  if (Array.isArray(dbData) && dbData.length > 0) {\n                                    this.setData$(this.applyAdapter(dbData));\n                                  }\n                                }),\n                                map((dbData: any) => this.applyAdapter(dbData) || [])\n                              );\n                            }\n\n                            if (Array.isArray(deltaRecords) && deltaRecords.length > 0) {\n                              // Delta has records: upsert into DB and merge into state\n                              return this.dbManagerService.createTableRecords(tableName, deltaRecords).pipe(\n                                tap(() => {\n                                  this.mergeDeltaData$(deltaRecords);\n                                  this.saveRequestCacheMetadata(\n                                    tableName,\n                                    'GET',\n                                    requestSignature,\n                                    storedSchemaSignature ?? expectedSchemaSignature ?? undefined,\n                                    options\n                                  );\n                                }),\n                                map(() => deltaRecords)\n                              );\n                            }\n\n                            // Non-array response: treat as full fetch fallback\n                            return fetchFromAPI();\n                          }),\n                          catchError((error) => {\n                            console.warn('[DELTA SYNC] Delta fetch failed, preserving savedAt for retry:', { table: tableName, error });\n                            // Do NOT call saveRequestCacheMetadata — preserves savedAt for next retry\n                            return this.dbManagerService.getTableRecords(tableName).pipe(\n                              tap((dbData: any) => {\n                                if (Array.isArray(dbData) && dbData.length > 0) {\n                                  this.setData$(this.applyAdapter(dbData));\n                                }\n                              }),\n                              map((dbData: any) => this.applyAdapter(dbData) || [])\n                            );\n                          }),\n                          finalize(() => {\n                            this.endInFlightRequest(requestSignature);\n                          })\n                        );\n                      }\n\n                      return this.checkTrackerAllowsRequest(\n                        this.databaseOptions!.table,\n                        'GET',\n                        this.resolvePath(effectiveParams),\n                        options,\n                        storeData\n                      ).pipe(\n                        switchMap((trackerAllowsRequest: boolean) => {\n                          if (trackerAllowsRequest) {\n                            const normalizedPath = this.trackerNormalizePath(this.resolvePath(effectiveParams));\n\n                            if (!normalizedPath.hasQuery) {\n                              return this.dbManagerService.getTableRecords(this.databaseOptions!.table).pipe(\n                                switchMap((dbData: any) => {\n                                    if (Array.isArray(dbData) && dbData.length > 0) {\n                                    const adaptedData = this.applyAdapter(dbData);\n                                    this.setData$(adaptedData);\n                                    // Save cache metadata for both GET and STREAM request types so\n                                    // tracker/check logic can detect cached responses regardless\n                                    // of whether a subsequent call is a normal GET or a streaming GET.\n                                    const getSignature = requestSignature;\n                                    const streamRequestOptions = { ...(requestOptions || {}), stream: true } as any;\n                                    const streamSignature = this.buildRequestSignature('STREAM', streamRequestOptions, effectiveParams);\n                                    this.saveRequestCacheMetadata(\n                                      this.databaseOptions!.table,\n                                      'GET',\n                                      getSignature,\n                                      storedSchemaSignature ?? expectedSchemaSignature ?? undefined,\n                                      options\n                                    );\n                                    this.saveRequestCacheMetadata(\n                                      this.databaseOptions!.table,\n                                      'STREAM',\n                                      streamSignature,\n                                      storedSchemaSignature ?? expectedSchemaSignature ?? undefined,\n                                      options\n                                    );\n                                    return of({ data: adaptedData, fromCache: true });\n                                  }\n                                  return fetchFromAPI();\n                                }),\n                                catchError((error) => {\n                                  const tableName = this.databaseOptions!.table;\n                                  console.warn('[DB STORAGE] fallback cache read failed, falling back to API:', { table: tableName, error });\n                                  return fetchFromAPI();\n                                })\n                              );\n                            }\n\n                            return fetchFromAPI();\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                                const adaptedData = this.applyAdapter(dbData);\n                                this.setData$(adaptedData);\n                                this.saveRequestCacheMetadata(\n                                  this.databaseOptions!.table,\n                                  'GET',\n                                  requestSignature,\n                                  storedSchemaSignature ?? expectedSchemaSignature ?? undefined,\n                                  options\n                                );\n                                return of(adaptedData);\n                              }\n\n                              return fetchFromAPI();\n\n                            })\n                            ,\n                            catchError((error) => {\n                              const tableName = this.databaseOptions!.table;\n                              console.warn('[DB STORAGE] getTableRecords failed, recreating table and falling back to API:', { table: tableName, error });\n                              const schema = this.buildSchemaFromAdapter();\n                              const tableDef = TableSchemaDef.adapt({ table: tableName, schema });\n                              return this.dbManagerService.createDatabaseTable(tableDef).pipe(\n                                switchMap(() => fetchFromAPI()),\n                                catchError((recreateError) => {\n                                  console.error('[DB STORAGE] Failed to recreate table after read error, continuing with API only:', recreateError);\n                                  return fetchFromAPI();\n                                })\n                              );\n                            })\n                          );\n                        })\n                      );\n                    })\n                  );\n\n                })\n              );\n            })\n          );\n\n        }\n\n        return fetchFromAPI();\n\n      })\n    )\n  )\n\n  private initDBStorageAsync(): Observable<any> {\n\n    console.log('[initDBStorageAsync] Starting initialization:', {\n      dataType: this.dataType,\n      hasAdapter: !!this.apiOptions?.adapter,\n      table: this.databaseOptions?.table,\n      databaseOptions: this.databaseOptions\n    })\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 adapter missing, using minimal or inferred schema');\n    }\n\n    if (!this.databaseOptions?.table) {\n      console.warn('Database storage requires a table name');\n      return of(null);\n    }\n\n    const schema = this.buildSchemaFromAdapter();\n\n    const tableDef = TableSchemaDef.adapt({\n      table: this.databaseOptions?.table,\n      schema: schema\n    });\n\n    return this.dbManagerService.createDatabaseTable(tableDef).pipe(\n      tap((created) => {\n        if (created && this.databaseOptions?.table) {\n          this.saveSchemaSignature(this.databaseOptions.table, this.buildSchemaSignature(schema))\n        }\n      })\n    );\n\n  }\n\n  private buildSchemaFromAdapter(): string {\n    const sampleData = this.apiOptions.adapter?.({}) || {};\n    return this.buildSchemaFromSample(sampleData);\n  }\n\n  private buildSchemaFromSample(sampleData: any): string {\n    const schemaKeys = Object.keys(sampleData || {}).filter(key => sampleData[key] !== undefined);\n    let schema = '++id';\n\n    if (schemaKeys.length > 0) {\n      const otherKeys = schemaKeys.filter((k) => k !== 'id').sort();\n      if (otherKeys.length > 0) {\n        schema += ', ' + otherKeys.join(', ');\n      }\n    }\n\n    return schema;\n  }\n\n  private persistStreamDataToDb(payload: any, streamOptions?: RequestOptions): Observable<any> {\n    if (!this.hasDatabase || !this.databaseOptions?.table) {\n      return of(payload);\n    }\n\n    // Payload is already adapted by RequestService.requestStreaming() pipe - no need to adapt again\n    const dbData = (payload?.results && Array.isArray(payload.results))\n      ? payload.results\n      : Array.isArray(payload)\n        ? payload\n        : payload\n          ? [payload]\n          : [];\n\n    if (dbData.length === 0) {\n      return of(payload);\n    }\n\n    const tableName = this.databaseOptions.table;\n    const requestOptions = this.updateRequestOptions(streamOptions?.headers)\n    requestOptions.stream = true\n    const effectiveParams = this.getEffectiveParams(streamOptions?.path)\n    const requestSignature = this.buildRequestSignature('STREAM', requestOptions, effectiveParams)\n\n    const schema = this.buildSchemaFromSample(dbData[0]);\n    const schemaSignature = this.buildSchemaSignature(schema)\n    const tableDef = TableSchemaDef.adapt({ table: tableName, schema });\n\n    return this.localStorageManagerService.store$(tableName).pipe(\n      take(1),\n      switchMap((storeData: any) => {\n        this.localStorageManagerService.updateStore({\n          name: tableName,\n          data: { ...(storeData || {}), ...this.databaseOptions, expires: this.utils.expires(this.databaseOptions!.expiresIn) }\n        });\n\n        const ensureTable$ = this.dbManagerService.createDatabaseTable(tableDef)\n\n        return ensureTable$.pipe(\n          switchMap((created) => {\n            if (!created) {\n              console.warn('[DB STORAGE] Stream table create/open not ready, skipping DB write for this chunk:', { table: tableName });\n              return of(payload);\n            }\n            return this.dbManagerService.createTableRecords(tableName, dbData).pipe(\n              tap(() => this.saveRequestCacheMetadata(tableName, 'STREAM', requestSignature, schemaSignature, streamOptions)),\n              map(() => payload)\n            );\n          })\n        )\n      }),\n      map(() => payload),\n      catchError((error) => {\n        console.error('[DB STORAGE] Failed to persist streaming payload:', { table: tableName, schema, error });\n        return of(payload);\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      tap(() => console.log('🔄 fetchRecord effect triggered with path:', options?.path, 'method:', method)),\n      switchMap((options) => {\n\n        this.streamedResponse = []\n\n        const requestOptions = this.updateRequestOptions(options?.headers)\n        const effectiveParams = this.getEffectiveParams(options?.path)\n\n        return this.httpManagerService.getRequest(requestOptions, effectiveParams)\n        .pipe(\n          tap((data: any) => {\n            console.log('📦 fetchRecord received data:', data)\n\n            // Data is already adapted by RequestService.request() pipe - no need to adapt again\n            const arrayData = (data?.results && Array.isArray(data.results)) ? data.results : data\n            const finalData = (!arrayData) ? (this.dataType === DataType.ARRAY) ? [] : {} : arrayData\n\n            const id = (options as any).path?.length ? options.path[options.path.length -1] : null\n\n            // For single-record operations (CREATE, UPDATE, DELETE), detect array vs object\n            const isArrayResponse = Array.isArray(finalData) && finalData.length > 0;\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              if (isArrayResponse) {\n                console.log('✏️ Updating records (array):', finalData.length, 'items')\n                this.mergeDeltaData$(finalData)\n              } else {\n                console.log('✏️ Updating record:', finalData)\n                this.updateData$(finalData)\n              }\n            }\n            if(method === 'CREATE') {\n              console.log('➕ Adding record:', finalData)\n              this.addData$(finalData)\n            }\n\n          }),\n          concatMap((data: any) => {\n            // Data is already adapted by RequestService.request() pipe - no need to adapt again\n            const dbData = (data?.results && Array.isArray(data.results)) ? data.results : data\n            const tableName = this.databaseOptions?.table;\n            const idFromPath = (options as any).path?.length ? options.path[options.path.length - 1] : null;\n\n            // For single-record operations, detect array vs object\n            const dbIsArrayResponse = Array.isArray(dbData) && dbData.length > 0;\n\n            if (this.hasDatabase && tableName) {\n              switch (method) {\n                case 'DELETE':\n                  if (idFromPath) {\n                    this.logger.debug('fetchRecord', 'Deleting from database', { table: tableName, id: idFromPath });\n                    return this.dbManagerService.deleteTableRecord(tableName, idFromPath);\n                  }\n                  this.logger.warn('fetchRecord', 'DELETE method called but id is missing from path', { options });\n                  break;\n\n                case 'UPDATE':\n                  if (dbIsArrayResponse) {\n                    this.logger.debug('fetchRecord', 'Upserting array of records to database', { table: tableName, count: dbData.length });\n                    return this.dbManagerService.createTableRecords(tableName, dbData);\n                  }\n                  if (dbData && dbData.id != null) {\n                    this.logger.debug('fetchRecord', 'Updating database record', { table: tableName, id: dbData.id, data: dbData });\n                    return this.dbManagerService.updateTableRecord(tableName, dbData);\n                  }\n                  this.logger.warn('fetchRecord', 'UPDATE method called but data or id is missing', { dbData, hasData: !!dbData, hasId: !!dbData?.id });\n                  break;\n\n                case 'CREATE':\n                  if (dbData && dbData.id != null && dbData.id !== '') {\n                    this.logger.debug('fetchRecord', 'Creating database record', { table: tableName, id: dbData.id, data: dbData });\n                    return this.dbManagerService.createTableRecord(tableName, dbData);\n                  }\n                  this.logger.warn('fetchRecord', 'CREATE method called but data.id is invalid', { dbData });\n                  break;\n\n                default:\n                  this.logger.debug('fetchRecord', 'Method does not require database operation', { method });\n              }\n            } else {\n              this.logger.debug('fetchRecord', 'Database not configured, skipping database operation', {\n                hasDatabase: this.hasDatabase,\n                hasTable: !!tableName\n              });\n            }\n\n            return of(this.applyAdapter(dbData));\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          this.streamedResponse = []\n          const requestOptions = this.updateRequestOptions(options?.headers)\n          const effectiveParams = this.getEffectiveParams(options?.path)\n\n          return this.httpManagerService.postRequest(data, requestOptions, effectiveParams)\n            .pipe(\n              tap((adaptedData: any) => {\n                // Data is already adapted by RequestService\n                const safeData = (!adaptedData) ? (this.dataType === DataType.ARRAY ? [] : {}) : adaptedData\n                this.addData$(safeData)\n                this.operationSuccess.next(OperationResultModel.adapt({ success: true, operation: 'CREATE' }))\n                this.wsCommunication('CREATE', [...options?.path || [], safeData.id])\n              }),\n              concatMap((adaptedData: any) => {\n                if (this.hasDatabase && this.databaseOptions?.table && adaptedData?.id) {\n                  return this.dbManagerService.createTableRecord(this.databaseOptions.table, adaptedData)\n                }\n                return of(adaptedData)\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          this.streamedResponse = []\n          const requestOptions = this.updateRequestOptions(options?.headers)\n          const effectiveParams = this.getEffectiveParams(options?.path)\n\n          return this.httpManagerService.putRequest(data, requestOptions, effectiveParams)\n            .pipe(\n              tap((adaptedData: any) => {\n                // Data is already adapted by RequestService\n                const safeData = (!adaptedData) ? (this.dataType === DataType.ARRAY ? [] : {}) : adaptedData\n                this.updateData$(safeData)\n                this.operationSuccess.next(OperationResultModel.adapt({ success: true, operation: 'UPDATE' }))\n                this.wsCommunication('UPDATE', [...options?.path || []])\n              }),\n              concatMap((adaptedData: any) => {\n                if (this.hasDatabase && this.databaseOptions?.table && adaptedData?.id) {\n                  return this.dbManagerService.updateTableRecord(this.databaseOptions.table, adaptedData)\n                }\n                return of(adaptedData)\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          this.streamedResponse = []\n          const requestOptions = this.updateRequestOptions(options?.headers)\n          const effectiveParams = this.getEffectiveParams(options?.path)\n\n          return this.httpManagerService.deleteRequest(requestOptions, effectiveParams)\n            .pipe(\n              tap((adaptedData: any) => {\n                // Data is already adapted by RequestService\n                const safeData = (!adaptedData) ? (this.dataType === DataType.ARRAY ? [] : {}) : adaptedData\n                this.deleteData$(safeData)\n                this.operationSuccess.next(OperationResultModel.adapt({ success: true, operation: 'DELETE' }))\n                this.wsCommunication('DELETE', [...options?.path || []])\n              }),\n              concatMap((adaptedData: any) => {\n                if (this.hasDatabase && this.databaseOptions?.table && adaptedData?.id) {\n                  return this.dbManagerService.deleteTableRecord(this.databaseOptions.table, adaptedData.id)\n                }\n                return of(adaptedData)\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          const requestOptions = this.updateRequestOptions(options?.headers)\n          const effectiveParams = this.getEffectiveParams(options?.path)\n\n          return this.httpManagerService.postRequest(data, requestOptions, effectiveParams)\n            .pipe(\n              tap((adaptedRes: any) => {\n                // Data is already adapted by RequestService\n                if (adaptedRes.length > 0) this.setData$(adaptedRes)\n                this.streamedResponse = adaptedRes\n              }),\n              concatMap((adaptedRes: any) => this.persistStreamDataToDb(adaptedRes, options)),\n              scan((acc, res: any) => {\n                const previous = acc.current\n                const current = res\n                return { previous, current }\n              }, { previous: null, current: null }),\n              tap(({ previous, current }) => {\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  readonly fetchStream = (options?: RequestOptions) =>\n    this.effect<any>(() =>\n      of(options).pipe(\n        tap(() => {\n          this.streamedResponse = []\n          this.httpManagerService.isPending.next(true)\n        }),\n        switchMap((options: any) => {\n          const requestOptions = this.updateRequestOptions(options?.headers)\n          requestOptions.stream = true\n          const effectiveParams = this.getEffectiveParams(options?.path)\n\n          if (this.hasDatabase && this.databaseOptions?.table) {\n            const requestSignature = this.buildRequestSignature('STREAM', requestOptions, effectiveParams)\n            const fetchStreamFromAPI = () => {\n              if (!this.tryBeginInFlightRequest(requestSignature)) {\n                const currentStateData = this.get()?.data\n                if (Array.isArray(currentStateData) && currentStateData.length > 0) {\n                  return of({ data: this.applyAdapter(currentStateData), fromCache: true })\n                }\n                if (currentStateData && !Array.isArray(currentStateData) && Object.keys(currentStateData).length > 0) {\n                  return of({ data: this.applyAdapter(currentStateData), fromCache: true })\n                }\n                return of({ data: this.dataType === DataType.ARRAY ? [] : {}, fromCache: true })\n              }\n              this.setCachedRequestSignature(this.databaseOptions!.table, 'STREAM', requestSignature)\n              return this.httpManagerService.getRequest(requestOptions, effectiveParams).pipe(\n                map((apiData: any) => ({ data: apiData, fromCache: false })),\n                finalize(() => this.endInFlightRequest(requestSignature))\n              )\n            }\n            return this.localStorageManagerService.store$(this.databaseOptions.table).pipe(\n              take(1),\n              switchMap((storeData: any) => {\n                const forceRefresh = !!(options as any)?.forceRefresh\n                const expires = storeData?.expires || 0\n                const hasExpired = expires > 0 && this.utils.hasExpired(expires)\n                if (forceRefresh) {\n                  return fetchStreamFromAPI()\n                }\n                if (hasExpired) {\n                  return this.dbManagerService.clearTable(this.databaseOptions!.table).pipe(\n                    switchMap(() => fetchStreamFromAPI())\n                  )\n                }\n                const storedSchemaSignature = this.getStoredSchemaSignature(storeData)\n                const expectedSchema = this.buildSchemaFromAdapter()\n                const expectedSchemaSignature = this.buildSchemaSignature(expectedSchema)\n                if (storedSchemaSignature && storedSchemaSignature !== expectedSchemaSignature) {\n                  const tableDef = TableSchemaDef.adapt({ table: this.databaseOptions!.table, schema: expectedSchema })\n                  return this.dbManagerService.clearTable(this.databaseOptions!.table).pipe(\n                    switchMap(() => this.dbManagerService.createDatabaseTable(tableDef)),\n                    switchMap(() => fetchStreamFromAPI())\n                  )\n                }\n                return this.checkTrackerAllowsRequest(\n                  this.databaseOptions!.table,\n                  'STREAM',\n                  this.resolvePath(effectiveParams),\n                  options,\n                  storeData\n                ).pipe(\n                  switchMap((trackerAllowsRequest: boolean) => {\n                    if (!trackerAllowsRequest) {\n                      return this.dbManagerService.getTableRecords(this.databaseOptions!.table).pipe(\n                        switchMap((dbData: any) => {\n                          if (Array.isArray(dbData) && dbData.length > 0) {\n                            return of({ data: this.applyAdapter(dbData), fromCache: true })\n                          }\n                          const currentStateData = this.get()?.data\n                          if (Array.isArray(currentStateData) && currentStateData.length > 0) {\n                            return of({ data: this.applyAdapter(currentStateData), fromCache: true })\n                          }\n                          if (currentStateData && !Array.isArray(currentStateData) && Object.keys(currentStateData).length > 0) {\n                            return of({ data: this.applyAdapter(currentStateData), fromCache: true })\n                          }\n                          return fetchStreamFromAPI()\n                        })\n                      )\n                    }\n                    return fetchStreamFromAPI()\n                  })\n                )\n              })\n            ).pipe(\n              tap((packet: any) => {\n                const res = packet?.data\n                // Data is already adapted by RequestService\n                if (res && res.length > 0) {\n                  this.setData$(res)\n                  this.streamedResponse = [...this.streamedResponse, ...res]\n                }\n              }),\n              concatMap((packet: any) => {\n                if (packet?.fromCache) {\n                  return of(packet?.data)\n                }\n                return this.persistStreamDataToDb(packet?.data, options)\n              }),\n              map((res: any) => res),\n              catchError((error) => {\n                console.error('[DEBUG] Streaming error:', error)\n                return of([])\n              }),\n              finalize(() => this.httpManagerService.isPending.next(false))\n            )\n          }\n          // If no database is configured, always call the API (do not check tracker)\n          return this.httpManagerService.getRequest(requestOptions, effectiveParams)\n            .pipe(\n              tap((res: any) => {\n                // Data is already adapted by RequestService\n                if (res && res.length > 0) {\n                  this.setData$(res)\n                  this.streamedResponse = [...this.streamedResponse, ...res]\n                }\n              }),\n              concatMap((res: any) => this.persistStreamDataToDb(res, options)),\n              map((res: any) => res),\n              catchError((error) => {\n                return of([])\n              }),\n              finalize(() => this.httpManagerService.isPending.next(false))\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    // Reset localStorage tracking SYNCHRONOUSLY before the async DB clear so any\n    // concurrent request that fires during clearTable() sees a clean store immediately\n    // and is not blocked by stale queryParams from the previous session.\n    this.localStorageManagerService.updateStore({\n      name: tableName,\n      data: { ...this.databaseOptions, expires: 0 }\n    });\n    this._requestCachePaths.delete(tableName);\n    this.clearRequestCacheMetadata(tableName);\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 applyAdapter(data: any): any {\n    if (!data || !this.apiOptions?.adapter) return data\n\n    if (Array.isArray(data)) {\n      if (data.length === 0) return data\n      return data.map((item: any) => this.apiOptions.adapter!(item))\n    }\n\n    return this.apiOptions.adapter!(data)\n  }\n\n  /**\n   * Update request options with provided headers\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  private normalizeObject(value: any): any {\n    if (Array.isArray(value)) {\n      return value.map((item) => this.normalizeObject(item))\n    }\n\n    if (value && typeof value === 'object') {\n      return Object.keys(value)\n        .sort()\n        .reduce((acc: any, key: string) => {\n          acc[key] = this.normalizeObject(value[key])\n          return acc\n        }, {})\n    }\n\n    return value\n  }\n\n  private filterHeaders(headers?: any): Record<string, any> {\n    const source = headers || {}\n    return Object.keys(source).reduce((acc: Record<string, any>, key: string) => {\n      if (!this.volatileHeaders.has(key.toLowerCase())) {\n        acc[key] = source[key]\n      }\n      return acc\n    }, {})\n  }\n\n  private resolvePath(params?: any[]): any[] {\n    const basePath = Array.isArray(this.apiOptions.path) ? this.apiOptions.path : []\n    const effective = this.getEffectiveParams(params)\n    return effective ? [...basePath, ...effective] : [...basePath]\n  }\n\n  private stripBasePathPrefix(params: any[]): any[] {\n    const basePath = Array.isArray(this.apiOptions.path) ? this.apiOptions.path : []\n\n    if (basePath.length === 0 || params.length < basePath.length) {\n      return params\n    }\n\n    const normalizePart = (value: any): string => {\n      if (value && typeof value === 'object') {\n        return JSON.stringify(this.normalizeObject(value))\n      }\n      return String(value)\n    }\n\n    const startsWithBase = basePath.every((part, index) => normalizePart(part) === normalizePart(params[index]))\n    return startsWithBase ? params.slice(basePath.length) : params\n  }\n\n  private getEffectiveParams(params?: any[]): any[] | undefined {\n    if (!Array.isArray(params) || params.length === 0) {\n      return undefined\n    }\n\n    const basePath = Array.isArray(this.apiOptions.path) ? this.apiOptions.path : []\n\n    if (basePath.length === params.length) {\n      const normalizePart = (value: any): string => {\n        if (value && typeof value === 'object') {\n          return JSON.stringify(this.normalizeObject(value))\n        }\n        return String(value)\n      }\n\n      const samePath = params.every((part, index) => normalizePart(part) === normalizePart(basePath[index]))\n      return samePath ? undefined : params\n    }\n\n    return this.stripBasePathPrefix(params)\n  }\n\n  private buildRequestSignature(method: 'GET'|'STREAM', requestOptions: ApiRequest, params?: any[]): string {\n    const signaturePayload = {\n      method,\n      server: requestOptions.server,\n      path: this.resolvePath(params),\n      headers: this.filterHeaders(requestOptions.headers),\n      stream: !!requestOptions.stream,\n      streamType: requestOptions.streamType || null\n    }\n\n    return JSON.stringify(this.normalizeObject(signaturePayload))\n  }\n\n  private buildSchemaSignature(schema: string): string {\n    return JSON.stringify(this.normalizeObject(schema.split(',').map((part) => part.trim()).filter(Boolean)))\n  }\n\n  private setCachedRequestSignature(tableName: string, type: 'GET'|'STREAM', signature: string): void {\n    const existing = this.requestSignatureCache[tableName] || {}\n    this.requestSignatureCache[tableName] = {\n      ...existing,\n      [type]: signature,\n    }\n  }\n\n  private tryBeginInFlightRequest(signature: string): boolean {\n    if (this.inFlightRequestSignatures.has(signature)) {\n      return false\n    }\n    this.inFlightRequestSignatures.add(signature)\n    return true\n  }\n\n  private endInFlightRequest(signature: string): void {\n    this.inFlightRequestSignatures.delete(signature)\n  }\n\n  private getRequestCacheMetadata(storeData: any, type: 'GET'|'STREAM'): any {\n    return storeData?.requestCache?.[type] || null\n  }\n\n  private getStoredSchemaSignature(storeData: any): string | null {\n    return storeData?.schemaSignature || null\n  }\n\n  private saveSchemaSignature(tableName: string, schemaSignature: string) {\n    this.localStorageManagerService.store$(tableName).pipe(\n      take(1),\n      tap((storeData: any) => {\n        this.localStorageManagerService.updateStore({\n          name: tableName,\n          data: {\n            ...(storeData || {}),\n            schemaSignature,\n          }\n        })\n      })\n    ).subscribe()\n  }\n\n  private saveRequestCacheMetadata(tableName: string, type: 'GET'|'STREAM', signature: string, schemaSignature?: string, options?: RequestOptions) {\n    this.setCachedRequestSignature(tableName, type, signature)\n    this._requestCachePaths.set(tableName, this.resolvePath(options?.path).filter(p => typeof p === 'string' || typeof p === 'number').map(String))\n\n    this.localStorageManagerService.store$(tableName).pipe(\n      take(1),\n      tap((storeData: any) => {\n        const currentCache = storeData?.requestCache || {}\n        const currentEntry = currentCache[type] || {}\n        const currentQueryParams: Record<string, string[]> = { ...(currentEntry.queryParams || {}) }\n        const currentQueryCombinations: string[] = [...(currentEntry.queryCombinations || [])]\n        const currentQueryParamsExpires: number | null = currentEntry.queryParamsExpires ?? null\n\n        // Extract query params from options?.path and build combination string\n        const resolvedPath = this.resolvePath(options?.path)\n        const extractedParams: Record<string, string> = {}\n        const ignoreQueryParams = Array.isArray(options?.ignoreQueryParams) ? options!.ignoreQueryParams : []\n\n        if (Array.isArray(resolvedPath)) {\n          const normalizedIgnore = ignoreQueryParams.map(p => this.trackerNormalizeParamKey(p))\n\n          resolvedPath.forEach((pathPart: any) => {\n            // Extract query params from objects in the path array\n            if (pathPart && typeof pathPart === 'object' && !Array.isArray(pathPart)) {\n              Object.keys(pathPart).forEach((key: string) => {\n                const normalizedKey = this.trackerNormalizeParamKey(key)\n                const value = String(pathPart[key])\n\n                // Only add to queryParams if NOT in ignoreQueryParams\n                if (!normalizedIgnore.includes(normalizedKey)) {\n                  if (!currentQueryParams[key]) {\n                    currentQueryParams[key] = []\n                  }\n                  if (!currentQueryParams[key].includes(value)) {\n                    currentQueryParams[key].push(value)\n                  }\n\n                  // Track extracted param for combination string\n                  extractedParams[normalizedKey] = value\n                }\n              })\n            } else if (typeof pathPart === 'string') {\n              // Parse URL query strings like 'items?active=true&location=6'\n              const normalized = this.trackerNormalizePath([pathPart])\n              if (normalized.hasQuery) {\n                const filtered = this.trackerFilterQuery(normalized.query, ignoreQueryParams)\n                Object.assign(extractedParams, filtered)\n\n                // Add filtered params to queryParams\n                Object.keys(filtered).forEach((key: string) => {\n                  if (!currentQueryParams[key]) {\n                    currentQueryParams[key] = []\n                  }\n                  if (!currentQueryParams[key].includes(filtered[key])) {\n                    currentQueryParams[key].push(filtered[key])\n                  }\n                })\n              }\n            }\n          })\n        }\n\n        // Build combination string if we have extracted params\n        if (Object.keys(extractedParams).length > 0) {\n          const keys = Object.keys(extractedParams).sort()\n          const combinationString = keys.map((k) => `${k}=${extractedParams[k]}`).join('&')\n          if (!currentQueryCombinations.includes(combinationString)) {\n            currentQueryCombinations.push(combinationString)\n          }\n        }\n\n        this.localStorageManagerService.updateStore({\n          name: tableName,\n          data: {\n            ...(storeData || {}),\n            requestCache: {\n              ...currentCache,\n              [type]: {\n                ...currentEntry,\n                signature,\n                savedAt: Date.now(),\n                path: resolvedPath,\n                headers: this.filterHeaders(options?.headers),\n                queryCombinations: currentQueryCombinations,\n                queryParams: currentQueryParams,\n                queryParamsExpires: currentQueryParamsExpires,\n              }\n            }\n          }\n        })\n      })\n    ).subscribe()\n  }\n\n  private clearRequestCacheMetadata(tableName: string) {\n    this.localStorageManagerService.store$(tableName).pipe(\n      take(1),\n      tap((storeData: any) => {\n        let pathArray = this._requestCachePaths.get(tableName)\n        if (!Array.isArray(pathArray) || pathArray.length === 0) {\n          const requestCache = storeData?.requestCache\n          if (requestCache) {\n            const cached = requestCache['GET'] || requestCache['STREAM']\n            if (Array.isArray(cached?.path) && cached.path.length > 0) {\n              pathArray = cached.path.filter((p: any) => typeof p === 'string' || typeof p === 'number').map(String)\n            }\n          }\n        }\n        if (Array.isArray(pathArray) && pathArray.length > 0) {\n          this._requestCachePaths.delete(tableName)\n        }\n        if (!storeData) return\n        const updated = { ...(storeData || {}) }\n        delete updated.requestCache\n        delete updated.tracker\n        this.localStorageManagerService.updateStore({\n          name: tableName,\n          data: updated\n        })\n      })\n    ).subscribe()\n  }\n\n  private trackerNormalizePath(path: any[]): { pathKey: string; query: Record<string, string>; queryString: string; hasQuery: boolean } {\n    const pathSegments: string[] = []\n    const query: Record<string, string> = {}\n    path.forEach((segment) => {\n      if (segment && typeof segment === 'object' && !Array.isArray(segment)) {\n        Object.keys(segment).forEach((key) => {\n          query[this.trackerNormalizeParamKey(key)] = this.trackerNormalizeParamValue(segment[key])\n        })\n      } else {\n        const parsed = this.trackerParsePathSegment(String(segment))\n        pathSegments.push(parsed.pathSegment)\n        Object.keys(parsed.queryObject).forEach((key) => {\n          query[this.trackerNormalizeParamKey(key)] = this.trackerNormalizeParamValue(parsed.queryObject[key])\n        })\n      }\n    })\n    const sortedKeys = Object.keys(query).sort()\n    const queryString = sortedKeys.map((k) => `${k}=${query[k]}`).join('&')\n    return {\n      pathKey: this.trackerNormalizePathSegments(pathSegments),\n      query,\n      queryString,\n      hasQuery: sortedKeys.length > 0,\n    }\n  }\n\n  private trackerParsePathSegment(rawSegment: string): { pathSegment: string; queryObject: Record<string, any> } {\n    const [pathPart, ...queryParts] = String(rawSegment).split('?')\n    const queryString = queryParts.join('?')\n    const queryObject: Record<string, any> = {}\n    if (queryString) {\n      queryString.split('&').forEach((pair) => {\n        if (!pair) return\n        const [rawKey, ...rawValueParts] = pair.split('=')\n        const key = this.trackerSafeDecode(rawKey).trim()\n        const value = this.trackerSafeDecode(rawValueParts.join('=')).trim()\n        if (!key) return\n        queryObject[key] = value\n      })\n    }\n    return { pathSegment: pathPart, queryObject }\n  }\n\n  private trackerSafeDecode(value: string | undefined): string {\n    if (typeof value === 'undefined') return ''\n    try { return decodeURIComponent(value) } catch { return String(value) }\n  }\n\n  private trackerNormalizePathSegments(pathSegments: string[]): string {\n    return pathSegments\n      .map((segment) => String(segment).trim())\n      .filter((segment) => segment.length > 0)\n      .join('/')\n      .replace(/([^:]\\/+)\\/+/g, '$1')\n      .replace(/^\\//, '')\n      .replace(/\\/$/, '')\n  }\n\n  private trackerNormalizeParamKey(key: string): string {\n    return String(key).trim().toLowerCase()\n  }\n\n  private trackerNormalizeParamValue(value: any): string {\n    if (Array.isArray(value)) {\n      return value.map((item) => this.trackerNormalizeParamValue(item)).join(',')\n    }\n    if (Object.prototype.toString.call(value) === '[object Object]') {\n      return JSON.stringify(\n        Object.keys(value).sort().reduce((acc: any, k) => {\n          acc[this.trackerNormalizeParamKey(k)] = this.trackerNormalizeParamValue(value[k])\n          return acc\n        }, {})\n      )\n    }\n    return String(value).trim().toLowerCase()\n  }\n\n  private trackerFilterQuery(query: Record<string, string>, ignoreQueryParams?: string[]): Record<string, string> {\n    if (!Array.isArray(ignoreQueryParams) || ignoreQueryParams.length === 0) return { ...query }\n    const normalizedIgnore = ignoreQueryParams.map(p => this.trackerNormalizeParamKey(p))\n    const result: Record<string, string> = {}\n    Object.keys(query).forEach((key) => {\n      if (!normalizedIgnore.includes(key)) {\n        result[key] = query[key]\n      }\n    })\n    return result\n  }\n\n\n\n  private checkTrackerAllowsRequest(tableName: string, type: 'GET'|'STREAM', path: any[], options: RequestOptions | undefined, storeData: any): Observable<boolean> {\n    const normalized = this.trackerNormalizePath(path)\n    const ignoreQueryParams = Array.isArray(options?.ignoreQueryParams) ? options!.ignoreQueryParams : []\n\n    if (!normalized.hasQuery) {\n      const meta = this.getRequestCacheMetadata(storeData, type)\n      return of(!meta)\n    }\n\n    const filtered = this.trackerFilterQuery(normalized.query, ignoreQueryParams)\n    const keys = Object.keys(filtered)\n\n    if (keys.length === 0) {\n      return of(!this.getRequestCacheMetadata(storeData, type))\n    }\n\n    const meta = this.getRequestCacheMetadata(storeData, type) || {}\n    const now = Math.floor(Date.now() / 1000)\n\n    // Build the combination string from the filtered query (deterministic because keys are sorted)\n    const combinationString = keys.sort().map((k) => `${k}=${filtered[k]}`).join('&')\n\n    // Legacy per-key queryParams for backward compatibility (read-only)\n    const queryParams: Record<string, string[]> = { ...(meta.queryParams || {}) }\n    const queryParamsExpires: number | null = meta.queryParamsExpires ?? null\n\n    // New combination-based tracking\n    const queryCombinations: string[] = [...(meta.queryCombinations || [])]\n\n    // Reset combinations if the request path has changed (different endpoint)\n    // Use trackerNormalizePath so inline query strings (e.g. 'items?a=1') are stripped\n    // before comparing, matching the same normalization applied to the current request.\n    const storedPathKey = meta.path\n      ? this.trackerNormalizePath(\n          meta.path.filter((p: any) => typeof p === 'string' || typeof p === 'number').map(String)\n        ).pathKey\n      : null\n    const pathChanged = storedPathKey && storedPathKey !== normalized.pathKey\n    const isExpired = queryParamsExpires !== null && queryParamsExpires <= now\n    const shouldReset = pathChanged || isExpired\n\n    // Determine if request is accepted (not yet tracked)\n    // Use combination-based tracking when available; fall back to legacy per-key tracking\n    const accepted = shouldReset\n      ? true\n      : queryCombinations.length > 0\n        ? !queryCombinations.includes(combinationString)\n        : Object.keys(queryParams).length > 0\n          ? !keys.every((key) => (queryParams[key] || []).includes(filtered[key]))\n          : true\n\n    // Compute updated values immutably\n    const updatedQueryCombinations = accepted\n      ? [...queryCombinations, combinationString]\n      : queryCombinations\n\n    const updatedQueryParams = accepted\n      ? keys.reduce((acc: Record<string, string[]>, key) => {\n          const value = filtered[key]\n          const consumed = acc[key] || []\n          if (!consumed.includes(value)) {\n            acc[key] = [...consumed, value]\n          }\n          return acc\n        }, { ...queryParams })\n      : { ...queryParams }\n\n    const updatedQueryParamsExpires = this.utils.expires(options?.queryParamsExpiresIn as string) ?? queryParamsExpires\n\n    // Apply reset if path changed or expired\n    const finalQueryCombinations = shouldReset ? updatedQueryCombinations : queryCombinations\n    const finalQueryParams = shouldReset ? updatedQueryParams : queryParams\n    const finalQueryParamsExpires = shouldReset ? updatedQueryParamsExpires : updatedQueryParamsExpires\n\n    if (accepted || updatedQueryParamsExpires !== queryParamsExpires) {\n      this.localStorageManagerService.store$(tableName).pipe(\n        take(1),\n        tap((latestStoreData: any) => {\n          const currentCache = latestStoreData?.requestCache || {}\n          const currentEntry = currentCache[type] || {}\n          this.localStorageManagerService.updateStore({\n            name: tableName,\n            data: {\n              ...(latestStoreData || {}),\n              requestCache: {\n                ...currentCache,\n                [type]: {\n                  ...currentEntry,\n                  queryCombinations: finalQueryCombinations,\n                  queryParams: finalQueryParams,\n                  queryParamsExpires: finalQueryParamsExpires,\n                }\n              }\n            }\n          })\n        })\n      ).subscribe()\n    }\n\n    return of(accepted)\n  }\n\n}\n","import { DestroyRef, effect, inject, Injectable, Injector, signal } from '@angular/core';\n\nimport { OperationResultModel } from './models';\nimport { ApiRequest, WSOptions } from './models';\nimport { HTTPManagerSignalsService } from '../request-manager-services/http-manager-signals.service';\nimport { DatabaseManagerSignalsService } from '../database-manager-service/database-manager-signals.service';\nimport { LocalStorageSignalsManagerService } from '../local-storage-manager-service/local-storage-signals-manager.service';\nimport { SettingOptions } from '../local-storage-manager-service/models/setting-options.model';\nimport { TableSchemaDef } from '../database-manager-service/models/table-schema';\nimport { BatchOptions } from '../../models/batch-options.model';\nimport { UtilsService } from '../utils/utils.service';\nimport { LoggerService } from '../utils/logger.service';\n\n@Injectable()\nexport class HTTPManagerStateSignalsService<T = any> {\n\n  // --- Injected services ---\n  private readonly httpManagerSignalsService = inject(HTTPManagerSignalsService);\n  private readonly databaseManagerSignalsService = inject(DatabaseManagerSignalsService);\n  private readonly localStorageSignalsManagerService = inject(LocalStorageSignalsManagerService);\n  private readonly utils = inject(UtilsService);\n  private readonly logger = inject(LoggerService);\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly injector = inject(Injector);\n\n  // --- Own state signals (private writable, public readonly) ---\n  private readonly dataSignal = signal<T[]>([]);\n  private readonly dataObjectSignal = signal<T | null>(null);\n  private readonly operationSuccessSignal = signal<OperationResultModel | null>(null);\n  private readonly pageSignal = signal<number>(0);\n  private readonly totalPagesSignal = signal<number>(0);\n  private readonly percentageSignal = signal<number>(0);\n  private readonly streamedResponseSignal = signal<any[]>([]);\n  private readonly messagesSignal = signal<any[]>([]);\n\n  // --- Public readonly state ---\n  readonly data = this.dataSignal.asReadonly();\n  readonly dataObject = this.dataObjectSignal.asReadonly();\n  readonly operationSuccess = this.operationSuccessSignal.asReadonly();\n  readonly page = this.pageSignal.asReadonly();\n  readonly totalPages = this.totalPagesSignal.asReadonly();\n  readonly percentage = this.percentageSignal.asReadonly();\n  readonly streamedResponse = this.streamedResponseSignal.asReadonly();\n  readonly messages = this.messagesSignal.asReadonly();\n\n  // --- Delegated signals from HTTPManagerSignalsService ---\n  readonly error = this.httpManagerSignalsService.error;\n  readonly isPending = this.httpManagerSignalsService.isPending;\n  readonly isConnecting = this.httpManagerSignalsService.isConnecting;\n  readonly retryCount = this.httpManagerSignalsService.retryCount;\n  readonly maxRetries = this.httpManagerSignalsService.maxRetries;\n  readonly connectionError = this.httpManagerSignalsService.connectionError;\n\n  constructor() {\n    // Accumulate WS messages via effect instead of scan() operators\n    effect(() => {\n      const msg = this.httpManagerSignalsService.data();\n      if (msg !== null && msg !== undefined) {\n        this.messagesSignal.update(msgs => [...msgs, msg]);\n      }\n    }, { injector: this.injector });\n  }\n\n  // --- State setters ---\n\n  setData(items: T[]): void {\n    this.dataSignal.set(items);\n  }\n\n  setDataObject(item: T | null): void {\n    this.dataObjectSignal.set(item);\n  }\n\n  setOperationSuccess(result: OperationResultModel | null): void {\n    this.operationSuccessSignal.set(result);\n  }\n\n  setPage(n: number): void {\n    this.pageSignal.set(n);\n  }\n\n  setTotalPages(n: number): void {\n    this.totalPagesSignal.set(n);\n  }\n\n  setPercentage(n: number): void {\n    this.percentageSignal.set(n);\n  }\n\n  appendStreamedItem(item: any): void {\n    this.streamedResponseSignal.update(items => [...items, item]);\n  }\n\n  clearStreamedResponse(): void {\n    this.streamedResponseSignal.set([]);\n  }\n\n  clearMessages(): void {\n    this.messagesSignal.set([]);\n  }\n\n  // --- HTTP methods delegated to HTTPManagerSignalsService ---\n\n  getRequest<U = T>(options?: ApiRequest, params?: any[]) {\n    return this.httpManagerSignalsService.getRequest<U>(options, params);\n  }\n\n  postRequest<U extends { id?: number | string } = any>(data: U, options: ApiRequest, params?: any[]) {\n    return this.httpManagerSignalsService.postRequest<U>(data, options, params);\n  }\n\n  putRequest<U extends { id?: number | string } = any>(data: U, options: ApiRequest, params?: any[]) {\n    return this.httpManagerSignalsService.putRequest<U>(data, options, params);\n  }\n\n  deleteRequest<U = T>(options: ApiRequest, params?: any[]) {\n    return this.httpManagerSignalsService.deleteRequest<U>(options, params);\n  }\n\n  downloadRequest<U = T>(options: ApiRequest, params?: any[], saveAs?: string) {\n    return this.httpManagerSignalsService.downloadRequest<U>(options, params, saveAs);\n  }\n\n  uploadRequest<U = T>(files: File | File[], options: ApiRequest, params?: any[]) {\n    return this.httpManagerSignalsService.uploadRequest<U>(files, options, params);\n  }\n\n  getBatchRequests<U = T>(requests: ApiRequest[], options?: BatchOptions) {\n    return this.httpManagerSignalsService.getBatchRequests<U>(requests, options);\n  }\n\n  getSequentialRequest<U = T>(requests: ApiRequest[], options?: BatchOptions) {\n    return this.httpManagerSignalsService.getSequentialRequest<U>(requests, options);\n  }\n\n  getParallelRequest<U = T>(requests: ApiRequest[], options?: BatchOptions) {\n    return this.httpManagerSignalsService.getParallelRequest<U>(requests, options);\n  }\n\n  // --- WS control methods delegated to HTTPManagerSignalsService ---\n\n  connect(options: WSOptions, jwtToken: string): void {\n    this.httpManagerSignalsService.connect(options, jwtToken);\n  }\n\n  disconnect(): void {\n    this.httpManagerSignalsService.disconnect();\n  }\n\n  subscribeToChannel(channel: string, userData?: any): void {\n    this.httpManagerSignalsService.subscribeToChannel(channel, userData);\n  }\n\n  subscribeToChannels(channels: string[], userData?: any): void {\n    this.httpManagerSignalsService.subscribeToChannels(channels, userData);\n  }\n\n  unsubscribeFromChannel(channel: string): void {\n    this.httpManagerSignalsService.unsubscribeFromChannel(channel);\n  }\n\n  getSubscribedChannels(): Set<string> {\n    return this.httpManagerSignalsService.getSubscribedChannels();\n  }\n\n  sendBroadcast(content: any): void {\n    this.httpManagerSignalsService.sendBroadcast(content);\n  }\n\n  sendMessageInChannel(channel: string, content: any): void {\n    this.httpManagerSignalsService.sendMessageInChannel(channel, content);\n  }\n\n  sendChannelMessage(channel: string, content: any): void {\n    this.httpManagerSignalsService.sendChannelMessage(channel, content);\n  }\n\n  sendChannelMessageToChannels(channels: string[], content: any): void {\n    this.httpManagerSignalsService.sendChannelMessageToChannels(channels, content);\n  }\n\n  sendMessageToUser(user: string, content: any): void {\n    this.httpManagerSignalsService.sendMessageToUser(user, content);\n  }\n\n  getAllChannels(): void {\n    this.httpManagerSignalsService.getAllChannels();\n  }\n\n  createChannel(channel: string): void {\n    this.httpManagerSignalsService.createChannel(channel);\n  }\n\n  deleteChannel(channel: string): void {\n    this.httpManagerSignalsService.deleteChannel(channel);\n  }\n\n  getUsersInChannel(channel: string): void {\n    this.httpManagerSignalsService.getUsersInChannel(channel);\n  }\n\n  createNotificationChannel(channel: string): void {\n    this.httpManagerSignalsService.createNotificationChannel(channel);\n  }\n\n  getNotificationChannels(): void {\n    this.httpManagerSignalsService.getNotificationChannels();\n  }\n\n  getTodaysNotificationChannels(): void {\n    this.httpManagerSignalsService.getTodaysNotificationChannels();\n  }\n\n  subscribeToNotificationChannel(channel: string, options?: any, user?: any): void {\n    this.httpManagerSignalsService.subscribeToNotificationChannel(channel, options, user);\n  }\n\n  unsubscribeFromNotificationChannel(channel: string): void {\n    this.httpManagerSignalsService.unsubscribeFromNotificationChannel(channel);\n  }\n\n  sendNotification(channel: string, content: any): void {\n    this.httpManagerSignalsService.sendNotification(channel, content);\n  }\n\n  // --- DB methods delegated to DatabaseManagerSignalsService ---\n\n  getDatabaseTables() {\n    return this.databaseManagerSignalsService.getDatabaseTables();\n  }\n\n  databaseExists() {\n    return this.databaseManagerSignalsService.databaseExists();\n  }\n\n  hasDatabaseTable(table: string) {\n    return this.databaseManagerSignalsService.hasDatabaseTable(table);\n  }\n\n  getDatabaseTable(table: string) {\n    return this.databaseManagerSignalsService.getDatabaseTable(table);\n  }\n\n  getDatabaseTableSchema(table: string) {\n    return this.databaseManagerSignalsService.getDatabaseTableSchema(table);\n  }\n\n  createDatabaseTable(tableDef: TableSchemaDef) {\n    return this.databaseManagerSignalsService.createDatabaseTable(tableDef);\n  }\n\n  updateDatabaseTableSchema(tableDef: TableSchemaDef) {\n    return this.databaseManagerSignalsService.updateDatabaseTableSchema(tableDef);\n  }\n\n  // --- localStorage methods delegated to LocalStorageSignalsManagerService ---\n\n  createStore(store: { id?: string; name: string; data: any; options: SettingOptions }) {\n    this.localStorageSignalsManagerService.createStore(store);\n  }\n\n  setStore(store: { id: string; name: string; data: any; options: SettingOptions }) {\n    this.localStorageSignalsManagerService.setStore(store);\n  }\n\n  updateStore(store: { name: string; data: any }) {\n    this.localStorageSignalsManagerService.updateStore(store);\n  }\n\n  deleteStore(store: { name: string }) {\n    this.localStorageSignalsManagerService.deleteStore(store);\n  }\n\n  getStore(storeName: string) {\n    return this.localStorageSignalsManagerService.store(storeName);\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","export interface StateOperationResultInterface {\n  success: boolean;\n  operation: 'CREATE' | 'UPDATE' | 'DELETE';\n  key?: string;\n  value?: any;\n  timestamp: number;\n  error?: string;\n}\n\nexport class StateOperationResult implements StateOperationResultInterface {\n  constructor(\n    public success: boolean = false,\n    public operation: 'CREATE' | 'UPDATE' | 'DELETE' = 'UPDATE',\n    public key?: string,\n    public value?: any,\n    public timestamp: number = Date.now(),\n    public error?: string,\n  ) {}\n\n  static adapt(item?: any): StateOperationResult {\n    return new StateOperationResult(\n      item?.success ?? false,\n      item?.operation || 'UPDATE',\n      item?.key,\n      item?.value,\n      item?.timestamp || Date.now(),\n      item?.error,\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 { StateOperationResult } from './models/state-operation-result.model';\nimport { BehaviorSubject, Observable, 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  private operationResult = new BehaviorSubject<StateOperationResult | null>(null)\n  operationResult$: Observable<StateOperationResult | null> = this.operationResult.asObservable()\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  createRecord(key: string, value: any) {\n    try {\n      this.updateData({ [key]: value })\n      this.operationResult.next(StateOperationResult.adapt({\n        success: true,\n        operation: 'CREATE',\n        key,\n        value,\n      }))\n    } catch (error: any) {\n      this.operationResult.next(StateOperationResult.adapt({\n        success: false,\n        operation: 'CREATE',\n        key,\n        error: error?.message || 'Create failed',\n      }))\n    }\n  }\n\n  updateRecord(key: string, value: any) {\n    try {\n      this.updateData({ [key]: value })\n      this.operationResult.next(StateOperationResult.adapt({\n        success: true,\n        operation: 'UPDATE',\n        key,\n        value,\n      }))\n    } catch (error: any) {\n      this.operationResult.next(StateOperationResult.adapt({\n        success: false,\n        operation: 'UPDATE',\n        key,\n        error: error?.message || 'Update failed',\n      }))\n    }\n  }\n\n  deleteRecord(key: string) {\n    try {\n      const currentState = this.get()\n      if (currentState && key in currentState) {\n        const { [key]: removed, ...rest } = currentState as any\n        this.setState(rest as T)\n        this.updateState(rest)\n      }\n      this.operationResult.next(StateOperationResult.adapt({\n        success: true,\n        operation: 'DELETE',\n        key,\n      }))\n    } catch (error: any) {\n      this.operationResult.next(StateOperationResult.adapt({\n        success: false,\n        operation: 'DELETE',\n        key,\n        error: error?.message || 'Delete failed',\n      }))\n    }\n  }\n\n}\n","import { Injectable, inject, WritableSignal, signal, computed, effect, Injector } 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 { StateOperationResult } from './models/state-operation-result.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 injector = inject(Injector);\n  private state = signal<T | null>(null);\n  private isRestoring = false;\n  private settings: StateStorageOptions | null = null;\n\n  private operationResultSignal = signal<StateOperationResult | null>(null)\n  readonly operationResult = this.operationResultSignal.asReadonly();\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    if (this.settings !== null) return;\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    }, { injector: this.injector });\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  createRecord(key: string, value: any) {\n    try {\n      this.updateData({ [key]: value } as Partial<T>)\n      this.operationResultSignal.set(StateOperationResult.adapt({\n        success: true,\n        operation: 'CREATE',\n        key,\n        value,\n      }))\n    } catch (error: any) {\n      this.operationResultSignal.set(StateOperationResult.adapt({\n        success: false,\n        operation: 'CREATE',\n        key,\n        error: error?.message || 'Create failed',\n      }))\n    }\n  }\n\n  updateRecord(key: string, value: any) {\n    try {\n      this.updateData({ [key]: value } as Partial<T>)\n      this.operationResultSignal.set(StateOperationResult.adapt({\n        success: true,\n        operation: 'UPDATE',\n        key,\n        value,\n      }))\n    } catch (error: any) {\n      this.operationResultSignal.set(StateOperationResult.adapt({\n        success: false,\n        operation: 'UPDATE',\n        key,\n        error: error?.message || 'Update failed',\n      }))\n    }\n  }\n\n  deleteRecord(key: string) {\n    try {\n      const currentState = this.state();\n      if (currentState && key in currentState) {\n        const { [key]: removed, ...rest } = currentState as any\n        this.state.set(rest as T)\n        this.updateState(rest as Partial<T>)\n      }\n      this.operationResultSignal.set(StateOperationResult.adapt({\n        success: true,\n        operation: 'DELETE',\n        key,\n      }))\n    } catch (error: any) {\n      this.operationResultSignal.set(StateOperationResult.adapt({\n        success: false,\n        operation: 'DELETE',\n        key,\n        error: error?.message || 'Delete failed',\n      }))\n    }\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","export class SqlParseError extends Error {\n  override name = 'SqlParseError';\n  constructor(message: string) {\n    super(message);\n  }\n}\n\nexport class SqlValidationError extends Error {\n  override name = 'SqlValidationError';\n  constructor(message: string) {\n    super(message);\n  }\n}\n","import { Parser, TableColumnAst, AST } from 'node-sql-parser';\nimport { SqlParseError } from './models/sql-errors.model';\n\nexport interface ParseResult {\n  ast:        AST;\n  tableList:  string[];\n  columnList: string[];\n}\n\nexport class SqlParser {\n  private readonly _parser = new Parser();\n\n  parse(sql: string): ParseResult {\n    let result: TableColumnAst;\n    try {\n      result = this._parser.parse(sql);\n    } catch (e: any) {\n      throw new SqlParseError(e.message ?? 'Failed to parse SQL');\n    }\n\n    const ast = Array.isArray(result.ast) ? result.ast[0] : result.ast;\n    if (!ast) {\n      throw new SqlParseError('SQL produced no AST — only SELECT statements are supported');\n    }\n    if ((ast as any).type !== 'select') {\n      throw new SqlParseError('Only SELECT statements are supported');\n    }\n\n    const stripPrefix = (list: string[]): string[] =>\n      list.map(entry => entry.split('::').pop() ?? entry);\n\n    return {\n      ast,\n      tableList:  stripPrefix(result.tableList  ?? []),\n      columnList: stripPrefix(result.columnList ?? []),\n    };\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { DatabaseManagerService } from '../database-manager-service/database.manager.service';\nimport { DexieSqlOptions } from './models/sql-options.model';\nimport { SqlValidationError } from './models/sql-errors.model';\nimport { ParseResult } from './sql-parser';\n\nexport interface TableSchemaInfo {\n  pk:               string;\n  simpleIndexes:    string[];\n  compoundIndexes:  string[][];\n}\n\nexport interface ValidatedQuery {\n  ast:     any;\n  schemas: Record<string, TableSchemaInfo>;\n  aliases: Record<string, string>;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class SchemaValidator {\n  private readonly _dbManager = inject(DatabaseManagerService);\n\n  async validate(parsed: ParseResult, options: DexieSqlOptions = {}): Promise<ValidatedQuery> {\n    const { ast } = parsed;\n    const fromItems: any[] = (ast as any).from ?? [];\n\n    // Build alias map and collect real table names\n    const aliases: Record<string, string> = {};\n    const tableNames: string[] = [];\n    for (const item of fromItems) {\n      if (item.table) {\n        tableNames.push(item.table);\n        aliases[item.as ?? item.table] = item.table;\n        aliases[item.table] = item.table;\n      }\n    }\n\n    if (tableNames.length === 0) {\n      throw new SqlValidationError('No tables found in query');\n    }\n\n    // Fetch and parse schema for each table\n    const schemas: Record<string, TableSchemaInfo> = {};\n    for (const tableName of tableNames) {\n      const schemaArr = await firstValueFrom(this._dbManager.getDatabaseTableSchema(tableName));\n      if (!schemaArr || schemaArr.length === 0) {\n        throw new SqlValidationError(`Table not found: \"${tableName}\"`);\n      }\n      schemas[tableName] = this._parseSchemaArray(schemaArr);\n    }\n\n    const defaultTable = tableNames[0];\n\n    // Validate WHERE columns\n    if ((ast as any).where) {\n      this._validateWhereNode((ast as any).where, defaultTable, aliases, schemas);\n    }\n\n    // Validate ORDER BY columns\n    for (const ob of ((ast as any).orderby ?? [])) {\n      if (ob.expr?.type === 'column_ref') {\n        const tbl = this._resolveTable(ob.expr.table, defaultTable, aliases);\n        this._assertIndexed(ob.expr.column, tbl, schemas);\n      }\n    }\n\n    // Validate JOIN ON columns\n    for (const item of fromItems) {\n      if (item.join && item.on) {\n        this._validateJoinOn(item.on, tableNames, aliases, schemas);\n      }\n    }\n\n    // Strict mode: AND without compound index → throw\n    if (options.strict && (ast as any).where) {\n      this._checkStrictAnd((ast as any).where, defaultTable, aliases, schemas);\n    }\n\n    return { ast, schemas, aliases };\n  }\n\n  // ─── Helpers ─────────────────────────────────────────────────────────────\n\n  private _parseSchemaArray(schemaArr: string[]): TableSchemaInfo {\n    const pk = schemaArr[0] ?? '';\n    const simpleIndexes:   string[]   = [];\n    const compoundIndexes: string[][] = [];\n\n    for (let i = 1; i < schemaArr.length; i++) {\n      const s = schemaArr[i];\n      if (s.startsWith('[') && s.endsWith(']')) {\n        compoundIndexes.push(s.slice(1, -1).split('+'));\n      } else {\n        simpleIndexes.push(s.replace(/^[*&]/, ''));\n      }\n    }\n\n    return { pk, simpleIndexes, compoundIndexes };\n  }\n\n  private _isIndexed(col: string, tableName: string, schemas: Record<string, TableSchemaInfo>): boolean {\n    const schema = schemas[tableName];\n    if (!schema) return false;\n    return col === schema.pk || schema.simpleIndexes.includes(col);\n  }\n\n  private _assertIndexed(col: string, tableName: string, schemas: Record<string, TableSchemaInfo>): void {\n    if (!this._isIndexed(col, tableName, schemas)) {\n      throw new SqlValidationError(`Column \"${col}\" on table \"${tableName}\" is not indexed`);\n    }\n  }\n\n  private _resolveTable(tableRef: string | null, defaultTable: string, aliases: Record<string, string>): string {\n    if (!tableRef) return defaultTable;\n    return aliases[tableRef] ?? tableRef;\n  }\n\n  private _validateWhereNode(\n    node: any,\n    defaultTable: string,\n    aliases: Record<string, string>,\n    schemas: Record<string, TableSchemaInfo>,\n  ): void {\n    if (!node || node.type !== 'binary_expr') return;\n\n    if (node.operator === 'AND' || node.operator === 'OR') {\n      this._validateWhereNode(node.left,  defaultTable, aliases, schemas);\n      this._validateWhereNode(node.right, defaultTable, aliases, schemas);\n      return;\n    }\n\n    if (node.left?.type === 'column_ref') {\n      const tbl = this._resolveTable(node.left.table, defaultTable, aliases);\n      this._assertIndexed(node.left.column, tbl, schemas);\n    }\n  }\n\n  private _validateJoinOn(\n    onNode:     any,\n    tableNames: string[],\n    aliases:    Record<string, string>,\n    schemas:    Record<string, TableSchemaInfo>,\n  ): void {\n    if (!onNode || onNode.type !== 'binary_expr' || onNode.operator !== '=') return;\n\n    const l = onNode.left;\n    const r = onNode.right;\n    if (l?.type !== 'column_ref' || r?.type !== 'column_ref') return;\n\n    const leftTable  = tableNames[0];\n    const rightTable = tableNames[tableNames.length - 1];\n\n    // Resolve which ON side belongs to left vs right table\n    const lTableResolved = aliases[l.table ?? ''] ?? l.table ?? leftTable;\n    const rTableResolved = aliases[r.table ?? ''] ?? r.table ?? rightTable;\n\n    const leftKey  = lTableResolved === leftTable  ? { col: l.column, table: lTableResolved } : { col: r.column, table: rTableResolved };\n    const rightKey = lTableResolved === leftTable  ? { col: r.column, table: rTableResolved } : { col: l.column, table: lTableResolved };\n\n    // Left-side key: PK is exempt, otherwise must be indexed\n    const leftSchema = schemas[leftKey.table];\n    if (leftSchema && leftKey.col !== leftSchema.pk && !leftSchema.simpleIndexes.includes(leftKey.col)) {\n      throw new SqlValidationError(`JOIN column \"${leftKey.col}\" on table \"${leftKey.table}\" must be indexed`);\n    }\n\n    // Right-side key: must be indexed (including PK counts)\n    if (!this._isIndexed(rightKey.col, rightKey.table, schemas)) {\n      throw new SqlValidationError(`JOIN column \"${rightKey.col}\" on table \"${rightKey.table}\" must be indexed`);\n    }\n  }\n\n  private _checkStrictAnd(\n    whereNode:    any,\n    defaultTable: string,\n    aliases:      Record<string, string>,\n    schemas:      Record<string, TableSchemaInfo>,\n  ): void {\n    if (!whereNode || whereNode.type !== 'binary_expr' || whereNode.operator !== 'AND') return;\n\n    const leafCols = this._flattenAndCols(whereNode, defaultTable, aliases);\n    if (leafCols.length < 2) return;\n\n    const tableName = leafCols[0].table;\n    const schema    = schemas[tableName];\n    if (!schema) return;\n\n    const colNames = leafCols.map(c => c.col);\n    const hasCompound = schema.compoundIndexes.some(\n      ci => ci.length === colNames.length && colNames.every(c => ci.includes(c)),\n    );\n\n    if (!hasCompound) {\n      throw new SqlValidationError(\n        `Strict mode: compound index required for AND on columns [${colNames.join(', ')}]`,\n      );\n    }\n  }\n\n  private _flattenAndCols(\n    node:         any,\n    defaultTable: string,\n    aliases:      Record<string, string>,\n  ): Array<{ table: string; col: string }> {\n    if (!node || node.type !== 'binary_expr') return [];\n    if (node.operator === 'AND') {\n      return [\n        ...this._flattenAndCols(node.left,  defaultTable, aliases),\n        ...this._flattenAndCols(node.right, defaultTable, aliases),\n      ];\n    }\n    if (node.left?.type === 'column_ref') {\n      return [{ table: this._resolveTable(node.left.table, defaultTable, aliases), col: node.left.column }];\n    }\n    return [];\n  }\n}\n","export enum ExecutionPlanType {\n  SIMPLE       = 'SIMPLE',\n  AND_BOUNDED  = 'AND_BOUNDED',\n  AND_COMPOUND = 'AND_COMPOUND',\n  OR_MERGE     = 'OR_MERGE',\n  JOIN_HASH    = 'JOIN_HASH',\n}\n\nexport type DexieOp =\n  | 'equals'\n  | 'notEqual'\n  | 'above'\n  | 'aboveOrEqual'\n  | 'below'\n  | 'belowOrEqual'\n  | 'between'\n  | 'anyOf'\n  | 'noneOf'\n  | 'startsWith';\n\nexport interface PlanStep {\n  col: string;\n  op: DexieOp;\n  val: any;\n}\n\nexport interface JoinInfo {\n  leftTable:  string;\n  rightTable: string;\n  leftKey:    string;\n  rightKey:   string;\n  joinType:  'inner' | 'left';\n}\n\nexport interface ExecutionPlan {\n  type:              ExecutionPlanType;\n  table:             string;\n  primaryStep:       PlanStep | null;\n  boundedFilters:    PlanStep[];\n  compoundIndex?:    string;\n  compoundValues?:   any[];\n  compoundWarnCols?: string[];\n  orBranches?:       PlanStep[];\n  joinInfo?:         JoinInfo;\n  orderBy?:          { col: string; dir: 'asc' | 'desc' } | null;\n  limit?:            number | null;\n  offset?:           number | null;\n  projection?:       string[] | null;\n  aggregate?:        'count' | null;\n  distinct?:         boolean;\n  dedupeKey?:        string;\n}\n","import { SqlValidationError } from './models/sql-errors.model';\nimport { DexieSqlOptions } from './models/sql-options.model';\nimport {\n  ExecutionPlan,\n  ExecutionPlanType,\n  DexieOp,\n  PlanStep,\n  JoinInfo,\n} from './models/execution-plan.model';\nimport { ValidatedQuery, TableSchemaInfo } from './schema-validator';\n\nexport class QueryPlanner {\n\n  plan(validated: ValidatedQuery, options: DexieSqlOptions = {}): ExecutionPlan {\n    const { ast, schemas, aliases } = validated;\n    const fromItems: any[] = (ast as any).from ?? [];\n    const mainTable  = fromItems[0]?.table ?? '';\n    const dedupeKey  = schemas[mainTable]?.pk ?? 'id';\n    const basePlan   = this._buildBasePlanExtras(ast, mainTable, dedupeKey);\n\n    // ── JOIN ────────────────────────────────────────────────────────────────\n    const joinItem = fromItems.find((f: any) => f.join);\n    if (joinItem) {\n      return this._buildJoinPlan(ast, fromItems, joinItem, schemas, aliases, mainTable, basePlan);\n    }\n\n    const where = (ast as any).where;\n\n    // ── No WHERE ─────────────────────────────────────────────────────────────\n    if (!where) {\n      return { ...basePlan, type: ExecutionPlanType.SIMPLE, primaryStep: null, boundedFilters: [] };\n    }\n\n    // ── OR ──────────────────────────────────────────────────────────────────\n    if (where.operator === 'OR') {\n      return this._buildOrPlan(where, basePlan, aliases, mainTable);\n    }\n\n    // ── AND ──────────────────────────────────────────────────────────────────\n    if (where.operator === 'AND') {\n      return this._buildAndPlan(where, basePlan, schemas, aliases, mainTable, options);\n    }\n\n    // ── Single condition ────────────────────────────────────────────────────\n    const step = this._nodeToStep(where, aliases, mainTable);\n    return { ...basePlan, type: ExecutionPlanType.SIMPLE, primaryStep: step, boundedFilters: [] };\n  }\n\n  // ─── AND ──────────────────────────────────────────────────────────────────\n\n  private _buildAndPlan(\n    where:        any,\n    basePlan:     Partial<ExecutionPlan> & { table: string },\n    schemas:      Record<string, TableSchemaInfo>,\n    aliases:      Record<string, string>,\n    mainTable:    string,\n    _options:     DexieSqlOptions,\n  ): ExecutionPlan {\n    const conditions = this._flattenAnd(where);\n    const cols       = conditions.map((c: any) => c.left?.column as string).filter(Boolean);\n    const schema     = schemas[mainTable];\n\n    // Check for matching compound index\n    const matchedCompound = schema?.compoundIndexes.find(\n      ci => ci.length === cols.length && cols.every(c => ci.includes(c)),\n    );\n\n    if (matchedCompound) {\n      const orderedValues = matchedCompound.map(ciCol => {\n        const cond = conditions.find((c: any) => c.left?.column === ciCol);\n        return this._extractValue(cond.right, cond.operator);\n      });\n      return {\n        ...basePlan,\n        type:           ExecutionPlanType.AND_COMPOUND,\n        primaryStep:    null,\n        boundedFilters: [],\n        compoundIndex:  `[${matchedCompound.join('+')}]`,\n        compoundValues: orderedValues,\n      } as ExecutionPlan;\n    }\n\n    // Pragmatic: first condition → Dexie, rest → JS filter\n    const primaryStep     = this._nodeToStep(conditions[0], aliases, mainTable);\n    const boundedFilters  = conditions.slice(1).map((c: any) => this._nodeToStep(c, aliases, mainTable));\n\n    return {\n      ...basePlan,\n      type:             ExecutionPlanType.AND_BOUNDED,\n      primaryStep,\n      boundedFilters,\n      compoundWarnCols: cols,\n    } as ExecutionPlan;\n  }\n\n  // ─── OR ───────────────────────────────────────────────────────────────────\n\n  private _buildOrPlan(\n    where:        any,\n    basePlan:     Partial<ExecutionPlan> & { table: string },\n    aliases:      Record<string, string>,\n    mainTable:    string,\n  ): ExecutionPlan {\n    const branches  = this._flattenOr(where);\n    const orBranches = branches.map((b: any) => this._nodeToStep(b, aliases, mainTable));\n    return {\n      ...basePlan,\n      type:           ExecutionPlanType.OR_MERGE,\n      primaryStep:    null,\n      boundedFilters: [],\n      orBranches,\n    } as ExecutionPlan;\n  }\n\n  // ─── JOIN ─────────────────────────────────────────────────────────────────\n\n  private _buildJoinPlan(\n    ast:        any,\n    fromItems:  any[],\n    joinItem:   any,\n    schemas:    Record<string, TableSchemaInfo>,\n    aliases:    Record<string, string>,\n    mainTable:  string,\n    basePlan:   Partial<ExecutionPlan> & { table: string },\n  ): ExecutionPlan {\n    const rightTable = joinItem.table as string;\n    const onNode     = joinItem.on;\n    const joinType   = (joinItem.join as string).toLowerCase().includes('left') ? 'left' : 'inner';\n\n    // Resolve join keys from ON clause\n    const l = onNode?.left;\n    const r = onNode?.right;\n\n    const lTableResolved = aliases[l?.table ?? ''] ?? l?.table ?? mainTable;\n    const rTableResolved = aliases[r?.table ?? ''] ?? r?.table ?? rightTable;\n\n    let leftKey: string, rightKey: string;\n    if (lTableResolved === mainTable) {\n      leftKey  = l?.column ?? '';\n      rightKey = r?.column ?? '';\n    } else {\n      leftKey  = r?.column ?? '';\n      rightKey = l?.column ?? '';\n    }\n\n    const joinInfo: JoinInfo = { leftTable: mainTable, rightTable, leftKey, rightKey, joinType };\n\n    // WHERE conditions become post-join bounded filters\n    const where = (ast as any).where;\n    const boundedFilters: PlanStep[] = [];\n    if (where) {\n      this._flattenAnd(where.operator === 'AND'\n        ? where\n        : { type: 'binary_expr', operator: 'AND', left: where, right: null })\n        .filter(Boolean)\n        .forEach((c: any) => boundedFilters.push(this._nodeToStep(c, aliases, mainTable)));\n    }\n\n    return {\n      ...basePlan,\n      type: ExecutionPlanType.JOIN_HASH,\n      primaryStep: null,\n      boundedFilters: where ? (where.operator === 'AND' ? boundedFilters : [this._nodeToStep(where, aliases, mainTable)]) : [],\n      joinInfo,\n    } as ExecutionPlan;\n  }\n\n  // ─── Base plan extras (ORDER BY, LIMIT, OFFSET, projection, etc.) ─────────\n\n  private _buildBasePlanExtras(ast: any, mainTable: string, dedupeKey: string): Partial<ExecutionPlan> & { table: string } {\n    const plan: Partial<ExecutionPlan> & { table: string } = { table: mainTable, dedupeKey };\n\n    // ORDER BY\n    const orderby: any[] = ast.orderby ?? [];\n    if (orderby.length > 0) {\n      const ob = orderby[0];\n      plan.orderBy = {\n        col: ob.expr?.column ?? '',\n        dir: ob.type?.toUpperCase() === 'DESC' ? 'desc' : 'asc',\n      };\n    }\n\n    // LIMIT / OFFSET\n    if (ast.limit) {\n      const vals: any[] = ast.limit.value ?? [];\n      if (ast.limit.seperator === 'offset' && vals.length === 2) {\n        plan.limit  = vals[0].value;\n        plan.offset = vals[1].value;\n      } else if (vals.length === 1) {\n        plan.limit  = vals[0].value;\n        plan.offset = null;\n      }\n    }\n\n    // Projection\n    const columns: any[] = ast.columns;\n    if (columns && columns !== '*' as any) {\n      // COUNT(*)\n      const countCol = columns.find((c: any) => c.expr?.type === 'aggr_func' && c.expr?.name === 'COUNT');\n      if (countCol) {\n        plan.aggregate  = 'count';\n        plan.projection = null;\n      } else {\n        const projected = columns\n          .filter((c: any) => c.expr?.type === 'column_ref' && c.expr?.column !== '*')\n          .map((c: any) => c.expr.column as string);\n        plan.projection = projected.length > 0 ? projected : null;\n      }\n    } else {\n      plan.projection = null;\n    }\n\n    // DISTINCT\n    plan.distinct = ast.distinct === 'DISTINCT';\n\n    return plan;\n  }\n\n  // ─── Node → PlanStep ──────────────────────────────────────────────────────\n\n  private _nodeToStep(node: any, aliases: Record<string, string>, defaultTable: string): PlanStep {\n    if (!node || node.type !== 'binary_expr' || node.left?.type !== 'column_ref') {\n      throw new SqlValidationError(`Unsupported WHERE condition structure`);\n    }\n\n    const col = node.left.column as string;\n    const { op, val } = this._mapOperator(node.operator, node.right);\n    return { col, op, val };\n  }\n\n  private _mapOperator(astOp: string, rightNode: any): { op: DexieOp; val: any } {\n    switch (astOp) {\n      case '=':   return { op: 'equals',        val: this._extractValue(rightNode, astOp) };\n      case '!=':\n      case '<>':  return { op: 'notEqual',       val: this._extractValue(rightNode, astOp) };\n      case '>':   return { op: 'above',          val: this._extractValue(rightNode, astOp) };\n      case '>=':  return { op: 'aboveOrEqual',   val: this._extractValue(rightNode, astOp) };\n      case '<':   return { op: 'below',          val: this._extractValue(rightNode, astOp) };\n      case '<=':  return { op: 'belowOrEqual',   val: this._extractValue(rightNode, astOp) };\n      case 'BETWEEN': {\n        const vals: any[] = rightNode?.value ?? [];\n        return { op: 'between', val: [vals[0]?.value, vals[1]?.value] };\n      }\n      case 'IN':      return { op: 'anyOf',  val: (rightNode?.value ?? []).map((v: any) => v.value) };\n      case 'NOT IN':  return { op: 'noneOf', val: (rightNode?.value ?? []).map((v: any) => v.value) };\n      case 'LIKE': {\n        const raw = String(rightNode?.value ?? '');\n        if (raw.startsWith('%')) {\n          throw new SqlValidationError('LIKE with leading wildcard is not supported');\n        }\n        if (raw.includes('%')) {\n          const pctIdx = raw.indexOf('%');\n          if (pctIdx !== raw.length - 1) {\n            throw new SqlValidationError('LIKE with leading wildcard is not supported');\n          }\n          return { op: 'startsWith', val: raw.slice(0, -1) };\n        }\n        // No wildcard — treat as equals\n        return { op: 'equals', val: raw };\n      }\n      default:\n        throw new SqlValidationError(`Unsupported SQL operator: \"${astOp}\"`);\n    }\n  }\n\n  private _extractValue(node: any, _op: string): any {\n    return node?.value ?? null;\n  }\n\n  // ─── WHERE tree helpers ───────────────────────────────────────────────────\n\n  private _flattenAnd(node: any): any[] {\n    if (!node) return [];\n    if (node.type === 'binary_expr' && node.operator === 'AND') {\n      return [...this._flattenAnd(node.left), ...this._flattenAnd(node.right)];\n    }\n    return [node];\n  }\n\n  private _flattenOr(node: any): any[] {\n    if (!node) return [];\n    if (node.type === 'binary_expr' && node.operator === 'OR') {\n      return [...this._flattenOr(node.left), ...this._flattenOr(node.right)];\n    }\n    return [node];\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { Table } from 'dexie';\nimport { DatabaseManagerService } from '../database-manager-service/database.manager.service';\nimport { SqlValidationError } from './models/sql-errors.model';\nimport { ExecutionPlan, ExecutionPlanType, PlanStep } from './models/execution-plan.model';\n\n@Injectable({ providedIn: 'root' })\nexport class DexieQueryExecutor {\n  private readonly _dbManager = inject(DatabaseManagerService);\n\n  async execute(plan: ExecutionPlan): Promise<any[]> {\n    switch (plan.type) {\n      case ExecutionPlanType.SIMPLE:       return this._executeSimple(plan);\n      case ExecutionPlanType.AND_BOUNDED:  return this._executeAndBounded(plan);\n      case ExecutionPlanType.AND_COMPOUND: return this._executeAndCompound(plan);\n      case ExecutionPlanType.OR_MERGE:     return this._executeOrMerge(plan);\n      case ExecutionPlanType.JOIN_HASH:    return this._executeJoinHash(plan);\n      default:\n        throw new SqlValidationError(`Unknown plan type`);\n    }\n  }\n\n  // ─── SIMPLE ───────────────────────────────────────────────────────────────\n\n  private async _executeSimple(plan: ExecutionPlan): Promise<any[]> {\n    const table = await this._getTable(plan.table);\n    let rows: any[];\n\n    if (!plan.primaryStep) {\n      rows = await table.toArray();\n    } else {\n      rows = await this._applyDexieStep(table, plan.primaryStep);\n    }\n\n    return this._postProcess(rows, plan);\n  }\n\n  // ─── AND_BOUNDED ──────────────────────────────────────────────────────────\n\n  private async _executeAndBounded(plan: ExecutionPlan): Promise<any[]> {\n    const table = await this._getTable(plan.table);\n\n    if (plan.compoundWarnCols?.length) {\n      console.warn(\n        `[DexieSqlService] Consider adding a compound index [${plan.compoundWarnCols.join('+')}] ` +\n        `to table \"${plan.table}\" for full index coverage on AND conditions.`,\n      );\n    }\n\n    let rows = plan.primaryStep\n      ? await this._applyDexieStep(table, plan.primaryStep)\n      : await table.toArray();\n\n    // Apply remaining AND conditions as JS filter\n    for (const f of plan.boundedFilters) {\n      rows = rows.filter(row => this._matchStep(row, f));\n    }\n\n    return this._postProcess(rows, plan);\n  }\n\n  // ─── AND_COMPOUND ─────────────────────────────────────────────────────────\n\n  private async _executeAndCompound(plan: ExecutionPlan): Promise<any[]> {\n    const table = await this._getTable(plan.table);\n    const rows  = await (table.where(plan.compoundIndex!) as any).equals(plan.compoundValues!).toArray();\n    return this._postProcess(rows, plan);\n  }\n\n  // ─── OR_MERGE ─────────────────────────────────────────────────────────────\n\n  private async _executeOrMerge(plan: ExecutionPlan): Promise<any[]> {\n    const table    = await this._getTable(plan.table);\n    const branches = plan.orBranches ?? [];\n\n    const results = await Promise.all(\n      branches.map(branch => this._applyDexieStep(table, branch)),\n    );\n\n    // Deduplicate by primary key\n    const pk   = plan.dedupeKey ?? 'id';\n    const seen = new Map<any, any>();\n    for (const batch of results) {\n      for (const row of batch) {\n        seen.set(row[pk], row);\n      }\n    }\n\n    return this._postProcess(Array.from(seen.values()), plan);\n  }\n\n  // ─── JOIN_HASH ────────────────────────────────────────────────────────────\n\n  private async _executeJoinHash(plan: ExecutionPlan): Promise<any[]> {\n    const join = plan.joinInfo!;\n\n    const leftTable  = await this._getTable(join.leftTable);\n    const rightTable = await this._getTable(join.rightTable);\n\n    // Fetch left rows (full scan; bounded WHERE filters applied post-join)\n    const leftRows = await leftTable.toArray();\n\n    // Extract FK values for right-side lookup\n    const fkValues = [...new Set(leftRows.map(r => r[join.leftKey]).filter(v => v != null))];\n\n    // Fetch right rows indexed by join key\n    const rightRows: any[] = fkValues.length > 0\n      ? await (rightTable.where(join.rightKey) as any).anyOf(fkValues).toArray()\n      : [];\n\n    // Build lookup map from rightKey → array of right rows\n    const rightMap = new Map<any, any[]>();\n    for (const rr of rightRows) {\n      const k = rr[join.rightKey];\n      if (!rightMap.has(k)) rightMap.set(k, []);\n      rightMap.get(k)!.push(rr);\n    }\n\n    // Hash join\n    const joined: any[] = [];\n    for (const lr of leftRows) {\n      const matches = rightMap.get(lr[join.leftKey]);\n      if (matches?.length) {\n        for (const rr of matches) {\n          joined.push({ ...lr, ...rr });\n        }\n      } else if (join.joinType === 'left') {\n        joined.push({ ...lr });\n      }\n    }\n\n    // Apply post-join bounded filters (any WHERE conditions from the query)\n    let result = joined;\n    for (const f of plan.boundedFilters) {\n      result = result.filter(row => this._matchStep(row, f));\n    }\n\n    return this._postProcess(result, plan);\n  }\n\n  // ─── Post-processing ──────────────────────────────────────────────────────\n\n  private _postProcess(rows: any[], plan: ExecutionPlan): any[] {\n    let result = rows;\n\n    // ORDER BY\n    if (plan.orderBy) {\n      const { col, dir } = plan.orderBy;\n      result = [...result].sort((a, b) => {\n        const av = a[col];\n        const bv = b[col];\n        if (av == null && bv == null) return 0;\n        if (av == null) return 1;\n        if (bv == null) return -1;\n        const cmp = av < bv ? -1 : av > bv ? 1 : 0;\n        return dir === 'desc' ? -cmp : cmp;\n      });\n    }\n\n    // LIMIT / OFFSET\n    const offset = plan.offset ?? 0;\n    const limit  = plan.limit  ?? null;\n    if (offset > 0 || limit != null) {\n      result = result.slice(offset, limit != null ? offset + limit : undefined);\n    }\n\n    // Projection\n    if (plan.projection && plan.projection.length > 0) {\n      const cols = plan.projection;\n      result = result.map(row => {\n        const projected: Record<string, any> = {};\n        for (const c of cols) projected[c] = row[c];\n        return projected;\n      });\n    }\n\n    // DISTINCT\n    if (plan.distinct) {\n      const seen = new Set<string>();\n      result = result.filter(row => {\n        const key = JSON.stringify(row);\n        if (seen.has(key)) return false;\n        seen.add(key);\n        return true;\n      });\n    }\n\n    // COUNT(*)\n    if (plan.aggregate === 'count') {\n      return [{ count: result.length }];\n    }\n\n    return result;\n  }\n\n  // ─── Dexie step dispatch ──────────────────────────────────────────────────\n\n  private _applyDexieStep(table: Table<any, any>, step: PlanStep): Promise<any[]> {\n    const col = step.col;\n    const val = step.val;\n\n    switch (step.op) {\n      case 'equals':       return table.where(col).equals(val).toArray();\n      case 'notEqual':     return table.where(col).notEqual(val).toArray();\n      case 'above':        return table.where(col).above(val).toArray();\n      case 'aboveOrEqual': return table.where(col).aboveOrEqual(val).toArray();\n      case 'below':        return table.where(col).below(val).toArray();\n      case 'belowOrEqual': return table.where(col).belowOrEqual(val).toArray();\n      case 'between':      return table.where(col).between(val[0], val[1], true, true).toArray();\n      case 'anyOf':        return table.where(col).anyOf(val).toArray();\n      case 'noneOf':       return table.where(col).noneOf(val).toArray();\n      case 'startsWith':   return table.where(col).startsWith(val).toArray();\n      default:\n        throw new SqlValidationError(`Unsupported Dexie op: \"${step.op}\"`);\n    }\n  }\n\n  // ─── JS row predicate ─────────────────────────────────────────────────────\n\n  private _matchStep(row: any, step: PlanStep): boolean {\n    const rv = row[step.col];\n    const v  = step.val;\n    switch (step.op) {\n      case 'equals':       return rv === v;\n      case 'notEqual':     return rv !== v;\n      case 'above':        return rv > v;\n      case 'aboveOrEqual': return rv >= v;\n      case 'below':        return rv < v;\n      case 'belowOrEqual': return rv <= v;\n      case 'between':      return rv >= v[0] && rv <= v[1];\n      case 'anyOf':        return (v as any[]).includes(rv);\n      case 'noneOf':       return !(v as any[]).includes(rv);\n      case 'startsWith':   return typeof rv === 'string' && rv.startsWith(v);\n      default:             return true;\n    }\n  }\n\n  // ─── Table accessor ───────────────────────────────────────────────────────\n\n  private async _getTable(tableName: string): Promise<Table<any, any>> {\n    const t = await firstValueFrom(this._dbManager.getDatabaseTable(tableName));\n    if (!t) throw new SqlValidationError(`Table \"${tableName}\" not found or not accessible`);\n    return t;\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { from, Observable } from 'rxjs';\nimport { DexieSqlOptions } from './models/sql-options.model';\nimport { SqlParser } from './sql-parser';\nimport { SchemaValidator } from './schema-validator';\nimport { QueryPlanner } from './query-planner';\nimport { DexieQueryExecutor } from './dexie-query-executor';\n\n@Injectable({ providedIn: 'root' })\nexport class DexieSqlService {\n  private readonly _parser    = new SqlParser();\n  private readonly _validator = inject(SchemaValidator);\n  private readonly _planner   = new QueryPlanner();\n  private readonly _executor  = inject(DexieQueryExecutor);\n\n  /**\n   * Execute a MySQL-syntax SQL SELECT string against the DexieJS IndexedDB database.\n   * Returns an Observable that emits the result array and completes, or errors with\n   * SqlParseError / SqlValidationError if the query is invalid.\n   */\n  query(sql: string, options: DexieSqlOptions = {}): Observable<any[]> {\n    return from(this._run(sql, options));\n  }\n\n  private async _run(sql: string, options: DexieSqlOptions): Promise<any[]> {\n    const parsed    = this._parser.parse(sql);\n    const validated = await this._validator.validate(parsed, options);\n    const plan      = this._planner.plan(validated, options);\n    return this._executor.execute(plan);\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\";\nexport * from \"./SQL-DixieJS service/index\";\n\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      // ponytail: only same-origin relative paths get credentials.\n      // Absolute URLs (http(s)://) are cross-origin and ACAO:* servers reject credentialed requests.\n      // Ceiling: protocol-relative '//host/path' URLs slip past this and would still send cookies.\n      if (!/^https?:\\/\\//i.test(req.url)) {\n        req = req.clone({ withCredentials: true });\n      }\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    // ponytail: skip custom headers for absolute cross-origin URLs (e.g. raw.githubusercontent.com).\n    // Those static hosts reject preflight OPTIONS; app API headers are only meaningful for same-origin calls.\n    // Ceiling: protocol-relative '//host/path' URLs would still get the headers.\n    if (/^https?:\\/\\//i.test(request.url)) {\n      return next.handle(request);\n    }\n\n    // Don't override Content-Type for FormData (file uploads) — let browser set multipart/form-data\n    const skipContentType = request.body instanceof FormData;\n\n    request = request.clone({\n      setHeaders: {\n        ...(skipContentType ? {} : { '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-display';\n\nimport { DownloadLabels } from './models/download-labels-model';\nimport { HTTPManagerService } from '../../../services/request-manager-services/http-manager.service';\nimport { ApiRequest } from '../../../services/request-manager-state-service/models/api-request.model';\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.requestForm.get('adapter')?.value || undefined\n    apiOptions.mapper = this.requestForm.get('mapper')?.value || undefined\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 [formGroup]=\"requestForm\" style=\"display: flex; gap: 1rem; margin-bottom: 1rem;\">\n    <mat-form-field appearance=\"outline\" style=\"flex:1\">\n      <mat-label>Path</mat-label>\n      <input matInput formControlName=\"path\" placeholder=\"ai/\">\n    </mat-form-field>\n\n    <mat-form-field appearance=\"outline\" style=\"flex:1\">\n      <mat-label>Adapter</mat-label>\n      <mat-select formControlName=\"adapter\">\n        <mat-option [value]=\"null\">None</mat-option>\n        @for (item of sampleAdaptors; track item.label) {\n          <mat-option [value]=\"item.value\">{{ item.label }}</mat-option>\n        }\n      </mat-select>\n    </mat-form-field>\n\n    <mat-form-field appearance=\"outline\" style=\"flex:1\">\n      <mat-label>Mapper</mat-label>\n      <mat-select formControlName=\"mapper\">\n        <mat-option [value]=\"null\">None</mat-option>\n        @for (item of sampleMappers; track item.label) {\n          <mat-option [value]=\"item.value\">{{ item.label }}</mat-option>\n        }\n      </mat-select>\n    </mat-form-field>\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 } from '../../../services/request-manager-state-service/http-manager-state.store';\nimport { ApiRequest } from '../../../services/request-manager-state-service/models/api-request.model';\nimport { RequestOptions } from '../../../services/request-manager-state-service/models/request-options.model';\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(options?: RequestOptions) {\n\n    // const headers = {\n    //   auth: \"sample-auth-token\"\n    // }\n    // const sampleOptions = RequestOptions.adapt({ path: [\"id\", 12], headers, sample: true })\n    this.fetchRecords(options)\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(options?: RequestOptions) {\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(options)\n\n  }\n\n  sendWsMessage(channel: string, method: string, path: (string | number)[]) {\n    const message = {\n      sessionId: null,\n      content: {\n        method,\n        path\n      }\n    }\n    const channels = channel ? [channel] : undefined\n    this.wsMessaging(message, channels)\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 { DatabaseManagerService } from '../../services/database-manager-service/database.manager.service';\nimport { FormBuilder, Validators, FormArray, FormControl } 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 } from '../../services/request-manager-services/http-manager.service';\nimport { ApiRequest } from '../../services/request-manager-state-service/models/api-request.model';\nimport { StreamType } from '../../services/request-manager-state-service/models/stream-type.enum';\nimport { RequestOptions } from '../../services/request-manager-state-service/models/request-options.model';\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  databaseManagerService = inject(DatabaseManagerService)\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  getRecordLabel(item: any): string {\n    if (!item || typeof item !== 'object') {\n      return ''\n    }\n\n    return this.normalizeLabelValue(item.name) || this.normalizeLabelValue(item.first_name)\n  }\n\n  private normalizeLabelValue(value: any): string {\n    if (typeof value === 'string') {\n      return value\n    }\n\n    if (typeof value === 'number' || typeof value === 'boolean') {\n      return String(value)\n    }\n\n    return ''\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  @ViewChild(\"DBState\", { static: true }) DBState: any\n\n  questionControl = this.fb.control(\"\", [Validators.required])\n\n  requestType = ''\n\n  prompts: string[] = []\n\n  AIType = 0\n\n  wsMessageForm = this.fb.group({\n    channel: [''],\n    method: ['UPDATE', [Validators.required]],\n    path: ['']\n  })\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: ['clients'],\n      expiresIn: ['1m'],\n      ignoreQueryParams: [''],\n      queryParamsExpiresIn: ['never'],\n      deltaSync: [false],\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 deltaSyncControl() {\n    return this.requestForm.get(\"database\")?.get(\"deltaSync\") as FormControl\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  private parsePathInput(pathInput?: string): any[] {\n    const raw = typeof pathInput === 'string' ? pathInput.trim() : ''\n\n    if (!raw) {\n      return []\n    }\n\n    const [rawPath = '', rawQuery = ''] = raw.split('?', 2)\n    const pathSegments = rawPath\n      .split('/')\n      .map((segment) => segment.trim())\n      .filter((segment) => segment.length > 0)\n      .map((segment) => decodeURIComponent(segment))\n\n    if (!rawQuery) {\n      return pathSegments\n    }\n\n    const searchParams = new URLSearchParams(rawQuery)\n    const queryObject: Record<string, any> = {}\n\n    searchParams.forEach((value, key) => {\n      const normalizedKey = key.trim()\n\n      if (!normalizedKey) {\n        return\n      }\n\n      const normalizedValue = this.normalizeQueryValue(value)\n\n      if (Object.prototype.hasOwnProperty.call(queryObject, normalizedKey)) {\n        const currentValue = queryObject[normalizedKey]\n        queryObject[normalizedKey] = Array.isArray(currentValue)\n          ? [...currentValue, normalizedValue]\n          : [currentValue, normalizedValue]\n        return\n      }\n\n      queryObject[normalizedKey] = normalizedValue\n    })\n\n    return Object.keys(queryObject).length > 0\n      ? [...pathSegments, queryObject]\n      : pathSegments\n  }\n\n  private normalizeQueryValue(value: string): string | number | boolean {\n    const trimmedValue = value.trim()\n    const lowerValue = trimmedValue.toLowerCase()\n\n    if (lowerValue === 'true') {\n      return true\n    }\n\n    if (lowerValue === 'false') {\n      return false\n    }\n\n    if (trimmedValue !== '' && !Number.isNaN(Number(trimmedValue))) {\n      return Number(trimmedValue)\n    }\n\n    return trimmedValue\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 = this.parsePathInput(requestParams.path || '')\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.requestForm.get('adapter')?.value || undefined\n    currentOptions.mapper = this.requestForm.get('mapper')?.value || undefined\n    const apiOptions = ApiRequest.adapt({ ...currentOptions, path: pathReq })\n\n    return { apiOptions: apiOptions, path: pathReq }\n\n  }\n\n  private parseIgnoreParams(value?: string): string[] {\n    if (!value || typeof value !== 'string') {\n      return []\n    }\n\n    return value\n      .split(',')\n      .map((item) => item.trim())\n      .filter((item) => item.length > 0)\n  }\n\n  private buildDemoRequestOptions(path: any[], headers: any): RequestOptions {\n    const dbValue: any = this.database || {}\n    const isDbEnabled = !!this.DBState?.checked\n    const parsedIgnoreQueryParams = this.parseIgnoreParams(dbValue?.ignoreQueryParams)\n\n    return RequestOptions.adapt({\n      path,\n      headers,\n      forceRefresh: false,\n      ignoreQueryParams: isDbEnabled && parsedIgnoreQueryParams.length > 0 ? parsedIgnoreQueryParams : undefined,\n      queryParamsExpiresIn: isDbEnabled ? dbValue?.queryParamsExpiresIn : undefined,\n    })\n  }\n\n  onSetStateOptions() {\n\n    const dbValue = this.database\n    // console.log('[onSetStateOptions] Called, checking form values:', {\n    //   isValid: this.isValid,\n    //   database: dbValue,\n    //   hasTable: !!dbValue?.table,\n    //   tableValue: dbValue?.table,\n    //   dataType: this.dataType\n    // })\n\n    if(!this.isValid) {\n      // console.log('[onSetStateOptions] Form invalid, aborting')\n      return\n    }\n\n    const reqParams = this.compileRequest()\n\n    const db = DatabaseStorage.adapt(dbValue)\n\n    const type = this.dataType === \"ARRAY\" ? DataType.ARRAY : DataType.OBJECT\n    // console.log('[onSetStateOptions] Calling setAPIOptions with:', { db, type, hasTable: !!db?.table })\n    this.stateManagerDemoService.setAPIOptions(reqParams.apiOptions, type, db)\n\n    this.requestForm.markAsPristine()\n  }\n\n  onClearRecords() {\n    this.stateManagerDemoService.clearRecords()\n  }\n\n  deleteDatabase() {\n    this.databaseManagerService.clearDatabase()\n  }\n\n  onGetRequest() {\n    this.requestType = 'GET'\n    const reqParams = this.compileRequest()\n    const requestOptions = this.buildDemoRequestOptions(reqParams.path, reqParams.apiOptions.headers)\n    this.stateManagerDemoService.getClients(requestOptions)\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    const streamOptions = RequestOptions.adapt({\n      ...this.buildDemoRequestOptions(reqParams.path, reqParams.apiOptions.headers),\n    })\n\n    // console.log('[COMPONENT] Calling streamRequest...')\n    this.stateManagerDemoService.streamRequest(streamOptions)\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  onSendWsMessage() {\n    if (this.wsMessageForm.invalid) {\n      return\n    }\n\n    const formValue = this.wsMessageForm.value\n    const channel = formValue.channel || ''\n    const method = formValue.method || 'UPDATE'\n    const pathStr = formValue.path || ''\n\n    const pathArray = pathStr\n      .split('/')\n      .map(s => s.trim())\n      .filter(s => s.length > 0)\n\n    this.stateManagerDemoService.sendWsMessage(channel, method, pathArray)\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 style=\"display: flex; gap: .5rem\">\n      <mat-form-field appearance=\"outline\" style=\"flex:1\">\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        <div style=\"margin-top: 1rem;\">\n          <mat-slide-toggle [formControl]=\"deltaSyncControl\" [disabled]=\"!DBState.checked\">Delta Sync</mat-slide-toggle>\n        </div>\n        @if (DBState.checked) {\n          <div style=\"margin-top: 1rem\" formGroupName=\"database\">\n            <div style=\"display: flex; gap: .5rem;\">\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 style=\"display: flex; gap: .5rem;\">\n              <mat-form-field appearance=\"outline\" style=\"flex:1\">\n                <mat-label>Ignore Params (comma delimited)</mat-label>\n                <input matInput placeholder=\"sort,active\" formControlName=\"ignoreQueryParams\" value=\"\">\n              </mat-form-field>\n              <mat-form-field appearance=\"outline\">\n                <mat-label>Watch Param Expiry</mat-label>\n                <mat-select formControlName=\"queryParamsExpiresIn\">\n                  <mat-option value=\"never\">Never</mat-option>\n                  <mat-option value=\"10s\">10 Seconds</mat-option>\n                  <mat-option value=\"30s\">30 Seconds</mat-option>\n                  <mat-option value=\"1m\">1 Minute</mat-option>\n                  <mat-option value=\"5m\">5 Minutes</mat-option>\n                  <mat-option value=\"10m\">10 Minutes</mat-option>\n                  <mat-option value=\"1h\">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: .5rem; display: flex; gap: .5rem;\">\n              <button mat-stroked-button color=\"warn\" (click)=\"onClearRecords()\">Clear Table</button>\n              <button mat-stroked-button color=\"warn\" (click)=\"deleteDatabase()\">Delete Database</button>\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\">\n              <mat-option [value]=\"\">None</mat-option>\n              @for (item of data; track $index) {\n                <mat-option [value]=\"item\">\n                    {{ getRecordLabel(item) | 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 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\">WebSocket Message to Channel</h2>\n    </div>\n\n    <div [formGroup]=\"wsMessageForm\" style=\"margin-top: 1rem; display: flex; gap: 1rem; align-items: center;\">\n      <mat-form-field appearance=\"outline\" style=\"flex:1\">\n        <mat-label>Channel (optional)</mat-label>\n        <input matInput placeholder=\"ai/tests or leave empty for state channel\" formControlName=\"channel\">\n      </mat-form-field>\n\n      <mat-form-field appearance=\"outline\">\n        <mat-label>Method</mat-label>\n        <mat-select formControlName=\"method\">\n          <mat-option value=\"UPDATE\">UPDATE</mat-option>\n          <mat-option value=\"CREATE\">CREATE</mat-option>\n          <mat-option value=\"DELETE\">DELETE</mat-option>\n          <mat-option value=\"GET\">GET</mat-option>\n        </mat-select>\n      </mat-form-field>\n\n      <mat-form-field appearance=\"outline\" style=\"flex:2\">\n        <mat-label>Path (/ delimited)</mat-label>\n        <input matInput placeholder=\"ai/tests/63\" formControlName=\"path\">\n      </mat-form-field>\n\n      <button mat-raised-button (click)=\"onSendWsMessage()\" color=\"primary\" class=\"btn\">Send Message</button>\n    </div>\n\n    <div style=\"margin-top: 1rem; font-size: 0.85em; color: #666;\">\n      <p>Sends a WebSocket message to trigger a fetchRecord operation on the specified channel. The message will trigger the state manager to fetch and update the database record.</p>\n      <ul>\n        <li><strong>Channel:</strong> Leave empty to use the configured state channel (SYS-prefixed), or specify a custom channel name</li>\n        <li><strong>Method:</strong> The CRUD operation type (UPDATE, CREATE, DELETE, GET)</li>\n        <li><strong>Path:</strong> The resource path (e.g., \"ai/tests/63\" for record 63)</li>\n      </ul>\n    </div>\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.displayError = true\n    apiOptions.path = []\n    apiOptions.server = this.server\n    apiOptions.adapter = this.requestForm.get('adapter')?.value || undefined\n    apiOptions.mapper = this.requestForm.get('mapper')?.value || undefined\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 } from '../../models/config-options.model';\nimport { LocalStorageOptions } from '../../models/config-local-storage-options.model';\nimport { UtilsService } from '../../services/utils/utils.service';\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      &#123;<br>\n        provide: APP_ID,<br>\n        useValue: \"056991ac-3537-43ab-b5b9-83edf6554eff\",<br>\n      &#125;\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 } from '../../../services/request-manager-state-service/http-manager-state.store';\nimport { ApiRequest } from '../../../services/request-manager-state-service/models/api-request.model';\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 { RandomPaletteColor } from \"../../../services/utils/random-color.utils\"\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 } 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, OnChanges, SimpleChanges } 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, OnChanges {\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.id === userItem?.id\n  }\n\n  getUserLabel = (user: any) => {\n    const name = user.name || user.ldap || 'Anonymous';\n    const shortId = user.id ? user.id.substring(0, 8) : '';\n    return shortId ? `${name} (${shortId})` : name;\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  ngOnChanges(changes: SimpleChanges) {\n    if (changes['jwtToken'] && !changes['jwtToken'].firstChange) {\n      this.stateDataRequestService.updateConnection(this.server, this.wsServer, this.jwtToken, this.user, this.path);\n      this.stateDataRequestService.getData()\n    }\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    const firstName = this.user?.name?.split(' ')[0] || 'Demo'\n    const lastName = this.user?.name?.split(' ').slice(1).join(' ') || 'User'\n    const email = this.user?.email || `demo.user.${num}@example.com`\n\n    const newData = {\n      \"spiffe\": `example.com/developer/${num}`,\n      \"id\": data?.[0]?.id || num,\n      \"last_name\": lastName,\n      \"email\": email,\n      \"first_name\": firstName\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              {{ getUserLabel(user) }}\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      console.log('📋 Fetching channels after connection...');\n      this.messageService.getAllChannels();\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, OnChanges, SimpleChanges } from '@angular/core';\nimport { FormBuilder, FormControl } from '@angular/forms';\n\nimport { HTTPManagerService } from '../../services/request-manager-services/http-manager.service';\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, OnChanges {\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  retryCount$ = this.stateService.wsRetryCount$\n  maxRetries$ = this.stateService.wsMaxRetries$\n\n  connectionStatus$ = this.stateService.connectionStatus$\n  isConnecting$ = this.stateService.isConnecting$\n  connectionError$ = this.stateService.connectionError$\n\n  data$ = this.stateService.data$;\n  isPending$ = this.stateService.isPending$;\n\n  wsServerControl = new FormControl('');\n\n  ngOnInit() {\n    this.wsServerControl.setValue(this.wsServer ?? '');\n    this.stateService.updateConnection(this.server, this.wsServer, this.jwtToken, this.user, this.path);\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['wsServer'] && !changes['wsServer'].firstChange && this.wsServerControl.pristine) {\n      this.wsServerControl.setValue(changes['wsServer'].currentValue ?? '');\n    }\n    if (changes['jwtToken'] && !changes['jwtToken'].firstChange) {\n      this.stateService.updateConnection(this.server, this.wsServerControl.value ?? '', this.jwtToken, this.user, this.path);\n    }\n  }\n\n  onConnect() {\n    this.stateService.updateConnection(this.server, this.wsServerControl.value ?? '', this.jwtToken, this.user, this.path);\n  }\n\n  onDisconnect() {\n    this.httpManagerService.disconnect();\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 if (connectionError$ | async) {\n      <span style=\"color: red;\">{{ connectionError$ | async }}</span>\n    } @else if (isConnecting$ | async) {\n      <span style=\"color: orange;\">Connecting... {{ retryCount$ | async }} / {{ maxRetries$ | async }}</span>\n    } @else {\n      <span style=\"color: red;\">Disconnected</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 ((isConnecting$ | async) && !(connectionStatus$ | async) && !(connectionError$ | async)) {\n      <div style=\"display: flex; align-items: center; gap: 1rem; padding: 0.5rem; background: #e3f2fd; border-radius: 4px; margin-bottom: 0.5rem;\">\n        <span>Connecting to WebSocket...</span>\n        <mat-progress-bar mode=\"indeterminate\" style=\"flex: 1;\"></mat-progress-bar>\n      </div>\n    }\n\n    @if (connectionError$ | async; as errorMsg) {\n      <div style=\"padding: 0.75rem 1rem; background: #fdecea; color: #b00020; border-left: 4px solid #b00020; border-radius: 2px; margin-bottom: 0.5rem;\">\n        {{ errorMsg }}\n      </div>\n    }\n\n    @if (!(connectionStatus$ | async) && !(isConnecting$ | async)) {\n      <div style=\"display: flex; align-items: center; gap: 0.75rem; padding: 0.75rem 0; margin-bottom: 0.5rem;\">\n        <mat-form-field appearance=\"outline\" style=\"flex: 1; margin-bottom: -1.25em;\">\n          <mat-label>WebSocket URL</mat-label>\n          <input matInput [formControl]=\"wsServerControl\" placeholder=\"ws://localhost:3000\" autocomplete=\"off\">\n        </mat-form-field>\n        <button mat-flat-button class=\"button-medium\" (click)=\"onConnect()\">Connect</button>\n      </div>\n    }\n\n    @if ((connectionStatus$ | async)) {\n      <div style=\"display: flex; justify-content: flex-end; margin-bottom: 0.5rem;\">\n        <button mat-stroked-button class=\"button-medium\" (click)=\"onDisconnect()\">Disconnect</button>\n      </div>\n    }\n\n    <mat-tab-group animationDuration=\"0ms\" [selectedIndex]=\"1\">\n\n      <mat-tab label=\"WS - Data Control\" [disabled]=\"!(connectionStatus$ | async)\">\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\" [disabled]=\"!(connectionStatus$ | async)\">\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\" [disabled]=\"!(connectionStatus$ | async)\">\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 } from '../../../services/local-storage-manager-service/models/setting-options.model';\nimport { StorageType } from '../../../services/local-storage-manager-service/models/storage-type.enum';\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/utils/encryption/random';\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';\nimport { DexieSqlService } from '../../services/SQL-DixieJS service/dexie-sql.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  sql = inject(DexieSqlService);\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  // ── SQL Query section ────────────────────────────────────────────────────\n  sqlQuery        = 'SELECT * FROM sample_table';\n  sqlResults:     any[]    = [];\n  sqlResultCols:  string[] = [];\n  sqlError:       string | null = null;\n  sqlLoading      = false;\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  runSqlQuery() {\n    const q = (this.sqlQuery ?? '').trim();\n    if (!q) return;\n\n    this.sqlLoading = true;\n    this.sqlError   = null;\n    this.sqlResults = [];\n    this.sqlResultCols = [];\n\n    this.sql.query(q).subscribe({\n      next: rows => {\n        this.sqlResults    = rows;\n        this.sqlResultCols = rows.length > 0 ? Object.keys(rows[0]) : [];\n        this.sqlLoading    = false;\n      },\n      error: err => {\n        this.sqlError   = err?.message ?? String(err);\n        this.sqlLoading = false;\n      }\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  <!-- ── SQL Query Section ─────────────────────────────────────────────── -->\n  <mat-divider style=\"margin: 2rem 0;\"></mat-divider>\n\n  <h3 style=\"margin-bottom: 1rem;\">SQL Query with DexieJS</h3>\n\n  <div style=\"display: flex; gap: 1rem; align-items: flex-start;\">\n    <mat-form-field style=\"flex: 1;\" appearance=\"outline\">\n      <mat-label>SQL Query</mat-label>\n      <textarea\n        matInput\n        [(ngModel)]=\"sqlQuery\"\n        rows=\"3\"\n        placeholder=\"e.g. SELECT * FROM sample_table WHERE age > 20\"\n        (keydown.control.enter)=\"runSqlQuery()\"\n      ></textarea>\n    </mat-form-field>\n  </div>\n\n  <div style=\"display: flex;\">\n    <div style=\"flex:1\"></div>\n    <button\n      mat-flat-button\n      color=\"primary\"\n      style=\"margin-top: 4px;\"\n      [disabled]=\"sqlLoading || !sqlQuery.trim()\"\n      (click)=\"runSqlQuery()\"\n    >\n      {{ sqlLoading ? 'Running…' : 'Execute' }}\n    </button>\n  </div>\n\n  <div style=\"margin-top: 1rem;\">\n    <mat-divider></mat-divider>\n  </div>\n\n  <!-- Error -->\n  <div *ngIf=\"sqlError\" style=\"color: #d32f2f; margin: 0.5rem 0 1rem; font-size: 0.875rem;\">\n    <mat-icon style=\"vertical-align: middle; font-size: 16px; height: 16px; width: 16px;\">error</mat-icon>\n    {{ sqlError }}\n  </div>\n\n  <!-- Results table (dynamic columns) -->\n  <div *ngIf=\"!sqlLoading && sqlResults.length > 0\" class=\"table-container\" style=\"margin-top: 1rem;\">\n    <div>\n      {{ sqlResults | json }}\n    </div>\n    <p style=\"font-size: 0.8rem; color: #666; margin-top: 0.5rem;\">\n      {{ sqlResults.length }} row{{ sqlResults.length === 1 ? '' : 's' }} returned\n    </p>\n  </div>\n\n  <!-- Empty state -->\n  <p *ngIf=\"!sqlLoading && !sqlError && sqlResults.length === 0 && sqlQuery.trim()\"\n     style=\"color: #888; font-size: 0.875rem; margin-top: 0.5rem;\">\n    No results to display. Execute a query above.\n  </p>\n\n</div>\n","export interface UploadStateInterface {\n  selectedFiles: File[]\n  isUploading: boolean\n  progress: number\n  currentFile: string | null\n  errorMessage: string | null\n  successMessage: string | null\n}\n\nexport class UploadStateModel implements UploadStateInterface {\n  constructor(\n    public selectedFiles: File[] = [],\n    public isUploading: boolean = false,\n    public progress: number = 0,\n    public currentFile: string | null = null,\n    public errorMessage: string | null = null,\n    public successMessage: string | null = null\n  ) {}\n\n  static adapt(item?: any): UploadStateModel {\n    return new UploadStateModel(\n      Array.isArray(item?.selectedFiles) ? item.selectedFiles : [],\n      item?.isUploading ?? false,\n      item?.progress ?? 0,\n      item?.currentFile ?? null,\n      item?.errorMessage ?? null,\n      item?.successMessage ?? null\n    )\n  }\n}\n","import { Component, OnInit, OnDestroy, inject } from '@angular/core'\nimport { ApiRequest, HTTPManagerService } from '../../'\nimport { ToastMessageDisplayService } from 'toast-message-display'\nimport { ToastColors } from 'toast-message-display'\nimport { UploadStateModel } from './models/upload-state.model'\n\n@Component({\n  selector: 'lib-upload-demo',\n  templateUrl: './upload-demo.component.html',\n  styleUrls: ['./upload-demo.component.scss'],\n  standalone: false\n})\nexport class UploadDemoComponent implements OnInit, OnDestroy {\n\n  private httpManager = inject(HTTPManagerService)\n  private toastService = inject(ToastMessageDisplayService)\n\n  uploadState = UploadStateModel.adapt()\n\n  allowedTypes = ['image/jpeg', 'image/png']\n  maxFileSize = 40 * 1024 * 1024 // 40MB\n\n  ngOnInit(): void {\n    // Initialize component\n  }\n\n  ngOnDestroy(): void {\n    // Clean up subscriptions\n  }\n\n  onFileSelected(event: Event): void {\n    const input = event.target as HTMLInputElement\n    const files = input.files\n\n    if (!files || files.length === 0) {\n      return\n    }\n\n    this.uploadState.selectedFiles = []\n    this.uploadState.errorMessage = null\n\n    for (let i = 0; i < files.length; i++) {\n      const file = files[i]\n      const validationError = this.validateFile(file)\n\n      if (validationError) {\n        this.uploadState.errorMessage = validationError\n        continue\n      }\n\n      this.uploadState.selectedFiles.push(file)\n    }\n\n    if (this.uploadState.selectedFiles.length === 0 && !this.uploadState.errorMessage) {\n      this.uploadState.errorMessage = 'Please select at least one valid file (JPG or PNG)'\n    }\n  }\n\n  validateFile(file: File): string | null {\n    // Check file type\n    if (!this.allowedTypes.includes(file.type)) {\n      return `File \"${file.name}\" is not a valid type. Only JPG and PNG files are allowed.`\n    }\n\n    // Check file size\n    if (file.size > this.maxFileSize) {\n      return `File \"${file.name}\" exceeds maximum size of 10MB.`\n    }\n\n    return null\n  }\n\n  clearSelection(): void {\n    this.uploadState.selectedFiles = []\n    this.uploadState.errorMessage = null\n    this.uploadState.successMessage = null\n    this.uploadState.progress = 0\n    this.uploadState.currentFile = null\n  }\n\n  startUpload(): void {\n    if (this.uploadState.selectedFiles.length === 0) {\n      this.uploadState.errorMessage = 'Please select at least one file to upload'\n      return\n    }\n\n    if (this.uploadState.errorMessage) {\n      return\n    }\n\n    this.uploadState.isUploading = true\n    this.uploadState.progress = 0\n    this.uploadState.errorMessage = null\n    this.uploadState.successMessage = null\n\n    const options = ApiRequest.adapt({\n      server: 'gtlcApi',\n      path: ['uploader'],\n      uploadFieldName: 'files',\n      allowedTypes: this.allowedTypes,\n      maxFileSize: this.maxFileSize\n    })\n\n    this.httpManager.uploadRequest<any>(this.uploadState.selectedFiles, options, ['upload'])\n    .subscribe({\n      next: (response) => {\n        this.uploadState.progress = 100\n        this.uploadState.successMessage = `Successfully uploaded ${this.uploadState.selectedFiles.length} file(s)`\n        this.toastService.toastMessage({\n          message: this.uploadState.successMessage || '',\n          color: ToastColors.SUCCESS\n        })\n        this.uploadState.isUploading = false\n      },\n      error: (error: any) => {\n        this.uploadState.errorMessage = error.message || 'Upload failed. Please try again.'\n        this.toastService.toastMessage({\n          message: this.uploadState.errorMessage || '',\n          color: ToastColors.ERROR\n        })\n        this.uploadState.isUploading = false\n        this.uploadState.progress = 0\n      }\n    })\n  }\n\n  getFileSizeString(size: number): string {\n    if (size < 1024) {\n      return `${size} bytes`\n    } else if (size < 1024 * 1024) {\n      return `${(size / 1024).toFixed(1)} KB`\n    } else {\n      return `${(size / (1024 * 1024)).toFixed(1)} MB`\n    }\n  }\n}\n","<div class=\"upload-demo-container\">\n  <h2>File Upload Demo</h2>\n  <p class=\"demo-description\">Upload multiple JPG or PNG files with progress tracking</p>\n\n  <!-- Upload Button & File Input -->\n  <div class=\"upload-controls\">\n    <button\n      mat-raised-button\n      color=\"primary\"\n      (click)=\"fileInput.click()\"\n      [disabled]=\"uploadState.isUploading\"\n      class=\"upload-button\">\n      <span class=\"material-icons\">upload_file</span>\n      Select Files\n    </button>\n    <input\n      #fileInput\n      type=\"file\"\n      multiple\n      accept=\"image/jpeg,image/png\"\n      (change)=\"onFileSelected($event)\"\n      [disabled]=\"uploadState.isUploading\"\n      hidden>\n\n    <button\n      mat-button\n      color=\"warn\"\n      (click)=\"clearSelection()\"\n      [disabled]=\"uploadState.selectedFiles.length === 0 || uploadState.isUploading\"\n      class=\"clear-button\">\n      Clear\n    </button>\n  </div>\n\n  <!-- Selected Files Display -->\n  <div class=\"selected-files\" *ngIf=\"uploadState.selectedFiles.length > 0\">\n    <h3>Selected Files ({{uploadState.selectedFiles.length}})</h3>\n    <ul class=\"file-list\">\n      <li *ngFor=\"let file of uploadState.selectedFiles\" class=\"file-item\">\n        <span class=\"file-icon\">\n          <span class=\"material-icons\">insert_drive_file</span>\n        </span>\n        <span class=\"file-name\">{{file.name}}</span>\n        <span class=\"file-size\">{{getFileSizeString(file.size)}}</span>\n        <span class=\"file-status valid\">✓</span>\n      </li>\n    </ul>\n  </div>\n\n  <!-- Validation Errors -->\n  <div class=\"error-message\" *ngIf=\"uploadState.errorMessage && !uploadState.isUploading\">\n    <span class=\"material-icons\">error</span>\n    <span>{{uploadState.errorMessage}}</span>\n  </div>\n\n  <!-- Progress Bar -->\n  <div class=\"progress-container\" *ngIf=\"uploadState.isUploading\">\n    <div class=\"progress-header\">\n      <span>Uploading...</span>\n      <span class=\"progress-percentage\">{{uploadState.progress}}%</span>\n    </div>\n    <mat-progress-bar\n      mode=\"determinate\"\n      [value]=\"uploadState.progress\"\n      color=\"primary\">\n    </mat-progress-bar>\n    <div class=\"current-file\" *ngIf=\"uploadState.currentFile\">\n      Current: {{uploadState.currentFile}}\n    </div>\n  </div>\n\n  <!-- Success Message -->\n  <div class=\"success-message\" *ngIf=\"uploadState.successMessage\">\n    <span class=\"material-icons\">check_circle</span>\n    <span>{{uploadState.successMessage}}</span>\n  </div>\n\n  <!-- Upload Action Button -->\n  <div class=\"upload-actions\" *ngIf=\"uploadState.selectedFiles.length > 0 && !uploadState.isUploading\">\n    <button\n      mat-raised-button\n      color=\"primary\"\n      (click)=\"startUpload()\"\n      [disabled]=\"uploadState.selectedFiles.length === 0 || uploadState.errorMessage !== null\"\n      class=\"start-upload-button\">\n      Upload {{uploadState.selectedFiles.length}} File{{uploadState.selectedFiles.length > 1 ? 's' : ''}}\n    </button>\n  </div>\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 = ''\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: \"File Upload Demo\", value: 'file_upload_demo', new: true, divider: true },\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 ('file_upload_demo') {\n    <p>\n      <lib-upload-demo></lib-upload-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 } from '../../models/config-options.model';\nimport { LocalStorageOptions } from '../../models/config-local-storage-options.model';\nimport { UtilsService } from '../../services/utils/utils.service';\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      &#123;<br>\n        provide: APP_ID,<br>\n        useValue: \"056991ac-3537-43ab-b5b9-83edf6554eff\",<br>\n      &#125;\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/config-options.model';\nimport { CONFIG_SETTINGS_TOKEN } from './models/config-token.model';\nimport { HTTPManagerService } from './services/request-manager-services/http-manager.service';\nimport { LocalStorageManagerService } from './services/local-storage-manager-service/local-storage-manager.service';\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';\nimport { UploadDemoComponent } from './http-request-services-demo/upload-demo/upload-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    UploadDemoComponent,\n  ],\n  exports: [\n    HttpRequestServicesDemoComponent,\n    UploadDemoComponent,\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\nexport * from './lib/http-request-services-demo/upload-demo/upload-demo.component';\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","i1.DownloadFileComponent","i2","ClientInfo","AIPrompt","ClientInfoMapper","i12.FileDownloaderComponent","map","tap","i5","i6","i7","i8","i9","i10","i11","i12","i13","switchMap","startWith","i3","i4","distinctUntilChanged","filter","takeUntil","i8.WsDataControlComponent","i9.WsMessagingComponent","i10.WsNotificationsComponent","i11.WsAiMessagingComponent","i12.WsChatsComponent","i6.RequestManagerBasicDemoComponent","i7.RequestManagerStateDemoComponent","i8.RequestManagerDemoComponent","i9.LocalStorageDemoComponent","i10.RequestManagerWsDemoComponent","i11.StoreStateManagerDemoComponent","i12.DatabaseDataDemoComponent","i13.UploadDemoComponent","i11.FileDownloaderComponent"],"mappings":"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"}