{"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-progress.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-output.model.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/rxjs-operators/request-streaming.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/websocket-service/websocket-connection.service.ts","../../../projects/http-request-manager/src/lib/services/ws-manager-service/websocket-manager.service.ts","../../../projects/http-request-manager/src/lib/services/ws-manager-service/channel-presence.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-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/database-manager-service/db.storage.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/database.manager.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/http-manager-state.store.ts","../../../projects/http-request-manager/src/lib/services/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-message.service.ts","../../../projects/http-request-manager/src/lib/services/ws-manager-service/index.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/models/state-storage-options.model.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/http-request-services-demo/store-state-signals-demo/store-state-signals-demo.component.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-demo/models/sample-ai-prompt.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-state-demo/request-signals-state-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-state-demo/request-signals-state-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/ws-signals-demo/ws-signals-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/ws-signals-demo/ws-signals-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/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/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","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","/**\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","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 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 { 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 { InvalidFileInfoModel, UploadValidationErrorModel } from '../../models';\n\nexport class RequestService {\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 { 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 } 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 WebSocketConnectionService {\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$ = WebSocketConnectionService.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$ = WebSocketConnectionService.retryCountSubject.asObservable();\n  private static maxRetriesSubject = new BehaviorSubject<number>(10);\n  public maxRetries$ = WebSocketConnectionService.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> = WebSocketConnectionService.messages.asObservable();\n\n  private static connectionStatus = new BehaviorSubject<boolean>(false);\n  public connectionStatus$: Observable<boolean> = WebSocketConnectionService.connectionStatus.asObservable();\n\n  private static connectionError = new BehaviorSubject<string | null>(null);\n  public connectionError$: Observable<string | null> = WebSocketConnectionService.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>> = WebSocketConnectionService.subscribedChannels.asObservable();\n\n  // Public method to get current subscribed channels\n  public static getSubscribedChannels(): Set<string> {\n    return WebSocketConnectionService.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(WebSocketConnectionService.subscribedChannels.value);\n    current.add(channelName);\n    WebSocketConnectionService.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> = WebSocketConnectionService.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    WebSocketConnectionService.retrySubscription?.unsubscribe();\n    WebSocketConnectionService.retrySubscription = null;\n    WebSocketConnectionService.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      WebSocketConnectionService.isConnectingSubject.next(false);\n      WebSocketConnectionService.connectionStatus.next(false);\n      WebSocketConnectionService.connectionError.next(`Invalid WebSocket URL: '${wsServer}'`);\n      return;\n    }\n\n    // Reset retryCount only on a fresh (non-retry) connection\n    if (options !== WebSocketConnectionService.lastOptions) {\n      WebSocketConnectionService.retryCount = 0;\n      WebSocketConnectionService.retryCountSubject.next(0);\n    }\n\n    // Check if connection already exists and is open\n    if (WebSocketConnectionService.socket) {\n      if (WebSocketConnectionService.socket.readyState === WebSocket.OPEN) {\n        console.log('✓ WebSocket connection already OPEN (singleton).');\n        return;\n      }\n\n      if (WebSocketConnectionService.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 (WebSocketConnectionService.socket.readyState === WebSocket.CLOSING ||\n          WebSocketConnectionService.socket.readyState === WebSocket.CLOSED) {\n        console.log(`🧹 Cleaning up stale socket (State: ${WebSocketConnectionService.socket.readyState}).`);\n        WebSocketConnectionService.socket.close();\n        WebSocketConnectionService.socket = null;\n      }\n    }\n\n    // Store jwt token for retry\n    WebSocketConnectionService.lastJwtToken = jwtToken;\n    WebSocketConnectionService.lastOptions = options;\n\n    // Always set maxRetries and delay from latest options\n    if (options?.retry?.times) {\n      WebSocketConnectionService.maxRetries = options.retry.times;\n      WebSocketConnectionService.maxRetriesSubject.next(options.retry.times);\n    } else {\n      WebSocketConnectionService.maxRetries = 10;\n      WebSocketConnectionService.maxRetriesSubject.next(10);\n    }\n\n    if (options?.retry?.delay) {\n      WebSocketConnectionService.retryDelay = options.retry.delay * 1000;\n    } else {\n      WebSocketConnectionService.retryDelay = 5000;\n    }\n\n    // Reset shouldRetry flag for new connection attempts\n    WebSocketConnectionService.shouldRetry = true;\n\n    // Mark as connecting — connectionStatus false while connecting, true only when connected\n    WebSocketConnectionService.isConnectingSubject.next(true);\n    WebSocketConnectionService.isSubscribed = false;\n    WebSocketConnectionService.connectionReadyNotified = false;\n    WebSocketConnectionService.subscribedChannels.next(new Set());\n    // Don't set connectionStatus to true here - only set to true when connection is actually established\n    // WebSocketConnectionService.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    WebSocketConnectionService.socket = new WebSocket(URL);\n\n    WebSocketConnectionService.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:', WebSocketConnectionService.subscribedChannels.value.size, 'channels)');\n      WebSocketConnectionService.subscribedChannels.next(new Set());\n      WebSocketConnectionService.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    WebSocketConnectionService.socket.onmessage = (event) => {\n      try {\n        const data = JSON.parse(event.data);\n\n        if (data.error) {\n          WebSocketConnectionService.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            WebSocketConnectionService.lastOptions = null;\n            WebSocketConnectionService.connectionError.next('Invalid or Expired JWT');\n            WebSocketConnectionService.connectionStatus.next(false);\n            // Stop retrying for authentication errors\n            WebSocketConnectionService.shouldRetry = false;\n          } else {\n            console.error(`❌ Server error: ${data.error} — will retry`);\n          }\n          WebSocketConnectionService.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 (!WebSocketConnectionService.connectionReadyNotified) {\n          WebSocketConnectionService.connectionReadyNotified = true;\n          // Auth confirmed — stop the connecting indicator and mark connected\n          WebSocketConnectionService.isConnectingSubject.next(false);\n          WebSocketConnectionService.connectionStatus.next(true);\n          console.log(`✅ Server confirmed authentication. WebSocket ready.`);\n          console.log(`🔄 Emitting reconnect event`);\n          WebSocketConnectionService.onReconnect.next();\n        }\n\n        WebSocketConnectionService.messages.next(data);\n\n      } catch (error) {\n        console.error('Error parsing WebSocket message:', event.data);\n      }\n    };\n\n    WebSocketConnectionService.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      WebSocketConnectionService.connectionReadyNotified = false;\n      WebSocketConnectionService.socket = null;\n      WebSocketConnectionService.subscribedChannels.next(new Set());\n\n      if (event.code === 4000 || event.code === 4001 || event.code === 4003) {\n        WebSocketConnectionService.isConnectingSubject.next(false);\n        WebSocketConnectionService.connectionError.next('Invalid or Expired JWT');\n        WebSocketConnectionService.connectionStatus.next(false);\n        // Stop retrying for authentication errors\n        WebSocketConnectionService.shouldRetry = false;\n        return;\n      }\n\n      const maxRetries = WebSocketConnectionService.maxRetries;\n      const retryDelay = WebSocketConnectionService.retryDelay;\n\n      // Only retry if shouldRetry is true and we haven't exceeded max retries\n      if (WebSocketConnectionService.shouldRetry && WebSocketConnectionService.lastOptions && WebSocketConnectionService.retryCount < maxRetries) {\n        WebSocketConnectionService.retryCount++;\n        WebSocketConnectionService.retryCountSubject.next(WebSocketConnectionService.retryCount);\n        console.log(`🔄 Reconnect attempt ${WebSocketConnectionService.retryCount}/${maxRetries}...`);\n        // Keep isConnecting true — still actively trying to connect during the retry wait\n        WebSocketConnectionService.isConnectingSubject.next(true);\n        WebSocketConnectionService.retrySubscription = timer(retryDelay).pipe(take(1)).subscribe(() => this.connect(WebSocketConnectionService.lastOptions!, WebSocketConnectionService.lastJwtToken));\n      } else {\n        console.error(`❌ WebSocket failed after ${maxRetries} retries. Giving up.`);\n        WebSocketConnectionService.isConnectingSubject.next(false);\n        WebSocketConnectionService.connectionStatus.next(false);\n        // Only set the error if this wasn't an intentional disconnect (lastOptions cleared in disconnect())\n        if (WebSocketConnectionService.lastOptions && !WebSocketConnectionService.connectionError.value) {\n          WebSocketConnectionService.connectionError.next('Connection failed after maximum retries');\n        }\n        WebSocketConnectionService.retryCount = maxRetries;\n        WebSocketConnectionService.retryCountSubject.next(maxRetries);\n        WebSocketConnectionService.shouldRetry = true;\n      }\n    };\n\n    WebSocketConnectionService.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    WebSocketConnectionService.shouldRetry = false;\n    WebSocketConnectionService.lastOptions = null;\n    WebSocketConnectionService.retrySubscription?.unsubscribe();\n    WebSocketConnectionService.retrySubscription = null;\n    if (WebSocketConnectionService.socket) {\n      console.log('🔌 Disconnecting WebSocket...');\n      WebSocketConnectionService.socket.close();\n      WebSocketConnectionService.socket = null;\n      WebSocketConnectionService.connectionStatus.next(false);\n      WebSocketConnectionService.isConnectingSubject.next(false);\n      WebSocketConnectionService.connectionError.next(null);\n      WebSocketConnectionService.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    WebSocketConnectionService.connectionError.next(null);\n    WebSocketConnectionService.isConnectingSubject.next(false);\n  }\n\n  /** Trigger the reconnect event */\n  triggerReconnect(): void {\n    WebSocketConnectionService.onReconnect.next();\n  }\n\n  // ═══════════════════════════════════════════════════════════════════════════\n  // SUBSCRIPTION MANAGEMENT\n  // ═══════════════════════════════════════════════════════════════════════════\n\n  private sendSubscribe(channelName: string, user: any): void {\n    const alreadySubscribed = WebSocketConnectionService.subscribedChannels.value.has(channelName);\n\n    if (WebSocketConnectionService.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      WebSocketConnectionService.socket.send(JSON.stringify(message));\n\n      // Track this channel as subscribed\n      const current = new Set(WebSocketConnectionService.subscribedChannels.value);\n      current.add(channelName);\n      WebSocketConnectionService.subscribedChannels.next(current);\n\n      WebSocketConnectionService.isSubscribed = true;\n      console.log(`[CLIENT] Sent initial subscription to: ${channelName}`);\n    } else {\n      console.warn(`[CLIENT] Subscription prevented. Open: ${WebSocketConnectionService.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 = WebSocketConnectionService.subscribedChannels.value.has(channelName);\n    const isOpen = WebSocketConnectionService.socket?.readyState === WebSocket.OPEN;\n\n    console.log(`🔍 Subscription check for \"${channelName}\": isOpen=${isOpen}, alreadySubscribed=${alreadySubscribed}`);\n\n    if (isOpen && !alreadySubscribed && WebSocketConnectionService.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      WebSocketConnectionService.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      WebSocketConnectionService.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 (WebSocketConnectionService.socket?.readyState === WebSocket.OPEN) {\n      try {\n        const message = {\n          type: 'subscribe',\n          subscribedChannel: channelName,\n          content: {}\n        };\n\n        WebSocketConnectionService.socket.send(JSON.stringify(message));\n\n        // Track locally - create new Set to trigger change detection\n        const current = new Set(WebSocketConnectionService.subscribedChannels.value);\n        current.add(channelName);\n        WebSocketConnectionService.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 (WebSocketConnectionService.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 (WebSocketConnectionService.socket?.readyState === WebSocket.OPEN) {\n      WebSocketConnectionService.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(WebSocketConnectionService.subscribedChannels.value);\n      current.delete(channel);\n      WebSocketConnectionService.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 WebSocketConnectionService.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 (WebSocketConnectionService.socket?.readyState === WebSocket.OPEN) {\n      WebSocketConnectionService.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 (WebSocketConnectionService.socket?.readyState === WebSocket.OPEN) {\n      WebSocketConnectionService.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 (WebSocketConnectionService.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      WebSocketConnectionService.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 (WebSocketConnectionService.socket?.readyState === WebSocket.OPEN) {\n      WebSocketConnectionService.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 (WebSocketConnectionService.socket?.readyState === WebSocket.OPEN) {\n      try {\n        // New batch format\n        WebSocketConnectionService.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          WebSocketConnectionService.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 (WebSocketConnectionService.socket?.readyState === WebSocket.OPEN) {\n      WebSocketConnectionService.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 (WebSocketConnectionService.socket?.readyState === WebSocket.OPEN) {\n      WebSocketConnectionService.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 (WebSocketConnectionService.socket?.readyState === WebSocket.OPEN) {\n      WebSocketConnectionService.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 (WebSocketConnectionService.socket?.readyState === WebSocket.OPEN) {\n      WebSocketConnectionService.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 (WebSocketConnectionService.socket?.readyState === WebSocket.OPEN) {\n      WebSocketConnectionService.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 (WebSocketConnectionService.socket?.readyState === WebSocket.OPEN) {\n      WebSocketConnectionService.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 (WebSocketConnectionService.socket?.readyState === WebSocket.OPEN) {\n      WebSocketConnectionService.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 (WebSocketConnectionService.socket?.readyState === WebSocket.OPEN) {\n      WebSocketConnectionService.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 (WebSocketConnectionService.socket?.readyState === WebSocket.OPEN) {\n      WebSocketConnectionService.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 (WebSocketConnectionService.socket?.readyState === WebSocket.OPEN) {\n      WebSocketConnectionService.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 (WebSocketConnectionService.socket?.readyState === WebSocket.OPEN) {\n      WebSocketConnectionService.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 WebSocketConnectionService.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 WebSocketConnectionService.connectionInitialized;\n  }\n\n}\n","import { Injectable, inject, signal, computed, DestroyRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { WebSocketConnectionService } from './websocket-service/websocket-connection.service';\nimport { WSOptions } from '../request-manager-state-service';\n\n/**\n * WebSocketManagerService - 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 WebSocketManagerService {\n\n  private wsConnection = inject(WebSocketConnectionService);\n  private destroyRef = inject(DestroyRef);\n\n  // Signal-based state (primary API)\n  private static connectionStatusSignal = signal<boolean>(false);\n  public readonly connectionStatus = WebSocketManagerService.connectionStatusSignal.asReadonly();\n\n  private static messagesSignal = signal<any>(null);\n  public readonly messages = WebSocketManagerService.messagesSignal.asReadonly();\n\n  private static subscribedChannelsSignal = signal<Set<string>>(new Set());\n  public readonly subscribedChannels = WebSocketManagerService.subscribedChannelsSignal.asReadonly();\n\n  private static isConnectingSignal = signal<boolean>(false);\n  public readonly isConnecting = WebSocketManagerService.isConnectingSignal.asReadonly();\n\n  private static retryCountSignal = signal<number>(0);\n  public readonly retryCount = WebSocketManagerService.retryCountSignal.asReadonly();\n\n  private static maxRetriesSignal = signal<number>(0);\n  public readonly maxRetries = WebSocketManagerService.maxRetriesSignal.asReadonly();\n\n  private static connectionErrorSignal = signal<string | null>(null);\n  public readonly connectionError = WebSocketManagerService.connectionErrorSignal.asReadonly();\n\n  constructor() {\n    this.wsConnection.messages$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(message => {\n      WebSocketManagerService.messagesSignal.set(message);\n    });\n\n    this.wsConnection.connectionStatus$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(status => {\n      WebSocketManagerService.connectionStatusSignal.set(status);\n    });\n\n    this.wsConnection.subscribedChannels$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(channels => {\n      WebSocketManagerService.subscribedChannelsSignal.set(channels);\n    });\n\n    this.wsConnection.isConnecting$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(status => {\n      WebSocketManagerService.isConnectingSignal.set(status);\n    });\n\n    this.wsConnection.retryCount$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(count => {\n      WebSocketManagerService.retryCountSignal.set(count);\n    });\n\n    this.wsConnection.maxRetries$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(max => {\n      WebSocketManagerService.maxRetriesSignal.set(max);\n    });\n\n    this.wsConnection.connectionError$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(err => {\n      WebSocketManagerService.connectionErrorSignal.set(err);\n    });\n  }\n\n  // Connection Management\n  connect(options: WSOptions, jwtToken: string): void {\n    this.wsConnection.connect(options, jwtToken);\n  }\n\n  disconnect(): void {\n    this.wsConnection.disconnect();\n  }\n\n  // Channel Subscription\n  subscribeToChannel(channel: string): void {\n    this.wsConnection.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.wsConnection.unsubscribeFromChannel(channel);\n  }\n\n  clearConnectionError(): void {\n    this.wsConnection.clearConnectionError();\n  }\n\n  getSubscribedChannels(): Set<string> {\n    return WebSocketManagerService.subscribedChannelsSignal();\n  }\n\n  // Message Sending\n  sendBroadcast(content: any): void {\n    this.wsConnection.sendBroadcast(content);\n  }\n\n  sendMessageInChannel(channel: string, content: any): void {\n    this.wsConnection.sendMessageInChannel(channel, content);\n  }\n\n  sendChannelMessage(channel: string, content: any): void {\n    this.wsConnection.sendChannelMessage(channel, content);\n  }\n\n  sendChannelMessageToChannels(channels: string[], content: any): void {\n    this.wsConnection.sendChannelMessageToChannels(channels, content);\n  }\n\n  sendMessageToUser(user: string, content: any): void {\n    this.wsConnection.sendMessageToUser(user, content);\n  }\n\n  // Channel Management\n  getAllChannels(): void {\n    this.wsConnection.getAllChannels();\n  }\n\n  createChannel(channel: string): void {\n    this.wsConnection.createChannel(channel);\n  }\n\n  deleteChannel(channel: string): void {\n    this.wsConnection.deleteChannel(channel);\n  }\n\n  getUsersInChannel(channel: string): void {\n    this.wsConnection.getUsersInChannel(channel);\n  }\n\n  // Notification Methods\n  createNotificationChannel(channel: string): void {\n    this.wsConnection.createNotificationChannel(channel);\n  }\n\n  getNotificationChannels(): void {\n    this.wsConnection.getNotificationChannels();\n  }\n\n  getTodaysNotificationChannels(): void {\n    this.wsConnection.getTodaysNotificationChannels();\n  }\n\n  subscribeToNotificationChannel(channel: string, options?: any, user?: any): void {\n    this.wsConnection.subscribeToNotificationChannel(channel, options, user);\n  }\n\n  unsubscribeFromNotificationChannel(channel: string): void {\n    this.wsConnection.unsubscribeFromNotificationChannel(channel);\n  }\n\n  sendNotification(channel: string, content: any): void {\n    this.wsConnection.sendNotification(channel, content);\n  }\n\n  // --- Additional methods for ChannelPresenceService ---\n\n  /** Trigger reconnect event */\n  onReconnect(): void {\n    this.wsConnection.triggerReconnect();\n  }\n\n  /** Send raw message */\n  send(message: any): void {\n    this.wsConnection.send(message);\n  }\n\n  /** Subscribe with last seen message ID for gap recovery */\n  sendSubscribeWithLastSeen(channel: string, userData: any, lastSeenId: number): void {\n    this.wsConnection.sendSubscribeWithLastSeen(channel, userData, lastSeenId);\n  }\n}\n","import { Injectable, inject, signal, computed, effect, DestroyRef } from '@angular/core';\nimport { WebSocketManagerService } from './websocket-manager.service';\n\n/**\n * ChannelPresenceService - Signal-based channel presence and metadata tracking.\n *\n * Tracks WebSocket messages, channel metadata, user presence, and gap detection\n * using pure signals. No Observable bridges — consumers use `toObservable()` at\n * the call site if needed.\n *\n * Gap detection features:\n * - Per-channel message sequence tracking (lastSeen, expectedSequence)\n * - Automatic gap detection and recovery (requestGapFill)\n * - Batch acknowledgments via setInterval (sendBatchAck)\n * - Reconnection sync with lastSeen tracking (restoreLastSeen/persistLastSeen)\n * - Gap threshold alerting (GAP_THRESHOLD)\n * - Intended channels set (survives disconnect/reconnect)\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class ChannelPresenceService {\n\n  // ponytail: cast as any — this service uses signal-style access (messages(), connectionStatus())\n  // but WebSocketManagerService exposes Observable properties (messages$, connectionStatus$).\n  // The spec provides a signal-shaped mock; at runtime the signals manager is used.\n  private wsManager: any = inject(WebSocketManagerService);\n  private destroyRef = inject(DestroyRef);\n\n  // ponytail: Maps stay as Maps — internal state, not template-bound.\n  private readonly BATCH_ACK_INTERVAL_MS = 5000;\n  private readonly GAP_THRESHOLD = 10;\n  private readonly MAX_PENDING_ACKS = 100;\n\n  private lastSeen = new Map<string, number>();\n  private expectedSequence = new Map<string, number>();\n  private pendingAcks = new Map<string, Set<number>>();\n  private gapCounts = new Map<string, number>();\n  private inReplayMode = new Map<string, boolean>();\n  private gapRetryCount = new Map<string, number>();\n  private intendedChannels = new Set<string>();\n  private batchAckTimer: ReturnType<typeof setInterval> | null = null;\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    this.restoreLastSeen();\n    this.restoreIntendedChannels();\n\n    this.batchAckTimer = setInterval(() => this.sendAllBatchAcks(), this.BATCH_ACK_INTERVAL_MS);\n\n    effect(() => {\n      const message = this.wsManager.messages();\n      if (message) {\n        this.onMessage(message);\n      }\n    });\n\n    effect(() => {\n      const connected = this.wsManager.connectionStatus();\n      if (!connected) {\n        this.onDisconnect();\n      }\n    });\n\n    this.wsManager.onReconnect();\n    this.reSubscribeAllChannels();\n\n    this.destroyRef.onDestroy(() => {\n      if (this.batchAckTimer) clearInterval(this.batchAckTimer);\n      this.persistLastSeen();\n    });\n  }\n\n  // ═══════════════════════════════════════════════════════════════════════════\n  // MESSAGE HANDLING\n  // ═══════════════════════════════════════════════════════════════════════════\n\n  private onMessage(msg: any): void {\n    const { channel, messageId, isReplay } = msg;\n\n    if (messageId === undefined || messageId === null) {\n      this.updateSignals(msg);\n      return;\n    }\n\n    if (isReplay && !this.inReplayMode.get(channel)) {\n      this.inReplayMode.set(channel, true);\n    } else if (!isReplay && this.inReplayMode.get(channel)) {\n      this.inReplayMode.set(channel, false);\n    }\n\n    this.trackMessageWithGapDetection(channel, messageId, isReplay);\n    this.updateSignals(msg);\n  }\n\n  trackMessage(message: any): void {\n    this.onMessage(message);\n  }\n\n  private updateSignals(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 trackMessageWithGapDetection(channel: string, messageId: number, isReplay: boolean): void {\n    const expected = this.expectedSequence.get(channel) || 1;\n\n    if (messageId !== expected) {\n      const currentGapCount = this.gapCounts.get(channel) || 0;\n      const newGapCount = currentGapCount + 1;\n      this.gapCounts.set(channel, newGapCount);\n\n      if (newGapCount >= this.GAP_THRESHOLD) {\n        this.onGapThresholdExceeded(channel, newGapCount);\n      }\n\n      this.requestGapFill(channel, expected, messageId - 1);\n    } else {\n      this.gapCounts.set(channel, 0);\n      this.gapRetryCount.set(channel, 0);\n    }\n\n    this.lastSeen.set(channel, messageId);\n    this.expectedSequence.set(channel, messageId + 1);\n    this.persistLastSeen();\n\n    this.queueAck(channel, messageId);\n\n    const pendingCount = this.pendingAcks.get(channel)?.size || 0;\n    if (pendingCount >= this.MAX_PENDING_ACKS) {\n      this.sendBatchAck(channel);\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  // ═══════════════════════════════════════════════════════════════════════════\n  // ACKNOWLEDGMENT MANAGEMENT\n  // ═══════════════════════════════════════════════════════════════════════════\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  private sendAllBatchAcks(): void {\n    this.pendingAcks.forEach((messageIds, channel) => {\n      if (messageIds.size > 0) {\n        this.sendBatchAck(channel);\n      }\n    });\n  }\n\n  sendBatchAck(channel: string): void {\n    const messageIds = this.pendingAcks.get(channel);\n    if (!messageIds || messageIds.size === 0) return;\n\n    const sortedIds = Array.from(messageIds).sort((a, b) => a - b);\n    const ackUpTo = sortedIds[sortedIds.length - 1];\n\n    this.wsManager.send({\n      type: 'messageAckBatch',\n      channel,\n      ackUpTo,\n    });\n\n    messageIds.clear();\n  }\n\n  // ═══════════════════════════════════════════════════════════════════════════\n  // GAP RECOVERY\n  // ═══════════════════════════════════════════════════════════════════════════\n\n  private requestGapFill(channel: string, fromId: number, toId: number): void {\n    const retries = this.gapRetryCount.get(channel) || 0;\n    if (retries >= 3) return;\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  private onGapThresholdExceeded(channel: string, gapCount: number): void {\n    console.warn(`⚠️ High gap count for channel \"${channel}\": ${gapCount} missed messages`);\n  }\n\n  // ═══════════════════════════════════════════════════════════════════════════\n  // SUBSCRIPTION MANAGEMENT\n  // ═══════════════════════════════════════════════════════════════════════════\n\n  subscribeToChannel(channel: string, userData?: any): void {\n    const lastSeenId = this.lastSeen.get(channel) || 0;\n    this.intendedChannels.add(channel);\n    this.persistIntendedChannels();\n    this.wsManager.sendSubscribeWithLastSeen(channel, userData, lastSeenId);\n  }\n\n  unsubscribeFromChannel(channel: string): void {\n    this.wsManager.unsubscribeFromChannel(channel);\n    this.removeUserFromChannel(channel, 'current-user');\n  }\n\n  private reSubscribeAllChannels(): void {\n    const channels = Array.from(this.intendedChannels);\n    channels.forEach((channel: string) => {\n      this.subscribeToChannel(channel);\n    });\n  }\n\n  // ═══════════════════════════════════════════════════════════════════════════\n  // STATE PERSISTENCE\n  // ═══════════════════════════════════════════════════════════════════════════\n\n  private persistLastSeen(): void {\n    try {\n      const data = JSON.stringify(Array.from(this.lastSeen.entries()));\n      sessionStorage.setItem('messageLastSeen', data);\n      this.persistIntendedChannels();\n    } catch (err: any) {\n      console.warn('⚠️ Failed to persist lastSeen:', err.message);\n    }\n  }\n\n  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        this.lastSeen.forEach((lastId, channel) => {\n          this.expectedSequence.set(channel, lastId + 1);\n        });\n      }\n    } catch (err: any) {\n      console.warn('⚠️ Failed to restore lastSeen:', err.message);\n    }\n  }\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  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      }\n    } catch (err: any) {\n      console.warn('⚠️ Failed to restore intendedChannels:', err.message);\n    }\n  }\n\n  // ═══════════════════════════════════════════════════════════════════════════\n  // PUBLIC ACCESSORS\n  // ═══════════════════════════════════════════════════════════════════════════\n\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  getLastSeenId(channel: string): number {\n    return this.lastSeen.get(channel) || 0;\n  }\n\n  getExpectedNextId(channel: string): number {\n    return this.expectedSequence.get(channel) || 1;\n  }\n\n  isInReplayMode(channel: string): boolean {\n    return this.inReplayMode.get(channel) || false;\n  }\n\n  getGapCount(channel: string): number {\n    return this.gapCounts.get(channel) || 0;\n  }\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  }\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","import { Inject, inject, Injectable, Injector, Optional, signal } from '@angular/core';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Observable, Subject, throwError, from, of } from 'rxjs';\nimport { tap, map, finalize, catchError, concatMap, mergeMap, toArray, concat } from 'rxjs/operators';\n\nimport { ApiRequest } from '../request-manager-state-service/models/api-request.model';\nimport { StreamProgressModel } from '../request-manager-state-service/models/stream-progress.model';\nimport { RequestService } from './request.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-manager.service';\nimport { ChannelPresenceService } from '../ws-manager-service/channel-presence.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(ChannelPresenceService);\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 = this.wsManager.isConnecting;\n  retryCount = this.wsManager.retryCount;\n  maxRetries = this.wsManager.maxRetries;\n  connectionError = this.wsManager.connectionError;\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  connect(options: any, jwtToken: string): void {\n    this.wsManager.connect(options, jwtToken);\n  }\n\n  /**\n   * Disconnect from WebSocket server\n   */\n  disconnect(): void {\n    this.wsManager.disconnect();\n  }\n\n  /** Clear connection error state */\n  clearConnectionError(): void {\n    this.wsManager.clearConnectionError();\n  }\n\n  /**\n   * Subscribe to a channel\n   */\n  subscribeToChannel(channel: string, userData?: any): void {\n    this.messageTracker.subscribeToChannel(channel, userData);\n  }\n\n  /**\n   * Subscribe to multiple channels\n   */\n  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  unsubscribeFromChannel(channel: string): void {\n    this.wsManager.unsubscribeFromChannel(channel);\n  }\n\n  /**\n   * Get currently subscribed channels\n   */\n  getSubscribedChannels(): Set<string> {\n    return this.wsManager.getSubscribedChannels();\n  }\n\n  /**\n   * Send broadcast message\n   */\n  sendBroadcast(content: any): void {\n    this.wsManager.sendBroadcast(content);\n  }\n\n  /**\n   * Send message in channel (state manager message)\n   */\n  sendMessageInChannel(channel: string, content: any): void {\n    this.wsManager.sendMessageInChannel(channel, content);\n  }\n\n  /**\n   * Send channel message\n   */\n  sendChannelMessage(channel: string, content: any): void {\n    this.wsManager.sendChannelMessage(channel, content);\n  }\n\n  /**\n   * Send message to multiple channels\n   */\n  sendChannelMessageToChannels(channels: string[], content: any): void {\n    this.wsManager.sendChannelMessageToChannels(channels, content);\n  }\n\n  /**\n   * Send message to user\n   */\n  sendMessageToUser(user: string, content: any): void {\n    this.wsManager.sendMessageToUser(user, content);\n  }\n\n  /**\n   * Get all channels\n   */\n  getAllChannels(): void {\n    this.wsManager.getAllChannels();\n  }\n\n  /**\n   * Create channel\n   */\n  createChannel(channel: string): void {\n    this.wsManager.createChannel(channel);\n  }\n\n  /**\n   * Delete channel\n   */\n  deleteChannel(channel: string): void {\n    this.wsManager.deleteChannel(channel);\n  }\n\n  /**\n   * Get users in channel\n   */\n  getUsersInChannel(channel: string): void {\n    this.wsManager.getUsersInChannel(channel);\n  }\n\n  /**\n   * Create notification channel\n   */\n  createNotificationChannel(channel: string): void {\n    this.wsManager.createNotificationChannel(channel);\n  }\n\n  /**\n   * Get notification channels\n   */\n  getNotificationChannels(): void {\n    this.wsManager.getNotificationChannels();\n  }\n\n  /**\n   * Get today's notification channels\n   */\n  getTodaysNotificationChannels(): void {\n    this.wsManager.getTodaysNotificationChannels();\n  }\n\n  /**\n   * Subscribe to notification channel\n   */\n  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  unsubscribeFromNotificationChannel(channel: string): void {\n    this.wsManager.unsubscribeFromNotificationChannel(channel);\n  }\n\n  /**\n   * Send notification to channel\n   */\n  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 { DestroyRef, Inject, Injectable, Injector, Optional, WritableSignal, signal, computed, effect, inject } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { interval, Observable } 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 LocalStorageManagerService {\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.filter(i => i.id !== settings.id), ...localData],\n        sessionStores: [...state.sessionStores.filter(i => i.id !== settings.id), ...sessionData],\n        settings: [...state.settings.filter(i => i.id !== settings.id), 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    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  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 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 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  clearAllStoredData(): void {\n    try {\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  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      return true;\n    }\n  }\n\n  // --- COMPATIBILITY: Observable wrappers for deprecated consumers ---\n\n  /** @deprecated Use `stores()` signal instead. */\n  get stores$(): Observable<StorageOption[]> {\n    return toObservable(this.stores, { injector: inject(Injector) });\n  }\n\n  /** @deprecated Use `store(name)()` signal instead. */\n  store$(store: string): Observable<any> {\n    return toObservable(this.store(store), { injector: inject(Injector) });\n  }\n\n  /** @deprecated Use `storeExists(name)()` signal instead. */\n  storeExists$(store: string): Observable<boolean> {\n    return toObservable(this.storeExists(store), { injector: inject(Injector) });\n  }\n\n  /** @deprecated Use `settings()` signal instead. */\n  get settings$(): Observable<StorageOption[]> {\n    return toObservable(this.settings, { injector: inject(Injector) });\n  }\n\n  /** @deprecated Use `setting(name)()` signal instead. */\n  setting$(store: string): Observable<StorageOption | null> {\n    return toObservable(this.setting(store), { injector: inject(Injector) });\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","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 { inject, Injectable, signal } 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, finalize, 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  private readonly isPendingSignal = signal<boolean>(false);\n  private readonly tableNamesSignal = signal<string[]>([]);\n  private readonly databaseReadySignal = signal<boolean>(false);\n\n  readonly isPending = this.isPendingSignal.asReadonly();\n  readonly tableNames = this.tableNamesSignal.asReadonly();\n  readonly databaseReady = this.databaseReadySignal.asReadonly();\n\n  constructor() {\n    super()\n  }\n\n  getDatabaseTables() {\n    this.isPendingSignal.set(true);\n    return from(this.DBOpened()).pipe(\n      map(() => this.tables.map((item: any) => item.name)),\n      tap((t) => this.tableNamesSignal.set(t)),\n      finalize(() => this.isPendingSignal.set(false))\n    )\n  }\n\n  databaseExists(): Observable<boolean> {\n    this.isPendingSignal.set(true);\n    return from(this.hasDatabase()).pipe(\n      tap((exists) => this.databaseReadySignal.set(exists)),\n      finalize(() => this.isPendingSignal.set(false))\n    );\n  }\n\n  hasDatabaseTable(table: string): Observable<boolean> {\n    const tableName = this.cleanTableName(table);\n    this.isPendingSignal.set(true);\n    return from(this.DBOpened()).pipe(\n      map(() => {\n        return this.tableExists(tableName)\n      }),\n      finalize(() => this.isPendingSignal.set(false))\n    )\n  }\n\n  getDatabaseTable(table: string): Observable<any> {\n    const tableName = this.cleanTableName(table);\n    this.isPendingSignal.set(true);\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      finalize(() => this.isPendingSignal.set(false))\n    )\n  }\n\n  getDatabaseTableSchema(table: string): Observable<string[]> {\n    const tableName = this.cleanTableName(table);\n    this.isPendingSignal.set(true);\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      finalize(() => this.isPendingSignal.set(false))\n    )\n  }\n\n  createDatabaseTable(tableDef: TableSchemaDef) {\n    const tableName = this.cleanTableName(tableDef.table);\n    this.isPendingSignal.set(true);\n    return from(this.createTable(tableDef.table, tableDef.schema)).pipe(\n      switchMap(() => from(this.DBOpened())),\n      map((opened) => opened && this.tableExists(tableName)),\n      tap(() => this.getDatabaseTables().subscribe()),\n      catchError((error) => {\n        console.error(`createDatabaseTable: failed for table '${tableName}'`, error);\n        return of(false);\n      }),\n      finalize(() => this.isPendingSignal.set(false))\n    )\n  }\n\n  updateDatabaseTableSchema(tableDef: TableSchemaDef) {\n    this.isPendingSignal.set(true);\n    return from(this.createTable(tableDef.table, tableDef.schema)).pipe(\n      switchMap(() => this.getDatabaseTable(tableDef.table)),\n      finalize(() => this.isPendingSignal.set(false))\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 { DestroyRef, effect, inject, Injectable, Injector, signal } from '@angular/core';\n\nimport { OperationResultModel } from './models';\nimport { ApiRequest, WSOptions } from './models';\nimport { HTTPManagerService } from '../request-manager-services/http-manager.service';\nimport { DatabaseManagerService } from '../database-manager-service/database.manager.service';\nimport { LocalStorageManagerService } from '../local-storage-manager-service/local-storage-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 HTTPManagerStateService<T = any> {\n\n  // --- Injected services ---\n  private readonly httpManagerService = inject(HTTPManagerService);\n  private readonly databaseManagerService = inject(DatabaseManagerService);\n  private readonly localStorageManagerService = inject(LocalStorageManagerService);\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 HTTPManagerService ---\n  readonly error = this.httpManagerService.error;\n  readonly isPending = this.httpManagerService.isPending;\n  readonly isConnecting = this.httpManagerService.isConnecting;\n  readonly retryCount = this.httpManagerService.retryCount;\n  readonly maxRetries = this.httpManagerService.maxRetries;\n  readonly connectionError = this.httpManagerService.connectionError;\n\n  constructor() {\n    // Accumulate WS messages via effect instead of scan() operators\n    effect(() => {\n      const msg = this.httpManagerService.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 HTTPManagerService ---\n\n  getRequest<U = T>(options?: ApiRequest, params?: any[]) {\n    return this.httpManagerService.getRequest<U>(options, params);\n  }\n\n  postRequest<U extends { id?: number | string } = any>(data: U, options: ApiRequest, params?: any[]) {\n    return this.httpManagerService.postRequest<U>(data, options, params);\n  }\n\n  putRequest<U extends { id?: number | string } = any>(data: U, options: ApiRequest, params?: any[]) {\n    return this.httpManagerService.putRequest<U>(data, options, params);\n  }\n\n  deleteRequest<U = T>(options: ApiRequest, params?: any[]) {\n    return this.httpManagerService.deleteRequest<U>(options, params);\n  }\n\n  downloadRequest<U = T>(options: ApiRequest, params?: any[], saveAs?: string) {\n    return this.httpManagerService.downloadRequest<U>(options, params, saveAs);\n  }\n\n  uploadRequest<U = T>(files: File | File[], options: ApiRequest, params?: any[]) {\n    return this.httpManagerService.uploadRequest<U>(files, options, params);\n  }\n\n  getBatchRequests<U = T>(requests: ApiRequest[], options?: BatchOptions) {\n    return this.httpManagerService.getBatchRequests<U>(requests, options);\n  }\n\n  getSequentialRequest<U = T>(requests: ApiRequest[], options?: BatchOptions) {\n    return this.httpManagerService.getSequentialRequest<U>(requests, options);\n  }\n\n  getParallelRequest<U = T>(requests: ApiRequest[], options?: BatchOptions) {\n    return this.httpManagerService.getParallelRequest<U>(requests, options);\n  }\n\n  // --- WS control methods delegated to HTTPManagerService ---\n\n  connect(options: WSOptions, jwtToken: string): void {\n    this.httpManagerService.connect(options, jwtToken);\n  }\n\n  disconnect(): void {\n    this.httpManagerService.disconnect();\n  }\n\n  subscribeToChannel(channel: string, userData?: any): void {\n    this.httpManagerService.subscribeToChannel(channel, userData);\n  }\n\n  subscribeToChannels(channels: string[], userData?: any): void {\n    this.httpManagerService.subscribeToChannels(channels, userData);\n  }\n\n  unsubscribeFromChannel(channel: string): void {\n    this.httpManagerService.unsubscribeFromChannel(channel);\n  }\n\n  getSubscribedChannels(): Set<string> {\n    return this.httpManagerService.getSubscribedChannels();\n  }\n\n  sendBroadcast(content: any): void {\n    this.httpManagerService.sendBroadcast(content);\n  }\n\n  sendMessageInChannel(channel: string, content: any): void {\n    this.httpManagerService.sendMessageInChannel(channel, content);\n  }\n\n  sendChannelMessage(channel: string, content: any): void {\n    this.httpManagerService.sendChannelMessage(channel, content);\n  }\n\n  sendChannelMessageToChannels(channels: string[], content: any): void {\n    this.httpManagerService.sendChannelMessageToChannels(channels, content);\n  }\n\n  sendMessageToUser(user: string, content: any): void {\n    this.httpManagerService.sendMessageToUser(user, content);\n  }\n\n  getAllChannels(): void {\n    this.httpManagerService.getAllChannels();\n  }\n\n  createChannel(channel: string): void {\n    this.httpManagerService.createChannel(channel);\n  }\n\n  deleteChannel(channel: string): void {\n    this.httpManagerService.deleteChannel(channel);\n  }\n\n  getUsersInChannel(channel: string): void {\n    this.httpManagerService.getUsersInChannel(channel);\n  }\n\n  createNotificationChannel(channel: string): void {\n    this.httpManagerService.createNotificationChannel(channel);\n  }\n\n  getNotificationChannels(): void {\n    this.httpManagerService.getNotificationChannels();\n  }\n\n  getTodaysNotificationChannels(): void {\n    this.httpManagerService.getTodaysNotificationChannels();\n  }\n\n  subscribeToNotificationChannel(channel: string, options?: any, user?: any): void {\n    this.httpManagerService.subscribeToNotificationChannel(channel, options, user);\n  }\n\n  unsubscribeFromNotificationChannel(channel: string): void {\n    this.httpManagerService.unsubscribeFromNotificationChannel(channel);\n  }\n\n  sendNotification(channel: string, content: any): void {\n    this.httpManagerService.sendNotification(channel, content);\n  }\n\n  // --- DB methods delegated to DatabaseManagerService ---\n\n  getDatabaseTables() {\n    return this.databaseManagerService.getDatabaseTables();\n  }\n\n  databaseExists() {\n    return this.databaseManagerService.databaseExists();\n  }\n\n  hasDatabaseTable(table: string) {\n    return this.databaseManagerService.hasDatabaseTable(table);\n  }\n\n  getDatabaseTable(table: string) {\n    return this.databaseManagerService.getDatabaseTable(table);\n  }\n\n  getDatabaseTableSchema(table: string) {\n    return this.databaseManagerService.getDatabaseTableSchema(table);\n  }\n\n  createDatabaseTable(tableDef: TableSchemaDef) {\n    return this.databaseManagerService.createDatabaseTable(tableDef);\n  }\n\n  updateDatabaseTableSchema(tableDef: TableSchemaDef) {\n    return this.databaseManagerService.updateDatabaseTableSchema(tableDef);\n  }\n\n  // --- localStorage methods delegated to LocalStorageManagerService ---\n\n  createStore(store: { id?: string; name: string; data: any; options: SettingOptions }) {\n    this.localStorageManagerService.createStore(store);\n  }\n\n  setStore(store: { id: string; name: string; data: any; options: SettingOptions }) {\n    this.localStorageManagerService.setStore(store);\n  }\n\n  updateStore(store: { name: string; data: any }) {\n    this.localStorageManagerService.updateStore(store);\n  }\n\n  deleteStore(store: { name: string }) {\n    this.localStorageManagerService.deleteStore(store);\n  }\n\n  getStore(storeName: string) {\n    return this.localStorageManagerService.store(storeName);\n  }\n\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, inject } from '@angular/core';\nimport { WebSocketConnectionService } from '../websocket-service/websocket-connection.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(WebSocketConnectionService);\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 (!WebSocketConnectionService.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 (!WebSocketConnectionService.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 (!WebSocketConnectionService.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 (!WebSocketConnectionService.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","\nexport * from \"./models/index\";\n\nexport { WebSocketManagerService } from \"./websocket-manager.service\";\nexport { WebSocketMessageService } from \"./services/websocket-message.service\";\nexport { ChannelPresenceService } from \"./channel-presence.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 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 { Injectable, inject, WritableSignal, signal, computed, effect, Injector } from '@angular/core';\n\nimport { LocalStorageManagerService } from '../local-storage-manager-service/local-storage-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 StoreStateManagerService<T extends object = StateStoreManagerData<any>> {\n\n  private localStorageManagerService = inject(LocalStorageManagerService);\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","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 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/build/mysql';\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() || false\"\n  [progress]=\"progress()\"\n  [hasError]=\"error()\"\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","import { Component, OnInit, signal, computed } from '@angular/core';\nimport { StoreStateManagerService } from '../../services/store-state-manager-service/store-state-manager.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!: StoreStateManagerService<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 StoreStateManagerService<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","export interface ClientInfoInterface {\n  domain: string\n  service: string\n  id: number\n  name: string\n}\n\nexport class ClientInfo implements ClientInfoInterface {\n\n  constructor(\n    public domain = '',\n    public service = '',\n    public id = 0,\n    public name = '',\n  ) {}\n\n  static adapt(item?: any): ClientInfo {\n\n    return new ClientInfo(\n      item?.domain,\n      item?.service,\n      item?.id,\n      (item?.first_name || item?.last_name) ? `${item?.first_name} ${item?.last_name}` : '',\n    )\n\n  }\n\n}\n\n\n","export interface ClientInfoMapperInterface {\n  id: number\n  first_name: string\n  last_name: string\n  email: string\n}\n\nexport class ClientInfoMapper implements ClientInfoMapperInterface {\n\n  constructor(\n    public id = 0,\n    public first_name = '',\n    public last_name = '',\n    public email = '',\n  ) {}\n\n  static adapt(item?: any): ClientInfoMapper {\n\n    const first_name = (item?.name) ? item.name.split(' ')[0] : ''\n    const last_name = (item?.name) ? item.name.split(' ')[1] : ''\n\n    return new ClientInfoMapper(\n      item?.id,\n      first_name,\n      last_name,\n      item?.email,\n    )\n\n  }\n\n}\n\n\n","export interface AIPromptInterface {\n  response: string\n}\n\nexport class AIPrompt implements AIPromptInterface {\n\n  constructor(\n    public response = '',\n  ) {}\n\n  static adapt(item?: any): AIPrompt {\n\n    return new AIPrompt(\n      item?.response,\n    )\n\n  }\n\n}\n","import { Component, Input, OnInit, ViewChild, inject } from '@angular/core'\n\nimport { BehaviorSubject, EMPTY, Observable, throwError } from 'rxjs'\nimport { FormArray, FormBuilder, Validators } from '@angular/forms'\n\nimport { ClientInfo } from './models/sample-client-info'\nimport { ClientInfoMapper } from './models/sample-mapper-client-info'\nimport { AIPrompt } from './models/sample-ai-prompt'\nimport { ApiRequest, HTTPManagerService, StreamType } from '../..'\nimport { catchError, map, tap } from 'rxjs/operators'\n\nimport { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display'\n\n@Component({\n    selector: 'app-request-manager-basic-demo',\n    templateUrl: './request-manager-basic-demo.component.html',\n    styleUrls: ['./request-manager-basic-demo.component.scss'],\n    providers: [HTTPManagerService],\n    standalone: false\n})\nexport class RequestManagerBasicDemoComponent implements OnInit {\n\n  server = 'http://localhost:8080'\n  adapter?: Function\n  mapper?: Function\n\n  displayedColumns: string[] = []\n\n  // Dynamic columns based on data structure\n  getColumnsFromData(data: any[]): string[] {\n    if (!data || data.length === 0) {\n      return []\n    }\n\n    const firstRecord = data[0]\n    if (!firstRecord || typeof firstRecord !== 'object') {\n      return []\n    }\n\n    // Extract all keys from the first record, excluding null/undefined\n    return Object.keys(firstRecord).filter(key =>\n      firstRecord[key] !== null && firstRecord[key] !== undefined\n    )\n  }\n\n  // Update displayed columns when data changes\n  updateDisplayedColumns(data: any[]): void {\n    this.displayedColumns = this.getColumnsFromData(data)\n    console.log('[DEMO] Updated columns:', this.displayedColumns)\n  }\n\n  // Helper to check if value is an object\n  isObject(value: any): boolean {\n    return value !== null && typeof value === 'object' && !Array.isArray(value)\n  }\n\n  private fb = inject(FormBuilder)\n  private toastMessage = inject(ToastMessageDisplayService)\n\n  questionControl = this.fb.control(\"\", [Validators.required])\n\n  httpManagerService = inject(HTTPManagerService)\n\n  isPending = this.httpManagerService.isPending\n  countdown = this.httpManagerService.countdown\n\n  GET_error$ = new BehaviorSubject<string>('')\n  POST_error$ = new BehaviorSubject<string>('')\n  PUT_error$ = new BehaviorSubject<string>('')\n  DELETE_error$ = new BehaviorSubject<string>('')\n\n  STREAM_error$ = new BehaviorSubject<string>('')\n  STREAM_AI_error$ = new BehaviorSubject<string>('')\n\n  GET$?: Observable<any>\n  POST$?: Observable<any>\n  PUT$?: Observable<any>\n  DELETE$?: Observable<any>\n\n  STREAM$?: Observable<any>\n  STREAM_AI$?: Observable<any>\n\n  requestParams = {\n    GET: ApiRequest.adapt(),\n    POST: ApiRequest.adapt(),\n    PUT: ApiRequest.adapt(),\n    DELETE: ApiRequest.adapt(),\n    STREAM: ApiRequest.adapt(),\n  }\n\n  streamTypes = [\n    { id: 'JSON', value: 'json' },\n    { id: 'NDJSON', value: 'ndjson' },\n    { id: 'AI Streaming', value: 'ai_streaming' },\n    { id: 'Event Stream', value: 'event_stream' },\n    { id: 'Auto', value: 'auto' },\n  ]\n\n  streamType = 'Auto'\n\n  @ViewChild(\"failedState\", { static: true }) failedState: any\n  @ViewChild(\"pollingState\", { static: true }) pollingState: any\n\n  downloadRequest = ApiRequest.adapt({\n    server: 'assets/images',\n    path: ['lego.png'],\n    saveAs: 'john.jpg', // Optional\n    headers: { 'Authorization': 'Bearer Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6InJ0c0ZULWItN0x1WTdEVlllU05LY0lKN1ZuYyJ9.eyJhdWQiOiI4ODhhMzFjZS01OWQzLTRhMTItYTU5Ni04ZDYyZjY0MWI1MDUiLCJpc3MiOiJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vNmY0MTE5ODItY2YyMy00ZTQ1LTk0NDktNGI2MDdiN2E4OGVjL3YyLjAiLCJpYXQiOjE3NjU4MzQxNDksIm5iZiI6MTc2NTgzNDE0OSwiZXhwIjoxNzY1ODM5NzQ2LCJhY2N0IjowLCJhaW8iOiJBV1FBbS84YUFBQUFVUEZOYUhSZkZ4ZVkwRWthcFBzdWZaNG1QYXV6YVRoODRRZUtQRzkrbEFIVE5XanVwQy9ZSjEwK2IrMktWVlJSSXZRNFpwS2xyWTFGd0xRZmtXOTNLbkRNckxSeEMzWTVOOGlQREZ4b1liZExucW1QL1N1ZE1pRW1Va05tTklSWSIsImF6cCI6Ijg4OGEzMWNlLTU5ZDMtNGExMi1hNTk2LThkNjJmNjQxYjUwNSIsImF6cGFjciI6IjAiLCJncm91cHMiOlsiZWE2ZDk5YjAtNDgyNC00MDU0LTk0MTQtZDNhOTZkZDA3MjRiIl0sIm5hbWUiOiJHVExDIEFwcCBTdXBlciBBZG1pbiIsIm9pZCI6IjI2NzUxY2I2LWNlMDEtNDMzMC05OTc0LWZjMzgxMjQ3YTEzYyIsInByZWZlcnJlZF91c2VybmFtZSI6Imd0bGMwMDNAZ3RsYy5jYSIsInJoIjoiMS5BUzRBZ2hsQmJ5UFBSVTZVU1V0Z2UzcUk3TTR4aW9qVFdSSktwWmFOWXZaQnRRVm1BYTR1QUEuIiwicm9sZXMiOlsiZ3RsYy5hY2wuc3VwZXJhZG1pbiJdLCJzY3AiOiJHVExDX0FwcGxpY2F0aW9uIiwic2lkIjoiMDAzZjVhZDktZmJmNi1jZTkyLTg3MjItMWEzNDExYjMzMDJiIiwic3ViIjoiS0RYQ3drVlhUbTRUUmcwaTkxbXZDZzgtQ29uLXpWbk5FQ2Y5LVg0dkpzUSIsInRpZCI6IjZmNDExOTgyLWNmMjMtNGU0NS05NDQ5LTRiNjA3YjdhODhlYyIsInVwbiI6Imd0bGMwMDNAZ3RsYy5jYSIsInV0aSI6InpBaTJoMmpVUUVHbVY0RTJXMWxqQUEiLCJ2ZXIiOiIyLjAiLCJ3aWRzIjpbImI3OWZiZjRkLTNlZjktNDY4OS04MTQzLTc2YjE5NGU4NTUwOSJdLCJ4bXNfZnRkIjoiUDJraW1ZM0tqc1BTRndxNHlZdmJ0bGhrSUk3d2tXNmFpcW1FQ1BaNEdja0JkWE5sWVhOMExXUnpiWE0ifQ.LzppoggMm27smSAy9SamtPN95vCzdELCAfhtOj5n_T_H6g9xCmNRLS9FaUFQMau6Qvl0lROKl7WDklTswLFkfxbIxCBWtXdL-LTqT5cDURSJAll8vC3zlN3Hg9pAFBUVZFRolt6Z7LvPdI3pvUOQs0yFwVzp9k6cLF8aemKdwKQrMX3XXua1MfBWZcqQ4WiBVNmKh8w6yQB35I4u5WqdFnu33nUGb-kvc18SOpoUfiJnlV-PudaEzFXdU3CjAaMEcuPFv5xLwWJKuhU73dNH4EyQDFMVGtcIHNnieOfiY_nK2_0-5DM6aI40UIRK6Bt-HmMQpnbhLps5y3ep6Z7RNw' } // Optional\n  })\n\n  // downloadRequest = ApiRequest.adapt({\n  //   server: 'oidc/ai/file'\n  // })\n\n  sampleClientData = {\n      id: 0,\n      name: \"Old School Dates\",\n      domain: \"osd.com\",\n      service: \"osd\",\n      spiffe: \"osd.com/osd\",\n      secret: \"SMOPECXP-OS4P-USOG-X2II-3XMD1FQDR3IJX\",\n      created: 1693003138,\n      modified: 1693003138,\n      icon: \"\",\n      imageFile: \"\",\n      email: \"wavecoders@gmail.com\"\n  }\n\n  requestForm = this.fb.group({\n    path: this.fb.control<string>(\"ai/\"),\n    headers: this.fb.array([]),\n    adapter: [null],\n    mapper: [null],\n    retry: this.fb.group({\n      times: [3],\n      delay: [3],\n    }),\n    polling: [3],\n  })\n\n  AIType = 0\n\n  sampleAdaptors = [\n    { label: \"ClientInfo Basic\", value: ClientInfo.adapt },\n    { label: \"AI Prompt\", value: AIPrompt.adapt },\n  ]\n\n  sampleMappers = [\n    { label: \"Mapper Basic\", value: ClientInfoMapper.adapt },\n    { label: \"AI Prompt\", value: AIPrompt.adapt },\n  ]\n\n  get retry() {\n    return this.requestForm.get('retry')?.value\n  }\n\n  get headers(): FormArray {\n    return this.requestForm.get('headers') as FormArray\n  }\n\n  get isValid() {\n    this.requestForm.markAllAsTouched()\n    return this.requestForm.valid\n  }\n\n  hasId = (arr: any[]) => {\n    if (arr.length === 0) return false\n    return !isNaN(arr[arr.length - 1])\n  }\n\n  props = (adapter: any) => {\n    return (adapter) ? adapter() : null\n  }\n\n  // server = `http://sample-endpoint/as/authorization.oauth2`\n\n  arrayObjectsToObjects = (arr: any[]) => {\n    return Array.isArray(arr) ? arr.reduce((obj, item) => Object.assign(obj, { [item.key]: item.value }), {}) : {}\n  }\n\n  constructor() { }\n\n  ngOnInit() {\n\n    // const reqGet2 = ApiRequest.adapt({\n    //   server,\n    //   path: ['clients'],\n    //   headers: { authentication: \"Bearer <KEY>\" },\n    //   adapter: ClientInfo,\n    //   dataType: DataType.OBJECT,\n    //   // concurrent: false,\n    //   // polling: 3, //seconds\n    // })\n\n    // const req2 = [1024,1025,1026].map(item => {\n    //   return this.httpManagerService.getRequest<ClientInfo[]>(reqGet2, [item])\n    //   .pipe(\n    //     catchError(error => {\n    //       return throwError(() => new Error(error.error.message))\n    //     })\n    //   )\n    // })\n\n    // forkJoin(req2)\n    // .subscribe(res => console.log(res))\n\n  }\n\n  onStreamType(type: string) {\n    this.streamType = type\n  }\n\n  addHeader() {\n    const header = this.fb.group({\n      key: ['', Validators.required],\n      value: ['']\n    })\n    this.headers.push(header)\n  }\n\n  removeHeader(index: number) {\n    this.headers.removeAt(index)\n  }\n\n  compileRequest() {\n\n    const requestParams = this.requestForm.value\n\n    requestParams.headers = this.arrayObjectsToObjects(\n      requestParams.headers || []\n    )\n\n    const pathReq = (requestParams.path === \"\") ? [] : (requestParams.path || \"\").split(\"/\")\n\n    if (!this.pollingState.checked) requestParams.polling = 0\n\n    if (!this.failedState.checked) {\n      requestParams.retry = { times: 0,delay: 0 }\n    }\n\n    const apiOptions = ApiRequest.adapt(requestParams)\n    apiOptions.path = []\n    apiOptions.server = this.server\n    apiOptions.adapter = this.adapter\n    apiOptions.mapper = this.mapper\n    return { apiOptions: apiOptions, path: pathReq }\n\n  }\n\n  onGetRequest() {\n\n    if(!this.isValid) return\n\n    const reqParams = this.compileRequest()\n\n    this.requestParams.GET = reqParams.apiOptions\n\n    this.GET$ = EMPTY //Cancels Previous\n    this.GET_error$.next('')\n\n    this.GET$ = this.httpManagerService.getRequest<ClientInfo[]>({...reqParams.apiOptions}, reqParams.path)\n    .pipe(\n      // tap((data) => console.log(\"API GET response\", data)),\n      catchError(error => {\n        return throwError(() => this.errorHandling(error, 'GET'))\n      })\n    )\n\n  }\n\n  onCreateRequest() {\n\n    if(!this.isValid) return\n\n    const reqParams = this.compileRequest()\n    this.requestParams.POST = reqParams.apiOptions\n\n    this.POST$ = EMPTY //Cancels Previous\n    this.POST_error$.next('')\n\n    console.log(\"POST\", this.sampleClientData)\n    console.log(\"POST\", reqParams.apiOptions)\n    console.log(\"POST\", reqParams.path)\n\n    this.POST$ = this.httpManagerService.postRequest<ClientInfo>(this.sampleClientData, reqParams.apiOptions, reqParams.path)\n    .pipe(\n      // tap((data) => console.log(\"API POST response\", data)),\n      catchError(error => {\n        return throwError(() => this.errorHandling(error, 'POST'))\n      })\n    )\n\n  }\n\n  onUpdateRequest() {\n\n    if(!this.isValid) return\n\n    const reqParams = this.compileRequest()\n\n    if(!this.hasId(reqParams.path)) {\n      console.log(\"Missing ID\")\n      return\n    }\n\n    this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length-1])\n    this.requestParams.PUT = reqParams.apiOptions\n\n    this.PUT$ = EMPTY //Cancels Previous\n    this.PUT_error$.next('')\n\n    this.PUT$ = this.httpManagerService.putRequest<any>(this.sampleClientData, reqParams.apiOptions, reqParams.path)\n    .pipe(\n      // tap((data) => console.log(\"API PUT response\", data)),\n      catchError(error => {\n        return throwError(() => this.errorHandling(error, 'PUT'))\n      })\n    )\n\n  }\n\n  onDeleteRequest() {\n\n    if(!this.isValid) return\n\n    const reqParams = this.compileRequest()\n    this.requestParams.DELETE = reqParams.apiOptions\n\n    if(!this.hasId(reqParams.path)) {\n      console.log(\"Missing ID\")\n      return\n    }\n\n    this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length-1])\n    this.requestParams.DELETE = reqParams.apiOptions\n\n    this.DELETE$ = EMPTY //Cancels Previous\n    this.DELETE_error$.next('')\n\n    this.DELETE$ = this.httpManagerService.deleteRequest<ClientInfo>(reqParams.apiOptions, reqParams.path)\n    .pipe(\n      // tap((data) => console.log(\"API DELETE response\", data)),\n      catchError(error => {\n        return throwError(() => this.errorHandling(error, 'DELETE'))\n      })\n    )\n\n  }\n\n  onStreamPostRequest() {\n\n    if (!this.isValid) return\n\n    const reqParams = this.compileRequest()\n\n    let payload = {}\n    let apiPath: string[] = reqParams.path\n    let apiOptions = reqParams.apiOptions\n    let responseMapper: (items: any) => any = (items) => items.response\n\n    if (this.AIType === 0) {\n\n      // API request\n      payload = { prompt: this.questionControl.value }\n\n    } else {\n\n      // Local Ollama request\n      apiOptions.server = \"api\"\n      apiPath = [\"generate\"]\n      apiOptions.stream = true\n      apiOptions.streamType = this.streamType as StreamType\n      payload = {\n        model: \"phi3:latest\",\n        prompt: this.questionControl.value,\n        stream: true,\n      }\n\n      responseMapper = (items) => items.map((word: any) => word.response).flat().join('')\n\n    }\n\n    this.requestParams.STREAM = apiOptions\n    this.STREAM_AI$ = EMPTY\n    this.STREAM_AI_error$.next('')\n\n    this.STREAM_AI$ = this.httpManagerService.postRequest<any>(payload, apiOptions, apiPath).pipe(\n      map(responseMapper),\n      tap(() => this.questionControl.reset()),\n      catchError(error => throwError(() => this.errorHandling(error, 'STREAM')))\n    )\n\n  }\n\n\n  onStreamRequest() {\n\n    if(!this.isValid) return\n\n    const reqParams = this.compileRequest()\n\n    reqParams.apiOptions.stream = true\n    reqParams.apiOptions.streamType = StreamType.NDJSON\n\n    this.requestParams.GET = reqParams.apiOptions\n    this.STREAM$ = this.httpManagerService.getRequest<ClientInfo[]>(reqParams.apiOptions, reqParams.path)\n        .pipe(\n      tap((data) => {\n        console.log(\"API STREAM response\", data)\n        if (data && data.length > 0) {\n          this.updateDisplayedColumns(data)\n        }\n      }),\n      catchError(error => {\n        return throwError(() => this.errorHandling(error, 'STREAM'))\n      })\n    )\n\n  }\n\n  onDownloadCompleted() {\n\n    const message = \"Download Completed\"\n\n    const display = ToastDisplay.adapt({\n      message,\n      action: 'Ok',\n      color: ToastColors.SUCCESS,\n      icon: 'sentiment_satisfied_alt',\n    })\n\n    this.toastMessage.toastMessage(display)\n  }\n\n  onDownloadFailed(err: string) {\n\n    const message = \"Download Failed\"\n\n    const display = ToastDisplay.adapt({\n      message,\n      action: 'Ok',\n      color: ToastColors.ERROR,\n      icon: 'warning',\n    })\n\n    this.toastMessage.toastMessage(display)\n  }\n\n  errorHandling(err: any, type: string) {\n    if(type === 'GET') this.GET_error$.next(err.message)\n    if(type === 'POST') this.POST_error$.next(err.message)\n    if(type === 'PUT') this.PUT_error$.next(err.message)\n    if(type === 'DELETE') this.DELETE_error$.next(err.message)\n    if(type === 'STREAM') this.STREAM_error$.next(err.message)\n  }\n\n  onSelectAIType(type: number) {\n    this.AIType = type\n  }\n\n}\n","<div style=\"margin: 2rem;\">\n\n  <h2>\n    HTTP Basic Request Manager Setup\n  </h2>\n\n  <div style=\"margin-bottom: 1rem; margin-top: 2rem;\">\n    @if (isPending()) {\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: 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","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, signal } from '@angular/core'\nimport { FormArray, FormBuilder, Validators } from '@angular/forms'\n\nimport { firstValueFrom } from 'rxjs'\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  getColumnsFromData(data: any[]): string[] {\n    if (!data || data.length === 0) return []\n    const firstRecord = data[0]\n    if (!firstRecord || typeof firstRecord !== 'object') return []\n    return Object.keys(firstRecord).filter(key => firstRecord[key] !== null && firstRecord[key] !== undefined)\n  }\n\n  updateDisplayedColumns(data: any[]): void {\n    this.displayedColumns = this.getColumnsFromData(data)\n  }\n\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 = signal<string>('')\n  POST_error = signal<string>('')\n  PUT_error = signal<string>('')\n  DELETE_error = signal<string>('')\n  STREAM_error = signal<string>('')\n  STREAM_AI_error = signal<string>('')\n\n  GET = signal<any>(null)\n  POST = signal<any>(null)\n  PUT = signal<any>(null)\n  DELETE = signal<any>(null)\n  STREAM = signal<any[]>([])\n  STREAM_AI = signal<any[]>([])\n\n  parallelBatch = signal<any[]>([])\n  sequentialBatch = signal<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  parallelBatchStates: (BatchRequestState<any> | undefined)[] = []\n  sequentialBatchStates: (BatchRequestState<any> | undefined)[] = []\n\n  streamBatchStates: (BatchRequestState<any> | undefined)[] = []\n  streamProgress?: BatchProgress\n  streamExecutionTime?: number\n  isStreamLoading = false\n  streamError?: string\n\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',\n    headers: { 'Authorization': 'Bearer Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6InJ0c0ZULWItN0x1WTdEVlllU05LY0lKN1ZuYyJ9.eyJhdWQiOiI4ODhhMzFjZS01OWQzLTRhMTItYTU5Ni04ZDYyZjY0MWI1MDUiLCJpc3MiOiJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vNmY0MTE5ODItY2YyMy00ZTQ1LTk0NDktNGI2MDdiN2E4OGVjL3YyLjAiLCJpYXQiOjE3NjU4MzQxNDksIm5iZiI6MTc2NTgzNDE0OSwiZXhwIjoxNzY1ODM5NzQ2LCJhY2N0IjowLCJhaW8iOiJBV1FBbS84YUFBQUFVUEZOYUhSZkZ4ZVkwRWthcFBzdWZaNG1QYXV6YVRoODRRZUtQRzkrbEFIVE5XanVwQy9ZSjEwK2IrMktWVlJSSXZRNFpwS2xyWTFGd0xRZmtXOTNLbkRNckxSeEMzWTVOOGlQREZ4b1liZExucW1QL1N1ZE1pRW1Va05tTklSWSIsImF6cCI6Ijg4OGEzMWNlLTU5ZDMtNGExMi1hNTk2LThkNjJmNjQxYjUwNSIsImF6cGFjciI6IjAiLCJncm91cHMiOlsiZWE2ZDk5YjAtNDgyNC00MDU0LTk0MTQtZDNhOTZkZDA3MjRiIl0sIm5hbWUiOiJHVExDIEFwcCBTdXBlciBBZG1pbiIsIm9pZCI6IjI2NzUxY2I2LWNlMDEtNDMzMC05OTc0LWZjMzgxMjQ3YTEzYyIsInByZWZlcnJlZF91c2VybmFtZSI6Imd0bGMwMDNAZ3RsYy5jYSIsInJoIjoiMS5BUzRBZ2hsQmJ5UFBSVTZVU1V0Z2UzcUk3TTR4aW9qVFdSSktwWmFOWXZaQnRRVm1BYTR1QUEuIiwicm9sZXMiOlsiZ3RsYy5hY2wuc3VwZXJhZG1pbiJdLCJzY3AiOiJHVExDX0FwcGxpY2F0aW9uIiwic2lkIjoiMDAzZjVhZDktZmJmNi1jZTkyLTg3MjItMWEzNDExYjMzMDJiIiwic3ViIjoiS0RYQ3drVlhUbTRUUmcwaTkxbXZDZzgtQ29uLXpWbk5FQ2Y5LVg0dkpzUSIsInRpZCI6IjZmNDExOTgyLWNmMjMtNGU0NS05NDQ5LTRiNjA3YjdhODhlYyIsInVwbiI6Imd0bGMwMDNAZ3RsYy5jYSIsInV0aSI6InpBaTJoMmpVUUVHbVY0RTJXMWxqQUEiLCJ2ZXIiOiIyLjAiLCJ3aWRzIjpbImI3OWZiZjRkLTNlZjktNDY4OS04MTQzLTc2YjE5NGU4NTUwOSJdLCJ4bXNfZnRkIjoiUDJraW1ZM0tqc1BTRndxNHlZdmJ0bGhrSUk3d2tXNmFpcW1FQ1BaNEdja0JkWE5sWVhOMExXUnpiWE0ifQ.LzppoggMm27smSAy9SamtPN95vCzdELCAfhtOj5n_T_H6g9xCmNRLS9FaUFQMau6Qvl0lROKl7WDklTswLFkfxbIxCBWtXdL-LTqT5cDURSJAll8vC3zlN3Hg9pAFBUVZFRolt6Z7LvPdI3pvUOQs0yFwVzp9k6cLF8aemKdwKQrMX3XXua1MfBWZcqQ4WiBVNmKh8w6yQB35I4u5WqdFnu33nUGb-kvc18SOpoUfiJnlV-PudaEzFXdU3CjAaMEcuPFv5xLwWJKuhU73dNH4EyQDFMVGtcIHNnieOfiY_nK2_0-5DM6aI40UIRK6Bt-HmMQpnbhLps5y3ep6Z7RNw' }\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  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  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    const requestParams = this.requestForm.value\n    requestParams.headers = this.arrayObjectsToObjects(requestParams.headers || [])\n    const pathReq = (requestParams.path === \"\") ? [] : (requestParams.path || \"\").split(\"/\")\n    if (!this.pollingState.checked) requestParams.polling = 0\n    if (!this.failedState.checked) {\n      requestParams.retry = { times: 0, delay: 0 }\n    }\n    const apiOptions = ApiRequest.adapt(requestParams)\n    apiOptions.displayError = true\n    apiOptions.path = []\n    apiOptions.server = this.server\n    apiOptions.adapter = this.adapter\n    apiOptions.mapper = this.mapper\n    return { apiOptions: apiOptions, path: pathReq }\n  }\n\n  async onGetRequest() {\n    if (!this.isValid) return\n    const reqParams = this.compileRequest()\n    this.requestParams.GET = reqParams.apiOptions\n    this.GET.set(null)\n    this.GET_error.set('')\n    try {\n      const data = await firstValueFrom(this.httpManagerService.getRequest<ClientInfo[]>({...reqParams.apiOptions}, reqParams.path))\n      this.GET.set(data)\n    } catch (error: any) {\n      this.errorHandling(error, 'GET')\n    }\n  }\n\n  async onCreateRequest() {\n    if (!this.isValid) return\n    const reqParams = this.compileRequest()\n    this.requestParams.POST = reqParams.apiOptions\n    this.POST.set(null)\n    this.POST_error.set('')\n    try {\n      const data = await firstValueFrom(this.httpManagerService.postRequest<ClientInfo>(this.sampleClientData, reqParams.apiOptions, reqParams.path))\n      this.POST.set(data)\n    } catch (error: any) {\n      this.errorHandling(error, 'POST')\n    }\n  }\n\n  async onUpdateRequest() {\n    if (!this.isValid) return\n    const reqParams = this.compileRequest()\n    if (!this.hasId(reqParams.path)) { console.log(\"Missing ID\"); return }\n    this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length - 1])\n    this.requestParams.PUT = reqParams.apiOptions\n    this.PUT.set(null)\n    this.PUT_error.set('')\n    try {\n      const data = await firstValueFrom(this.httpManagerService.putRequest<any>(this.sampleClientData, reqParams.apiOptions, reqParams.path))\n      this.PUT.set(data)\n    } catch (error: any) {\n      this.errorHandling(error, 'PUT')\n    }\n  }\n\n  async onDeleteRequest() {\n    if (!this.isValid) return\n    const reqParams = this.compileRequest()\n    this.requestParams.DELETE = reqParams.apiOptions\n    if (!this.hasId(reqParams.path)) { console.log(\"Missing ID\"); return }\n    this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length - 1])\n    this.DELETE.set(null)\n    this.DELETE_error.set('')\n    try {\n      const data = await firstValueFrom(this.httpManagerService.deleteRequest<ClientInfo>(reqParams.apiOptions, reqParams.path))\n      this.DELETE.set(data)\n    } catch (error: any) {\n      this.errorHandling(error, 'DELETE')\n    }\n  }\n\n  async onStreamPostRequest() {\n    if (!this.isValid) return\n    const reqParams = this.compileRequest()\n    let payload: any = {}\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      payload = { prompt: this.questionControl.value }\n    } else {\n      apiOptions.server = \"api\"\n      apiPath = [\"generate\"]\n      apiOptions.stream = true\n      apiOptions.streamType = this.streamType as StreamType\n      payload = { model: \"phi3:latest\", prompt: this.questionControl.value, stream: true }\n      responseMapper = (items) => items.map((word: any) => word.response).flat().join('')\n    }\n\n    this.requestParams.STREAM = apiOptions\n    this.STREAM_AI.set([])\n    this.STREAM_AI_error.set('')\n\n    try {\n      const data = await firstValueFrom(this.httpManagerService.postRequest<any>(payload, apiOptions, apiPath))\n      this.STREAM_AI.set(Array.isArray(data) ? data : [data])\n      this.questionControl.reset()\n    } catch (error: any) {\n      this.errorHandling(error, 'STREAM')\n    }\n  }\n\n  async onStreamRequest() {\n    if (!this.isValid) return\n    const reqParams = this.compileRequest()\n    reqParams.apiOptions.stream = true\n    reqParams.apiOptions.streamType = StreamType.NDJSON\n    this.requestParams.GET = reqParams.apiOptions\n    this.STREAM.set([])\n    try {\n      const data = await firstValueFrom(this.httpManagerService.getRequest<ClientInfo[]>(reqParams.apiOptions, reqParams.path))\n      this.STREAM.set(Array.isArray(data) ? data : [data])\n      if (data && data.length > 0) this.updateDisplayedColumns(data)\n    } catch (error: any) {\n      this.errorHandling(error, 'STREAM')\n    }\n  }\n\n  onDownloadCompleted() {\n    const display = ToastDisplay.adapt({\n      message: \"Download Completed\",\n      action: 'Ok',\n      color: ToastColors.SUCCESS,\n      icon: 'sentiment_satisfied_alt',\n    })\n    this.toastMessage.toastMessage(display)\n  }\n\n  onDownloadFailed(err: string) {\n    const display = ToastDisplay.adapt({\n      message: \"Download Failed\",\n      action: 'Ok',\n      color: ToastColors.ERROR,\n      icon: 'warning',\n    })\n    this.toastMessage.toastMessage(display)\n  }\n\n  errorHandling(err: any, type: string) {\n    const msg = err?.message || String(err)\n    if (type === 'GET') this.GET_error.set(msg)\n    if (type === 'POST') this.POST_error.set(msg)\n    if (type === 'PUT') this.PUT_error.set(msg)\n    if (type === 'DELETE') this.DELETE_error.set(msg)\n    if (type === 'STREAM') this.STREAM_error.set(msg)\n  }\n\n  onSelectAIType(type: number) {\n    this.AIType = type\n  }\n\n  // ═══════════════════════════════════════════════════════════════════════════\n  // BATCH REQUEST DEMO METHODS\n  // ═══════════════════════════════════════════════════════════════════════════\n\n  async onExecuteParallelBatch() {\n    this.isParallelLoading = true\n    this.parallelError = undefined\n    this.parallelExecutionTime = undefined\n    this.parallelResults = undefined\n\n    const requests = this.createBatchRequests('https://jsonplaceholder.typicode.com', ['users'], [1, 2, 3, 4, 5])\n    const startTime = performance.now()\n\n    try {\n      const results = await firstValueFrom(\n        this.httpManagerService.getParallelRequest(requests, BatchOptions.adapt({ concurrency: 3, ignoreErrors: true, logErrors: true }))\n      )\n      this.parallelResults = results\n      this.parallelExecutionTime = performance.now() - startTime\n      this.isParallelLoading = false\n    } catch (error: any) {\n      this.parallelError = error.message || 'Parallel batch failed'\n      this.isParallelLoading = false\n    }\n  }\n\n  async onExecuteSequentialBatch() {\n    this.isSequentialLoading = true\n    this.sequentialError = undefined\n    this.sequentialExecutionTime = undefined\n    this.sequentialResults = undefined\n\n    const requests = this.createBatchRequests('https://jsonplaceholder.typicode.com', ['todos'], [1, 2, 3, 4, 5])\n    const startTime = performance.now()\n\n    try {\n      const results = await firstValueFrom(\n        this.httpManagerService.getSequentialRequest(requests, BatchOptions.adapt({ stopOnError: false, ignoreErrors: true, logErrors: true }))\n      )\n      this.sequentialResults = results\n      this.sequentialExecutionTime = performance.now() - startTime\n      this.isSequentialLoading = false\n    } catch (error: any) {\n      this.sequentialError = error.message || 'Sequential batch failed'\n      this.isSequentialLoading = false\n    }\n  }\n\n  async 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('https://jsonplaceholder.typicode.com', ['posts'], [1, 2, 3, 4, 5])\n    const startTime = performance.now()\n\n    try {\n      await firstValueFrom(\n        this.httpManagerService.getBatchRequestsStream(requests, {\n          mode: 'parallel', concurrency: 3, stopOnError: false, ignoreErrors: true, logErrors: true\n        })\n      )\n      this.streamExecutionTime = performance.now() - startTime\n      this.isStreamLoading = false\n    } catch (error: any) {\n      this.streamError = error.message || 'Stream batch failed'\n      this.isStreamLoading = false\n    }\n  }\n\n  isPendingState(state: BatchRequestState<any>): boolean { return state.isPending === true }\n  isSuccessState(state: BatchRequestState<any>): boolean { return state.isPending === false && state.data !== undefined }\n  isErrorState(state: BatchRequestState<any>): boolean { return state.isPending === false && state.error !== undefined }\n\n  private createBatchRequests(baseUrl: string, basePath: string[], ids: number[]): ApiRequest[] {\n    return ids.map(id => ApiRequest.adapt({ server: baseUrl, path: [...basePath, id] }))\n  }\n\n  isSuccess(result: any): boolean { return result !== undefined && result !== null }\n\n  formatTime(ms: number): string {\n    if (ms < 1000) return `${Math.round(ms)}ms`\n    return `${(ms / 1000).toFixed(2)}s`\n  }\n\n  getSuccessCount(results?: any[]): number {\n    if (!results) return 0\n    return results.filter(r => r !== undefined).length\n  }\n\n  getFailureCount(results?: any[]): number {\n    if (!results) return 0\n    return results.filter(r => r === undefined).length\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()) {\n      <mat-progress-bar mode=\"indeterminate\"\n      ></mat-progress-bar>\n    }\n    @if (pollingState.checked && !isPending()) {\n      <mat-progress-bar mode=\"determinate\"\n        [value]=\"this.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(); as get_error) {\n      <div style=\"margin-top: .5rem;\">\n        <mat-error>{{ get_error }}</mat-error>\n      </div>\n    }\n\n    @if (GET(); as dataRecord) {\n      <div style=\"margin-top: 1rem;\">\n        <!-- <div [innerHTML]=\"GET() | 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(); as post_error) {\n      <div style=\"margin-top: .5rem;\">\n        <mat-error>{{ post_error }}</mat-error>\n      </div>\n    }\n\n    @if (POST(); as dataRecord) {\n      <div style=\"margin-top: 1rem;\">\n        <!-- <div [innerHTML]=\"POST() | 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(); 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(); as dataRecord) {\n      <div style=\"margin-top: 1rem;\">\n        <!-- <div [innerHTML]=\"PUT() | 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(); as delete_error) {\n      <div style=\"margin-top: .5rem;\">\n        <mat-error>{{ delete_error }}</mat-error>\n      </div>\n    }\n\n    @if (DELETE(); as dataRecord) {\n      <div style=\"margin-top: 1rem;\">\n        <!-- <div [innerHTML]=\"DELETE() | 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() 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(); 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 } from '@angular/core';\nimport { HTTPManagerStateService } from '../..';\nimport { ApiRequest } from '../..';\n\nconst API = 'https://jsonplaceholder.typicode.com';\n\n@Component({\n  selector: 'app-request-signals-state-demo',\n  templateUrl: './request-signals-state-demo.component.html',\n  styleUrls: ['./request-signals-state-demo.component.scss'],\n  standalone: false,\n})\nexport class RequestSignalsStateDemoComponent {\n  stateService = inject(HTTPManagerStateService);\n\n  isPending = this.stateService.isPending;\n  error = this.stateService.error;\n  data = this.stateService.data;\n  dataObject = this.stateService.dataObject;\n\n  result: any = null;\n\n  getRequest() {\n    const options = ApiRequest.adapt({ server: API, path: ['posts'] });\n    this.stateService.getRequest<any>(options).subscribe({\n      next: (data) => { this.result = data; },\n      error: (err) => { this.result = err; },\n    });\n  }\n\n  getRequestById(id: number) {\n    const options = ApiRequest.adapt({ server: API, path: ['posts', id] });\n    this.stateService.getRequest<any>(options).subscribe({\n      next: (data) => { this.result = data; },\n      error: (err) => { this.result = err; },\n    });\n  }\n\n  postRequest() {\n    const options = ApiRequest.adapt({ server: API, path: ['posts'] });\n    const payload = { title: 'foo', body: 'bar', userId: 1 };\n    this.stateService.postRequest<any>(payload as any, options).subscribe({\n      next: (data) => { this.result = data; },\n      error: (err) => { this.result = err; },\n    });\n  }\n\n  putRequest(id: number) {\n    const options = ApiRequest.adapt({ server: API, path: ['posts', id] });\n    const payload = { id, title: 'updated', body: 'updated body', userId: 1 };\n    this.stateService.putRequest<any>(payload as any, options).subscribe({\n      next: (data) => { this.result = data; },\n      error: (err) => { this.result = err; },\n    });\n  }\n\n  deleteRequest(id: number) {\n    const options = ApiRequest.adapt({ server: API, path: ['posts', id] });\n    this.stateService.deleteRequest<any>(options).subscribe({\n      next: (data) => { this.result = data; },\n      error: (err) => { this.result = err; },\n    });\n  }\n}","<div class=\"demo-container\">\n  <h2>HTTP Manager State Signals Demo</h2>\n  <p>Uses <code>HTTPManagerStateSignalsService</code> with JSONPlaceholder API</p>\n\n  <div class=\"status-bar\">\n    <span>isPending: {{ isPending() }}</span>\n    <span>error: {{ error() }}</span>\n    <span>data length: {{ data()?.length || 0 }}</span>\n  </div>\n\n  <div class=\"button-row\">\n    <button mat-stroked-button (click)=\"getRequest()\">GET /posts</button>\n    <button mat-stroked-button (click)=\"getRequestById(1)\">GET /posts/1</button>\n    <button mat-stroked-button (click)=\"postRequest()\">POST /posts</button>\n    <button mat-stroked-button (click)=\"putRequest(1)\">PUT /posts/1</button>\n    <button mat-stroked-button (click)=\"deleteRequest(1)\">DELETE /posts/1</button>\n  </div>\n\n  @if (result) {\n    <div class=\"result-box\">\n      <h3>Result</h3>\n      <pre>{{ result | json }}</pre>\n    </div>\n  }\n</div>\n","import { Component, inject } from '@angular/core';\nimport { WebSocketManagerService } from '../../services/ws-manager-service/websocket-manager.service';\nimport { ChannelPresenceService } from '../../services/ws-manager-service/channel-presence.service';\n\n@Component({\n  selector: 'app-ws-signals-demo',\n  templateUrl: './ws-signals-demo.component.html',\n  styleUrls: ['./ws-signals-demo.component.scss'],\n  standalone: false,\n})\nexport class WsSignalsDemoComponent {\n  wsSignals = inject(WebSocketManagerService);\n  presence = inject(ChannelPresenceService);\n\n  connectionStatus = this.wsSignals.connectionStatus;\n  isConnecting = this.wsSignals.isConnecting;\n  retryCount = this.wsSignals.retryCount;\n  connectionError = this.wsSignals.connectionError;\n  subscribedChannels = this.wsSignals.subscribedChannels;\n\n  messages = this.presence.messages;\n  messageCount = this.presence.messageCount;\n  activeChannels = this.presence.activeChannels;\n\n  channelName = '';\n  messageContent = '';\n\n  connect() {\n    this.wsSignals.connect({ url: 'ws://localhost:3000' } as any, '');\n  }\n\n  disconnect() {\n    this.wsSignals.disconnect();\n  }\n\n  subscribe() {\n    if (this.channelName) {\n      this.presence.subscribeToChannel(this.channelName);\n    }\n  }\n\n  unsubscribe() {\n    if (this.channelName) {\n      this.presence.unsubscribeFromChannel(this.channelName);\n    }\n  }\n\n  sendBroadcast() {\n    if (this.messageContent) {\n      this.wsSignals.sendBroadcast({ content: this.messageContent });\n    }\n  }\n\n  sendMessageInChannel() {\n    if (this.channelName && this.messageContent) {\n      this.wsSignals.sendMessageInChannel(this.channelName, { content: this.messageContent });\n    }\n  }\n}","<div class=\"demo-container\">\n  <h2>WebSocket Signals Demo</h2>\n  <p>Uses <code>WebSocketSignalsManagerService</code> + <code>ChannelPresenceSignalsService</code></p>\n\n  <div class=\"status-bar\">\n    <span>connected: {{ connectionStatus() }}</span>\n    <span>connecting: {{ isConnecting() }}</span>\n    <span>retries: {{ retryCount() }}</span>\n    <span>error: {{ connectionError() }}</span>\n  </div>\n\n  <div class=\"button-row\">\n    <button mat-stroked-button (click)=\"connect()\">Connect</button>\n    <button mat-stroked-button (click)=\"disconnect()\">Disconnect</button>\n  </div>\n\n  <div class=\"input-row\">\n    <mat-form-field>\n      <mat-label>Channel</mat-label>\n      <input matInput [(ngModel)]=\"channelName\" placeholder=\"channel name\" />\n    </mat-form-field>\n    <button mat-stroked-button (click)=\"subscribe()\">Subscribe</button>\n    <button mat-stroked-button (click)=\"unsubscribe()\">Unsubscribe</button>\n  </div>\n\n  <div class=\"input-row\">\n    <mat-form-field>\n      <mat-label>Message</mat-label>\n      <input matInput [(ngModel)]=\"messageContent\" placeholder=\"message content\" />\n    </mat-form-field>\n    <button mat-stroked-button (click)=\"sendBroadcast()\">Broadcast</button>\n    <button mat-stroked-button (click)=\"sendMessageInChannel()\">Send in Channel</button>\n  </div>\n\n  <div class=\"info-box\">\n    <h3>Presence</h3>\n    <p>Message count: {{ messageCount() }}</p>\n    <p>Active channels: {{ activeChannels() | json }}</p>\n    <p>Subscribed: {{ subscribedChannels() | json }}</p>\n    @if (messages()) {\n      <p>Last message: {{ messages() | json }}</p>\n    }\n  </div>\n</div>\n","import { Component, computed, effect, Inject, inject, OnInit, signal, ViewEncapsulation } from '@angular/core';\nimport { LocalStorageManagerService, 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-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 = signal(StorageType.GLOBAL)\n  get typeValue() {\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 = computed(() => this.localStorageManagerService.settings())\n\n  setting = (store: string) => computed(() => 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  storeData = signal<any>(null)\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[]) => {\n    if(!values) return []\n    return values.filter((item: any) => item.options.storage === +this.typeValue)\n  }\n\n  selectedData = signal<any>(null)\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    // Sync typeControl → type signal\n    effect(() => {\n      const val = this.typeControl.value\n      this.type.set(val ? +val : 0)\n    })\n\n    // Bridge store form control → storeData signal (replaces valueChanges.pipe(switchMap, tap))\n    effect(() => {\n      const selected = this.storageForm.get('store')?.value as any\n      if (selected?.name) {\n        const storeData = this.localStorageManagerService.store(selected.name)()\n        this.storeData.set(storeData)\n        this.storageForm.get('data')?.patchValue(storeData, { emitEvent: false })\n      } else {\n        this.storeData.set(null)\n      }\n    })\n  }\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.typeValue, 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.selectedData.set(JSON.stringify(this.localStorageManagerService.store(store.name)()))\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.selectedData.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}","<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  @if (storeProps?.storageName || storeProps?.storageSettingsName) {\n    <div style=\"display: flex; gap: .5rem; flex-direction: column; border: gray solid thin; background-color: whitesmoke; padding: 1rem;\">\n      <div style=\"display: flex;\">\n        @if (storeProps?.storageSettingsName) {\n          <div style=\"flex:1\">\n            Database: <b>{{ storeProps?.storageSettingsName }}</b>\n          </div>\n        }\n        @if (storeProps?.storageName) {\n          <div style=\"flex:1\">\n            Data: <b>{{ storeProps?.storageName }}</b>\n          </div>\n        }\n      </div>\n    </div>\n  }\n\n  <div style=\"margin-top: 2rem;\" [formGroup]=\"newStoreForm\">\n    @if (create) {\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      @if (!isValidJSON(json.value)) {\n        <mat-error>Not Valid Data</mat-error>\n      }\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    } @else {\n      <div style=\"margin-top: 1rem;\">\n        <mat-divider></mat-divider>\n      </div>\n\n      {{ settings() | json }}\n\n      @if (filterData(settings()); as data) {\n        @if (data.length > 0) {\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                @if (element.options.encrypted) {\n                  YES\n                } @else {\n                  <span style=\"color:gray\">NO</span>\n                }\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                @if (element.options.expires !== 0) {\n                  {{expiresIn(element.options.expires)}}\n                } @else {\n                  ∞\n                }\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        } @else {\n          <h3 style=\"margin-top: 1rem;\">No Data</h3>\n        }\n\n        @if (selectedData(); as selectedData) {\n          <div 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)() | 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]=\"selectedData\"></textarea>\n              </mat-form-field>\n            </div>\n            @if (!isValidJSON(json.value)) {\n              <mat-error>Not Valid Data</mat-error>\n            }\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        }\n      }\n    }\n  </div>\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>","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';\n\nexport interface UserData {\n  id?: string;\n  name?: string;\n  [key: string]: any;\n}\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-signals-state-demo></app-request-signals-state-demo>\n    </p>\n  }\n  @case ('http_state_service_ws') {\n    <p>\n      <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n      <app-ws-signals-demo></app-ws-signals-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-signals-demo></app-store-state-signals-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 { LocalStorageManagerService, 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(LocalStorageManagerService)\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, HTTPManagerService } 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  httpManagerService = inject(HTTPManagerService)\n\n  // Using signals service: signals are callable in templates (e.g. isPending())\n  isPending = this.httpManagerService.isPending\n  countdown = this.httpManagerService.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.httpManagerService.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.httpManagerService.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.httpManagerService.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.httpManagerService.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.httpManagerService.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.httpManagerService.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.httpManagerService.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 { provideToast } from 'toast-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';\n\nimport { LocalStorageSignalsDemoComponent } from './http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component';\nimport { RequestSignalsManagerDemoComponent } from './http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component';\nimport { RequestSignalsStateDemoComponent } from './http-request-services-demo/request-signals-state-demo/request-signals-state-demo.component';\nimport { WsSignalsDemoComponent } from './http-request-services-demo/ws-signals-demo/ws-signals-demo.component';\nimport { StoreStateSignalsDemoComponent } from './http-request-services-demo/store-state-signals-demo/store-state-signals-demo.component';\n\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    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    StoreStateSignalsDemoComponent,\n    // MessengerChatModule,\n    // StoreStateManagerModule\n],\n  declarations: [\n    RequestManagerBasicDemoComponent,\n    HttpRequestServicesDemoComponent,\n    RequestManagerDemoComponent,\n    RequestSignalsManagerDemoComponent,\n    RequestSignalsStateDemoComponent,\n    WsSignalsDemoComponent,\n    LocalStorageDemoComponent,\n    LocalStorageSignalsDemoComponent,\n    DatabaseDataDemoComponent,\n    UploadDemoComponent,\n  ],\n  exports: [\n    HttpRequestServicesDemoComponent,\n    UploadDemoComponent,\n  ],\n  providers: [\n    provideToast(),\n    { provide: HTTP_INTERCEPTORS, useClass: WithCredentialsInterceptor, multi: true },\n    { provide: HTTP_INTERCEPTORS, useClass: RequestHeadersInterceptor, multi: true },\n    { provide: HTTP_INTERCEPTORS, useClass: ProxyDebuggerInterceptor, multi: true },\n    { provide: CONFIG_SETTINGS_TOKEN, useValue: ConfigOptions.adapt() },\n    HTTPManagerService, LocalStorageManagerService,\n  ],\n})\nexport class HttpRequestManagerModule {\n\n  static forRoot(config: ConfigOptions = ConfigOptions.adapt()): ModuleWithProviders<HttpRequestManagerModule> {\n    return {\n      ngModule: HttpRequestManagerModule,\n      providers: [\n        { provide: CONFIG_SETTINGS_TOKEN, useValue: ConfigOptions.adapt(config) },\n        HTTPManagerService, LocalStorageManagerService //all services that need access to config\n      ],\n    };\n    }\n\n}\n\n\n","/*\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';\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":["catchError","i1","i1.DownloadFileComponent","ClientInfo","AIPrompt","ClientInfoMapper","i2","i5","i6","i7","i12.FileDownloaderComponent","i8","i9","i10","i11","i12","i13","i3","i4","i6.StoreStateSignalsDemoComponent","i7.RequestManagerBasicDemoComponent","i8.RequestManagerDemoComponent","i9.RequestSignalsStateDemoComponent","i10.WsSignalsDemoComponent","i11.LocalStorageDemoComponent","i12.DatabaseDataDemoComponent","i13.UploadDemoComponent","i11.FileDownloaderComponent"],"mappings":"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"}