http-request-manager 18.7.1 → 18.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"http-request-manager.mjs","sources":["../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/models/storage-type.enum.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/models/setting-options.model.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/models/storage-option.model.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/models/global-store-options.model.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/models/storage-data.model.ts","../../../projects/http-request-manager/src/lib/services/utils/utils.service.ts","../../../projects/http-request-manager/src/lib/services/utils/encryption/random.ts","../../../projects/http-request-manager/src/lib/services/utils/app.service.ts","../../../projects/http-request-manager/src/lib/services/utils/encryption/symmetrical-encryption.service.ts","../../../projects/http-request-manager/src/lib/services/utils/encryption/encryption-test.service.ts","../../../projects/http-request-manager/src/lib/models/config-token.model.ts","../../../projects/http-request-manager/src/lib/services/utils/headers.service.ts","../../../projects/http-request-manager/src/lib/services/utils/path-query.service.ts","../../../projects/http-request-manager/src/lib/services/utils/encryption/asymmetrical-encryption.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/rxjs-operators/request-streaming.ts","../../../projects/http-request-manager/src/lib/services/ws-manager-service/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/services/websocket.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/request.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/rxjs-operators/countdown.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/rxjs-operators/delay-retry.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/rxjs-operators/request-polling.ts","../../../projects/http-request-manager/src/lib/models/database-storage.model.ts","../../../projects/http-request-manager/src/lib/models/retry-options.model.ts","../../../projects/http-request-manager/src/lib/models/data-type.enum.ts","../../../projects/http-request-manager/src/lib/models/config-http-options.model.ts","../../../projects/http-request-manager/src/lib/models/config-local-storage-options.model.ts","../../../projects/http-request-manager/src/lib/models/config-options.model.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/http-manager.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/request-signals.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/http-manager-signals.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/models/api-request.model.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/models/request-options.model.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/models/ws-options.model.ts","../../../projects/http-request-manager/src/lib/services/utils/object-merger.service.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/local-storage-manager.service.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.ts","../../../projects/http-request-manager/src/lib/services/database-manager-service/models/table-schema.ts","../../../projects/http-request-manager/src/lib/services/database-manager-service/db.storage.service.ts","../../../projects/http-request-manager/src/lib/services/database-manager-service/database.manager.service.ts","../../../projects/http-request-manager/src/lib/services/ws-manager-service/models/channel-message.model.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/http-manager-state.store.ts","../../../projects/http-request-manager/src/lib/services/store-state-manager-service/models/state-storage-options.model.ts","../../../projects/http-request-manager/src/lib/services/store-state-manager-service/store-state-manager.service.ts","../../../projects/http-request-manager/src/lib/services/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/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-manager-ws-demo/models/oidc-client.model.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/services/state-service-demo.service.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/services/message-service-demo.service.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/services/notification-service-demo.service.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/models/user-data.model.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/services/state-data-request.service.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-info.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-mapper-client-info.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-ai-prompt.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/store-state-manager-demo/models/settings.model.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/store-state-manager-demo/services/settings-state.service.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-manager.module.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/http-request-services-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/http-request-services-demo.component.html","../../../projects/http-request-manager/src/public-api.ts","../../../projects/http-request-manager/src/http-request-manager.ts"],"sourcesContent":["export enum StorageType {\n GLOBAL,\n SESSION,\n DB\n}\n","import { StorageType } from \"./storage-type.enum\"\n\nexport interface SettingOptionsInterface {\n storage?: StorageType\n expires?: number\n expiresIn?: string\n encrypted?: boolean\n}\n\nexport class SettingOptions implements SettingOptionsInterface {\n\n constructor(\n public storage?: StorageType,\n public expires?: number,\n public expiresIn?: string,\n public encrypted?: boolean,\n ) {}\n\n static adapt(item?: any): SettingOptions {\n\n const storage = (typeof item?.storage !== 'undefined' && item?.storage !== null) ? Number(item.storage) : StorageType.GLOBAL;\n const expires = (typeof item?.expires !== 'undefined' && item?.expires !== null) ? Number(item.expires) : 0;\n const expiresIn = (typeof item?.expiresIn !== 'undefined' && item?.expiresIn !== null) ? item.expiresIn : '';\n const encrypted = (typeof item?.encrypted !== 'undefined' && item?.encrypted !== null) ? Boolean(item.encrypted) : false;\n\n return new SettingOptions(\n storage,\n expires,\n expiresIn,\n encrypted,\n )\n\n }\n\n}\n","import { SettingOptions } from \"./setting-options.model\"\n\nexport interface StorageOptionInterface {\n id?: string\n name: string\n data?: any\n options?: SettingOptions\n}\n\nexport class StorageOption implements StorageOptionInterface {\n\n constructor(\n public id?: string,\n public name: string = 'untitled',\n public data?: any,\n public options?: SettingOptions,\n ) {}\n\n static adapt(item?: any): StorageOption {\n\n return new StorageOption(\n (item?.id) ? item.id : crypto.randomUUID(),\n (item?.name) ? item.name.toLowerCase() : 'untitled',\n item?.data,\n (item?.options) ? SettingOptions.adapt(item.options) : SettingOptions.adapt(),\n )\n\n }\n\n}\n\n\n","import { StorageOption } from \"./storage-option.model\"\n\nexport interface GlobalStoreOptionsInterface {\n encryption?: boolean\n expiresIn?: string\n expires?: number\n stores: StorageOption[]|null\n}\n\nexport class GlobalStoreOptions implements GlobalStoreOptionsInterface {\n\n constructor(\n public encryption = false,\n public expiresIn?: string,\n public expires?: number,\n public stores: StorageOption[]|null = [],\n ) {}\n\n static adapt(item?: any): GlobalStoreOptions {\n\n return new GlobalStoreOptions(\n (item?.encryption) ? item.encryption : false,\n (item?.expiresIn) ? item.expiresIn : '',\n (item?.expires) ? item.expires : 0,\n (item?.stores) ? item.stores.map((item: any) => StorageOption.adapt(item)) : []\n )\n\n }\n\n}\n","export interface StorageDataInterface {\n id?: string\n data?: any\n}\n\nexport class StorageData implements StorageDataInterface {\n\n constructor(\n public id?: string,\n public data?: any,\n ) {}\n\n static adapt(item?: any): StorageData {\n\n return new StorageData(\n (item?.id) ? item.id : crypto.randomUUID(),\n (item?.data) ? item.data : null\n )\n\n }\n\n}\n\n\n","\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UtilsService {\n\n http = inject(HttpClient)\n\n constructor() { }\n\n isString(x: string | number) {\n return Object.prototype.toString.call(x) === '[object String]'\n }\n\n isObject(obj: any) {\n return Object.prototype.toString.call(obj) === '[object Object]'\n }\n\n JSONToString(value: any) {\n return (this.isObject(value)) ? JSON.stringify(value) : value\n }\n\n stringToJSON(value: string) {\n return (this.isJSON(value)) ? JSON.parse(value) : value\n }\n\n isJSON(str: any) {\n try {\n JSON.parse(str)\n } catch (e) {\n return false\n }\n return true\n }\n\n getValueByProp(obj: any, prop: string) {\n if(typeof obj === 'undefined') return false\n return obj[prop]\n }\n\n objectsEqual(x: any, y: any): boolean {\n\n const ok = Object.keys, tx = typeof x, ty = typeof y\n\n return x && y && tx === 'object' && tx === ty ? (\n ok(x).length === ok(y).length &&\n ok(x).every((key: any) => this.objectsEqual(x[key], y[key]))\n ) : (x === y)\n\n }\n\n getJSON(file: string) {\n return this.http.get(`assets/data/${file}`)\n }\n\n get today() {\n return new Date().getMilliseconds() / 1000\n }\n\n base32ToHex(base32: string): string {\n\n const base32chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\"\n\n const charToValue = (char: string) => base32chars.indexOf(char.toUpperCase())\n\n let bits = ''\n let hex = ''\n\n for (let i = 0; i < base32.length; i++) {\n const val = charToValue(base32.charAt(i))\n bits += val.toString(2).padStart(5, '0')\n }\n\n for (let i = 0; i + 4 <= bits.length; i += 4) {\n const chunk = bits.substr(i, 4)\n hex += parseInt(chunk, 2).toString(16)\n }\n\n return hex.toUpperCase()\n }\n\n binaryToHex(binary: string): string {\n let hex = '';\n for (let i = 0; i < binary.length; i += 8) {\n const byte = binary.substr(i, 8);\n const decimal = parseInt(byte, 2);\n hex += decimal.toString(16).padStart(2, '0');\n }\n return hex.padStart(32, '0').substr(0, 32);\n }\n\n // y = years, m = months, w = weeks, d = days, hr = hours, mn = minutes else seconds\n // returns epoch time corresponding to the expiry type\n expires(str?: string) {\n\n if(!str) return undefined\n\n const match = str.match(/[^0-9]+$/)\n\n const type = (match) ? str.slice(-match[0].length) : 0\n\n const now = Math.floor(new Date().getTime() / 1000)\n\n let value = 0;\n\n switch (type) {\n case\n 'y':\n const years = parseInt(str.slice(0, -1))\n value = now + (years * 31556926)\n break;\n case\n 'm':\n const months = parseInt(str.slice(0, -1))\n value = now + (months * 2629743)\n break;\n case\n 'w':\n const weeks = parseInt(str.slice(0, -1))\n value = now + (weeks * 604800)\n break;\n case\n 'd':\n const days = parseInt(str.slice(0, -1))\n value = now + (days * 86400)\n break;\n case\n 'hr':\n const hrs = parseInt(str.slice(0, -2))\n value = now + (hrs * 3600)\n break;\n case\n 'mn':\n const min = parseInt(str.slice(0, -2))\n value = now + (min * 60)\n break;\n default: //seconds\n const sec = parseInt(str.slice(0, -1))\n value = now + sec\n break;\n }\n return value;\n }\n\n hasExpired(expiryDate: number): boolean {\n if (!expiryDate || expiryDate === 0) return false\n const currentTime = Math.floor(new Date().getTime() / 1000)\n return expiryDate < currentTime\n }\n\n hasExpiry(setting: any) {\n return (setting?.expires) ? true : false\n }\n\n expiresIn(expiryDate: number) {\n\n if (!expiryDate) return;\n\n const now = Math.floor(new Date().getTime() / 1000);\n let diff = expiryDate - now;\n\n if (diff <= 0) return \"Expired\";\n\n const units = [\n { label: 'y', s: 31536000 },\n { label: 'm', s: 2592000 },\n { label: 'w', s: 604800 },\n { label: 'd', s: 86400 },\n { label: 'h', s: 3600 },\n { label: 'min', s: 60 },\n { label: 's', s: 1 },\n ];\n\n let result = [];\n\n for (const unit of units) {\n if (diff >= unit.s) {\n const value = Math.floor(diff / unit.s);\n diff %= unit.s;\n result.push(`${value}${unit.label}`);\n }\n }\n\n return result.join(', ');\n }\n\n lc = (str: string) => str.toLowerCase().replace(/[^\\w\\s]/g, '').replace(/\\s+/g, '_')\n\n}\n","export const Random = () => {\n const typedArray = new Uint8Array(1)\n const randomValue = crypto.getRandomValues(typedArray)[0]\n const randomFloat = randomValue / Math.pow(2, 8)\n return randomFloat\n}\n\nexport const RandomNumber = (min: number, max: number) => {\n return Math.floor(Random() * max) + min\n}\n\nexport const RandomNumbers = (min: number, max: number, length: number) => {\n const numbers: number[] = []\n for (let i = 0; i < length; i++) numbers.push(Math.floor(Random() * max) + min)\n return numbers\n}\n\nexport const RandomNumbersUnique = (min: number, max: number, length: number) => {\n let count = 0;\n\n // Adjust the length if it exceeds the number of unique numbers possible in the range\n if (length > (max - min + 1)) {\n console.error('error encountered');\n length = max - min + 1;\n }\n\n console.log('length', length);\n const numbers: number[] = [];\n const maxAttempts = length * 100 ; // Safeguard to prevent infinite loops\n\n while (numbers.length < length && count < maxAttempts) {\n\n const num = Math.floor(Random() * max) + min;\n\n if (!numbers.includes(num)) {\n numbers.push(num);\n }\n }\n\n if (count >= maxAttempts) {\n throw new Error('Maximum attempts exceeded while generating unique numbers');\n }\n\n return numbers;\n};\n\nexport const RandomStr = () => {\n\n const typedArray = new Uint8Array(8)\n const array = new Uint32Array(1)\n crypto.getRandomValues(array)\n return array[0].toString(36)\n\n}\n\nexport const RandomSignature = () => {\n\n const typedArray = new Uint8Array(8)\n const array = new Uint32Array(1)\n crypto.getRandomValues(array)\n return array[0]\n\n}\n\nexport const UUID = () => {\n return self.crypto.randomUUID()\n}\n\n/**\n * Generate a UUID string (legacy format)\n */\nexport const UUID_STR = (): string => {\n const s4 = () => {\n return Math.floor((1 + Random()) * 0x10000)\n .toString(16)\n .substring(1);\n };\n return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\n};\n\n\n","import { APP_ID, Inject, Injectable } from '@angular/core';\n\n// Must provide a value for APP_ID in AppModule->Providers\n// providers: [\n// {\n// provide: APP_ID,\n// useValue: \"056991ac-3537-43ab-b5b9-83edf6554eff\",\n// },\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AppService {\n\n appID: string\n\n constructor(@Inject(APP_ID) private id: string) {\n this.appID = this.id\n }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport * as CryptoJS from 'crypto-js';\n\nimport { RandomSignature } from './random';\nimport { AppService } from '../app.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SymmetricalEncryptionService {\n\n appID: string; // APP SERVICE TO MANAGER ENCRYPTION KEY\n\n private appService = inject(AppService)\n\n constructor() {\n // TODO: The APP ID is not a string, it is a function\n this.appID = (this.appService.appID) ? this.appService.appID : ''\n if(this.appID === '') console.warn('No App Key has been define')\n }\n\n generateCipherKey() {\n return (RandomSignature().toString() + RandomSignature().toString()).substring(0, 8)\n }\n\n encrypt(str: any, key = this.appID) {\n\n if(!str || key === '') return ''\n\n let _key = CryptoJS.enc.Utf8.parse(key)\n let _iv = CryptoJS.enc.Utf8.parse(key)\n\n try {\n\n const encrypted = CryptoJS.AES.encrypt(\n JSON.stringify(str), _key, {\n keySize: 16,\n iv: _iv,\n mode: CryptoJS.mode.ECB,\n padding: CryptoJS.pad.Pkcs7\n });\n\n return encrypted.toString()\n\n } catch(error: any) {\n console.log(error)\n }\n\n return\n }\n\n decrypt(str: string, key = this.appID) {\n\n if(!str || key === '') return\n\n let _key = CryptoJS.enc.Utf8.parse(key)\n let _iv = CryptoJS.enc.Utf8.parse(key)\n\n try {\n\n return CryptoJS.AES.decrypt(\n str, _key, {\n keySize: 16,\n iv: _iv,\n mode: CryptoJS.mode.ECB,\n padding: CryptoJS.pad.Pkcs7\n }).toString(CryptoJS.enc.Utf8);\n\n } catch(error: any) {\n console.log(error)\n }\n\n return\n }\n\n createSignature(url: string, len = 16) {\n const sig = CryptoJS.SHA256(url).toString(CryptoJS.enc.Hex)\n return sig.substring(0, len).toUpperCase()\n }\n\n normalizeURL(url: string) {\n const normalizedURL = url.replace(/(https?:\\/\\/)?(www\\.)?/, '').replace(/\\/+$/, '');\n return normalizedURL;\n }\n\n generateSignature(url: string) {\n const normalizedURL = this.normalizeURL(url)\n const hash = CryptoJS.SHA256(normalizedURL)\n const signature = hash.toString(CryptoJS.enc.Hex)\n return signature;\n }\n\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EncryptionTestService {\n\n constructor() { }\n\n private isBase64(str: string): boolean {\n const base64Pattern = /^(?:[A-Z0-9+/]{4})*(?:[A-Z0-9+/]{2}==|[A-Z0-9+/]{3}=)?$/i;\n return base64Pattern.test(str);\n }\n\n private isHexadecimal(str: string): boolean {\n const hexPattern = /^[0-9a-fA-F]+$/;\n return hexPattern.test(str) && (str.length % 2 === 0);\n }\n\n private hasHighEntropy(str: string): boolean {\n const uniqueChars = new Set(str).size;\n return uniqueChars > str.length * 0.6;\n }\n\n isEncrypted(str: string): boolean {\n\n if (typeof str !== 'string') {\n return false;\n }\n\n if (this.isBase64(str) || this.isHexadecimal(str)) {\n return true;\n }\n\n return this.hasHighEntropy(str);\n\n }\n\n}\n","import { InjectionToken } from \"@angular/core\";\nimport { ConfigOptions } from \"./config-options.model\";\n\n/**\n * An injection token that provides the configuration settings for the application.\n * This token can be used to inject the `ConfigSettings` instance into components or services\n * that require access to the application configuration.\n */\nexport const CONFIG_SETTINGS_TOKEN = new InjectionToken<ConfigOptions>('http.config');\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HeadersService {\n\n headers = {}\n\n generateHeaders(headers?: Record<string, string>): { headers: HttpHeaders } {\n\n const allHeaders = headers ? { ...this.headers, ...headers } : {}\n return { headers: new HttpHeaders(allHeaders) }\n\n }\n\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PathQueryService {\n\n buildAPIPath(server: string|string[], params?: any[]|any) {\n\n server = (Array.isArray(server)) ? server.join('/') : server\n\n const pathObjects = (params) ? params.filter((path:any) => (!this.isObject(path))) : []\n const queryObjects = (params) ? params.filter((path:any) => (this.isObject(path))) : []\n\n const query = this.removeEmptyParams(queryObjects.reduce((r: any, c: any) => {\n Object.entries(c).forEach(([key, value]) => {\n r[key] = Array.isArray(value) ? value.join(',') : value\n })\n return r\n }, {}))\n\n let path = this.buildRestPath(server, pathObjects)\n\n return(Object.keys(query).length > 0) ? path + '?' + this.buildQueryPath(query) : path\n\n }\n\n private buildRestPath(server: string, params: any[]): string {\n server = (server) ? server : ''\n server = (server.charAt(0) === '/') ? server.substring(1) : server\n return this.cleanUrlPath(server +'/'+ params.join('/'))\n }\n\n private buildQueryPath(params: any): string {\n\n const searchParams = new URLSearchParams()\n\n for (const key in params) {\n\n if (Array.isArray(params[key])) {\n params[key].forEach((value: any) => searchParams.append(key, value));\n } else {\n searchParams.append(key, params[key]);\n }\n\n }\n\n return searchParams.toString()\n\n }\n\n private cleanUrlPath(str: string) {\n return str.replace(/([^:]\\/)\\/+/g, \"$1\").replace(/\\/$/,'')\n }\n\n private isObject(val: any): boolean {\n return (val === null) ? false : ( (typeof val === 'function') || (typeof val === 'object') )\n }\n\n private removeEmptyParams = (obj: any): Record<string, any> =>\n Object.fromEntries(\n Object.entries(obj)\n .map(([key, value]) =>\n [key, value && typeof value === 'object' ? this.removeEmptyParams(value) : value]\n )\n .filter(([_, value]) => value !== undefined && value !== \"\")\n )\n\n}\n","import { Injectable } from '@angular/core';\n\nimport { BehaviorSubject, EMPTY, Observable, from, of } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AsymmetricalEncryptionService {\n\n constructor() {}\n\n generateKeyPair(modulusLength = 2048): Observable<CryptoKeyPair> {\n \n // modulusLength - 1024, 2048, 4096\n // hash - SHA-256\n\n return from(crypto.subtle.generateKey(\n {\n name: \"RSA-OAEP\",\n modulusLength,\n publicExponent: new Uint8Array([1, 0, 1]), // 65537\n hash: { name: \"SHA-256\" }\n },\n true, // Extractable keys\n [\"encrypt\", \"decrypt\"]\n ))\n\n }\n\n encryptData(publicKey: CryptoKey, data: string) {\n\n const encodedData = new TextEncoder().encode(data)\n\n return from(crypto.subtle.encrypt(\n {\n name: \"RSA-OAEP\"\n },\n publicKey,\n encodedData\n )).pipe(\n map(enc => this.arrayBufferToBase64(enc))\n )\n\n }\n\n decryptData(privateKey: CryptoKey, encryptedData: string) {\n\n const encStr = this.base64ToArrayBuffer(encryptedData)\n\n return from(crypto.subtle.decrypt(\n {\n name: \"RSA-OAEP\"\n },\n privateKey,\n encStr\n ).then(decryptedData => {\n return new TextDecoder().decode(decryptedData)\n }))\n\n }\n\n pemToArrayBuffer(pem: string): ArrayBuffer {\n\n const b64 = pem.replace(/(-----BEGIN (RSA )?(PRIVATE|PUBLIC) KEY-----|-----END (RSA )?(PRIVATE|PUBLIC) KEY-----|\\n)/g, '')\n const binaryString = atob(b64)\n const len = binaryString.length\n const buffer = new ArrayBuffer(len)\n const view = new Uint8Array(buffer)\n\n for (let i = 0; i < len; i++) {\n view[i] = binaryString.charCodeAt(i)\n }\n\n return buffer\n\n }\n\n base64ToArrayBuffer(base64: string): ArrayBuffer {\n \n const binaryString = atob(base64);\n const len = binaryString.length;\n const buffer = new ArrayBuffer(len);\n const view = new Uint8Array(buffer);\n\n for (let i = 0; i < len; i++) {\n view[i] = binaryString.charCodeAt(i);\n }\n\n return buffer;\n }\n\n arrayBufferToBase64(buffer: ArrayBuffer): string {\n\n let binary = '';\n const bytes = new Uint8Array(buffer);\n const len = bytes.byteLength;\n\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n\n return window.btoa(binary)\n\n }\n\n base64ToPEM(base64Key: string, publicKey = true) {\n\n const keyType = (publicKey) ? 'PUBLIC' : 'PRIVATE'\n\n const header = `-----BEGIN ${keyType} KEY-----\\n`\n const footer = `\\n-----END ${keyType} KEY-----`\n\n const keyBody = base64Key.match(/.{1,64}/g)?.join(\"\\n\") || \"\"\n\n return header + keyBody + footer\n\n }\n\n pemToCryptoKey(\n pem: string, \n algorithm: RsaHashedKeyGenParams, \n extractable: boolean, \n keyUsages: KeyUsage[],\n format: any = \"pkcs8\" //\"raw\" | \"pkcs8\" | \"spki\"\n ) {\n \n const buffer = this.pemToArrayBuffer(pem);\n\n console.log('buffer found ', buffer);\n \n return from(crypto.subtle.importKey(\n format,\n buffer,\n algorithm,\n extractable,\n keyUsages\n ))\n\n }\n \n // TESTING\n\n testGenerateKeys(): Observable<string> {\n const testSequence: BehaviorSubject<string> = new BehaviorSubject<string>(\"\");\n const testSequence$: Observable<string> = testSequence.asObservable();\n testSequence.next(\"Test Generating Keys\");\n\n // GENERATE KEYS\n this.generateKeyPair().subscribe((data) => {\n\n console.log(\"GEN-GENERATED KEYS: \", data)\n\n crypto.subtle.exportKey('spki', data.publicKey)\n .then(key => {\n const publicKeyBase64 = this.arrayBufferToBase64(key);\n console.log(\"GEN-EXPORT PUBLIC KEY: \", this.base64ToPEM(publicKeyBase64, true));\n })\n\n crypto.subtle.exportKey('pkcs8', data.privateKey)\n .then(key => {\n const privateKeyBase64 = this.arrayBufferToBase64(key);\n console.log(\"GEN-EXPORT PRIVATE KEY: \", this.base64ToPEM(privateKeyBase64, false));\n });\n\n // TEST WITH GENERATED KEYS\n this.encryptData(data.publicKey, \"Sample Data here - Mike Bonifacio\")\n .subscribe((enc) => {\n\n console.log(\"GEN-ENCRYPT==>: \", enc)\n\n this.decryptData(data.privateKey, enc).subscribe((dec) => {\n testSequence.next('Test Passed');\n testSequence.complete();\n })\n\n })\n\n })\n return testSequence$;\n\n }\n\n testDecryptionWithKeys(): Observable<string> {\n const testSequence: BehaviorSubject<string> = new BehaviorSubject<string>(\"\");\n const testSequence$: Observable<string> = testSequence.asObservable();\n testSequence.next(\"Test Generating Keys\");\n\n const privateKey = `-----BEGIN PRIVATE KEY-----\n MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDKVBkCWNb9eHVF\n twAA5mdAyvXFix3WavdrsoYRkvtCl8ogDBQf8f6N0bRkDF1zcVHRrNAEyozXDtuD\n kFgSiivBFREI7fiS3sOvduq6FaGXzX0IY6oaVMu8oOPgDvC0yvoohR+0Qxq2d6lP\n SPyHeKQaxP4KxzCJJzB1XAcbd2eFzUUDv25mNlwdVkmW8FI/sAxnJLgPTW78dzfX\n Ddfk+nxdIqxVKSLATnL0kMN7aGJx24UozioAIpzvvvF5/+7HTd1gi6NeCqrAYr3g\n iP364AE26CFwFvHnafO9uNQhlQ+uiNnOoInXByfFGVP+RidSpfLzaxDjs6RDwpol\n h098btONAgMBAAECggEAAVhHM2OD5IkUtuowwcKNaCTKGmrClRE3gMuzJeBsSJEy\n uAReUFILZylcnhegDytSti2vDA9T7xqtO6CU0p3V8LpU89JMOPRb/deirI4UXSpx\n xbNyjirOO6bnrNlOWfKexdQQsikYPzF2iM1Scpr1u9ZDCHZOl1ZYSrkve5My4coP\n 3Gx6tTBqL0jQBfcpf4ES8BH3JSawR/MgqzDS74+bI2VH+kvuPAC1L4fBgaV3VUv0\n nFzim5A3s5VaXPgJbEIghP9BkYGFkeT9ma3nliEZWc96AzsmowFn1ayCvrNVPo9R\n ECD2NnttBiCJZt3H93sR9+OTeA8Bls+aZGlKd5mLAQKBgQDpf8nIYUm/Zmls7/lQ\n QBUSGHEYrbjNsEejQsPgNDtg2EVSxdUkvTn7Wb+HExTk09Z5bNvhaO2532/FH9y8\n ahSXafiMXpfR2olwXdOB9yXXl4F5C0LGnmzGim4OSeWzAX0JCL470KaS0QN3EmoG\n 9F0YCfMnZXNTweSSx4xvlO6ggQKBgQDd01uIolm7z1DIWCwNERAXP2GDwcvxyzYK\n YqJfKDeHt2t6yIzZMMotnPDy+OlcdGspIIHkB5a+SZN5Nt7DUKg/MnyOZ3KbVq41\n k7dR4Ka3LRnGkesy7lSr7ef1rfquyR75OXJQcPWvkFcLu0TMiQhvptatZ8VN+F4n\n fDQELRotDQKBgQCgN+AUT7VT0QjcCBnRV/ddUEoiPenFsYSmYMSYzh5ESIHg1wB2\n 0iS79Iw4Of6nOTg8X1bM57vfQ5Kk90T2P+/bKYqzfqC8DTErWiYsUpKzyTC9Bt4N\n /Vz0Kr5zrX8ggg/yp/4oevYhXav8AzWfigNq4EDpMnKc8TlPAf+5/L50gQKBgQC2\n mLPhPhr1gUszD3l7bA89w7uGlLFHoQoj9FtKTzWervp3QLzIT+QtNeIVb5XQuDg5\n y3uAdEq+6pvNjMBEMJG+K9Xh9v+dJPYUPjsJ2A4D/MkZ7qWX8B2cxSJK1uLim8W2\n S3ZxBvsGgJ9WldmlMCvUlJZkeWYtr4P5psC+q02/xQKBgQCDII/jcV2+lRM2iNTe\n vBijZSaNMEWOK/Y+/HFK8GYKXnB+xNWhrm8rKgWGzpDJAUPMh9Tt+leW9LKEBuzF\n Y1bGblmGm1zsPWpIx05Fdtv9eOJmFnXbGzIsYyhadZnPcQOWhqxtpVxSuul0Jc7Q\n XNq4qPaPXhbQAshgtyBt75DMkw==\n -----END PRIVATE KEY-----`\n \n const pubKey = `-----BEGIN PUBLIC KEY-----\n MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylQZAljW/Xh1RbcAAOZn\n QMr1xYsd1mr3a7KGEZL7QpfKIAwUH/H+jdG0ZAxdc3FR0azQBMqM1w7bg5BYEoor\n wRURCO34kt7Dr3bquhWhl819CGOqGlTLvKDj4A7wtMr6KIUftEMatnepT0j8h3ik\n GsT+CscwiScwdVwHG3dnhc1FA79uZjZcHVZJlvBSP7AMZyS4D01u/Hc31w3X5Pp8\n XSKsVSkiwE5y9JDDe2hicduFKM4qACKc777xef/ux03dYIujXgqqwGK94Ij9+uAB\n NughcBbx52nzvbjUIZUProjZzqCJ1wcnxRlT/kYnUqXy82sQ47OkQ8KaJYdPfG7T\n jQIDAQAB\n -----END PUBLIC KEY-----`\n\n const algorithm: RsaHashedKeyGenParams = {\n name: \"RSA-OAEP\",\n modulusLength: 2048,\n publicExponent: new Uint8Array([1, 0, 1]),\n hash: \"SHA-256\"\n };\n\n // ENCRYPT\n this.pemToCryptoKey(\n pubKey,\n algorithm,\n true,\n [\"encrypt\"],\n \"spki\"\n ).subscribe((keyPublic) => {\n\n // console.log(\"PUBLIC KEY: \", keyPublic)\n\n this.encryptData(keyPublic, \"Sample Data here - Mike Bonifacio\")\n .subscribe((str) => {\n console.log(\"ENCRYPTED STRING: \", str);\n testSequence.next('encrypted string success');\n })\n\n })\n\n const enc = \"r7UOuEGBZ6jbVTOIBuv9jFOEtRiedmS27hfW40k7XKCTsQ5VhWup0qu2BA2ANZaGKii/uehJ/RSPiyfGbJ6leJrat0mA1hPqH/XodaBzLMDigvdYM1NSXFZMDa40OpLUIXbPlAvybjcGu7Bal+LMA8htHrFu/OmM/fHI66xOzzpuXSYx0OkWjtY81rUQ1FFkvrkx2jGFPZ0p+Nw/v3Q4cJnet6V63vCueFlD749VMcVXo7pvz4AIPpB+IOy3kbxaYTPakLVioJERU6GFMXWkECuRvohhS9CETcORZtRVRkvhcHk3lxgIhfqojUKYgD6K5dDELDPsWIS+iTG1XIQIlg==\";\n\n // DECRYPTION\n this.pemToCryptoKey(\n privateKey,\n algorithm,\n false,\n [\"decrypt\"],\n \"pkcs8\"\n ).subscribe((key) => {\n\n // console.log(\"DECRYPT ===\", key)\n\n this.decryptData(key, enc)\n .pipe(\n catchError(err => {\n console.log(\"ERROR: \", err);\n return EMPTY\n })\n ).subscribe((str) => {\n console.log(\"DECRYPTED STRING: \", str);\n testSequence.next('decrypted string success');\n })\n\n })\n\n return testSequence$;\n };\n}\n","import { OperatorFunction } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { HttpEventType } from '@angular/common/http';\n\nexport function requestStreaming(): OperatorFunction<any, any> {\n\n return input$ => input$.pipe(\n filter((event: any) =>\n event.type === HttpEventType.DownloadProgress || event.type === HttpEventType.Response\n ),\n\n map((event: any) => {\n\n if (event.type === HttpEventType.DownloadProgress) {\n return event.partialText || ''\n } else if (event.type === HttpEventType.Response) {\n return event.body\n }\n\n }),\n\n map((data: any) => {\n if (typeof data === 'string') {\n const matches = data.match(/{[^}]+}/g) || []\n return (matches.length > 0) ? matches.map(match => JSON.parse(match)) : data\n }\n return data\n })\n )\n\n}\n\n","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\n return new ChannelInfo(\n item?.name,\n item?.canSubscribe,\n )\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","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { WSOptions } from '../../request-manager-state-service';\nimport { UUID_STR } from '../../utils/encryption/random';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WebsocketService {\n\n private socket: WebSocket | null = null;\n\n private messages = new BehaviorSubject<any>(null);\n public messages$: Observable<any> = this.messages.asObservable();\n\n private connectionStatus = new BehaviorSubject<boolean>(false);\n public connectionStatus$: Observable<boolean> = this.connectionStatus.asObservable();\n\n private isSubscribed: boolean = false;\n\n // Track currently subscribed channels\n private subscribedChannels = new BehaviorSubject<Set<string>>(new Set());\n public subscribedChannels$: Observable<Set<string>> = this.subscribedChannels.asObservable();\n\n // Store last options for reconnection\n private lastOptions: WSOptions | null = null;\n\n private getSessionId(): string {\n return sessionStorage.getItem('WSID') ?? (() => {\n const uuid = UUID_STR()\n sessionStorage.setItem('WSID', uuid)\n return uuid\n })()\n }\n\n private sendSubscribe(channelName: string, user: any) {\n\n if (this.socket?.readyState === WebSocket.OPEN && !this.isSubscribed) {\n const message = {\n type: 'subscribe',\n subscribedChannel: channelName,\n content: {\n id: this.getSessionId(),\n ...user\n }\n };\n this.socket.send(JSON.stringify(message));\n this.isSubscribed = true; // Set the flag immediately after sending\n console.log(`[CLIENT] Sent initial subscription to: ${channelName}`);\n } else {\n console.warn(`[CLIENT] Subscription prevented. Open: ${this.socket?.readyState === WebSocket.OPEN}, Subscribed: ${this.isSubscribed}`);\n }\n }\n\n connect(options: WSOptions, jwtToken: string) {\n\n if (this.socket) {\n\n if (this.socket.readyState === WebSocket.OPEN) {\n console.log('WebSocket connection is already OPEN.');\n return;\n }\n\n if (this.socket.readyState === WebSocket.CONNECTING) {\n console.log('WebSocket is already CONNECTING. Waiting for handshake.');\n return;\n }\n\n if (this.socket.readyState === WebSocket.CLOSING || this.socket.readyState === WebSocket.CLOSED) {\n console.log(`Cleaning up stale socket (State: ${this.socket.readyState}).`);\n this.socket.close();\n this.socket = null;\n }\n }\n\n this.isSubscribed = false;\n\n const sessionId = this.getSessionId();\n const URL = (jwtToken) ? `${options.wsServer}?token=${jwtToken}&sessionId=${sessionId}` : `${options.wsServer}?sessionId=${sessionId}`;\n\n this.socket = new WebSocket(URL);\n\n this.socket.onopen = () => {\n console.log(`📡 Connected to WebSocket`);\n this.connectionStatus.next(true);\n this.lastOptions = options;\n\n // Subscribe to primary channel\n this.sendSubscribe(options.id, options.user);\n\n // Auto-subscribe to additional channels from options.channels[]\n if (options.channels && options.channels.length > 0) {\n options.channels.forEach(channel => {\n if (channel !== options.id) {\n this.subscribeToChannel(channel);\n }\n });\n }\n\n // Re-subscribe to any previously subscribed channels (reconnection scenario)\n const previousChannels = this.subscribedChannels.value;\n if (previousChannels.size > 0) {\n previousChannels.forEach(channel => {\n if (channel !== options.id && (!options.channels || !options.channels.includes(channel))) {\n this.subscribeToChannel(channel);\n }\n });\n }\n };\n\n this.socket.onmessage = (event) => {\n\n try {\n\n const data = JSON.parse(event.data);\n\n if (data.error && data.error === 'JWT_INVALID') {\n\n console.error('JWT validation failed. Authentication error!');\n\n this.messages.next(data);\n this.connectionStatus.next(false);\n this.socket?.close();\n\n return;\n\n }\n\n this.messages.next(data);\n\n } catch (error) {\n console.error('Error parsing WebSocket message:', event.data);\n }\n\n };\n\n this.socket.onclose = () => {\n\n console.log('WebSocket connection closed');\n\n this.connectionStatus.next(false);\n this.socket = null;\n };\n\n this.socket.onerror = (error) => {\n console.error('WebSocket error:', error);\n this.connectionStatus.next(false);\n };\n\n }\n\n disconnect() {\n if (this.socket) {\n this.socket.close();\n this.socket = null;\n }\n }\n\n subscribeToChannel(channelName: string) {\n\n if (this.socket?.readyState === WebSocket.OPEN) {\n\n const message = {\n type: 'subscribe',\n subscribedChannel: channelName,\n content: {}\n };\n\n this.socket.send(JSON.stringify(message));\n\n // Track locally - create new Set to trigger change detection\n const current = new Set(this.subscribedChannels.value);\n current.add(channelName);\n this.subscribedChannels.next(current);\n console.log(`📝 Subscribed to channel: ${channelName}`);\n\n } else {\n console.warn('Cannot subscribe: WebSocket not yet open.');\n }\n\n }\n\n subscribeToChannels(channelNames: string[]) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n channelNames.forEach(channel => this.subscribeToChannel(channel));\n } else {\n console.warn('Cannot subscribe: WebSocket not yet open.');\n }\n }\n\n unsubscribeFromChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'unsubscribe', subscribedChannel: channel }));\n\n // Remove from local tracking - create new Set to trigger change detection\n const current = new Set(this.subscribedChannels.value);\n current.delete(channel);\n this.subscribedChannels.next(current);\n console.log(`💬 Unsubscribed from channel: ${channel}`);\n } else {\n console.error('WebSocket is not open. Cannot unsubscribe from channel.');\n }\n }\n\n unsubscribeToChannel(channel: string) {\n // Deprecated: Use unsubscribeFromChannel instead\n this.unsubscribeFromChannel(channel);\n }\n\n getSubscribedChannels(): Set<string> {\n return this.subscribedChannels.value;\n }\n\n sendBroadcast(content: any) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'broadcast', content }));\n console.log(`📢 Send broadcast: ${content}`);\n } else {\n console.error('WebSocket is not open. Cannot send broadcast.');\n }\n }\n\n sendMessageInChannel(channel: string, content: any) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'stateMangerMessage', subscribedChannel: channel, content }));\n console.log(`💬 Send message:`, content);\n } else {\n console.error('WebSocket is not open. Cannot send message.');\n }\n }\n\n /**\n * Send a message to a specific channel for channel-based messaging\n * This uses the 'message' type which broadcasts to all subscribers in the channel\n */\n sendChannelMessage(channel: string, content: any) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'message', subscribedChannel: channel, content }));\n 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 sendMessageToUser(user: string, content: any) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'userMessage', subscribedChannel: user, content }));\n console.log(`💬 Send message:`, content);\n } else {\n console.error('WebSocket is not open. Cannot send message.');\n }\n }\n\n getAllChannels() {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'getChannels' }));\n console.log('🗂️ List of all channels');\n } else {\n console.error('WebSocket is not open. Cannot request channels.');\n }\n }\n\n createChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'createChannel', content: channel }));\n console.log('🗂️ Created channel:', channel);\n } else {\n console.error('WebSocket is not open. Cannot request channels.');\n }\n }\n\n deleteChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'deleteChannel', content: channel }));\n console.log('🗂️ Delete channel:', channel);\n } else {\n console.error('WebSocket is not open. Cannot request channels.');\n }\n }\n\n getUsersInChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'getUsers', subscribedChannel: channel }));\n console.log(`👥 List all users in channel: ${channel}`);\n } else {\n console.error('WebSocket is not open. Cannot request users.');\n }\n }\n\n // =====================\n // Notification Channel Methods (MES- prefix)\n // =====================\n\n /**\n * Create a notification channel\n */\n createNotificationChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'createNotificationChannel', content: channel }));\n console.log('📢 Created notification channel:', channel);\n } else {\n console.error('WebSocket is not open. Cannot create notification channel.');\n }\n }\n\n /**\n * Get all notification channels (in-memory)\n */\n getNotificationChannels() {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'getNotificationChannels' }));\n 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 * Returns unique channels that have notifications posted today\n */\n getTodaysNotificationChannels() {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.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 */\n subscribeToNotificationChannel(channel: string, options?: { startEpoch?: number; endEpoch?: number }, user?: any) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({\n type: 'subscribeNotifications',\n subscribedChannel: channel,\n content: {\n ...options,\n ...user\n }\n }));\n console.log(`📢 Subscribed to notification channel: ${channel}`, options);\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 */\n unsubscribeFromNotificationChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({\n type: 'unsubscribeNotifications',\n subscribedChannel: channel\n }));\n 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 a notification to a channel\n */\n sendNotification(channel: string, content: any) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({\n type: 'notification',\n subscribedChannel: channel,\n content\n }));\n 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","import { HttpClient, HttpEvent, HttpEventType, HttpHeaderResponse } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject, Observable, throwError } from 'rxjs';\nimport { catchError, delay, finalize, map } from 'rxjs/operators';\n\nimport { ApiRequest } from '../request-manager-state-service/models/api-request.model';\nimport { PathQueryService, HeadersService } from '../utils';\nimport { requestStreaming } from './rxjs-operators/request-streaming';\nimport { WebsocketService } from '../ws-manager-service';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RequestService extends WebsocketService {\n\n private http = inject(HttpClient)\n\n private pathQueryService = inject(PathQueryService)\n private headersService = inject(HeadersService)\n\n isPending = new BehaviorSubject<boolean>(false)\n isPending$ = this.isPending.asObservable()\n\n progress = new BehaviorSubject<number>(0)\n progress$ = this.progress.asObservable()\n\n getRecordRequest<T>(options: ApiRequest): Observable<T> {\n\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildCombinedHeaders(options);\n\n this.isPending.next(true);\n\n return (options.stream)\n ? this.http.get<any>(urlPath, headers).pipe(\n requestStreaming(),\n this.handleFinalize()\n )\n : this.http.get<T>(urlPath, headers).pipe(\n this.request(options),\n )\n }\n\n createRecordRequest<T>(options: ApiRequest, data: any): Observable<T> {\n\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildCombinedHeaders(options);\n\n this.isPending.next(true);\n\n return (options.stream)\n ? this.http.post<any>(urlPath, data, headers).pipe(\n requestStreaming(),\n this.handleFinalize()\n )\n : this.http.post<T>(urlPath, data, headers).pipe(\n this.request(options),\n )\n }\n\n updateRecordRequest<T>(options: ApiRequest, data: any): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildHeaders(options);\n\n this.isPending.next(true);\n\n return this.http.put<any>(urlPath, data, headers).pipe(\n this.request(options),\n )\n }\n\n deleteRecordRequest<T>(options: ApiRequest): Observable<T> {\n\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildHeaders(options);\n\n this.isPending.next(true);\n\n return this.http.delete<any>(urlPath, headers).pipe(\n this.request(options),\n )\n }\n\n // Helper functions\n private buildUrlPath(options: ApiRequest): string {\n return this.pathQueryService.buildAPIPath(options.server, options.path);\n }\n\n private buildHeaders(options: ApiRequest): any {\n return this.headersService.generateHeaders(options.headers);\n }\n\n private buildCombinedHeaders(options: ApiRequest): any {\n const headers = this.headersService.generateHeaders(options.headers)\n return this.combineHeaders(headers, options.stream || false)\n }\n\n private request<T>(options: ApiRequest): (source: Observable<any>) => Observable<T> {\n return (source$: Observable<any>): Observable<T> => {\n return source$.pipe(\n map(data => {\n if (!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 downloadFileRequest(options: ApiRequest): Observable<any> {\n\n this.isPending.next(true);\n\n const urlPath = this.buildUrlPath(options);\n\n return this.http.get(urlPath, { responseType: 'blob', observe: 'events', reportProgress: true })\n .pipe(\n map((event: HttpEvent<any>) => {\n\n this.isPending.next(true)\n\n if (event instanceof HttpHeaderResponse) {\n if(event.status !== 200) {\n this.isPending.next(false)\n throw new Error('Download failed');\n }\n }\n\n // 0\tSent\tRequest has been sent.\n // 1\tUploadProgress\tUpload is in progress.\n // 2\tResponseHeader\tResponse headers received.\n // 3\tDownloadProgress\tDownload is in progress.\n // 4\tResponse\tResponse is fully received.\n // 5\tUser\tCustom user event.\n\n switch (event.type) {\n\n case HttpEventType.DownloadProgress:\n\n const status = (event.total) ? Math.round(event.loaded / (event.total || 1) * 100) : 100\n this.progress.next(status)\n return status\n\n case HttpEventType.Response:\n\n try {\n\n const fileNamePath = (options?.saveAs) ? options.saveAs : (options.path) ? options.path[options.path.length - 1] : []\n const fileContentHeader = options.fileContentHeader || 'Content-Disposition'\n const header_content = event.headers.get(fileContentHeader);\n\n // checks if header_content is not empty and splits the header_content to get the file name\n // otherwise, it will use the fileDownload - contains the file name and extension\n const file = (header_content) ? header_content.split('=')[1].substring(0, header_content.split('=')[1].length) : ''\n\n const fileName = (file) ? file : fileNamePath\n\n if (fileName === '') {\n this.isPending.next(false);\n throw new Error('Save File: (file name and extension) not found in Headers or Path');\n }\n\n this.downloadFile(fileName, event.body)\n this.isPending.next(false)\n\n return 100\n\n } catch (error) {\n throw new Error('Download failed');\n }\n\n default:\n this.isPending.next(false)\n return 0\n }\n\n }),\n catchError(err => {\n return throwError(() => err)\n })\n )\n }\n\n private handleFinalize(): (source: Observable<any>) => Observable<any> {\n return finalize(() => this.isPending.next(false));\n }\n\n private downloadFile(file:string, fileData: any) {\n\n const navigatorAny = window.navigator as any\n\n const extension = file.split('.')[1].toLowerCase()\n\n var newBlob = new Blob([fileData], { type: this.createFileType(extension) })\n\n if (navigatorAny.msSaveOrOpenBlob) {\n navigatorAny.msSaveOrOpenBlob(newBlob, file)\n } else {\n const link = document.createElement('a')\n const url = window.URL.createObjectURL(newBlob)\n link.href = url\n link.download = file\n link.click()\n window.URL.revokeObjectURL(url)\n }\n\n }\n\n private createFileType(ext: any): string {\n\n let fileType: string = \"\"\n\n if (ext == 'pdf' || ext == 'csv') {\n fileType = `application/${ext}`\n }\n else if (ext == 'jpeg' || ext == 'jpg' || ext == 'png') {\n fileType = `image/${ext}`\n }\n else if (ext == 'txt') {\n fileType = 'text/plain'\n }\n\n else if (ext == 'ppt' || ext == 'pot' || ext == 'pps' || ext == 'ppa') {\n fileType = 'application/vnd.ms-powerpoint'\n }\n else if (ext == 'pptx') {\n fileType = 'application/vnd.openxmlformats-officedocument.presentationml.presentation'\n }\n else if (ext == 'doc' || ext == 'dot') {\n fileType = 'application/msword'\n }\n else if (ext == 'docx') {\n fileType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n }\n else if (ext == 'xls' || ext == 'xlt' || ext == 'xla') {\n fileType = 'application/vnd.ms-excel'\n }\n else if (ext == 'xlsx') {\n fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n }\n\n return fileType\n\n }\n\n private combineHeaders(headers: any, isStreaming: boolean) {\n\n return (isStreaming) ?\n {\n ...headers,\n observe: 'events',\n responseType: 'text',\n reportProgress: true,\n Accept: 'text/event-stream'\n }\n : headers\n\n }\n\n}\n","import { Observable, defer, interval } from 'rxjs';\nimport { takeWhile, map, tap } from 'rxjs/operators';\n\nexport function countdown(duration: number): Observable<number> {\n\n return defer(() => {\n\n const currentCount = { current: duration }\n\n return interval(1000).pipe(\n map(() => --currentCount.current),\n takeWhile(count => count >= 0)\n )\n\n })\n\n}\n","import { Observable, timer } from 'rxjs';\nimport { retry } from 'rxjs/operators';\n\nconst DEFAULT_MAX_RETRIES = 3;\n\nexport function delayedRetry<T>(delayMs: number, maxRetry = DEFAULT_MAX_RETRIES) {\n return (src: Observable<T>) =>\n src.pipe(\n retry({\n count: maxRetry,\n delay: () => timer(delayMs)\n })\n );\n}\n\n\n","import { Observable, interval } from 'rxjs';\nimport { mergeMap, startWith, takeUntil, tap } from 'rxjs/operators';\n\nexport function requestPolling<T>(pollInterval: number, stopCondition$: Observable<any>, isPending$: any) {\n return (source: Observable<T>): Observable<T> => {\n return interval(pollInterval * 1000)\n .pipe(\n startWith(0),\n tap(() => {\n try {\n if (isPending$ && typeof isPending$.next === 'function') {\n isPending$.next(true);\n } else if (isPending$ && typeof isPending$.set === 'function') {\n isPending$.set(true);\n }\n } catch (e) {\n // no-op if setting fails\n }\n }),\n mergeMap(() => source),\n tap(() => {\n try {\n if (isPending$ && typeof isPending$.next === 'function') {\n isPending$.next(false);\n } else if (isPending$ && typeof isPending$.set === 'function') {\n isPending$.set(false);\n }\n } catch (e) {\n // no-op if setting fails\n }\n }),\n takeUntil(stopCondition$),\n );\n };\n}\n","export interface DatabaseStorageInterface {\n table: string\n expiresIn: string\n}\n\nexport class DatabaseStorage implements DatabaseStorageInterface {\n\n constructor(\n public table = '',\n public expiresIn: '',\n ) {}\n\n static adapt(item?: any): any {\n\n if(!item?.table) return\n\n return new DatabaseStorage(\n item?.table,\n item?.expiresIn,\n )\n\n }\n\n}\n","export interface RetryOptionsInterface {\n times?: number // total request to be made including initial request\n delay?: number // seconds (<= 3 default 3 seconds)\n}\n\nexport class RetryOptions implements RetryOptionsInterface {\n\n constructor(\n public times = 0,\n public delay = 3,\n ) {}\n\n static adapt(item?: any): RetryOptions {\n\n return new RetryOptions(\n item?.times,\n item?.delay\n )\n\n }\n\n}\n","export enum DataType {\n ANY = 0,\n ARRAY,\n OBJECT\n}\n","import { RetryOptions } from \"./retry-options.model\"\n\nexport interface ConfigHTTPOptionsInterface {\n server: string\n path?: any[]\n headers?: any\n polling?: number // seconds (undefined | 0 = none)\n retry?: RetryOptions\n stream?: boolean\n displayError?: boolean\n}\n\nexport class ConfigHTTPOptions implements ConfigHTTPOptionsInterface {\n\n constructor(\n public server = '',\n public path?: any[],\n public headers?: any,\n public polling?: number,\n public retry?: RetryOptions,\n public stream?: boolean,\n public displayError?: boolean,\n ) {}\n\n static adapt(item?: any): ConfigHTTPOptions {\n\n const server = Array.isArray(item?.server) ? item.server.join('/') : item?.server || '';\n const retryOptions = item?.retry ? RetryOptions.adapt(item.retry) : RetryOptions.adapt();\n\n return new ConfigHTTPOptions(\n server,\n (item?.path) ? item.path : [],\n (item?.headers) ? item.headers : {},\n item?.polling ? Math.floor(item.polling) : 0,\n retryOptions,\n (item?.stream) ? item.stream : false,\n (item?.displayError) ? item.displayError : false,\n )\n\n }\n\n}\n","import { SettingOptions } from \"../services\"\n\nexport interface LocalStorageOptionsInterface {\n storageName?: string\n storageSettingsName?: string\n options?: SettingOptions,\n}\n\nexport class LocalStorageOptions implements LocalStorageOptionsInterface {\n\n constructor(\n public storageName?: string,\n public storageSettingsName?: string,\n public options?: SettingOptions,\n ) {}\n\n static adapt(item?: any): LocalStorageOptions {\n\n return new LocalStorageOptions(\n (item?.storageName) ? item.storageName : 'storage',\n (item?.storageSettingsName) ? item.storageSettingsName : 'global-storage',\n (item?.options) ? SettingOptions.adapt(item.options) : SettingOptions.adapt(),\n )\n\n }\n\n}\n","import { ConfigHTTPOptions } from \"./config-http-options.model\";\nimport { LocalStorageOptions } from \"./config-local-storage-options.model\";\n\nexport interface ConfigOptionsInterface {\n httpRequestOptions?: ConfigHTTPOptions\n LocalStorageOptions?: LocalStorageOptions\n // DatabaseOptions: any\n}\n\nexport class ConfigOptions implements ConfigOptionsInterface {\n\n constructor(\n public httpRequestOptions?: ConfigHTTPOptions,\n public LocalStorageOptions?: LocalStorageOptions,\n // public DatabaseOptions?: any,\n ) {}\n\n static adapt(item?: any): ConfigOptions {\n return new ConfigOptions(\n (item?.httpRequestOptions) ? ConfigHTTPOptions.adapt(item.httpRequestOptions) : undefined,\n (item?.LocalStorageOptions) ? LocalStorageOptions.adapt(item.LocalStorageOptions) : undefined,\n // item?.DatabaseOptions,\n )\n\n }\n\n}\n","import { Inject, inject, Injectable, Injector, Optional } from '@angular/core';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { BehaviorSubject, Observable, Subject, throwError } from 'rxjs';\nimport { tap, map, finalize, catchError } from 'rxjs/operators';\n\nimport { ApiRequest } from '../request-manager-state-service/models/api-request.model';\nimport { RequestService } from './request.service';\nimport { requestPolling, countdown, delayedRetry } from './rxjs-operators';\n\n\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigOptions } from '../../models';\nimport { ObjectMergerService } from '../utils/object-merger.service';\nimport { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HTTPManagerService<T> extends RequestService {\n\n toastMessage = inject(ToastMessageDisplayService)\n ng_injector = inject(Injector)\n objectMergerService = inject(ObjectMergerService)\n\n private countdown = new BehaviorSubject<number>(0);\n countdown$ = this.countdown.asObservable();\n\n private error = new BehaviorSubject<boolean>(false);\n error$ = this.error.asObservable();\n\n private data = new BehaviorSubject<any>(null)\n data$ = this.data.asObservable()\n\n private polling$ = new Subject<void>();\n\n config = ApiRequest.adapt();\n\n constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {\n super()\n this.config = (configOptions) ? ApiRequest.adapt(configOptions.httpRequestOptions) : this.config\n }\n\n // REQUESTS\n\n getRequest<T>(options?: ApiRequest, params?: any[]) {\n\n this.isPending.next(true);\n this.data.next(null)\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.getRecordRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name)\n .pipe(\n tap(data => this.data.next(data))\n ).pipe(\n finalize(() => this.isPending.next(false)),\n catchError((err) => {\n if(updatedOptions.displayError) this.handleErrorWithSnackBar(err)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n }\n\n postRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {\n\n this.isPending.next(true);\n this.data.next(null)\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.createRecordRequest;\n const requests = this.createRequest(func, updatedOptions, data);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(tap(data => this.data.next(data)))\n .pipe(\n finalize(() => this.isPending.next(false)),\n catchError((err) => {\n if(updatedOptions.displayError) this.handleErrorWithSnackBar(err)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n }\n\n putRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {\n\n this.isPending.next(true);\n this.data.next(null)\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.updateRecordRequest;\n const requests = this.createRequest(func, updatedOptions, data);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(tap(data => this.data.next(data)))\n .pipe(\n finalize(() => this.isPending.next(false)),\n catchError((err) => {\n if(updatedOptions.displayError) this.handleErrorWithSnackBar(err)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n }\n\n deleteRequest<T>(options: ApiRequest, params?: any[]) {\n\n this.isPending.next(true);\n this.data.next(null)\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.deleteRecordRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(tap(data => this.data.next(data)))\n .pipe(\n finalize(() => this.isPending.next(false)),\n catchError((err) => {\n if(updatedOptions.displayError) this.handleErrorWithSnackBar(err)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n }\n\n downloadRequest<T>(options: ApiRequest, params?: any[], saveAs?: string) {\n\n this.isPending.next(true);\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.downloadFileRequest;\n const requests = this.createRequest(func, updatedOptions)\n\n return this.createObservable<T>(updatedOptions, requests, func.name)\n .pipe(\n catchError((err) => {\n this.error.next(true)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n\n }\n\n private createObservable<T>(options: ApiRequest, request$: Observable<T>, funcName: string) {\n\n const polling = options.polling ? (options.polling > 0 ? true : false) : false;\n const isPolling =\n polling &&\n !(funcName === 'deleteRecordRequest' || funcName === 'updateRecordRequest' || funcName === 'createRecordRequest')\n ? true\n : false;\n\n this.polling$.next();\n\n const polling$ =\n (isPolling && options.polling) || 0 >= 3\n ? request$.pipe(\n requestPolling((options.polling || 0) + 1, this.polling$, this.isPending),\n tap(() => this.countdown.next(0)),\n tap(() => {\n if (!options.polling) return;\n const count = options.polling ? options.polling : 0;\n // console.log('COUNT:', count);\n countdown(count)\n .pipe(\n map((x: number) => {\n // console.log('XX:', count, x);\n const pollingInSec = options.polling || 0;\n const percentageCompleted = ((pollingInSec - x) / pollingInSec) * 100;\n return Math.round(percentageCompleted);\n })\n )\n .subscribe((countDownValue: number) => {\n // console.log(this.countdown.value, countDownValue);\n this.countdown.next(countDownValue);\n });\n }),\n )\n : request$.pipe(\n catchError((err: any) => {\n\n if (err instanceof HttpErrorResponse) {\n this.error.next(true);\n return this.handleError(err);\n }\n\n return throwError(() => err);\n }),\n // finalize(() => this.isPending.next(false))\n )\n\n return polling$.pipe(\n catchError((err: any, caught: Observable<T>) => {\n\n if (err instanceof HttpErrorResponse) {\n this.error.next(true);\n if(isPolling) this.stopPolling();\n return this.handleError(err);\n }\n\n return throwError(() => err);\n }),\n (options?.retry && options.retry.times > 0)\n ? delayedRetry((options.retry.delay || 3) * 1000, (options.retry.times || 0) - 1)\n : (source: Observable<T>) => source\n );\n }\n\n private createRequest(func: Function, options: ApiRequest, data?: any | any[]) {\n const dataItem = this.prepareRequestData(options, data, func.name);\n return func.bind(this)(dataItem.options, dataItem.data);\n }\n\n private prepareRequestData(options: ApiRequest, data: any, funcName: string) {\n\n if ((options.mapper && funcName === 'updateRecordRequest') || funcName === 'createRecordRequest') {\n if (options?.mapper) {\n data = options.mapper\n ? Array.isArray(data)\n ? map((item) => options.mapper(item))\n : options.mapper(data)\n : data;\n }\n } else {\n if (options?.adapter) {\n data = Array.isArray(data)\n ? map((item) => options.adapter(item))\n : options.adapter(data)\n }\n }\n\n return { options: options, data: data };\n }\n\n // MISC\n\n private handleError(error: Response | any) {\n this.error.next(error.message || `${error.status} - ${error.statusText}`)\n return throwError(() => error)\n }\n\n private handleErrorWithSnackBar(error: Response | any) {\n\n const displayError = ToastDisplay.adapt({\n message: error.message || `${error.status} - ${error.statusText}`,\n action: 'OK',\n color: ToastColors.ERROR,\n icon: 'error',\n duration: 5 * 1000, //5 seconds\n })\n\n this.toastMessage.toastMessage(displayError)\n\n }\n\n private stopPolling() {\n this.isPending.next(false);\n this.polling$.next();\n }\n\n private defineReqOptions(options: any, params?: any[]) {\n\n const req = ApiRequest.adapt(options)\n if(req?.path) req.path = (params) ? [...req.path, ...params] : req.path\n\n const optionsReq = (req)? req : ApiRequest.adapt()\n const updatedOptions = this.objectMergerService.mergeOptions(optionsReq)\n\n return updatedOptions\n\n }\n}\n","import { HttpClient, HttpEvent, HttpEventType, HttpHeaderResponse } from '@angular/common/http';\nimport { Injectable, inject, signal, computed } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, finalize, map } from 'rxjs/operators';\n\nimport { ApiRequest } from '../request-manager-state-service/models/api-request.model';\nimport { PathQueryService, HeadersService } from '../utils';\nimport { requestStreaming } from './rxjs-operators/request-streaming';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RequestSignalsService {\n\n private http = inject(HttpClient);\n private pathQueryService = inject(PathQueryService);\n private headersService = inject(HeadersService);\n\n isPending = signal(false);\n progress = signal(0);\n\n isIdle = computed(() => !this.isPending());\n\n getRecordRequest<T>(options: ApiRequest): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildCombinedHeaders(options);\n\n this.isPending.set(true);\n\n return (options.stream)\n ? this.http.get<any>(urlPath, headers).pipe(\n requestStreaming(),\n this.handleFinalize()\n )\n : this.http.get<T>(urlPath, headers).pipe(\n this.request(options),\n this.handleFinalize()\n );\n }\n\n createRecordRequest<T>(options: ApiRequest, data: any): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildCombinedHeaders(options);\n\n this.isPending.set(true);\n\n return (options.stream)\n ? this.http.post<any>(urlPath, data, headers).pipe(\n requestStreaming(),\n this.handleFinalize()\n )\n : this.http.post<T>(urlPath, data, headers).pipe(\n this.request(options),\n this.handleFinalize()\n );\n }\n\n updateRecordRequest<T>(options: ApiRequest, data: any): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildHeaders(options);\n\n this.isPending.set(true);\n\n return this.http.put<any>(urlPath, data, headers).pipe(\n this.request(options),\n this.handleFinalize()\n );\n }\n\n deleteRecordRequest<T>(options: ApiRequest): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildHeaders(options);\n\n this.isPending.set(true);\n\n return this.http.delete<any>(urlPath, headers).pipe(\n this.request(options),\n this.handleFinalize()\n );\n }\n\n private buildUrlPath(options: ApiRequest): string {\n return this.pathQueryService.buildAPIPath(options.server, options.path);\n }\n\n private buildHeaders(options: ApiRequest): any {\n return this.headersService.generateHeaders(options.headers);\n }\n\n private buildCombinedHeaders(options: ApiRequest): any {\n const headers = this.headersService.generateHeaders(options.headers);\n return this.combineHeaders(headers, options.stream || false);\n }\n\n private request<T>(options: ApiRequest): (source: Observable<any>) => Observable<T> {\n return (source$: Observable<any>): Observable<T> => {\n return source$.pipe(\n map(data => {\n if (options?.adapter) {\n return Array.isArray(data)\n ? data.map((item: any) => options.adapter(item))\n : options.adapter(data);\n }\n return data;\n })\n );\n };\n }\n\n downloadFileRequest(options: ApiRequest): Observable<any> {\n this.isPending.set(true);\n\n const urlPath = this.buildUrlPath(options);\n\n return this.http.get(urlPath, { responseType: 'blob', observe: 'events', reportProgress: true })\n .pipe(\n map((event: HttpEvent<any>) => {\n this.isPending.set(true);\n\n if (event instanceof HttpHeaderResponse) {\n if (event.status !== 200) {\n this.isPending.set(false);\n throw new Error('Download failed');\n }\n }\n\n switch (event.type) {\n case HttpEventType.DownloadProgress:\n const status = (event.total) ? Math.round(event.loaded / (event.total || 1) * 100) : 100;\n this.progress.set(status);\n return status;\n\n case HttpEventType.Response:\n try {\n const fileNamePath = (options?.saveAs) ? options.saveAs : (options.path) ? options.path[options.path.length - 1] : [];\n const header_content = event.headers.get('Content-Disposition') || '';\n const file = (header_content) ? header_content.split('=')[1].substring(0, header_content.split('=')[1].length) : '';\n\n const fileName = (fileNamePath !== '') ? fileNamePath : file;\n\n if (fileName === '') {\n this.isPending.set(false);\n throw new Error('Save File: (file name and extension) not found in Headers or Path');\n }\n\n this.downloadFile(fileName, event.body);\n this.isPending.set(false);\n\n return 100;\n\n } catch (error) {\n throw new Error('Download failed');\n }\n\n default:\n this.isPending.set(false);\n return 0;\n }\n }),\n catchError(err => {\n return throwError(() => err);\n })\n );\n }\n\n private handleFinalize(): (source: Observable<any>) => Observable<any> {\n return finalize(() => this.isPending.set(false));\n }\n\n private downloadFile(file: string, fileData: any) {\n const navigatorAny = window.navigator as any;\n const extension = file.split('.')[1]?.toLowerCase();\n const newBlob = new Blob([fileData], { type: this.createFileType(extension) });\n\n if (navigatorAny.msSaveOrOpenBlob) {\n navigatorAny.msSaveOrOpenBlob(newBlob, file);\n } else {\n const link = document.createElement('a');\n const url = window.URL.createObjectURL(newBlob);\n link.href = url;\n link.download = file;\n link.click();\n window.URL.revokeObjectURL(url);\n }\n }\n\n private createFileType(ext: string): string {\n let fileType = \"\";\n\n if (ext === 'pdf' || ext === 'csv') fileType = `application/${ext}`;\n else if (ext === 'jpeg' || ext === 'jpg' || ext === 'png') fileType = `image/${ext}`;\n else if (ext === 'txt') fileType = 'text/plain';\n else if (ext === 'ppt' || ext === 'pot' || ext === 'pps' || ext === 'ppa') fileType = 'application/vnd.ms-powerpoint';\n else if (ext === 'pptx') fileType = 'application/vnd.openxmlformats-officedocument.presentationml.presentation';\n else if (ext === 'doc' || ext === 'dot') fileType = 'application/msword';\n else if (ext === 'docx') fileType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n else if (ext === 'xls' || ext === 'xlt' || ext === 'xla') fileType = 'application/vnd.ms-excel';\n else if (ext === 'xlsx') fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n\n return fileType;\n }\n\n private combineHeaders(headers: any, isStreaming: boolean) {\n return (isStreaming)\n ? {\n ...headers,\n observe: 'events',\n responseType: 'text',\n reportProgress: true,\n Accept: 'text/event-stream'\n }\n : headers;\n }\n}\n","import { Inject, inject, Injectable, Injector, Optional, signal } from '@angular/core';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Observable, Subject, throwError } from 'rxjs';\nimport { tap, map, finalize, catchError } from 'rxjs/operators';\n\nimport { ApiRequest } from '../request-manager-state-service/models/api-request.model';\nimport { RequestSignalsService } from './request-signals.service'; // 👈 updated\nimport { requestPolling, countdown, delayedRetry } from './rxjs-operators';\n\nimport { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigOptions } from '../../models';\nimport { ObjectMergerService } from '../utils/object-merger.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HTTPManagerSignalsService<T> extends RequestSignalsService { // 👈 use signals service\n\n toastMessage = inject(ToastMessageDisplayService);\n ng_injector = inject(Injector);\n objectMergerService = inject(ObjectMergerService);\n\n // ✅ Replaced BehaviorSubjects with Angular signals\n countdown = signal<number>(0);\n error = signal<string | boolean>(false);\n data = signal<any>(null);\n\n private polling$ = new Subject<void>();\n\n config = ApiRequest.adapt();\n\n constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {\n super();\n this.config = configOptions\n ? ApiRequest.adapt(configOptions.httpRequestOptions)\n : this.config;\n }\n\n // REQUESTS\n getRequest<T>(options?: ApiRequest, params?: any[]) {\n this.isPending.set(true);\n this.data.set(null);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.getRecordRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n tap(data => this.data.set(data)),\n finalize(() => this.isPending.set(false)),\n catchError((err) => {\n if (updatedOptions.displayError) this.handleErrorWithSnackBar(err);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n postRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {\n this.isPending.set(true);\n this.data.set(null);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.createRecordRequest;\n const requests = this.createRequest(func, updatedOptions, data);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n tap(data => this.data.set(data)),\n finalize(() => this.isPending.set(false)),\n catchError((err) => {\n if (updatedOptions.displayError) this.handleErrorWithSnackBar(err);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n putRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {\n this.isPending.set(true);\n this.data.set(null);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.updateRecordRequest;\n const requests = this.createRequest(func, updatedOptions, data);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n tap(data => this.data.set(data)),\n finalize(() => this.isPending.set(false)),\n catchError((err) => {\n if (updatedOptions.displayError) this.handleErrorWithSnackBar(err);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n deleteRequest<T>(options: ApiRequest, params?: any[]) {\n this.isPending.set(true);\n this.data.set(null);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.deleteRecordRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n tap(data => this.data.set(data)),\n finalize(() => this.isPending.set(false)),\n catchError((err) => {\n if (updatedOptions.displayError) this.handleErrorWithSnackBar(err);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n downloadRequest<T>(options: ApiRequest, params?: any[], saveAs?: string) {\n this.isPending.set(true);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.downloadFileRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n catchError((err) => {\n this.error.set(true);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n // --- private helpers ---\n private createObservable<T>(options: ApiRequest, request$: Observable<T>, funcName: string) {\n const polling =\n options.polling ? (options.polling > 0 ? true : false) : false;\n\n const isPolling =\n polling &&\n !(funcName === 'deleteRecordRequest' ||\n funcName === 'updateRecordRequest' ||\n funcName === 'createRecordRequest');\n\n this.polling$.next();\n\n const polling$ =\n (isPolling && options.polling) || 0 >= 3\n ? request$.pipe(\n requestPolling((options.polling || 0) + 1, this.polling$, this.isPending),\n tap(() => this.countdown.set(0)),\n tap(() => {\n if (!options.polling) return;\n const count = options.polling ? options.polling : 0;\n countdown(count)\n .pipe(\n map((x: number) => {\n const pollingInSec = options.polling || 0;\n const percentageCompleted = ((pollingInSec - x) / pollingInSec) * 100;\n return Math.round(percentageCompleted);\n })\n )\n .subscribe((countDownValue: number) => {\n this.countdown.set(countDownValue);\n });\n }),\n )\n : request$.pipe(\n catchError((err: any) => {\n if (err instanceof HttpErrorResponse) {\n this.error.set(true);\n return this.handleError(err);\n }\n return throwError(() => err);\n })\n );\n\n return polling$.pipe(\n catchError((err: any, caught: Observable<T>) => {\n if (err instanceof HttpErrorResponse) {\n this.error.set(true);\n if (isPolling) this.stopPolling();\n return this.handleError(err);\n }\n return throwError(() => err);\n }),\n options?.retry && options.retry.times > 0\n ? delayedRetry((options.retry.delay || 3) * 1000, (options.retry.times || 0) - 1)\n : (source: Observable<T>) => source\n );\n }\n\n private createRequest(func: Function, options: ApiRequest, data?: any | any[]) {\n const dataItem = this.prepareRequestData(options, data, func.name);\n return func.bind(this)(dataItem.options, dataItem.data);\n }\n\n private prepareRequestData(options: ApiRequest, data: any, funcName: string) {\n if ((options.mapper && funcName === 'updateRecordRequest') || funcName === 'createRecordRequest') {\n if (options?.mapper) {\n data = options.mapper\n ? Array.isArray(data)\n ? map((item) => options.mapper(item))\n : options.mapper(data)\n : data;\n }\n } else {\n if (options?.adapter) {\n data = Array.isArray(data)\n ? map((item) => options.adapter(item))\n : options.adapter(data);\n }\n }\n return { options: options, data: data };\n }\n\n private handleError(error: Response | any) {\n this.error.set(error.message || `${error.status} - ${error.statusText}`);\n return throwError(() => error);\n }\n\n private handleErrorWithSnackBar(error: Response | any) {\n const displayError = ToastDisplay.adapt({\n message: error.message || `${error.status} - ${error.statusText}`,\n action: 'OK',\n color: ToastColors.ERROR,\n icon: 'error',\n duration: 5 * 1000,\n });\n this.toastMessage.toastMessage(displayError);\n }\n\n private stopPolling() {\n this.isPending.set(false);\n this.polling$.next();\n }\n\n private defineReqOptions(options: any, params?: any[]) {\n const req = ApiRequest.adapt(options);\n if (req?.path) req.path = params ? [...req.path, ...params] : req.path;\n\n const optionsReq = req ? req : ApiRequest.adapt();\n const updatedOptions = this.objectMergerService.mergeOptions(optionsReq);\n\n return updatedOptions;\n }\n}\n","import { RetryOptions } from \"../../request-manager-services\"\nimport { WSOptions } from \"./ws-options.model\"\n\nexport interface ApiRequestInterface {\n server: string\n path?: any[]\n headers?: any\n adapter?: any\n mapper?: any\n polling?: number // seconds (undefined | 0 = none)\n retry?: RetryOptions\n stream?: boolean\n displayError?: boolean\n saveAs?: string\n fileContentHeader?: string\n ws?: WSOptions // Websocket Options\n}\n\nexport class ApiRequest implements ApiRequestInterface {\n\n constructor(\n public server = '',\n public path?: any[],\n public headers?: any,\n public adapter?: any,\n public mapper?: any,\n public polling?: number,\n public retry?: RetryOptions,\n public stream?: boolean,\n public displayError?: boolean,\n public saveAs?: string,\n public fileContentHeader?: string,\n public ws?: WSOptions,\n ) {}\n\n static adapt(item?: any): ApiRequest {\n\n const server = Array.isArray(item?.server) ? item.server.join('/') : item?.server || '';\n\n return new ApiRequest(\n server,\n (item?.path) ? item.path : [],\n (item?.headers) ? item.headers : {},\n item?.adapter,\n item?.mapper,\n item?.polling ? Math.floor(item.polling) : 0,\n item?.retry ? RetryOptions.adapt(item.retry) : RetryOptions.adapt(),\n (item?.stream) ? item.stream : false,\n (item?.displayError) ? item.displayError : false,\n item?.saveAs,\n item?.fileContentHeader,\n item?.ws,\n )\n\n }\n\n}\n","export interface RequestOptionsInterface {\n path: any[],\n headers: any,\n}\n\nexport class RequestOptions implements RequestOptionsInterface {\n\n constructor(\n public path: any[] = [],\n public headers = {},\n ) {}\n\n static adapt(item?: any): RequestOptions {\n\n return new RequestOptions(\n item?.path,\n item?.headers,\n )\n\n }\n\n}\n","import { 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 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 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?.user,\n item?.retry\n )\n\n }\n\n}\n","import { Inject, Injectable, Optional, inject } from '@angular/core';\n\nimport { ApiRequest } from '../request-manager-state-service/models';\nimport { SettingOptions } from '../local-storage-manager-service';\nimport { UtilsService } from './utils.service';\n\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigHTTPOptions, ConfigOptions, LocalStorageOptions } from '../request-manager-services';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ObjectMergerService {\n\n utils = inject(UtilsService);\n\n constructor(@Inject(CONFIG_SETTINGS_TOKEN) @Optional() private configOptions?: ConfigOptions) {\n if (!this.configOptions) this.configOptions = ConfigOptions.adapt()\n }\n\n mergeOptions(options = ApiRequest.adapt()) {\n\n const configForRoot = (this.configOptions?.httpRequestOptions) ? this.configOptions.httpRequestOptions : ConfigHTTPOptions.adapt()\n const mergedOptions = ApiRequest.adapt(options)\n\n mergedOptions.server = (options && options.server === '') ? configForRoot?.server || '' : options.server\n\n mergedOptions.path = [ ...options.path || [], ...configForRoot?.path || [] ]\n\n mergedOptions.headers = { ...options.headers || {}, ...configForRoot?.headers || {} }\n\n mergedOptions.retry = (options && (options?.retry?.times !== 0 || options?.retry?.delay !== 3)) ? options.retry : configForRoot?.retry || { times: 0, delay: 3 };\n\n mergedOptions.polling = (options && options?.polling !== 0) ? options.polling : configForRoot?.polling || 0;\n\n mergedOptions.displayError = (options && options?.displayError) ? options.displayError : configForRoot?.displayError || false;\n\n mergedOptions.stream = (options && options?.stream) ? options.stream : configForRoot?.stream || false;\n\n return mergedOptions;\n\n }\n\n mergeStorageOptions(options = SettingOptions.adapt()) {\n\n const configForRoot = (this.configOptions?.LocalStorageOptions) ? this.configOptions.LocalStorageOptions : LocalStorageOptions.adapt()\n const configForRootOptions = configForRoot.options || LocalStorageOptions.adapt().options\n\n const mergedOptions = SettingOptions.adapt(options)\n\n // storage type\n mergedOptions.storage = (options && (typeof options.storage !== 'undefined')) ? options.storage : (configForRootOptions?.storage ?? 0)\n\n // expires: prefer explicit numeric expires; if not provided, compute from expiresIn string; otherwise use config default\n // if an explicit, non-zero numeric expires is provided, use it\n if (options && (typeof options.expires !== 'undefined') && options.expires !== null && Number(options.expires) > 0) {\n mergedOptions.expires = Number(options.expires);\n } else if (options && options.expiresIn) {\n // compute numeric epoch from expiresIn string using UtilsService if available\n try {\n mergedOptions.expires = this.utils ? this.utils.expires(options.expiresIn) : 0;\n } catch {\n mergedOptions.expires = 0;\n }\n } else {\n mergedOptions.expires = configForRootOptions?.expires ?? 0;\n }\n\n // keep expiresIn string if explicitly provided, otherwise use config default\n mergedOptions.expiresIn = (options && (typeof options.expiresIn !== 'undefined')) ? options.expiresIn : (configForRootOptions?.expiresIn || '')\n\n mergedOptions.encrypted = (options && (typeof options.encrypted !== 'undefined')) ? options.encrypted : (configForRootOptions?.encrypted || false)\n\n return mergedOptions;\n\n }\n\n}\n","import { Inject, Injectable, OnDestroy, Optional, inject } from '@angular/core';\nimport { ComponentStore } from '@ngrx/component-store';\nimport { withLatestFrom, map, tap } from 'rxjs/operators';\n\nimport { UtilsService } from '../utils/utils.service';\nimport { SymmetricalEncryptionService } from '../utils/encryption/symmetrical-encryption.service';\n\nimport { StorageOption, StorageType } from './models';\nimport { SettingOptions } from './models/setting-options.model';\nimport { StorageData } from './models/storage-data.model';\nimport { EncryptionTestService } from '../utils/encryption/encryption-test.service';\nimport { interval } from 'rxjs';\nimport { AppService } from '../utils/app.service';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigOptions } from '../request-manager-services';\nimport { ObjectMergerService } from '../utils/object-merger.service';\n\nexport interface State {\n localStores: StorageData[]\n sessionStores: StorageData[]\n settings: StorageOption[]\n}\n\nconst storage: State = {\n localStores: [],\n sessionStores: [],\n settings: [],\n};\n\n@Injectable({ providedIn: 'root' })\nexport class LocalStorageManagerService extends ComponentStore<State> implements OnDestroy {\n\n storageName = 'storage'\n storageSettingsName = 'global-storage'\n defaultOptions = SettingOptions.adapt()\n\n stateRetrieved = false\n encrypted = false\n\n app = inject(AppService)\n utils = inject(UtilsService)\n objectMergerService = inject(ObjectMergerService)\n encryption = inject(SymmetricalEncryptionService)\n encryptionTest = inject(EncryptionTestService)\n\n // SELECTORS\n\n private readonly data$ = this.select((state) => state)\n\n readonly stores$ = this.select((state) => state.settings)\n\n readonly storeExists$ = (store: string) => this.select(\n this.data$,\n (data) => data.settings.find(item => item.name === store) ? true : false\n )\n\n readonly store$ = (store: string) => this.select(\n this.data$,\n (data) => {\n store = store.toLowerCase()\n const foundStore = data.settings.find(item => item.name === store)\n\n if(foundStore) {\n\n const options = SettingOptions.adapt(foundStore.options)\n\n const found = foundStore.options?.storage === StorageType.GLOBAL\n ? data.localStores.find(item => item.id === foundStore.id) as StorageData\n : data.sessionStores.find(item => item.id === foundStore.id) as StorageData\n\n if(!found) {\n this.deleteStore({ name: store })\n return\n }\n\n if(!this.app?.appID) {\n console.warn('No App ID found - AppId not Provided')\n return\n }\n\n const storageData = (options.encrypted) ? this.encryption.decrypt(found.data, this.app.appID) : found.data\n return (this.isString(storageData)) ? JSON.parse(storageData): storageData\n\n } else {\n return null\n }\n\n }\n )\n\n readonly settings$ = this.select(state => (state) ? state.settings : storage.settings)\n\n readonly setting$ = (store: string) => this.select(\n this.data$,\n (state) => {\n const foundSetting = state.settings.find(item => item.name === store)\n return (foundSetting) ? foundSetting : null\n }\n )\n\n persistence$ = this.data$\n .subscribe(data => {\n if(this.stateRetrieved) this.persistState(data)\n })\n\n startTimer() {\n const timer$ = interval(1000 * 3).pipe(\n withLatestFrom(this.data$),\n map(([_, state]) => state),\n tap((state) => {\n\n const expired: StorageOption[] = this.expired(state) ? this.expired(state) : []\n\n if (expired.length > 0) {\n\n const ids = expired.map((item) => item.id)\n\n const updatedState: State = {\n ...state,\n localStores: state.localStores.filter((item) => !ids.includes(item.id)),\n sessionStores: state.sessionStores.filter((item) => !ids.includes(item.id)),\n settings: state.settings.filter((item) => !ids.includes(item.id)),\n };\n\n this.persistState(updatedState)\n this.updateState(updatedState)\n\n }\n })\n );\n\n timer$.subscribe()\n }\n\n private updateState = this.updater((state, updatedState: State) => ({\n ...updatedState,\n }))\n\n\n constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {\n\n super(storage)\n\n this.storageName = configOptions?.LocalStorageOptions?.storageName || this.storageName\n this.storageSettingsName = configOptions?.LocalStorageOptions?.storageSettingsName || this.storageSettingsName\n this.defaultOptions = configOptions?.LocalStorageOptions?.options || this.defaultOptions\n\n this.retrieveState()\n this.startTimer()\n }\n\n readonly setStore = this.updater((state: State, store: { id: string, name: string, data: any, options: SettingOptions }): any => {\n\n const settings = StorageOption.adapt(store)\n store.name = store.name.toLowerCase()\n settings.options = this.objectMergerService.mergeStorageOptions(settings.options)\n\n const type = store.options.storage\n const hasStore = this.hasGlobalStorage(type, store.id)\n\n store.name = this.validStoreName(store.name)\n\n if(!hasStore) {\n console.warn(`No such Store: ${store.name}`)\n return state\n } else {\n\n const str = this.encryptionTest.isEncrypted(store.data) ? store.data : JSON.stringify(store.data)\n const dataStr = (this.isObjectOrArray(str)) ? (store.options.encrypted) ? this.encryption.encrypt(str, this.app.appID) : store.data : store.data\n\n const localData = (dataStr && settings.options?.storage === StorageType.GLOBAL) ? [{ data: dataStr, id: settings.id }] : []\n const sessionData = (dataStr && settings.options?.storage === StorageType.SESSION) ? [{ data: dataStr, id: settings.id }] : []\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n settings: [...state.settings, ...[settings]],\n }\n\n }\n\n })\n\n readonly createStore = this.updater((state: State, store: { id?: string, name: string, data: any, options: SettingOptions }): any => {\n\n store.name = store.name.toLowerCase()\n store.options = this.objectMergerService.mergeStorageOptions(store.options)\n const settings = StorageOption.adapt(store)\n settings.options = this.objectMergerService.mergeStorageOptions(settings.options)\n const foundStore = state?.settings.some(item => item.name === store.name)\n\n const expires = (settings.options?.expiresIn) ? this.utils.expires(settings.options?.expiresIn) : 0\n if(settings.options) settings.options.expires = expires\n\n store.name = this.validStoreName(store.name)\n\n if(foundStore) {\n return state\n } else {\n if(!this.isObjectOrArray(store.data)) {\n console.warn('Data must ba an Object or Array')\n return\n }\n\n store.data = (this.isString(store.data)) ? JSON.parse(store.data) : store.data\n const dataStr = (store.options.encrypted) ? this.encryption.encrypt(store.data, this.app.appID) : store.data\n\n const localData = (settings.options?.storage === StorageType.GLOBAL) ? [{ data: dataStr, id: settings.id }] : []\n const sessionData = (settings.options?.storage === StorageType.SESSION) ? [{ data: dataStr, id: settings.id }] : []\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n settings: [...state.settings, ...[settings]],\n }\n\n }\n\n })\n\n readonly updateStore = this.updater((state: State, store: { name: string, data: any }): any => {\n\n store.name = store.name.toLowerCase()\n store.name = this.validStoreName(store.name)\n\n const settings = state.settings.find(item => item.name === store.name)\n\n if(settings) {\n\n const type = settings.options?.storage\n const hasStore = this.hasGlobalStorage(type, settings.id || '')\n\n if(!hasStore) {\n console.warn(`No such Store: ${store.name}`)\n } else {\n\n const dataStr = (settings.options?.encrypted) ? this.encryption.encrypt(store.data, this.app.appID) : store.data\n\n const localData = (dataStr && settings.options?.storage === StorageType.GLOBAL) ? [{ data: dataStr, id: settings.id }] : []\n const sessionData = (dataStr && settings.options?.storage === StorageType.SESSION) ? [{ data: dataStr, id: settings.id }] : []\n\n state.localStores = state.localStores.filter(item => item.id !== settings.id)\n state.sessionStores = state.sessionStores.filter(item => item.id !== settings.id)\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n }\n\n }\n }\n\n return state\n\n })\n\n readonly deleteStore = this.updater((state: State, store: { name: string }): any => {\n\n store.name = store.name.toLowerCase()\n store.name = this.validStoreName(store.name)\n\n const id = state.settings.find(item => item.name === store.name)?.id\n\n if(id) {\n\n const settings = state.settings.filter(item => item.id !== id)\n const localData = state.localStores.filter(item => item.id !== id)\n const sessionData = state.sessionStores.filter(item => item.id !== id)\n\n return {\n ...state,\n localStores: [...localData],\n sessionStores: [...sessionData],\n settings: [...settings],\n }\n\n } else {\n console.warn(`No such Store: ${store.name}`)\n return state\n }\n\n })\n\n resetStore() {\n\n const newState = {\n localStores: [],\n sessionStores: [],\n settings: [],\n }\n\n this.updateState(newState)\n this.persistState(newState)\n\n }\n\n private persistState(state: State|null) {\n\n if(!state) return\n\n const strLocal = JSON.stringify(state.localStores)\n localStorage.setItem(this.storageName, strLocal)\n\n const strSession = JSON.stringify(state.sessionStores)\n sessionStorage.setItem(this.storageName, strSession)\n\n const settingsStr = this.encryption.encrypt(state.settings, this.app.appID)\n localStorage.setItem(this.storageSettingsName, settingsStr || '')\n\n }\n\n private expired(state: State|null) {\n\n if(!state) return []\n return state.settings?.filter(item => (item.options?.expires || 0) > 0 && this.utils.hasExpired(item.options?.expires || 0))\n\n }\n\n retrieveState() {\n\n const str = localStorage.getItem(this.storageSettingsName)\n\n const localStr = localStorage.getItem(this.storageName)\n const sessionStr = sessionStorage.getItem(this.storageName)\n\n const localData: StorageData[] = (localStr) ? JSON.parse(localStr) : null\n const sessionData: StorageData[] = (sessionStr) ? JSON.parse(sessionStr) : null\n\n const decryptedStr = str ? this.encryption.decrypt(str, this.app.appID) : null\n const settings: StorageOption[] = (decryptedStr && decryptedStr !== null) ? JSON.parse(decryptedStr) : []\n\n settings.forEach(store => {\n\n const expired = (store.options?.expires || 0) > 0 && this.utils.hasExpired(store.options?.expires || 0)\n\n if(!expired) {\n\n const hasStorage = this.hasGlobalStorage(store.options?.storage, store.id || '')\n\n if(!hasStorage) {\n this.createStore({ id: store.id, name: store.name, data: [], options: SettingOptions.adapt(store.options)})\n } else {\n const storeData = (store.options?.storage === StorageType.GLOBAL) ? localData.find(item => item.id === store.id) : sessionData.find(item => item.id === store.id)\n this.setStore({ id: store.id || '', name: store.name, data: storeData?.data, options: SettingOptions.adapt(store.options) })\n }\n\n }\n\n })\n\n this.stateRetrieved = true\n\n }\n\n private isObjectOrArray = (obj: any) => {\n\n let parsed;\n\n try {\n parsed = (typeof obj === 'object') ? obj : JSON.parse(obj)\n } catch (e) {\n return false;\n }\n\n if (Array.isArray(parsed)) {\n const allStringsOrObjectsOrNumbers = parsed.every(item =>\n typeof item === 'string' ||\n typeof item === 'object' && item !== null ||\n typeof item === 'number'\n );\n return allStringsOrObjectsOrNumbers;\n }\n\n return typeof parsed === 'object' && parsed !== null;\n\n }\n\n private isString (obj: any) {\n return (Object.prototype.toString.call(obj) === '[object String]')\n }\n\n private fixAndParseJSON(jsonString: string): any {\n const fixedString = jsonString\n .replace(/'/g, '\"')\n .replace(/([{,]\\s*)(\\w+)\\s*:/g, '$1\"$2\":')\n .replace(/,\\s*(\\}|\\])/g, '$1');\n\n try {\n return JSON.parse(fixedString);\n } catch (error: any) {\n throw new Error('Failed to parse JSON: ' + error.message);\n }\n }\n\n private validStoreName(str: string) {\n return str\n .toLowerCase() // Convert to lowercase\n .replace(/\\s+/g, '_') // Replace spaces with underscores\n .replace(/[^ -~]/g, ''); // Remove non-ASCII characters\n }\n\n private hasGlobalStorage(type: StorageType = StorageType.GLOBAL, id: string) {\n\n const strData: StorageOption[] = []\n\n if(type === StorageType.GLOBAL) {\n const str = localStorage.getItem(this.storageName)\n strData.push(...(str ? JSON.parse(str) : []))\n } else {\n const str = sessionStorage.getItem(this.storageName)\n strData.push(...(str ? JSON.parse(str) : []))\n }\n\n const found = strData.find(store => store.id === id)\n return (found) ? true : false\n\n }\n\n override ngOnDestroy() {\n this.persistence$.unsubscribe()\n }\n\n}\n","import { Inject, Injectable, Optional, WritableSignal, signal, computed, effect, inject } from '@angular/core';\n\nimport { UtilsService } from '../utils/utils.service';\nimport { SymmetricalEncryptionService } from '../utils/encryption/symmetrical-encryption.service';\n\nimport { StorageOption, StorageType } from './models';\nimport { SettingOptions } from './models/setting-options.model';\nimport { StorageData } from './models/storage-data.model';\nimport { EncryptionTestService } from '../utils/encryption/encryption-test.service';\nimport { AppService } from '../utils/app.service';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigOptions } from '../request-manager-services';\nimport { ObjectMergerService } from '../utils/object-merger.service';\n\nexport interface State {\n localStores: StorageData[];\n sessionStores: StorageData[];\n settings: StorageOption[];\n}\n\nconst initialState: State = {\n localStores: [],\n sessionStores: [],\n settings: [],\n};\n\n@Injectable({ providedIn: 'root' })\nexport class LocalStorageSignalsManagerService {\n\n private state: WritableSignal<State> = signal(initialState);\n\n storageName = 'storage';\n storageSettingsName = 'global-storage';\n defaultOptions = SettingOptions.adapt();\n\n stateRetrieved = false;\n encrypted = false;\n\n app = inject(AppService);\n utils = inject(UtilsService);\n objectMergerService = inject(ObjectMergerService);\n encryption = inject(SymmetricalEncryptionService);\n encryptionTest = inject(EncryptionTestService);\n\n // --- SELECTORS ---\n\n readonly stores = computed(() => this.state().settings);\n\n readonly storeExists = (store: string) =>\n computed(() => !!this.state().settings.find(item => item.name === store));\n\n readonly store = (store: string) =>\n computed(() => {\n const data = this.state();\n const foundStore = data.settings.find(item => item.name === store);\n if (!foundStore) return null;\n\n const options = SettingOptions.adapt(foundStore.options);\n const found =\n options.storage === StorageType.GLOBAL\n ? data.localStores.find(item => item.id === foundStore.id)\n : data.sessionStores.find(item => item.id === foundStore.id);\n\n if (!found) {\n this.deleteStore({ name: store });\n return null;\n }\n\n if (!this.app?.appID) {\n console.warn('No App ID found - AppId not Provided');\n return null;\n }\n\n const storageData = options.encrypted\n ? this.encryption.decrypt(found.data, this.app.appID)\n : found.data;\n\n return this.isString(storageData) ? JSON.parse(storageData) : storageData;\n });\n\n readonly settings = computed(() => this.state().settings);\n\n readonly setting = (store: string) =>\n computed(() => this.state().settings.find(item => item.name === store) ?? null);\n\n constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {\n this.storageName = configOptions?.LocalStorageOptions?.storageName || this.storageName;\n this.storageSettingsName = configOptions?.LocalStorageOptions?.storageSettingsName || this.storageSettingsName;\n this.defaultOptions = configOptions?.LocalStorageOptions?.options || this.defaultOptions;\n\n this.retrieveState();\n // Auto-persist when state changes\n effect(() => {\n if (this.stateRetrieved) {\n this.persistState(this.state());\n }\n });\n\n // Expiration timer every 3s\n setInterval(() => {\n const state = this.state();\n const expired = this.expired(state);\n if (expired.length > 0) {\n const ids = expired.map(i => i.id);\n const updated: State = {\n ...state,\n localStores: state.localStores.filter(i => !ids.includes(i.id)),\n sessionStores: state.sessionStores.filter(i => !ids.includes(i.id)),\n settings: state.settings.filter(i => !ids.includes(i.id)),\n };\n this.state.set(updated);\n this.persistState(updated);\n }\n }, 3000);\n }\n\n // --- STATE MUTATORS ---\n\n setStore(store: { id: string; name: string; data: any; options: SettingOptions }) {\n this.state.update(state => {\n const settings = StorageOption.adapt(store);\n settings.options = this.objectMergerService.mergeStorageOptions(settings.options);\n store.name = this.validStoreName(store.name);\n\n const str = this.encryptionTest.isEncrypted(store.data) ? store.data : JSON.stringify(store.data);\n const dataStr =\n this.isObjectOrArray(str) && store.options.encrypted\n ? this.encryption.encrypt(str, this.app.appID)\n : store.data;\n\n const localData =\n dataStr && settings.options?.storage === StorageType.GLOBAL\n ? [{ data: dataStr, id: settings.id }]\n : [];\n const sessionData =\n dataStr && settings.options?.storage === StorageType.SESSION\n ? [{ data: dataStr, id: settings.id }]\n : [];\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n settings: [...state.settings, settings],\n };\n });\n }\n\n createStore(store: { id?: string; name: string; data: any; options: SettingOptions }) {\n this.state.update(state => {\n const settings = StorageOption.adapt(store);\n settings.options = this.objectMergerService.mergeStorageOptions(settings.options);\n\n if (state.settings.some(item => item.name === store.name)) {\n return state;\n }\n\n if (!this.isObjectOrArray(store.data)) {\n console.warn('Data must be an Object or Array');\n return state;\n }\n\n const dataStr =\n store.options.encrypted ? this.encryption.encrypt(store.data, this.app.appID) : store.data;\n\n const localData =\n settings.options?.storage === StorageType.GLOBAL ? [{ data: dataStr, id: settings.id }] : [];\n const sessionData =\n settings.options?.storage === StorageType.SESSION ? [{ data: dataStr, id: settings.id }] : [];\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n settings: [...state.settings, settings],\n };\n });\n }\n\n updateStore(store: { name: string; data: any }) {\n this.state.update(state => {\n const settings = state.settings.find(item => item.name === store.name);\n if (!settings) return state;\n\n const dataStr =\n settings.options?.encrypted\n ? this.encryption.encrypt(store.data, this.app.appID)\n : store.data;\n\n const localData =\n settings.options?.storage === StorageType.GLOBAL ? [{ data: dataStr, id: settings.id }] : [];\n const sessionData =\n settings.options?.storage === StorageType.SESSION ? [{ data: dataStr, id: settings.id }] : [];\n\n return {\n ...state,\n localStores: [...state.localStores.filter(i => i.id !== settings.id), ...localData],\n sessionStores: [...state.sessionStores.filter(i => i.id !== settings.id), ...sessionData],\n };\n });\n }\n\n deleteStore(store: { name: string }) {\n this.state.update(state => {\n const id = state.settings.find(item => item.name === store.name)?.id;\n if (!id) return state;\n return {\n ...state,\n localStores: state.localStores.filter(i => i.id !== id),\n sessionStores: state.sessionStores.filter(i => i.id !== id),\n settings: state.settings.filter(i => i.id !== id),\n };\n });\n }\n\n resetStore() {\n const cleared: State = { localStores: [], sessionStores: [], settings: [] };\n this.state.set(cleared);\n this.persistState(cleared);\n }\n\n // --- HELPERS ---\n\n private persistState(state: State) {\n localStorage.setItem(this.storageName, JSON.stringify(state.localStores));\n sessionStorage.setItem(this.storageName, JSON.stringify(state.sessionStores));\n const settingsStr = this.encryption.encrypt(state.settings, this.app.appID);\n localStorage.setItem(this.storageSettingsName, settingsStr || '');\n }\n\n private expired(state: State) {\n return state.settings.filter(\n s => (s.options?.expires || 0) > 0 && this.utils.hasExpired(s.options?.expires!)\n );\n }\n\n retrieveState() {\n\n const str = localStorage.getItem(this.storageSettingsName);\n\n const localStr = localStorage.getItem(this.storageName);\n const sessionStr = sessionStorage.getItem(this.storageName);\n\n const localData: StorageData[] = localStr ? JSON.parse(localStr) : [];\n const sessionData: StorageData[] = sessionStr ? JSON.parse(sessionStr) : [];\n\n const decryptedStr = str ? this.encryption.decrypt(str, this.app.appID) : null;\n const settings: StorageOption[] = decryptedStr ? JSON.parse(decryptedStr) : [];\n\n settings.forEach(store => {\n\n\n // normalize options so we compare numbers and compute expires correctly\n const options = SettingOptions.adapt(store.options);\n\n // if persisted data included expiresIn but not numeric expires, compute it now\n if ((!options.expires || options.expires === 0) && options.expiresIn) {\n try {\n const computed = this.utils.expires(options.expiresIn as string);\n options.expires = computed || 0;\n } catch {\n options.expires = 0;\n }\n }\n\n const expired = (options.expires || 0) > 0 && this.utils.hasExpired(options.expires || 0);\n\n if (!expired) {\n\n const hasStorage = this.hasGlobalStorage(options.storage, store.id || '');\n\n if (!hasStorage) {\n this.createStore({ id: store.id, name: store.name, data: [], options });\n } else {\n const storeData = (options.storage === StorageType.GLOBAL)\n ? localData.find(item => item.id === store.id)\n : sessionData.find(item => item.id === store.id);\n this.setStore({ id: store.id || '', name: store.name, data: storeData?.data, options });\n }\n\n }\n\n });\n\n this.stateRetrieved = true;\n\n // Ensure all stored settings have numeric expires computed and persisted\n try {\n const current = this.state();\n let changed = false;\n const normalizedSettings = current.settings.map(s => {\n const opts = SettingOptions.adapt(s.options);\n if ((!opts.expires || opts.expires === 0) && opts.expiresIn) {\n const computed = this.utils.expires(opts.expiresIn as string) || 0;\n if (computed && computed !== opts.expires) {\n opts.expires = computed;\n changed = true;\n }\n }\n return { ...s, options: opts } as StorageOption;\n });\n\n if (changed) {\n const updated: State = { ...current, settings: normalizedSettings };\n this.state.set(updated);\n this.persistState(updated);\n }\n } catch (e) {\n // swallow normalization errors to avoid breaking init\n }\n\n }\n\n private hasGlobalStorage(type: StorageType = StorageType.GLOBAL, id: string) {\n const strData: StorageData[] = [];\n\n if (type === StorageType.GLOBAL) {\n const str = localStorage.getItem(this.storageName);\n strData.push(...(str ? JSON.parse(str) : []));\n } else {\n const str = sessionStorage.getItem(this.storageName);\n strData.push(...(str ? JSON.parse(str) : []));\n }\n\n const found = strData.find(store => store.id === id);\n return !!found;\n }\n\n private isObjectOrArray(obj: any) {\n try {\n const parsed = typeof obj === 'object' ? obj : JSON.parse(obj);\n return typeof parsed === 'object' && parsed !== null;\n } catch {\n return false;\n }\n }\n\n private isString(obj: any) {\n return Object.prototype.toString.call(obj) === '[object String]';\n }\n\n private validStoreName(str: string) {\n return str.toLowerCase().replace(/\\s+/g, '_').replace(/[^ -~]/g, '');\n }\n}\n","export interface TableSchemaDefInterface {\n table: string\n schema: string\n}\n\nexport class TableSchemaDef implements TableSchemaDefInterface {\n constructor(\n public table = 'unknown',\n public schema: string = '',\n ) {}\n\n static adapt(item?: any): TableSchemaDef {\n\n const schemaArray = (item?.schema && Array.isArray(item.schema)) ? item.schema : item.schema.split(',')\n const schema = schemaArray.map((item: string) => this.cleanString(item)).join()\n\n return new TableSchemaDef(\n (item?.table) ? this.cleanString(item.table) : 'unknown',\n schema,\n )\n\n }\n\n static cleanString(str: string): string {\n // Allow alphanumeric, spaces, underscores, and Dexie schema characters (+, &, *, [, ])\n const cleanStr = str\n .replace(/[^a-zA-Z0-9\\s_+\\&*\\[\\]]/g, '')\n .trim();\n\n return cleanStr;\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport Dexie, {Table} from 'dexie';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DbService extends Dexie {\n\n readonly storageDB = \"global_storage_db\"\n\n get db() { return this; }\n\n private dbReady: Promise<void>;\n\n constructor() {\n\n super(\"global_storage_db\");\n\n this.on('blocked', () => {\n console.warn('Database upgrade blocked! Please close other tabs/windows of this app.');\n });\n\n this.on('versionchange', () => {\n console.warn('Database version changed in another tab. Reloading...');\n window.location.reload();\n });\n\n this.dbReady = this.init();\n\n }\n\n private async init() {\n try {\n // Check if database already exists\n const dbExists = await Dexie.exists(this.storageDB);\n\n if (dbExists) {\n // Database exists - just open it without declaring version\n // This allows Dexie to use the existing schema and version\n console.log(`Database \"${this.storageDB}\" already exists. Opening with existing schema...`);\n\n if (!this.isOpen()) {\n await this.open();\n }\n\n console.log(`✅ Connected to existing database. Current version: ${this.verno}`);\n console.log(`📊 Existing tables: ${this.getTables.join(', ')}`);\n } else {\n // New database - initialize with empty schema at version 1\n console.log(`Creating new database \"${this.storageDB}\"...`);\n\n if (this.isOpen()) {\n this.close();\n }\n\n this.version(1).stores({});\n await this.open();\n console.log(`✅ New database initialized. Current version: ${this.verno}`);\n }\n } catch (err) {\n console.error('Failed to initialize database:', err);\n throw err;\n }\n }\n\n protected async createNewDatabase() {\n return this.dbReady;\n }\n\n get vr() {\n return this.verno;\n }\n\n get nextVr() {\n const v = this.verno;\n return (isNaN(v) || v === 0) ? 1 : v + 1;\n }\n\n get getTables() {\n return this.tables.map((table) => table.name);\n }\n\n async hasDatabase() {\n return await Dexie.exists(this.storageDB);\n }\n\n getTable(tableName: string): Table<any, any> | undefined {\n try {\n return this.table(tableName);\n } catch (error) {\n return undefined;\n }\n }\n\n tableExists(tableName: string): boolean {\n return this.tables.some(t => t.name === tableName);\n }\n\n protected async updateTable(tableName: string, find: { key: string, value: string | number }, data: any): Promise<boolean> {\n const table = this.getTable(tableName);\n if (!table || !find || !find.key) return false;\n\n try {\n const count = await table.where(find.key).equals(find.value).modify(data);\n return count > 0;\n } catch (error) {\n console.error('Error updating table:', error);\n return false;\n }\n }\n\n protected async createTable(tableName: string, schema: string) {\n if (!tableName || !schema) return;\n\n await this.dbReady;\n\n const safeTableName = this.cleanTableName(tableName);\n const safeSchema = schema.trim();\n\n if (this.tableExists(safeTableName)) return;\n\n const currentSchema = this.getCurrentSchema();\n console.log('Current Schema before update:', currentSchema);\n\n currentSchema[safeTableName] = safeSchema;\n\n const nextVersion = this.verno + 1;\n console.log(`Creating table ${safeTableName}. Upgrading to version ${nextVersion}. New Schema:`, currentSchema);\n\n if (this.isOpen()) {\n this.close();\n }\n\n this.version(nextVersion).stores(currentSchema);\n\n try {\n await this.open();\n const created = this.tables.some(t => t.name === safeTableName);\n if (!created) {\n console.error(`CRITICAL: Table ${safeTableName} was NOT created after upgrade! Tables found:`, this.tables.map(t => t.name));\n } else {\n console.log(`Database opened successfully version ${this.verno}. Table ${safeTableName} verified.`);\n }\n } catch (err) {\n console.error('Error opening database after schema update:', err);\n }\n }\n\n protected async DBOpened() {\n if (!this.isOpen()) {\n try {\n await this.open();\n return true;\n } catch (err) {\n return false;\n }\n }\n return true;\n }\n\n private getCurrentSchema(): { [key: string]: string } {\n const schema: { [key: string]: string } = {};\n\n if (!this.tables || this.tables.length === 0) {\n return schema;\n }\n\n this.tables.forEach(table => {\n const primKey = table.schema.primKey;\n const indexes = table.schema.indexes;\n\n let schemaStr = \"\";\n\n if (primKey.auto) schemaStr += \"++\";\n\n if (Array.isArray(primKey.keyPath)) {\n schemaStr += `[${primKey.keyPath.join('+')}]`;\n } else {\n schemaStr += primKey.keyPath || \"\";\n }\n\n indexes.forEach(idx => {\n schemaStr += \",\";\n if (idx.unique) schemaStr += \"&\";\n if (idx.multi) schemaStr += \"*\";\n\n if (Array.isArray(idx.keyPath)) {\n schemaStr += `[${idx.keyPath.join('+')}]`;\n } else {\n schemaStr += idx.keyPath || \"\";\n }\n });\n\n schema[table.name] = schemaStr;\n });\n return schema;\n }\n\n protected cleanTableName(str: string): string {\n return str\n .replace(/[^a-zA-Z0-9\\s_]/g, '')\n .replace(/\\s+/g, '_')\n .trim()\n .toLowerCase();\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { DbService } from './db.storage.service';\n\nimport { TableSchemaDef } from './models/table-schema';\nimport { EMPTY, from, Observable } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DatabaseManagerService extends DbService {\n\n constructor() {\n super()\n }\n\n getDatabaseTables() {\n return from(this.DBOpened()).pipe(\n map(() => this.tables.map((item: any) => item.name))\n )\n }\n\n databaseExists(): Observable<boolean> {\n return from(this.hasDatabase());\n }\n\n hasDatabaseTable(table: string): Observable<boolean> {\n const tableName = this.cleanTableName(table);\n return from(this.DBOpened()).pipe(\n map(() => {\n return this.tableExists(tableName)\n })\n )\n }\n\n getDatabaseTable(table: string): Observable<any> {\n const tableName = this.cleanTableName(table);\n return from(this.DBOpened()).pipe(\n map(() => {\n const found = this.getTable(tableName);\n if(!found) {\n console.warn('No Such Table:', tableName)\n return null;\n }\n return found;\n })\n )\n }\n\n getDatabaseTableSchema(table: string): Observable<string[]> {\n const tableName = this.cleanTableName(table);\n return this.getDatabaseTable(tableName).pipe(\n map((dbTable: any) => {\n if(!dbTable) return []\n const cols = dbTable.schema.indexes.map((col: any) => col.name)\n const pri = dbTable.schema.primKey.name\n return [pri, ...cols]\n })\n )\n }\n\n createDatabaseTable(tableDef: TableSchemaDef) {\n return from(this.createTable(tableDef.table, tableDef.schema)).pipe(\n switchMap(() => this.DBOpened())\n )\n }\n\n updateDatabaseTableSchema(tableDef: TableSchemaDef) {\n return from(this.createTable(tableDef.table, tableDef.schema)).pipe(\n switchMap(() => this.getDatabaseTable(tableDef.table))\n )\n }\n\n // CRUD\n findTableRecords(table: string, column: string, value: any) {\n const tableName = this.cleanTableName(table);\n return this.getDatabaseTable(tableName).pipe(\n switchMap((tableData: any) => {\n if (!tableData) {\n console.warn(`findTableRecords: Table '${tableName}' not found`);\n return from([]);\n }\n return from(tableData.where(column).equals(value).toArray());\n })\n );\n }\n\n findTableRecord(table: string, column: string, value: any) {\n const tableName = this.cleanTableName(table);\n return this.findTableRecords(tableName, column, value).pipe(\n map((records: any) => records && records.length > 0 ? records[0] : null)\n );\n }\n\n getTableRecords(table: string) {\n const tableName = this.cleanTableName(table);\n return this.getDatabaseTable(tableName).pipe(\n switchMap((tableData: any) => {\n if (!tableData) {\n console.warn(`getTableRecords: Table '${tableName}' not found`);\n return from([]);\n }\n return from(tableData.toArray());\n })\n );\n }\n\n getTableRecord(table: string, id: number) {\n const tableName = this.cleanTableName(table);\n return this.getDatabaseTable(tableName).pipe(\n switchMap((tableData: any) => {\n if (!tableData) {\n console.warn(`getTableRecord: Table '${tableName}' not found`);\n return from([null]);\n }\n return from(tableData.get(id)).pipe(\n map((record: any) => record || null)\n );\n })\n );\n }\n\n createTableRecord(table: string, record: any) {\n const tableName = this.cleanTableName(table);\n return this.createTableRecords(tableName, [record])\n .pipe(\n map((item: any) => item ? item[0] : null))\n }\n\n createTableRecords(table: string, records: any[]) {\n const tableName = this.cleanTableName(table);\n return from(this.DBOpened()).pipe(\n switchMap(() => {\n if (!this.tables.some(t => t.name === tableName)) {\n console.error(`createTableRecords: Table '${tableName}' does not exist in DB version ${this.verno}. Available:`, this.tables.map(t => t.name));\n return EMPTY;\n }\n\n const tableInstance = this.table(tableName);\n\n // Extract schema fields directly from the table instance\n const schema = tableInstance.schema;\n const validFields = [\n schema.primKey.name,\n ...schema.indexes.map(idx => idx.name)\n ];\n\n const insertRecords = records.map((record: any) => {\n const objectFromSchema: { [key: string]: any } = {};\n validFields.forEach((field: string) => {\n if (field) {\n objectFromSchema[field] = (record as any)[field] ?? null;\n }\n });\n return objectFromSchema;\n });\n\n console.log(`createTableRecords: Bulk putting ${insertRecords.length} records into ${tableName}`);\n\n return from(tableInstance.bulkPut(insertRecords)).pipe(\n map(() => insertRecords)\n );\n })\n );\n }\n\n updateTableRecord(table: string, record: any) {\n const tableName = this.cleanTableName(table);\n return this.updateTableRecords(tableName, [record])\n .pipe(\n map(item => item.length > 0 ? item[0] : null)\n )\n }\n\n updateTableRecords(table: string, records: any[]) {\n\n const tableName = this.cleanTableName(table);\n\n return this.getDatabaseTable(tableName).pipe(\n\n switchMap((tableData: any) => {\n\n return this.getDatabaseTableSchema(tableName).pipe(\n\n switchMap((schema: string[]) => {\n\n const insertRecords = records.map((record: any) => {\n\n const objectFromSchema: { [key: string]: any } = {}\n\n schema.forEach((field: string) => {\n const data = (record as any)[field] ?? null\n objectFromSchema[field] = data\n })\n\n return objectFromSchema\n\n })\n\n return from(tableData.bulkPut(insertRecords)).pipe(\n map(() => insertRecords)\n );\n\n })\n\n )\n\n })\n\n )\n\n }\n\n deleteTableRecord<T>(table: string, id: number) {\n const tableName = this.cleanTableName(table);\n return this.deleteTableRecords(tableName, [id])\n .pipe(\n map(item => item.length > 0 ? item[0] : null)\n )\n }\n\n deleteTableRecords(table: string, ids: number[]) {\n const tableName = this.cleanTableName(table);\n return this.getDatabaseTable(tableName).pipe(\n\n switchMap((tableData: any) => {\n\n return this.getDatabaseTableSchema(tableName).pipe(\n\n switchMap((schema: string[]) => {\n\n console.log(`deleteTableRecords: Starting delete of ${ids.length} records from ${table}. IDs:`, ids);\n\n return from(tableData.bulkDelete(ids)).pipe(\n map(() => ids)\n );\n\n })\n\n )\n\n })\n\n )\n\n }\n\n clearTable(table: string) {\n const tableName = this.cleanTableName(table);\n return this.getDatabaseTable(tableName).pipe(\n switchMap((tableData: any) => {\n if (!tableData) {\n console.warn(`clearTable: Table '${tableName}' not found`);\n return from([]);\n }\n console.log(`clearTable: Clearing all records from ${tableName}`);\n return from(tableData.clear());\n })\n );\n }\n\n}\n","import { WSUser } from \"./ws-user.model\";\n\nexport interface ChannelMessageInterface {\n sessionId: any,\n content: any,\n}\n\nexport class ChannelMessage implements ChannelMessageInterface {\n\n constructor(\n public sessionId: any = null,\n public content: any = null,\n ) {}\n\n static adapt(item?: any): ChannelMessage {\n\n return new ChannelMessage(\n item?.sessionId || item?.id, // Support both for backward compatibility\n item?.content,\n )\n\n }\n\n}\n","import { inject, Inject, Injectable, InjectionToken } from '@angular/core';\nimport { ComponentStore } from '@ngrx/component-store';\n\nimport { BehaviorSubject, Observable, of, Subject, timer, merge } from 'rxjs';\nimport { tap, switchMap, concatMap, scan, delay, take, map, distinctUntilChanged, takeUntil, takeWhile, filter } from 'rxjs/operators';\nimport { DatabaseStorage } from '../../models/database-storage.model';\nimport { ApiRequest, RequestOptions, WSOptions } from './models';\nimport { WSUser } from '../ws-manager-service/models';\nimport { HTTPManagerService, DataType } from '../request-manager-services';\nimport { DatabaseManagerService } from '../database-manager-service';\nimport { TableSchemaDef } from '../database-manager-service/models/table-schema';\nimport { LocalStorageManagerService, StorageType } from '../local-storage-manager-service';\nimport { SettingOptions } from '../local-storage-manager-service/models/setting-options.model';\nimport { UtilsService } from '../..';\nimport { ChannelMessage } from '../ws-manager-service/models/channel-message.model';\n\nconst API_OPTS = new InjectionToken<ApiRequest>('API_OPTS');\n\nexport interface APIStateManagerData<T> {\n data: T[]\n dataObject: T | null\n}\n\nconst defaultState: APIStateManagerData<any> = {\n data: [],\n dataObject: null,\n};\n\n@Injectable()\nexport class HTTPManagerStateService<T extends { id: number|string }> extends ComponentStore<APIStateManagerData<T>> {\n\n httpManagerService = inject(HTTPManagerService)\n dbManagerService = inject(DatabaseManagerService)\n localStorageManagerService = inject(LocalStorageManagerService)\n utils = inject(UtilsService)\n\n error$ = this.httpManagerService.error$\n isPending$ = this.httpManagerService.isPending$.pipe(delay(1))\n\n // PAGINATION\n private page = new BehaviorSubject<number>(0)\n page$ = this.page.asObservable()\n\n private totalPages = new BehaviorSubject<number>(0)\n totalPages$ = this.totalPages.asObservable()\n\n private percentage = new BehaviorSubject<number>(0)\n percentage$ = this.percentage.asObservable()\n\n private hasDatabase = false\n\n streamedResponse = []\n\n // WS\n private maxRetries: number\n private retryDelay: number\n private shouldRetry = true\n\n private databaseOptions?: DatabaseStorage\n\n private wsRetryAttempts = new BehaviorSubject<number>(0)\n wsRetryAttempts$ = this.wsRetryAttempts.asObservable()\n\n private wsNextRetry: BehaviorSubject<number>\n wsNextRetry$: Observable<number>\n\n\n private messages = new BehaviorSubject<any[]>([])\n messages$ = this.messages.asObservable()\n\n private userListByChannel = new BehaviorSubject<Map<string, any[]>>(new Map())\n userListByChannel$ = this.userListByChannel.asObservable()\n\n // Convenience observable that returns users for a specific channel\n getUsersForChannel$(channel: string) {\n return this.userListByChannel$.pipe(\n map(channelMap => channelMap.get(channel) || [])\n )\n }\n\n // Legacy support - returns all unique users across all channels\n private userList = new BehaviorSubject<any[]>([])\n userList$ = this.userList.asObservable()\n\n private user = new BehaviorSubject<WSUser|null>(null)\n user$ = this.user.asObservable()\n\n private channels = new BehaviorSubject<string[]|null>(null)\n channels$ = this.channels.asObservable()\n\n // In-memory notification channels (from server)\n private notificationChannels = new BehaviorSubject<string[]>([])\n notificationChannels$ = this.notificationChannels.asObservable()\n\n // Today's notification channels (from database - channels with data for today)\n private todaysNotificationChannels = new BehaviorSubject<string[]>([])\n todaysNotificationChannels$ = this.todaysNotificationChannels.asObservable()\n\n // Notification messages (MES- channels)\n private notificationMessages = new BehaviorSubject<any[]>([])\n notificationMessages$ = this.notificationMessages.asObservable()\n\n private latestNotification = new Subject<any>()\n latestNotification$ = this.latestNotification.asObservable()\n\n private communicationMessages = new BehaviorSubject<any[]>([])\n communicationMessages$ = this.communicationMessages.asObservable()\n\n private latestCommunicationMessages = new BehaviorSubject<any|null>(null)\n latestCommunicationMessages$ = this.latestCommunicationMessages.asObservable()\n\n private userAction = new BehaviorSubject<any|null>(null)\n userAction$ = this.userAction.asObservable()\n\n wsConnection = false\n wsOptions = WSOptions.adapt()\n\n // Expose raw WS connection status directly to UI\n public connectionStatus$: Observable<boolean> = this.httpManagerService.connectionStatus$\n\n constructor(\n @Inject(API_OPTS) private apiOptions = ApiRequest.adapt(),\n @Inject(\"dataType\") private dataType: DataType | undefined,\n @Inject(\"database\") private database?: DatabaseStorage | undefined\n ) {\n\n super(defaultState);\n\n this.databaseOptions = database\n this.maxRetries = this.apiOptions.ws?.retry?.times || 3\n this.retryDelay = (this.apiOptions.ws?.retry?.delay && this.apiOptions.ws.retry.delay * 1000) || 5 * 1000\n // Start next retry countdown at 0 to avoid showing 5000 pre-connection\n this.wsNextRetry = new BehaviorSubject<number>(0)\n this.wsNextRetry$ = this.wsNextRetry.asObservable()\n\n this.setApiRequestOptions(apiOptions, dataType, database)\n\n if (this.databaseOptions && this.databaseOptions.table) {\n\n this.localStorageManagerService.createStore({\n name: this.databaseOptions.table,\n data: { ...this.databaseOptions, ...{ expires: this.utils.expires(this.databaseOptions.expiresIn)} },\n options: SettingOptions.adapt({\n storage: StorageType.GLOBAL,\n encrypted: false,\n })\n })\n\n this.initDBStorage()\n\n }\n\n }\n\n setApiRequestOptions(apiOptions?: ApiRequest, dataType?: DataType, database?: DatabaseStorage) {\n\n this.apiOptions = ApiRequest.adapt(apiOptions)\n this.dataType = (dataType) ? dataType : DataType.ARRAY\n\n // Only update database options if a database parameter is explicitly provided\n if (database !== undefined) {\n this.hasDatabase = (database?.table) ? true : false\n this.databaseOptions = (this.hasDatabase) ? DatabaseStorage.adapt(database) : undefined\n }\n\n if(this.apiOptions.ws && this.apiOptions.ws.id !== '') {\n\n // Update WebSocket retry settings when options change\n if (this.apiOptions.ws?.retry) {\n this.maxRetries = this.apiOptions.ws.retry.times || 3\n this.retryDelay = (this.apiOptions.ws.retry.delay && this.apiOptions.ws.retry.delay * 1000) || 5 * 1000\n this.wsNextRetry.next(this.retryDelay)\n }\n\n // Validate wsServer before attempting connection\n if (!this.apiOptions.ws.wsServer || this.apiOptions.ws.wsServer === '') {\n console.error('WSOptions invalid: wsServer is missing or empty');\n return;\n }\n\n // Setup connection status monitoring (internal subscription to drive retry counters)\n this.setupConnectionStatus().subscribe();\n\n // Make initial connection attempt\n console.log('🔄 Initial WebSocket connection attempt...');\n this.httpManagerService.connect(this.apiOptions.ws as WSOptions, this.apiOptions.ws.jwtToken || '');\n\n // Initialize WS effect to handle messages\n this.initWS(this.apiOptions.ws as WSOptions)\n\n } else {\n console.warn('WSOptions invalid Id: empty')\n }\n\n }\n\n // WebSocket\n private setupConnectionStatus(): Observable<boolean> {\n return this.httpManagerService.connectionStatus$.pipe(\n distinctUntilChanged(),\n tap(status => {\n if (status === true) {\n console.log('🟢 WebSocket connection is open.')\n } else {\n console.log('🔴 WebSocket connection is closed.')\n }\n }),\n switchMap(status => {\n\n if (status === true) {\n this.shouldRetry = true\n this.wsRetryAttempts.next(0);\n this.wsNextRetry.next(0);\n return of(true);\n }\n\n if (!this.shouldRetry) return of(false)\n\n const countdownEnder$ = new Subject<void>();\n\n // Immediately reflect upcoming retry delay in seconds on UI\n const seconds = this.retryDelay / 1000;\n this.wsNextRetry.next(seconds);\n\n return timer(0, this.retryDelay)\n .pipe(\n take(this.maxRetries),\n tap(i => {\n\n const attempt = i + 1;\n this.wsRetryAttempts.next(attempt);\n countdownEnder$.next();\n\n // Validate WS options; abort retries if invalid\n const hasValidWS = !!(this.apiOptions.ws && this.apiOptions.ws.wsServer && this.apiOptions.ws.wsServer !== '');\n\n if (!hasValidWS) {\n this.shouldRetry = false;\n this.wsNextRetry.next(0);\n this.wsRetryAttempts.next(0);\n return; // Skip connect and countdown\n }\n\n console.log(`🔄 Retry attempt #${attempt}/${this.maxRetries}`);\n this.httpManagerService.connect(this.apiOptions.ws as WSOptions, this.apiOptions.ws!.jwtToken || '');\n\n if (attempt === this.maxRetries) {\n this.wsNextRetry.next(0)\n // console.error(`🚨 FAILED CONNECTION: Tried #${attempt} times`);\n } else {\n // console.log(`⚠️ Retry Attempt #${attempt}: Retrying in ${this.retryDelay / 1000}s`);\n const seconds = this.retryDelay / 1000;\n\n timer(0, 1000).pipe(\n map(tick => seconds - tick),\n takeWhile(val => val >= 0),\n takeUntil(countdownEnder$)\n ).subscribe(remaining => {\n this.wsNextRetry.next(remaining);\n })\n\n }\n\n }),\n map(() => false)\n )\n })\n );\n }\n\n // WebSocket\n readonly initWS = this.effect<WSOptions>((wsOptions$) =>\n wsOptions$.pipe(\n // tap((wsOptions) => { debugger\n // this.wsOptions = wsOptions\n // }),\n switchMap((wsOptions) =>\n merge(\n this.httpManagerService.connectionStatus$.pipe(\n tap((isConnected: any) => {\n this.wsConnection = isConnected\n })\n ),\n this.httpManagerService.messages$.pipe(\n tap((message: any) => {\n if (!message) return\n\n // Add message to messages array\n const currentMessages = this.messages.value\n this.messages.next([...currentMessages, message])\n\n console.log('Received:', message)\n\n if (message.error === 'JWT_INVALID') {\n this.shouldRetry = false\n this.httpManagerService.disconnect()\n }\n\n if (message.type === 'success') {\n if(message.data.id !== this.user.value?.id) {\n const user = WSUser.adapt(message.data)\n this.user.next(user)\n }\n }\n\n switch (message.type) {\n case 'channelsList':\n\n console.log('💬 Channels:', message.channels)\n\n // this.channelList = message.channels\n\n // if (this.channelList.includes(wsOptions.id)) {\n // this.httpManagerService.subscribeToChannel(wsOptions.id)\n // } else {\n // this.httpManagerService.createChannel(wsOptions.id)\n // }\n\n this.channels.next(message.channels)\n\n break;\n\n case 'subscribed':\n console.log(`✅ Subscription confirmed: ${message.channel}`)\n break;\n\n case 'unsubscribed':\n console.log(`🔓 Unsubscription confirmed: ${message.channel}`)\n break;\n\n case 'info':\n // Already subscribed or other info messages\n console.log(`ℹ️ Info: ${message.message}`)\n break;\n\n case 'stateMangerMessage':\n // Compare sender's session ID with current user's ID\n // message.data.sessionId is an object with 'id' property from server\n const stateManagerSenderId = message.data.sessionId?.id || message.data.sessionId;\n if(stateManagerSenderId !== this.user.value?.id) {\n console.log('💬 State Manager Message:', message.data)\n this.userAction.next(message.data)\n this.fetchRecord(RequestOptions.adapt({ path: message.data.content.path }), message.data.content.method)\n }\n break;\n\n case 'channelMessage':\n // Handle channel-based messages (from sendChannelMessage)\n // Structure: { type: 'channelMessage', channels: [...], sessionId: {id, ldap, name, email}, content: {message payload} }\n // Skip messages from self\n const senderSessionId = message.sessionId?.id;\n if (senderSessionId === this.user.value?.id) {\n break;\n }\n console.log('💬 Channel Message received:', message);\n if (message.content) {\n this.appendMessages(ChannelMessage.adapt({\n sessionId: message.sessionId,\n content: message.content,\n }));\n }\n break;\n\n case 'usersInChannel':\n console.log(`👥 Users in channel \"${message.channel}\":`, message.data.users)\n\n // Update channel-specific user list\n const currentMap = new Map(this.userListByChannel.value)\n currentMap.set(message.channel, message.data.users)\n this.userListByChannel.next(currentMap)\n\n // Update legacy userList with unique users across all channels\n const allUsers = Array.from(currentMap.values()).flat()\n const uniqueUsers = allUsers.filter((user, index, self) =>\n index === self.findIndex(u => u.id === user.id)\n )\n this.userList.next(uniqueUsers)\n break;\n\n case 'notificationChannelsList':\n console.log('📢 Notification Channels (in-memory):', message.channels)\n this.notificationChannels.next(message.channels || [])\n break;\n\n case 'todaysNotificationChannelsList':\n console.log('📢 Today\\'s Notification Channels (from DB):', message.channels)\n this.todaysNotificationChannels.next(message.channels || [])\n break;\n\n case 'notificationSubscribed':\n console.log(`📢 Notification subscription confirmed: ${message.channel}`, message.notifications)\n // Set historical notifications from subscription\n if (message.notifications && Array.isArray(message.notifications)) {\n this.notificationMessages.next(message.notifications)\n }\n break;\n\n case 'notificationUnsubscribed':\n console.log(`📢 Notification unsubscription confirmed: ${message.channel}`)\n break;\n\n case 'notification':\n console.log('📢 Notification received:', message)\n // Add to notifications array\n const currentNotifications = this.notificationMessages.value\n this.notificationMessages.next([...currentNotifications, message])\n // Emit as latest notification\n this.latestNotification.next(message)\n break;\n\n default:\n // Messages are already added at the beginning of the tap\n break\n }\n })\n )\n )\n )\n )\n );\n\n appendMessages(message: any) {\n const currentMessages = this.communicationMessages.value\n this.communicationMessages.next([...currentMessages, message])\n this.latestMessage()\n }\n\n latestMessage() {\n const messages = this.communicationMessages.value\n const latestMessage = messages[messages.length -1]\n this.latestCommunicationMessages.next(latestMessage)\n }\n\n clearMessages() {\n this.communicationMessages.next([])\n }\n\n get ApiRequestOptions() {\n return this.apiOptions\n }\n\n readonly initDBStorage = this.effect<void>((trigger$) =>\n trigger$.pipe(\n tap(() => {\n if (this.dataType !== DataType.ARRAY) console.warn('Database storage requires dataType to be ARRAY')\n if (!this.apiOptions.adapter) console.warn('Database storage requires an adapter to define the data shape')\n if (this.databaseOptions && this.databaseOptions?.table === '') console.warn('Database storage requires a table name')\n }),\n filter(() => this.dataType === DataType.ARRAY && !!this.apiOptions.adapter && !!this.databaseOptions?.table),\n switchMap(() => {\n const sampleData = this.apiOptions.adapter?.({}) || {}\n const schemaKeys = Object.keys(sampleData).filter(key => sampleData[key] !== undefined)\n\n let schema = '++id'\n\n if (schemaKeys.length > 0) {\n const otherKeys = schemaKeys.filter(k => k !== 'id')\n if (otherKeys.length > 0) {\n schema += ', ' + otherKeys.join(', ')\n }\n }\n\n const tableDef = TableSchemaDef.adapt({\n table: this.databaseOptions?.table,\n schema: schema\n });\n\n return this.dbManagerService.createDatabaseTable(tableDef)\n })\n )\n )\n\n initializeState(data: any) {\n this.setData$(data)\n }\n\n // --------------------------------------------------------------------------------------------------\n // SELECTORS\n readonly data$ = this.select(({ data, dataObject }) => {\n const isArray =( this.dataType === DataType.ARRAY) ? true : false\n return (isArray) ? data : dataObject\n })\n\n readonly selectRecord$ = (id: number) => this.select(\n this.data$,\n (data) => {\n if (this.dataType === DataType.ARRAY && Array.isArray(data)) {\n return data.find(item => item.id === id) as T | null\n } else {\n return (data as T).id === id ? data : null\n }\n }\n )\n\n // --------------------------------------------------------------------------------------------------\n\n // UPDATERS\n private readonly setData$ = this.updater((state: APIStateManagerData<T>, data: T | T[] | any) => {\n\n if (!data) return state;\n\n if (this.dataType === DataType.ARRAY) {\n\n const dataArray = Array.isArray(data) ? data : [data]\n\n const stateDataSample = (state.data.length > 0) ? Object.keys(state.data[0]) : []\n const newDataSample = (dataArray.length > 0) ? Object.keys(dataArray[0]) : []\n\n const isSame = (state.data.length === 0) ? false : stateDataSample.every((value, index) => value === newDataSample[index])\n const updatedData = (!isSame && dataArray.length !== 0) ? this.updateArrayState([], dataArray) : this.updateArrayState(state.data, dataArray)\n\n return { ...state, data: updatedData, dataObject: null } as APIStateManagerData<T>;\n\n } else {\n const dataObject = this.isEmpty(data) ? null : data;\n return { ...state, data: [], dataObject: dataObject } as APIStateManagerData<T>;\n }\n\n })\n\n private updateArrayState(currentData: any[], newData: any[]): any[] {\n\n const filterCurrentData = () => {\n const ids = this.streamedResponse.map((obj: any) => obj.id)\n return currentData.filter(obj => (obj.id) ? ids.includes(obj.id) : obj)\n }\n\n const filteredCurrentData = (this.httpManagerService.isPending.value) ? currentData : filterCurrentData()\n\n const updatedData = filteredCurrentData.map(item => {\n const newItem = newData.find(newItem => {\n const hasId = (newItem?.id && item?.id) ? true : false\n return (hasId) ? newItem.id === item.id : JSON.stringify(newItem) === JSON.stringify(item)\n })\n return (newItem) ? { ...item, ...newItem } : item\n })\n\n const addedData = newData.filter(newItem => {\n return !filteredCurrentData.some(item => {\n const hasId = (newItem?.id && item?.id) ? true : false\n return (hasId) ? item.id === newItem.id : JSON.stringify(newItem) === JSON.stringify(item)\n })\n })\n\n return [...updatedData, ...addedData]\n\n }\n\n private readonly addData$ = this.updater((state: APIStateManagerData<T>, data: T) => {\n\n if (this.dataType === DataType.ARRAY) {\n const exists = state.data.some(item => item.id === data.id);\n\n if (exists) {\n const updatedData = state.data.map(item =>\n item.id === data.id ? data : item\n );\n\n return { ...state, data: updatedData };\n } else {\n const newState = [...state.data, data];\n return { ...state, data: newState };\n }\n } else {\n return { ...state, dataObject: data };\n }\n\n })\n\n private readonly deleteData$ = this.updater((state: APIStateManagerData<T>, data: T & { id: number }) => {\n if (this.dataType === DataType.ARRAY) {\n const newState = state.data.filter(item => item.id !== data.id)\n return { ...state, ...{ data: newState } }\n } else {\n return { ...state, ...{ dataObject: null } }\n }\n })\n\n private readonly updateData$ = this.updater((state: APIStateManagerData<T>, data: T) => {\n\n if (this.dataType === DataType.ARRAY) {\n\n const objIndex = state.data.findIndex(item => item.id === data.id)\n\n if (objIndex > -1) {\n const newState = [...state.data]\n newState[objIndex] = data\n return { ...state, ...{ data: newState } }\n }\n\n return state\n\n } else {\n return { ...state, ...{ dataObject: data } }\n }\n\n })\n\n // --------------------------------------------------------------------------------------------------\n // EFFECTS\n\n readonly clearRecords = this.effect(data =>\n data.pipe(\n\n tap(() => {\n\n if (this.dataType === DataType.ARRAY) {\n this.setData$([])\n } else {\n this.setData$({})\n }\n\n }),\n concatMap(() => {\n if (this.hasDatabase && this.databaseOptions?.table) {\n\n const currentData = this.get()?.data;\n const idsToDelete = Array.isArray(currentData) ? currentData.map((r: any) => r.id) : [];\n\n if (idsToDelete.length > 0) {\n return this.dbManagerService.deleteTableRecords(this.databaseOptions.table, idsToDelete);\n }\n\n }\n return of(null);\n })\n ))\n\n // --------------------------------------------------------------------------------------------------\n // CRUD OPERATIONS\n\n // FETCH RECORDS\n readonly fetchRecords = (options?: RequestOptions) =>\n this.effect<any>(() =>\n of(RequestOptions.adapt(options)).pipe(\n switchMap(() => {\n\n this.streamedResponse = []\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n const fetchFromAPI = () => {\n\n return this.httpManagerService.getRequest(requestOptions, options?.path).pipe(\n tap((data: any) => {\n data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data\n this.setData$(data)\n }),\n concatMap((data: any) => {\n if (this.hasDatabase && this.databaseOptions?.table && Array.isArray(data) && data.length > 0) {\n\n this.localStorageManagerService.updateStore({\n name: this.databaseOptions!.table,\n data: { ...this.databaseOptions, ...{ expires: this.utils.expires(this.databaseOptions!.expiresIn)} }\n })\n\n return this.dbManagerService.createTableRecords(this.databaseOptions.table, data);\n }\n return of(data);\n })\n );\n\n }\n\n if (this.hasDatabase && this.databaseOptions?.table) {\n\n return this.dbManagerService.databaseExists().pipe(\n switchMap((dbExists: boolean) => {\n\n if (!dbExists) {\n const initObs: Observable<any> = this.initDBStorageAsync();\n return initObs.pipe(\n switchMap(() => fetchFromAPI())\n );\n }\n\n return this.dbManagerService.hasDatabaseTable(this.databaseOptions!.table).pipe(\n switchMap((tableExists: boolean): Observable<any> => {\n\n if (!tableExists) {\n const initObs: Observable<any> = this.initDBStorageAsync();\n return initObs.pipe(\n switchMap(() => fetchFromAPI())\n );\n }\n\n return this.localStorageManagerService.store$(this.databaseOptions!.table).pipe(\n take(1),\n switchMap((storeData: any) => {\n\n const expires = storeData?.expires || 0;\n const hasExpired = expires > 0 && this.utils.hasExpired(expires);\n\n if (hasExpired) {\n return this.dbManagerService.clearTable(this.databaseOptions!.table).pipe(\n switchMap(() => fetchFromAPI()),\n tap(() => {\n this.localStorageManagerService.updateStore({\n name: this.databaseOptions!.table,\n data: { ...this.databaseOptions, ...{ expires: this.utils.expires(this.databaseOptions!.expiresIn)} }\n })\n })\n );\n }\n\n return this.dbManagerService.getTableRecords(this.databaseOptions!.table).pipe(\n switchMap((dbData: any) => {\n\n if (Array.isArray(dbData) && dbData.length > 0) {\n this.setData$(dbData);\n return of(dbData);\n }\n\n return fetchFromAPI();\n\n })\n );\n })\n );\n\n })\n );\n })\n );\n\n }\n\n return fetchFromAPI();\n\n })\n )\n )\n\n private initDBStorageAsync() {\n\n if (this.dataType !== DataType.ARRAY) {\n console.warn('Database storage requires dataType to be ARRAY');\n return of(null);\n }\n\n if (!this.apiOptions.adapter) {\n console.warn('Database storage requires an adapter to define the data shape');\n return of(null);\n }\n\n if (!this.databaseOptions?.table) {\n console.warn('Database storage requires a table name');\n return of(null);\n }\n\n const sampleData = this.apiOptions.adapter?.({}) || {};\n const schemaKeys = Object.keys(sampleData).filter(key => sampleData[key] !== undefined);\n\n let schema = '++id';\n\n if (schemaKeys.length > 0) {\n const otherKeys = schemaKeys.filter(k => k !== 'id');\n if (otherKeys.length > 0) {\n schema += ', ' + otherKeys.join(', ');\n }\n }\n\n const tableDef = TableSchemaDef.adapt({\n table: this.databaseOptions?.table,\n schema: schema\n });\n\n return this.dbManagerService.createDatabaseTable(tableDef);\n\n }\n\n // FETCH RECORD\n readonly fetchRecord = (options: RequestOptions, method: string) =>\n this.effect<any>(() =>\n of(RequestOptions.adapt(options)).pipe(\n switchMap((options) => {\n\n this.streamedResponse = []\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.getRequest(requestOptions, options?.path)\n .pipe(\n tap((data: any) => {\n\n data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data\n\n const id = (options as any).path?.length ? options.path[options.path.length -1] : null\n\n if(method === 'DELETE') this.deleteData$({ id } as T & { id: number })\n if(method === 'UPDATE') this.updateData$(data)\n if(method === 'CREATE') this.addData$(data)\n\n }),\n concatMap((data: any) => {\n if (this.hasDatabase && this.databaseOptions?.table) {\n const id = (options as any).path?.length ? options.path[options.path.length -1] : null\n\n if(method === 'DELETE' && id) return this.dbManagerService.deleteTableRecord(this.databaseOptions.table, id)\n if(method === 'UPDATE' && data) return this.dbManagerService.updateTableRecord(this.databaseOptions.table, data)\n if(method === 'CREATE' && data) return this.dbManagerService.createTableRecord(this.databaseOptions.table, data)\n }\n return of(data)\n })\n )\n\n })\n )\n )\n\n // CREATE RECORD\n readonly createRecord = (data: any|null, options?: RequestOptions) =>\n this.effect<any>(() =>\n of(data).pipe(\n switchMap((data: any) => {\n\n this.streamedResponse = []\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.postRequest(data, requestOptions, options?.path)\n .pipe(\n tap((data: any) => {\n data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data\n this.addData$(data)\n if(this.wsConnection) this.wsCommunication('CREATE', [...options?.path || [], data.id])\n }),\n concatMap((data: any) => {\n if (this.hasDatabase && this.databaseOptions?.table && data?.id) {\n return this.dbManagerService.createTableRecord(this.databaseOptions.table, data);\n }\n return of(data);\n })\n )\n\n })\n )\n )\n\n // UPDATE RECORD\n readonly updateRecord = (data: any|null, options?: RequestOptions) =>\n this.effect<any>(() =>\n of(data).pipe(\n concatMap((data: any) => {\n\n this.streamedResponse = []\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.putRequest(data, requestOptions, options?.path)\n .pipe(\n tap((data: any) => {\n data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data\n this.updateData$(data)\n if(this.wsConnection) this.wsCommunication('UPDATE', [...options?.path || []])\n }),\n concatMap((data: any) => {\n if (this.hasDatabase && this.databaseOptions?.table && data?.id) {\n return this.dbManagerService.updateTableRecord(this.databaseOptions.table, data);\n }\n return of(data);\n })\n )\n\n })\n )\n )\n\n // DELETE RECORD\n readonly deleteRecord = (options?: RequestOptions) =>\n this.effect<any>(() =>\n of(options).pipe(\n concatMap((data: any) => {\n\n this.streamedResponse = []\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.deleteRequest(requestOptions, options?.path)\n .pipe(\n tap((data: any) => {\n data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data\n this.deleteData$(data)\n if(this.wsConnection) this.wsCommunication('DELETE', [...options?.path || []])\n }),\n concatMap((data: any) => {\n if (this.hasDatabase && this.databaseOptions?.table && data?.id) {\n return this.dbManagerService.deleteTableRecord(this.databaseOptions.table, data.id);\n }\n return of(data);\n })\n )\n\n })\n )\n )\n\n // --------------------------------------------------------------------------------------------------\n // FETCH STREAM\n readonly createStream = (data: any|null, options?: RequestOptions) =>\n this.effect<any>(() =>\n of(data).pipe(\n tap(() => this.httpManagerService.isPending.next(true)),\n switchMap((data: any) => {\n\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.postRequest(data, requestOptions, options?.path)\n .pipe(\n tap((res: any) => {\n if(res.length > 0) this.setData$(res)\n this.streamedResponse = res\n }),\n scan((acc, res: any) => {\n\n const previous = acc.current\n const current = res\n return { previous, current };\n\n }, { previous: null, current: null }),\n tap(({ previous, current }) => {\n\n if(previous && JSON.stringify(previous) === JSON.stringify(current)) {\n this.httpManagerService.isPending.next(false)\n this.setData$([])\n } else {\n this.httpManagerService.isPending.next(true)\n }\n\n })\n )\n\n })\n )\n\n )\n\n readonly fetchStream = (options?: RequestOptions) =>\n this.effect<any>(() =>\n of(options).pipe(\n tap(() => this.httpManagerService.isPending.next(true)),\n switchMap((options: any) => {\n\n const requestOptions = this.updateRequestOptions(options?.headers)\n requestOptions.stream = true\n\n return this.httpManagerService.getRequest(requestOptions, options?.path)\n .pipe(\n tap((res: any) => {\n\n if(res.length > 0) this.setData$(res)\n this.streamedResponse = res\n }),\n scan((acc, res: any) => {\n\n const previous = acc.current\n const current = res\n return { previous, current }\n\n }, { previous: null, current: null }),\n tap(({ previous, current }) => {\n\n if(previous && JSON.stringify(previous) === JSON.stringify(current)) {\n this.httpManagerService.isPending.next(false)\n this.setData$([])\n } else {\n this.httpManagerService.isPending.next(true)\n }\n\n })\n )\n\n }),\n )\n )\n\n // WEBSOCKET COMMUNICATION (STATE MANAGER)\n private wsCommunication(method: string, path?: string|number[]) {\n if(this.wsConnection && this.apiOptions.ws) {\n const wsServer = this.apiOptions.ws.id\n this.httpManagerService.sendMessageInChannel(wsServer, { method, path, user: this.apiOptions.ws.user })\n }\n\n }\n\n wsMessaging(message: ChannelMessage, channels?: string[]) {\n\n const user = this.user.value\n const messageInfo = ChannelMessage.adapt({ ...message, fromUser: user })\n\n console.log('📤 wsMessaging called with channels:', channels);\n\n if(this.wsConnection && this.apiOptions.ws) {\n\n // If specific channels provided, send to each channel\n if (channels && channels.length > 0) {\n console.log(`📤 Sending to ${channels.length} channel(s):`, channels);\n channels.forEach(channel => {\n if (channel === 'allChannels') {\n this.httpManagerService.sendBroadcast(messageInfo);\n } else {\n this.httpManagerService.sendChannelMessage(channel, messageInfo);\n }\n });\n } else {\n // Fallback to the primary WS channel\n const wsChannel = this.apiOptions.ws.id;\n console.log(`📤 Sending to fallback channel:`, wsChannel);\n this.httpManagerService.sendChannelMessage(wsChannel, messageInfo);\n }\n\n }\n\n }\n\n // --------------------------------------------------------------------------------------------------\n // CHANNEL MANAGEMENT\n\n /**\n * Subscribe to a single channel\n */\n subscribeToChannel(channel: string) {\n if (this.wsConnection) {\n this.httpManagerService.subscribeToChannel(channel);\n } else {\n console.warn('Cannot subscribe: WebSocket not connected.');\n }\n }\n\n /**\n * Subscribe to multiple channels at once\n */\n subscribeToChannels(channels: string[]) {\n if (this.wsConnection) {\n this.httpManagerService.subscribeToChannels(channels);\n } else {\n console.warn('Cannot subscribe: WebSocket not connected.');\n }\n }\n\n /**\n * Unsubscribe from a channel\n */\n unsubscribeFromChannel(channel: string) {\n if (this.wsConnection) {\n this.httpManagerService.unsubscribeFromChannel(channel);\n } else {\n console.warn('Cannot unsubscribe: WebSocket not connected.');\n }\n }\n\n /**\n * Get observable of currently subscribed channels\n */\n get subscribedChannels$(): Observable<Set<string>> {\n return this.httpManagerService.subscribedChannels$;\n }\n\n /**\n * Get current subscribed channels synchronously\n */\n getSubscribedChannels(): Set<string> {\n return this.httpManagerService.getSubscribedChannels();\n }\n\n /**\n * Create a new channel on the server\n */\n createChannel(channel: string) {\n if (this.wsConnection) {\n this.httpManagerService.createChannel(channel);\n } else {\n console.warn('Cannot create channel: WebSocket not connected.');\n }\n }\n\n /**\n * Delete a channel from the server\n */\n deleteChannel(channel: string) {\n if (this.wsConnection) {\n this.httpManagerService.deleteChannel(channel);\n } else {\n console.warn('Cannot delete channel: WebSocket not connected.');\n }\n }\n\n /**\n * Request list of all channels from server\n */\n getAllChannels() {\n if (this.wsConnection) {\n this.httpManagerService.getAllChannels();\n } else {\n console.warn('Cannot get channels: WebSocket not connected.');\n }\n }\n\n /**\n * Get users in a specific channel\n */\n getUsersInChannel(channel: string) {\n if (this.wsConnection) {\n this.httpManagerService.getUsersInChannel(channel);\n } else {\n console.warn('Cannot get users: WebSocket not connected.');\n }\n }\n\n // --------------------------------------------------------------------------------------------------\n // NOTIFICATION CHANNELS (MES- prefix)\n\n /**\n * Create a notification channel on the server\n */\n createNotificationChannel(channel: string) {\n if (this.wsConnection) {\n this.httpManagerService.createNotificationChannel(channel);\n } else {\n console.warn('Cannot create notification channel: WebSocket not connected.');\n }\n }\n\n /**\n * Request list of all notification channels from server (in-memory)\n */\n getNotificationChannels() {\n if (this.wsConnection) {\n this.httpManagerService.getNotificationChannels();\n } else {\n console.warn('Cannot get notification channels: WebSocket not connected.');\n }\n }\n\n /**\n * Request list of today's notification channels from database\n * Returns unique channels that have notifications posted today\n */\n getTodaysNotificationChannels() {\n if (this.wsConnection) {\n this.httpManagerService.getTodaysNotificationChannels();\n } else {\n console.warn('Cannot get today\\'s notification channels: WebSocket not connected.');\n }\n }\n\n /**\n * Subscribe to a notification channel with optional date filters\n */\n subscribeToNotificationChannel(channel: string, options?: { startEpoch?: number; endEpoch?: number }, user?: any) {\n if (this.wsConnection) {\n this.httpManagerService.subscribeToNotificationChannel(channel, options, user);\n } else {\n console.warn('Cannot subscribe to notification channel: WebSocket not connected.');\n }\n }\n\n /**\n * Unsubscribe from a notification channel\n */\n unsubscribeFromNotificationChannel(channel: string) {\n if (this.wsConnection) {\n this.httpManagerService.unsubscribeFromNotificationChannel(channel);\n } else {\n console.warn('Cannot unsubscribe from notification channel: WebSocket not connected.');\n }\n }\n\n /**\n * Send a notification to a channel\n */\n sendNotification(channel: string, content: any) {\n if (this.wsConnection) {\n this.httpManagerService.sendNotification(channel, content);\n } else {\n console.warn('Cannot send notification: WebSocket not connected.');\n }\n }\n\n // --------------------------------------------------------------------------------------------------\n // MISC\n\n private isEmpty(obj: any) {\n return Object.keys(obj).length === 0\n }\n\n private updateRequestOptions(headers?: any): ApiRequest {\n\n const options = ApiRequest.adapt({ ...this.apiOptions })\n\n options.headers = (headers)\n ? { ...options.headers, ...headers }\n : { ...options.headers }\n\n return options\n }\n\n}\n","import { SettingOptions } from \"../../local-storage-manager-service\";\n\nexport interface StateStorageOptionsInterface {\n store?: string;\n options?: SettingOptions;\n model?: (state: any) => any;\n}\n\nexport class StateStorageOptions implements StateStorageOptionsInterface {\n\n constructor(\n public store?: string,\n public options?: SettingOptions,\n public model?: (state: any) => any\n ) {}\n\n static adapt(item?: any): StateStorageOptions {\n return new StateStorageOptions(\n item?.store ?? 'temp',\n item?.options ? SettingOptions.adapt(item.options) : SettingOptions.adapt(),\n item?.model\n );\n }\n}\n","import { LocalStorageManagerService } from '../local-storage-manager-service/local-storage-manager.service';\nimport { inject, Injectable } from '@angular/core';\nimport { ComponentStore } from '@ngrx/component-store';\nimport { StateStorageOptions } from './models/state-storage-options.model';\nimport { Subscription, take } from 'rxjs';\n\nexport interface StateStoreManagerData<T> {}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StoreStateManagerService<T extends object = StateStoreManagerData<any>> extends ComponentStore<T> {\n\n localStorageManagerService = inject(LocalStorageManagerService)\n\n subscriptions = new Subscription\n settings: any = null\n\n private isRestoring = false\n\n constructor(\n private options: StateStorageOptions = StateStorageOptions.adapt()\n ) {\n super(StoreStateManagerService.init(options))\n this.init(options)\n }\n\n private static init(options: StateStorageOptions): any {\n\n const model = options?.model\n return (model) ? (model as () => any)() : {}\n\n }\n\n init(options?: StateStorageOptions) {\n\n this.settings = options\n\n this.localStorageManagerService.createStore({\n name: this.settings?.store,\n data: this.settings?.model(),\n options: this.settings?.options,\n })\n\n this.localStorageManagerService.store$(this.settings?.store)\n .subscribe(data => this.setState(data))\n\n }\n\n restoreState(): Subscription {\n\n return this.localStorageManagerService.store$(this.settings?.store)\n .pipe(take(1))\n .subscribe(data => {\n this.updateData(data)\n })\n\n }\n\n updateState(state: any) {\n if(this.isRestoring) return\n this.localStorageManagerService.updateStore({\n name: this.settings?.store,\n data: state\n })\n\n }\n\n // Selectors\n readonly data$ = this.select((state: any) => {\n const model = this.options.model;\n return (typeof model === 'function' && !model.prototype) ? model(state) : state\n });\n\n // Updaters\n readonly updateData = this.updater((state, data: any) => {\n\n const key = Object.keys(data)[0]\n const hasKey = Object.keys(state).includes(key)\n\n if (!hasKey) return state\n const newState = { ...state, [key]: data[key] }\n this.updateState(newState)\n return { ...state, ...newState }\n\n })\n\n}\n","\n// export * from \"./database-manager-services/index\";\nexport * from \"./local-storage-manager-service/index\";\n\nexport * from \"./request-manager-services/index\";\nexport * from \"./request-manager-state-service/index\";\n\nexport * from \"./ws-manager-service/index\";\nexport * from \"./store-state-manager-service/index\";\nexport * from \"./database-manager-service/index\";\n\nexport * from \"./utils/index\";\n","export interface ErrorDisplaySettingsInterface {\n displayTime: number\n position: string\n}\n\nexport class ErrorDisplaySettings implements ErrorDisplaySettingsInterface {\n\n constructor(\n public displayTime = 3 * 1000,\n public position = 'top'\n ) {}\n\n static adapt(item?: any): ErrorDisplaySettings {\n\n return new ErrorDisplaySettings(\n (item?.displayTime) ? item.displayTime * 1000 : 3 * 1000,\n item?.position,\n )\n\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class WithCredentialsInterceptor implements HttpInterceptor {\n\n intercept(req: HttpRequest<any>, next: HttpHandler):\n Observable<HttpEvent<any>> {\n\n req = req.clone({ withCredentials: true })\n\n return next.handle(req);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';\nimport { Observable, Subscription } from 'rxjs';\nimport { LangChangeEvent, TranslateService } from '@ngx-translate/core';\n\n@Injectable()\nexport class RequestHeadersInterceptor implements HttpInterceptor {\n\n subscriptions = new Subscription()\n language = 'en-CA'\n\n get currentDate() {\n\n const date = new Date()\n\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const day = String(date.getDate()).padStart(2, '0')\n\n return `${year}-${month}-${day}`\n\n }\n\n constructor(\n private translate: TranslateService\n ) {\n this.subscriptions.add(\n this.translate.onLangChange\n .subscribe((params: LangChangeEvent) => {\n this.language = `${params.lang}-CA`\n })\n )\n }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n request = request.clone({\n setHeaders: {\n 'Content-Type': 'application/json',\n 'Accept-Language': this.language || 'en-CA',\n 'Current-Date': this.currentDate\n }\n })\n\n return next.handle(request)\n\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe()\n }\n}\n\n","import { inject, Injectable } from '@angular/core'\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpErrorResponse } from '@angular/common/http'\nimport { Observable, catchError, throwError } from 'rxjs'\n\nimport { ToastMessageDisplayService, ToastDisplay, ToastColors } from 'toast-message-display'\n\n@Injectable()\nexport class RequestErrorInterceptor implements HttpInterceptor {\n\n toastMessage = inject(ToastMessageDisplayService)\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n return next.handle(req).pipe(\n\n catchError((error: HttpErrorResponse) => {\n\n const displayError = ToastDisplay.adapt({\n message: 'This is a toast message. This is an Error!!',\n action: 'OK',\n color: ToastColors.SUCCESS,\n icon: 'info',\n duration: 5 * 1000, //5 seconds\n })\n\n if (error.status >= 400 && error.status < 500) {\n\n displayError.color = ToastColors.WARN\n displayError.message = error.error || `${error.status}: ${error.statusText}`\n\n console.error('Client Error:', {\n status: error.status,\n message: error.message,\n error: error.error,\n text: error.statusText,\n })\n\n this.toastMessage.toastMessage(displayError)\n\n } else if (error.status >= 500) {\n\n displayError.color = ToastColors.ERROR\n displayError.message = error.error || `${error.status}: ${error.statusText}`\n\n console.error('Server Error:', {\n status: error.status,\n message: error.message,\n error: error.error,\n text: error.statusText,\n })\n\n this.toastMessage.toastMessage(displayError)\n\n }\n\n return throwError(() => error)\n\n })\n\n )\n }\n\n}\n\n\n","import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\nimport { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\nexport const PROXY_CONFIG = new InjectionToken<Record<string, any>>('PROXY_CONFIG');\n\n@Injectable()\nexport class ProxyDebuggerInterceptor implements HttpInterceptor {\n\n constructor(@Optional() @Inject(PROXY_CONFIG) private proxyConfig: Record<string, any>) {}\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n if (!this.proxyConfig) {\n return next.handle(req);\n }\n\n const headers = req.headers.keys().reduce((acc, key) => {\n acc[key] = req.headers.get(key) || '';\n return acc;\n }, {} as Record<string, string>);\n\n for (const proxyPath in this.proxyConfig) {\n if (this.proxyConfig.hasOwnProperty(proxyPath)) {\n const proxyDetails = this.proxyConfig[proxyPath];\n const regex = new RegExp('^' + proxyPath.replace('/', '').replace('*', '(.*)'));\n\n if (regex.test(req.url)) {\n const target = proxyDetails.target;\n const endpoint = req.url.replace(regex, '$1');\n const actualPath = target + '/' + endpoint;\n\n console.log('Request Proxied:', {\n requestUrl: req.url,\n requestPayload: req.body,\n headers: headers,\n proxyPath: proxyPath,\n actualPath: actualPath,\n });\n }\n }\n }\n\n return next.handle(req);\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { ProgressSpinnerMode } from '@angular/material/progress-spinner';\nimport { Subscription, timer } from 'rxjs';\n\n@Component({\n selector: 'app-download-file',\n templateUrl: './download-file.component.html',\n styleUrls: ['./download-file.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class DownloadFileComponent implements OnInit {\n\n private subscriptions = new Subscription();\n\n @Input() event?: Function;\n @Input() displayError = 3; // seconds\n @Input() diameter = 32;\n @Input() mode: ProgressSpinnerMode = 'determinate';\n @Input() isPending = false;\n\n @Input() active = false;\n @Input() disabled = false;\n\n @Output() error = new EventEmitter<void>();\n\n private _progress = 0;\n @Input() set progress(value: any) {\n this._progress = value ?? 0;\n }\n\n get progress() {\n return this._progress;\n }\n\n private _hasError = false;\n private errorTimerActive = false;\n\n @Input() set hasError(value: boolean | any) {\n\n this._hasError = !!value;\n\n if (this._hasError && !this.errorTimerActive) {\n this.errorTimerActive = true;\n this.active = false;\n this.error.emit()\n this.subscriptions.add(\n timer(this.displayError * 1000)\n .subscribe((err) => {\n this._hasError = false;\n this.errorTimerActive = false;\n })\n );\n }\n\n }\n\n get hasError() {\n return this._hasError;\n }\n\n ngOnInit() {}\n\n onAction() {\n this.isPending = false\n if (this.event) this.event()\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe()\n }\n}\n","@if (!isPending) {\n @if (hasError) {\n <div class=\"width center-txt\" style=\"margin-bottom: 4px;\">\n <mat-icon color=\"warn\" class=\"warn-icon\">warning</mat-icon>\n </div>\n } @else {\n @if (active) {\n <div class=\"container-obj\">\n <div class=\"centered-obj-div\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"44\"\n ></mat-progress-spinner>\n </div>\n </div>\n } @else {\n <button data-tracking=\"export-btn\" mat-icon-button (click)=\"onAction()\" class=\"icon-button\" [disabled]=\"disabled\">\n <mat-icon class=\"custom-icon\">file_download</mat-icon>\n </button>\n }\n }\n} @else {\n @if ((progress > 0 && progress < 100)) {\n <div\n class=\"spinner-container\"\n >\n <div class=\"spinner-background\">\n {{progress}}%\n </div>\n <mat-progress-spinner\n color=\"primary\"\n [mode]=\"mode\"\n [value]=\"progress\"\n [diameter]=\"44\"\n ></mat-progress-spinner>\n </div>\n } @else {\n <div class=\"container-obj\">\n <div class=\"centered-obj-div\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"44\"\n ></mat-progress-spinner>\n </div>\n </div>\n }\n}\n\n\n\n\n","export interface DownloadLabelsInterface {\n error: string;\n action: string;\n icon: string;\n}\n\nexport class DownloadLabels implements DownloadLabelsInterface {\n constructor(\n public error = '',\n public action = '',\n public icon = 'error',\n ) {}\n\n static adapt(item?: any): DownloadLabelsInterface {\n return new DownloadLabels(\n item?.error,\n item?.action,\n item?.icon,\n )\n\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { catchError, distinctUntilChanged, finalize } from 'rxjs/operators';\n\nimport { ToastColors, ToastDisplay } from 'toast-message-display';\n\nimport { DownloadLabels } from './models/download-labels-model';\nimport { HTTPManagerService } from '../../../services/request-manager-services';\nimport { ApiRequest } from '../../../services';\nimport { Subscription, throwError } from 'rxjs';\n\n@Component({\n selector: 'app-file-downloader',\n templateUrl: './file-downloader.component.html',\n styleUrls: ['./file-downloader.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class FileDownloaderComponent extends HTTPManagerService<any> implements OnInit {\n\n @Input() delayError = 3\n @Input() apiRequest: ApiRequest = ApiRequest.adapt()\n @Input() displayErrorMessage = false\n\n @Input() saveFileAs?: string\n\n _labels = DownloadLabels.adapt()\n @Input() set labels(value: DownloadLabels) {\n this._labels = (value) ? DownloadLabels.adapt(value) : DownloadLabels.adapt()\n }\n\n active = false\n\n subscription = new Subscription()\n\n get labels() {\n return this._labels\n }\n\n @Output() completed = new EventEmitter<void>()\n @Output() failed = new EventEmitter<string>()\n\n @Input() disabled = false\n\n constructor() {\n super()\n }\n\n ngOnInit() {\n\n }\n\n onDownloadStreaming() {\n\n if (this.active) return;\n this.active = true;\n\n return this.downloadRequest(this.apiRequest, [])\n .pipe(\n distinctUntilChanged(),\n catchError((err) => {\n\n this.onError(err.message)\n this.active = false\n this.failed.emit(err)\n\n return throwError(() => err)\n\n }),\n finalize(() => {\n if (!this.active) return\n this.active = false\n this.completed.emit()\n })\n )\n .subscribe()\n }\n\n\n onError(message: string) {\n\n if(!message || !this.displayErrorMessage) return\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.ERROR,\n icon: 'error',\n });\n\n this.active = false\n\n this.toastMessage.toastMessage(display);\n\n }\n\n OnDestroy() {\n this.subscription.unsubscribe()\n }\n\n}\n","<app-download-file\n [disabled]=\"disabled\"\n [displayError]=\"3\"\n [event]=\"onDownloadStreaming.bind(this)\"\n [isPending]=\"(isPending$ | async) || false\"\n [progress]=\"(progress$ | async)\"\n [hasError]=\"(error$ | async)\"\n (error)=\"onError(labels.error)\"\n [active]=\"active\"\n></app-download-file>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ThemePalette } from '@angular/material/core';\nimport { ProgressSpinnerMode } from '@angular/material/progress-spinner';\n\n@Component({\n selector: 'app-spinner',\n templateUrl: './spinner.component.html',\n styleUrls: ['./spinner.component.scss'],\n standalone: false\n})\nexport class SpinnerComponent implements OnInit {\n\n @Input() color: ThemePalette;\n\n @Input() diameter?: number;\n @Input() display?: string | number;\n @Input() mode?: ProgressSpinnerMode;\n @Input() strokeWidth?: number;\n @Input() value = 0\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","<div class=\"spinner-background\">{{display}}</div>\n<mat-progress-spinner\n [color]=\"color\"\n [diameter]=\"diameter\"\n [mode]=\"mode || 'indeterminate'\"\n [strokeWidth]=\"strokeWidth\"\n [value]=\"value\">\n</mat-progress-spinner>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { DownloadFileComponent } from './download-file/download-file.component';\nimport { FileDownloaderComponent } from './file-downloader.component';\n\nimport { SpinnerComponent } from './spinner/spinner.component';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatButtonModule } from '@angular/material/button';\n\n@NgModule({\n imports: [\n CommonModule,\n MatIconModule,\n MatProgressSpinnerModule,\n MatButtonModule,\n ],\n declarations: [\n SpinnerComponent,\n DownloadFileComponent,\n FileDownloaderComponent,\n ],\n exports: [\n FileDownloaderComponent\n ]\n})\nexport class FileDownloaderModule { }\n","import { Component, Inject, inject, OnInit, ViewEncapsulation, effect, signal, computed } from '@angular/core';\nimport { LocalStorageSignalsManagerService, SettingOptions, StorageOption, StorageType } from '../../services/local-storage-manager-service';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { ConfigOptions, LocalStorageOptions, UtilsService } from '../../services';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\n\n@Component({\n selector: 'app-local-storage-signals-demo',\n templateUrl: './local-storage-signals-demo.component.html',\n styleUrls: ['./local-storage-signals-demo.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class LocalStorageSignalsDemoComponent implements OnInit {\n\n fb = inject(FormBuilder)\n utils = inject(UtilsService)\n\n // store type is driven by the form control\n get type() {\n return (this.typeControl.value) ? +this.typeControl.value : 0;\n }\n\n typeControl = this.fb.control(StorageType.GLOBAL.toString())\n\n localStorageManagerService = inject(LocalStorageSignalsManagerService)\n\n // Use signals directly and computed values for template binding\n readonly settings = computed(() => this.localStorageManagerService.settings());\n\n // selected store (signal) and its JSON data for template\n storeSelected = signal<StorageOption | null>(null);\n selectedStoreData = computed(() => {\n const s = this.storeSelected();\n if (!s) return '';\n const computed = this.localStorageManagerService.store(s.name);\n return computed ? JSON.stringify(computed()) : '';\n });\n\n // filtered settings by selected type\n selectedType = signal<number>(StorageType.GLOBAL);\n filteredSettings = computed(() => {\n const values = this.settings() || [];\n return values.filter((item: any) => item.options.storage === +this.selectedType());\n });\n\n storageForm = this.fb.group({\n store: this.fb.control<string|null>(null),\n type: 'local',\n settingType: 'local',\n encrypted: false,\n data: this.fb.control<string>('', Validators.required),\n })\n\n newStoreForm = this.fb.group({\n name: this.fb.control<string|null>(null, Validators.required),\n storage: 'local',\n encrypted: false,\n data: this.fb.control<string>('', Validators.required),\n expiresIn: this.fb.control('0')\n })\n\n // no RxJS Observables here; template uses signals/computed directly\n\n expiresIn = (epoch: number) => this.utils.expiresIn(epoch)\n\n get isValid() {\n return this.newStoreForm.valid\n }\n\n get isValidData() {\n return this.storageForm.valid\n }\n\n isValidJSON = (str: string) => {\n try {\n JSON.parse(str)\n return true\n } catch (e) {\n return false\n }\n }\n\n displayedColumns: string[] = ['name', 'id', 'encrypted', 'expires', \"option\"];\n\n filterData = (values: StorageOption[] | null | undefined) => {\n if(!values) return []\n return values.filter((item: any) => item.options && item.options.storage === +this.type)\n }\n\n settingFor(name: string) {\n const c = this.localStorageManagerService.setting(name);\n return c ? c() : null;\n }\n\n // data and selected store\n store: any\n create = false\n\n storeProps?: LocalStorageOptions\n options?: SettingOptions\n\n constructor(@Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) { }\n\n ngOnInit() {\n\n this.storeProps = this.configOptions?.LocalStorageOptions\n this.options = this.storeProps?.options\n\n if(this.options?.storage) {\n this.typeControl.patchValue(this.options.storage.toString())\n this.typeControl.disable()\n } else {\n this.typeControl.enable()\n }\n\n if(this.options?.expiresIn) {\n this.newStoreForm.get('expiresIn')?.patchValue(this.options.expiresIn)\n this.newStoreForm.get('expiresIn')?.disable()\n } else {\n this.newStoreForm.get('expiresIn')?.enable()\n }\n\n if(this.options?.encrypted) {\n this.newStoreForm.get('encrypted')?.patchValue(this.options.encrypted)\n this.newStoreForm.get('encrypted')?.disable()\n } else {\n this.newStoreForm.get('encrypted')?.enable()\n }\n\n // nothing to synchronize - templates read computed signals directly\n\n }\n\n onCreateStore() {\n\n if(!this.isValid) return\n\n const store = this.newStoreForm.value\n if(!store.name || store.name === '') return\n\n const options = { storage: this.type, encrypted: store.encrypted, expiresIn: store.expiresIn }\n\n this.localStorageManagerService.createStore({\n name: store.name,\n data: store.data,\n options: SettingOptions.adapt(options)\n })\n\n this.newStoreForm.reset()\n this.create = false\n }\n\n onUpdateStore(store: any) {\n\n if(!this.storageForm.valid) return\n\n const storeData = this.storageForm.value\n\n const data = JSON.parse(storeData.data || '')\n\n const type = (storeData.type === 'local') ? StorageType.GLOBAL : StorageType.SESSION\n\n this.localStorageManagerService.updateStore({\n name: store.name,\n data\n })\n\n }\n\n onSelectedRow(store: any) {\n this.store = store\n this.storeSelected.set(store)\n this.create = false\n }\n\n onCreate() {\n this.onCancel()\n this.create = true\n }\n\n onDelete(store: StorageOption) {\n\n this.localStorageManagerService.deleteStore({\n name: store.name,\n })\n\n this.onCancel()\n }\n\n onCancel() {\n this.storeSelected.set(null)\n this.store = null\n this.create = false\n }\n\n onUpdate(store: StorageOption, data: any) {\n\n this.localStorageManagerService.updateStore({\n name: store.name,\n data: JSON.parse(data)\n })\n\n this.onCancel()\n\n }\n\n onReset() {\n this.localStorageManagerService.resetStore()\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <div style=\"display: flex; gap: 1rem\">\n <h2 style=\"padding-top: .5rem; display: flex;\">\n <div style=\"padding-top: .5rem;\">\n <span>Local Storage Manager</span>\n <span style=\"margin-left: .5rem;\">\n <mat-icon color=\"accent\">fiber_new</mat-icon>\n </span>\n </div>\n <div>\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon>info</mat-icon>\n </button>\n </div>\n </h2>\n <span style=\"flex:1\"></span>\n <div style=\"padding-top: .25rem;\">\n <mat-button-toggle-group name=\"storage\" [formControl]=\"typeControl\" (change)=\"onCancel()\">\n <mat-button-toggle value=\"0\">Local Storage</mat-button-toggle>\n <mat-button-toggle value=\"1\">Session Storage</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n <div style=\"margin-top: .25rem;\">\n <button mat-icon-button (click)=\"onCreate()\">\n <mat-icon>add</mat-icon>\n </button>\n </div>\n </div>\n\n <ng-container *ngIf=\"storeProps?.storageName || storeProps?.storageSettingsName\">\n <div style=\"display: flex; gap: .5rem; flex-direction: column; border: gray solid thin; background-color: whitesmoke; padding: 1rem;\"\n >\n <div style=\"display: flex;\">\n <div *ngIf=\"storeProps?.storageSettingsName\" style=\"flex:1\">\n Database: <b>{{ storeProps?.storageSettingsName }}</b>\n </div>\n <div *ngIf=\"storeProps?.storageName\" style=\"flex:1\">\n Data: <b>{{ storeProps?.storageName }}</b>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div style=\"margin-top: 2rem;\" [formGroup]=\"newStoreForm\" *ngIf=\"create; else LIST\">\n\n <h2>Create Store</h2>\n\n <div style=\"display: flex; gap: 1rem;\">\n <div style=\"flex:1\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Store Name</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"name\">\n </mat-form-field>\n </div>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Expires In...</mat-label>\n <mat-select formControlName=\"expiresIn\">\n <mat-option value=\"0\">None</mat-option>\n <mat-option value=\"30s\">30 Seconds</mat-option>\n <mat-option value=\"1mn\">1 Minute</mat-option>\n <mat-option value=\"1hr\">1 Hour</mat-option>\n <mat-option value=\"1d\">1 Day</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"margin-top: 1rem;\">\n <mat-slide-toggle formControlName=\"encrypted\">Encrypted</mat-slide-toggle>\n </div>\n </div>\n\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex: 1;\">\n <mat-label>Data (Must be an Object or Array of any)</mat-label>\n <textarea matInput placeholder=\"[]\" formControlName=\"data\" #json></textarea>\n </mat-form-field>\n </div>\n <mat-error *ngIf=\"!isValidJSON(json.value)\">Not Valid Data</mat-error>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onCreateStore()\" [disabled]=\"!(isValid && isValidJSON(json.value))\">\n Save Store\n </button>\n </div>\n\n </div>\n\n <ng-template #LIST>\n\n <div style=\"margin-top: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n{{ settings() | json }}\n <div *ngIf=\"filterData(settings()) as data\">\n <ng-container *ngIf=\"data.length > 0; else NO_DATA\">\n <table mat-table [dataSource]=\"data\">\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> Store </th>\n <td mat-cell *matCellDef=\"let element\" style=\"font-weight: bold; text-transform: uppercase;\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"encrypted\">\n <th mat-header-cell *matHeaderCellDef style=\"text-align: center;\"> Encrypted </th>\n <td mat-cell *matCellDef=\"let element\" style=\"text-align: center;\">\n <ng-container *ngIf=\"element.options.encrypted; else NO\">YES</ng-container>\n <ng-template #NO><span style=\"color:gray\">NO</span></ng-template>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"expires\">\n <th mat-header-cell *matHeaderCellDef style=\"text-align: center;\"> Expires </th>\n <td mat-cell *matCellDef=\"let element\" style=\"text-align: center;\">\n <ng-container *ngIf=\"element.options.expires !== 0; else NO_DATA\">\n {{expiresIn(element.options.expires)}}\n </ng-container>\n <ng-template #NO_DATA>\n ∞\n </ng-template>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"option\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell *matCellDef=\"let element\" style=\"padding-right: 0;\">\n <div style=\"display: flex;justify-content: flex-end;\">\n <button mat-icon-button color=\"warn\" (click)=\"onDelete(element); $event.stopPropagation()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" (click)=\"onSelectedRow(row)\"></tr>\n </table>\n </ng-container>\n\n <ng-template #NO_DATA>\n <h3 style=\"margin-top: 1rem;\">No Data</h3>\n </ng-template>\n\n <div *ngIf=\"storeSelected() as selectedStore\" style=\"margin-top: 2rem;\">\n <div style=\"margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <h3>STORE: <span style=\"font-weight: bold;\">{{ selectedStore.name | uppercase }}</span></h3>\n <h3>SETTINGS: {{ localStorageManagerService.setting(selectedStore.name) ? (localStorageManagerService.setting(selectedStore.name)() | json) : '{}' }}</h3>\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex: 1;\">\n <mat-label>Data (Must be an Object or Array of any)</mat-label>\n <textarea matInput placeholder=\"[]\" #json [value]=\"selectedStoreData()\"></textarea>\n </mat-form-field>\n </div>\n <mat-error *ngIf=\"!isValidJSON(json.value)\">Not Valid Data</mat-error>\n\n <div style=\"display: flex; gap: .5rem;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onCancel()\">Cancel</button>\n <button mat-stroked-button (click)=\"onUpdate(selectedStore, json.value)\" [disabled]=\"!(isValidJSON(json.value))\">Update</button>\n </div>\n </div>\n </div>\n\n </ng-template>\n\n <div style=\"margin-top: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <button mat-stroked-button (click)=\"onReset()\">Delete All Stores</button>\n </div>\n\n</div>\n\n\n<mat-menu #menu=\"matMenu\">\n <div style=\"padding: 1rem;\">\n <p>Please note that the LocalStorage (encryption) and management of data is dependant on initializing the APP_ID</p>\n <p>Must provide a value for <b>APP_ID</b> in AppModule->Providers</p>\n <mat-divider></mat-divider>\n <div style=\"font-size: smaller; margin-top: .5rem;\">\n <p>Example: UUID (self.crypto.randomUUID() to generate)</p>\n <div style=\"background-color: whitesmoke; padding: 1rem;\">\n &#123;<br>\n provide: APP_ID,<br>\n useValue: \"056991ac-3537-43ab-b5b9-83edf6554eff\",<br>\n &#125;\n </div>\n </div>\n </div>\n</mat-menu>\n","export interface OIDCClientInterface {\n spiffe: string\n id: number\n first_name: string\n last_name: string\n email: string\n}\n\nexport class OIDCClient implements OIDCClientInterface {\n\n constructor(\n public spiffe: string = '',\n public id: number = 0,\n public first_name: string = '',\n public last_name: string = '',\n public email: string = '',\n ) {}\n\n static adapt(item?: any): OIDCClient {\n\n return new OIDCClient(\n item?.spiffe,\n item?.id,\n item?.first_name,\n item?.last_name,\n item?.email,\n )\n\n }\n\n}\n","import { Injectable } from '@angular/core';\n\nimport { DatabaseStorage, DataType, RetryOptions } from '../../../models';\nimport { HTTPManagerStateService, ApiRequest } from '../../../services';\nimport { OIDCClient } from '../models/oidc-client.model';\n\n/**\n * StateServiceDemo - Core state management and WebSocket connection service\n *\n * Handles:\n * - WebSocket connection setup\n * - Base HTTP state management\n * - Connection status and retry logic\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class StateServiceDemo extends HTTPManagerStateService<any> {\n\n attempts$ = this.wsRetryAttempts$;\n nextRetry$ = this.wsNextRetry$;\n\n constructor() {\n super(\n ApiRequest.adapt({\n server: '',\n retry: RetryOptions.adapt({\n times: 3,\n delay: 1,\n }),\n adapter: OIDCClient.adapt,\n }),\n DataType.ARRAY,\n DatabaseStorage.adapt({\n table: 'ws_demo_data',\n expiresIn: '5mn',\n })\n );\n }\n\n /**\n * Initialize WebSocket connection with server configuration\n */\n updateConnection(server: string, wsServer: string, jwtToken: string, user: any) {\n this.setApiRequestOptions({\n server,\n retry: RetryOptions.adapt({\n times: 3,\n delay: 1,\n }),\n adapter: OIDCClient.adapt,\n ws: {\n id: 'SYS-USERS123',\n wsServer,\n jwtToken,\n user,\n retry: RetryOptions.adapt({\n times: 10,\n delay: 5,\n }),\n }\n });\n\n this.userAction$.subscribe(user => {\n console.log('User Action:', user);\n });\n }\n\n /**\n * Get all available channels\n */\n override getAllChannels() {\n this.httpManagerService.getAllChannels();\n }\n\n /**\n * Subscribe to a channel\n */\n override subscribeToChannel(channel: string) {\n super.subscribeToChannel(channel);\n }\n\n /**\n * Unsubscribe from a channel\n */\n override unsubscribeFromChannel(channel: string) {\n super.unsubscribeFromChannel(channel);\n }\n\n // =====================\n // Notification Channel Methods (MES- prefix)\n // These override methods from HTTPManagerStateService\n // =====================\n\n /**\n * Create a notification channel (MES- prefix)\n */\n override createNotificationChannel(channel: string) {\n super.createNotificationChannel(channel);\n }\n\n /**\n * Get all notification channels list (in-memory)\n */\n override getNotificationChannels() {\n super.getNotificationChannels();\n }\n\n /**\n * Get today's notification channels from database\n * Returns unique channels that have notifications posted today\n */\n override getTodaysNotificationChannels() {\n super.getTodaysNotificationChannels();\n }\n\n /**\n * Subscribe to notification channel with optional date filters\n */\n override subscribeToNotificationChannel(channel: string, options?: { startEpoch?: number; endEpoch?: number }, user?: any) {\n super.subscribeToNotificationChannel(channel, options, user);\n }\n\n /**\n * Unsubscribe from notification channel\n */\n override unsubscribeFromNotificationChannel(channel: string) {\n super.unsubscribeFromNotificationChannel(channel);\n }\n\n /**\n * Send a notification to a channel\n */\n override sendNotification(channel: string, content: any) {\n super.sendNotification(channel, content);\n }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ChannelMessage } from '../../../services/ws-manager-service/models/channel-message.model';\nimport { StateServiceDemo } from './state-service-demo.service';\n\n/**\n * MessageServiceDemo - Channel messaging service (PUB- prefix channels)\n *\n * Handles:\n * - Sending messages to channels\n * - Channel subscription for messaging\n * - Real-time message broadcast\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class MessageServiceDemo {\n\n private stateService = inject(StateServiceDemo);\n\n // Expose observables from state service\n channels$ = this.stateService.channels$;\n subscribedChannels$ = this.stateService.subscribedChannels$;\n communicationMessages$ = this.stateService.communicationMessages$;\n latestCommunicationMessages$ = this.stateService.latestCommunicationMessages$;\n connectionStatus$ = this.stateService.connectionStatus$;\n user$ = this.stateService.user$;\n data$ = this.stateService.data$;\n\n /**\n * Helper to ensure channel has PUB- prefix\n */\n private toPublicChannel(channel: string): string {\n return channel.startsWith('PUB-') ? channel : `PUB-${channel}`;\n }\n\n /**\n * Helper to strip PUB- prefix for display\n */\n private fromPublicChannel(channel: string): string {\n return channel.startsWith('PUB-') ? channel.replace('PUB-', '') : channel;\n }\n\n /**\n * Create a new public channel\n */\n createChannel(channel: string) {\n const publicChannel = this.toPublicChannel(channel);\n this.stateService.createChannel(publicChannel);\n }\n\n /**\n * Get all available channels\n */\n getAllChannels() {\n this.stateService.getAllChannels();\n }\n\n /**\n * Subscribe to a channel to receive messages\n */\n subscribeToChannel(channel: string) {\n const publicChannel = this.toPublicChannel(channel);\n this.stateService.subscribeToChannel(publicChannel);\n }\n\n /**\n * Unsubscribe from a channel\n */\n unsubscribeFromChannel(channel: string) {\n const publicChannel = this.toPublicChannel(channel);\n this.stateService.unsubscribeFromChannel(publicChannel);\n }\n\n /**\n * Send a message to one or more channels\n */\n sendMessage(data: ChannelMessage, channels?: string[]) {\n const publicChannels = channels?.map(ch => this.toPublicChannel(ch));\n console.log('sendMessage', data, 'to channels:', publicChannels);\n this.stateService.wsMessaging(data, publicChannels);\n }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { StateServiceDemo } from './state-service-demo.service';\n\n/**\n * Notification message interface\n */\nexport interface NotificationMessage {\n id: number;\n channel: string;\n created: number; // epoch seconds\n user_name: string;\n sessionId: any;\n content: any;\n}\n\n/**\n * NotificationServiceDemo - Notification channel service (MES- prefix channels)\n *\n * Handles:\n * - Creating notification channels\n * - Subscribing to notifications with date filters\n * - Sending notifications (persisted to database)\n * - Receiving real-time and historical notifications\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NotificationServiceDemo {\n\n private stateService = inject(StateServiceDemo);\n\n // Notification channels from state service (in-memory - contains MES- channels from server)\n notificationChannels$ = this.stateService.notificationChannels$;\n\n // Today's notification channels from database (channels with data for today)\n todaysNotificationChannels$ = this.stateService.todaysNotificationChannels$;\n\n private subscribedNotificationChannelsSubject = new BehaviorSubject<Set<string>>(new Set());\n subscribedNotificationChannels$ = this.subscribedNotificationChannelsSubject.asObservable();\n\n // Notification messages from state service\n notificationMessages$ = this.stateService.notificationMessages$;\n\n // Latest notification from state service\n latestNotification$ = this.stateService.latestNotification$;\n\n // Expose connection status from state service\n connectionStatus$ = this.stateService.connectionStatus$;\n\n /**\n * Helper to ensure channel has MES- prefix\n */\n private toNotificationChannel(channel: string): string {\n return channel.startsWith('MES-') ? channel : `MES-${channel}`;\n }\n\n /**\n * Helper to strip MES- prefix for display\n */\n private fromNotificationChannel(channel: string): string {\n return channel.startsWith('MES-') ? channel.replace('MES-', '') : channel;\n }\n\n /**\n * Create a notification channel\n */\n createNotificationChannel(channel: string) {\n const notifyChannel = this.toNotificationChannel(channel);\n console.log('📢 createNotificationChannel:', notifyChannel);\n this.stateService.createNotificationChannel(notifyChannel);\n }\n\n /**\n * Get all notification channels (in-memory)\n */\n getNotificationChannels() {\n console.log('📢 getNotificationChannels');\n this.stateService.getNotificationChannels();\n }\n\n /**\n * Get today's notification channels from database\n * Returns unique channels that have notifications posted today\n */\n getTodaysNotificationChannels() {\n console.log('📢 getTodaysNotificationChannels (from DB)');\n this.stateService.getTodaysNotificationChannels();\n }\n\n /**\n * Subscribe to a notification channel with optional date filter\n * @param channel Channel name (MES- prefix will be added if not present)\n * @param options { startEpoch?, endEpoch? }\n * @param user User info for subscription\n */\n subscribeToNotificationChannel(channel: string, options?: { startEpoch?: number; endEpoch?: number }, user?: any) {\n const notifyChannel = this.toNotificationChannel(channel);\n console.log('📢 subscribeToNotificationChannel:', notifyChannel, options);\n\n // Add to local subscribed channels immediately for UI feedback\n const currentSubs = this.subscribedNotificationChannelsSubject.value;\n currentSubs.add(notifyChannel);\n this.subscribedNotificationChannelsSubject.next(new Set(currentSubs));\n\n // Send subscription request to server\n this.stateService.subscribeToNotificationChannel(notifyChannel, options, user);\n }\n\n /**\n * Unsubscribe from a notification channel\n */\n unsubscribeFromNotificationChannel(channel: string) {\n const notifyChannel = this.toNotificationChannel(channel);\n console.log('📢 unsubscribeFromNotificationChannel:', notifyChannel);\n\n // Remove from local subscribed channels immediately for UI feedback\n const currentSubs = this.subscribedNotificationChannelsSubject.value;\n currentSubs.delete(notifyChannel);\n this.subscribedNotificationChannelsSubject.next(new Set(currentSubs));\n\n // Send unsubscription request to server\n this.stateService.unsubscribeFromNotificationChannel(notifyChannel);\n }\n\n /**\n * Send a notification to a channel\n */\n sendNotification(channel: string, content: any, user?: any) {\n const notifyChannel = this.toNotificationChannel(channel);\n\n const notificationContent = {\n sessionId: {\n id: user?.id,\n ldap: user?.ldap,\n name: user?.name,\n email: user?.email,\n },\n ...content\n };\n\n console.log('📢 sendNotification:', notifyChannel, notificationContent);\n\n this.stateService.sendNotification(notifyChannel, notificationContent);\n }\n\n}\n","export interface UserDataInterface {\n ldap: string\n name: string\n email: string\n}\n\nexport class UserData implements UserDataInterface {\n\n constructor(\n public ldap = '',\n public name = '',\n public email = '',\n ) {}\n\n static adapt(item?: any): UserData {\n\n const userName = `${item?.first_name} ${item?.last_name}`\n\n return new UserData(\n item?.ldap,\n userName,\n item?.email,\n )\n\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { RandomNumber } from '../../../../services/utils/encryption/random';\nimport { RetryOptions, DataType, DatabaseStorage } from '../../../../models';\n\nimport { HTTPManagerStateService, ApiRequest, RequestOptions } from '../../../../services';\n\nimport { OIDCClient } from '../../models/oidc-client.model';\nimport { UserData } from '../../models/user-data.model';\nimport { ChannelMessage } from '../../../../services/ws-manager-service/models/channel-message.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StateDataRequestService extends HTTPManagerStateService<any> {\n\n attempts$ = this.wsRetryAttempts$\n nextRetry$ = this.wsNextRetry$\n\n path = ['ai','tests']\n\n constructor() {\n super(\n ApiRequest.adapt({\n server: '',\n retry: RetryOptions.adapt({\n times: 3,\n delay: 1,\n }),\n adapter: OIDCClient.adapt,\n ws: {\n id: ``,\n // wsChannels: ['allChannels'],\n // access: ['read,write,delete,update'],\n wsServer: '',\n jwtToken: '',\n user: UserData.adapt(),\n retry: RetryOptions.adapt({\n times: 3,\n delay: 10,\n }),\n }\n }),\n DataType.ARRAY,\n DatabaseStorage.adapt({\n table: 'ws_demo_data',\n expiresIn: '5mn',\n })\n )\n }\n\n updateConnection(\n server: string,\n wsServer: string,\n jwtToken: string,\n user: any,\n path: string[] = [],\n wsChannel: string = ''\n ) {\n\n this.path = path\n\n this.setApiRequestOptions({\n server,\n retry: RetryOptions.adapt({\n times: 3,\n delay: 1,\n }),\n adapter: OIDCClient.adapt,\n ws: {\n id: wsChannel,\n wsServer,\n jwtToken,\n user, // general info about user\n retry: RetryOptions.adapt({\n times: 3,\n delay: 10,\n }),\n }\n })\n\n }\n\n addData() {\n\n const num = RandomNumber(1000, 9999)\n\n const newData = {\n \"spiffe\": `sample.com/developer/${num}`,\n \"last_name\": \"boni\",\n \"email\": \"mikeboni@hotmail.com\",\n \"first_name\": \"mike\"\n }\n\n this.createRecord(newData, RequestOptions.adapt({ path: this.path }) )\n\n }\n\n sendMessage(data: ChannelMessage) {\n console.log('sendMessage', data)\n this.wsMessaging(data)\n }\n\n getData() {\n this.fetchRecords(RequestOptions.adapt({ path: this.path }) )\n }\n\n updateData(data: any) {\n const sampleOptions = RequestOptions.adapt({ path: [...this.path, data.id] })\n console.log('updateData', sampleOptions)\n this.updateRecord(data, sampleOptions)\n\n }\n\n deleteData(data: any) {\n const sampleOptions = RequestOptions.adapt({ path: [...this.path, data.id] })\n console.log('deleteData', sampleOptions)\n this.deleteRecord(sampleOptions)\n }\n\n}\n","import { Component, inject, Input, OnInit } from '@angular/core';\nimport { RandomNumber } from '../../../../services/utils/encryption/random';\n\nimport { StateDataRequestService } from '../services/state-data-request.service';\nimport { switchMap, timer, map, startWith } from 'rxjs';\n\n@Component({\n selector: 'app-ws-data-control',\n templateUrl: './ws-data-control.component.html',\n styleUrls: ['./ws-data-control.component.scss'],\n standalone: false\n})\nexport class WsDataControlComponent implements OnInit {\n\n @Input() server!: string;\n @Input() wsServer!: string;\n @Input() jwtToken!: string;\n @Input() user!: any;\n @Input() path: string[] = ['ai','tests'];\n @Input() wsChannel: string = '';\n\n stateDataRequestService = inject(StateDataRequestService)\n\n user$ = this.stateDataRequestService.user$\n users$ = this.stateDataRequestService.userList$\n\n userAction$ = this.stateDataRequestService.userAction$\n .pipe(\n switchMap((action) =>\n timer(3 * 1000).pipe(\n map(() => null),\n startWith(action)\n )\n )\n );\n\n data$ = this.stateDataRequestService.data$;\n\n isUser = (user: any, userItem: any) => {\n return user.sessionId === userItem.sessionId\n }\n\n ngOnInit() {\n this.stateDataRequestService.updateConnection(this.server, this.wsServer, this.jwtToken, this.user, this.path, this.wsChannel);\n this.stateDataRequestService.getData()\n }\n\n onGetData() {\n this.stateDataRequestService.getData()\n }\n\n onAddData() {\n this.stateDataRequestService.addData()\n }\n\n onUpdateData(data: any[]) {\n\n const num = RandomNumber(1000, 9999)\n\n const newData = {\n \"spiffe\": `wavecoders.com/developer/${num}`,\n \"id\": 63,\n \"last_name\": \"boni\",\n \"email\": \"mikeboni@hotmail.com\",\n \"first_name\": \"mike\"\n }\n\n this.stateDataRequestService.updateData(newData)\n\n }\n\n onRemoveData(data: any) {\n const lastRec = data[data.length -1]\n this.stateDataRequestService.deleteData(lastRec)\n }\n\n}\n","@if ((data$ | async); as data) {\n <div style=\"margin: 1rem;\">\n @if ((users$ |async); as users) {\n <div>\n @if (users.length > 0) {\n <h3 style=\"margin: 0;\">Connected Users</h3>\n } @else {\n <h3 style=\"margin: 0;\">No Users</h3>\n }\n <mat-chip-set>\n @for (user of users; track user.sessionId) {\n <mat-chip\n [class.user-chip--primary]=\"isUser(user, (user$ | async))\"\n [style.color]=\"isUser(user, (user$ | async)) ? '#fff' : null\"\n [disableRipple]=\"true\"\n >\n {{ user.name }}\n </mat-chip>\n }\n </mat-chip-set>\n </div>\n }\n <div style=\"margin-top: 1rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div class=\"box\" style=\"margin-bottom: 1rem;\" *ngIf=\"(userAction$ | async) as userAction\">\n {{ userAction?.content?.user?.name }} has {{ userAction?.content?.method }}\n </div>\n\n <h3 style=\"margin: 0;\">Data Actions</h3>\n <div style=\"display: flex; gap: 1rem; margin-bottom: 1rem;\">\n <button mat-stroked-button (click)=\"onGetData()\">Get Data</button>\n <div style=\"flex:1\"></div>\n <button mat-stroked-button color=\"accent\" (click)=\"onUpdateData(data)\">Update Data</button>\n <button mat-stroked-button color=\"warn\" (click)=\"onRemoveData(data)\">Remove Data</button>\n <button mat-stroked-button color=\"primary\" (click)=\"onAddData()\">Add Data</button>\n </div>\n @if (data.length > 0) {\n <div>\n <table mat-table [dataSource]=\"data\" style=\"border: 1px solid grey;\">\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n <ng-container matColumnDef=\"spiffe\">\n <th mat-header-cell *matHeaderCellDef> Spiffe </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.spiffe}} </td>\n </ng-container>\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.first_name}} {{element.last_name}}</td>\n </ng-container>\n <ng-container matColumnDef=\"email\">\n <th mat-header-cell *matHeaderCellDef> Email </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.email}} </td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"['id', 'spiffe', 'name', 'email']\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['id', 'spiffe', 'name', 'email'];\"></tr>\n </table>\n <div style=\"border: 1px solid grey; padding: .5rem; border-top: none;\">\n <h3 style=\"margin: 0;\">Total Records {{ data.length }}</h3>\n </div>\n </div>\n } @else {\n <div style=\"margin-top: 1rem; font-style: italic;\">\n No Data Available\n </div>\n }\n </div>\n}\n\n","import { Component, inject, Input, OnInit, OnDestroy } from '@angular/core';\nimport { MessageServiceDemo } from '../../services/message-service-demo.service';\nimport { StateServiceDemo } from '../../services/state-service-demo.service';\nimport { FormBuilder, FormControl, Validators } from '@angular/forms';\nimport { WSUser } from '../../../..';\nimport { Observable, combineLatest, map, EMPTY, Subject, takeUntil, filter, take, startWith, distinctUntilChanged } from 'rxjs';\n\nimport { ChannelMessage } from '../../../../services/ws-manager-service/models/channel-message.model';\nimport { ToastMessageDisplayService, ToastDisplay, ToastColors } from 'toast-message-display';\n\n@Component({\n selector: 'app-ws-messaging',\n templateUrl: './ws-messaging.component.html',\n styleUrls: ['./ws-messaging.component.css'],\n standalone: false\n})\nexport class WsMessagingComponent implements OnInit, OnDestroy {\n\n @Input() server!: string;\n @Input() wsServer!: string;\n @Input() jwtToken!: string;\n @Input() user!: any;\n\n private destroy$ = new Subject<void>();\n\n fb = inject(FormBuilder);\n messageService = inject(MessageServiceDemo);\n stateService = inject(StateServiceDemo);\n toastService = inject(ToastMessageDisplayService);\n\n // Only show public channels (starting with \"PUB-\"), strip prefix for display\n // SYS- channels are private/internal and hidden from users\n channels$ = this.messageService.channels$.pipe(\n map(channels => channels\n ?.filter(channel => channel.startsWith('PUB-'))\n .map(channel => channel.replace('PUB-', '')) || []\n ),\n startWith([] as string[]),\n distinctUntilChanged((prev, curr) => prev.length === curr.length && prev.every((v, i) => v === curr[i]))\n );\n\n // Track subscribed public channels only, strip prefix for display\n subscribedChannels$ = this.messageService.subscribedChannels$.pipe(\n map(set => Array.from(set)\n .filter(channel => channel.startsWith('PUB-'))\n .map(channel => channel.replace('PUB-', ''))\n ),\n startWith([] as string[]),\n distinctUntilChanged((prev, curr) => prev.length === curr.length && prev.every((v, i) => v === curr[i]))\n );\n\n /**\n * Helper to ensure channel has PUB- prefix for outgoing communication\n */\n private toPublicChannel(channel: string): string {\n return channel.startsWith('PUB-') ? channel : `PUB-${channel}`;\n }\n\n user$ = this.stateService.user$;\n\n data$ = this.stateService.data$;\n\n connectionStatus$ = this.stateService.connectionStatus$;\n\n // Form for creating new channels\n newChannelName = this.fb.control<string>('', [Validators.required, Validators.minLength(2)])\n\n // Form for selecting channels to send to and message content\n messages = this.fb.group({\n selectedChannels: this.fb.control<string[]>([], Validators.required),\n content: this.fb.control<string|null>(null, Validators.required),\n })\n\n get selectedChannels() {\n return this.messages.get('selectedChannels') as FormControl\n }\n\n get content() {\n return this.messages.get('content') as FormControl\n }\n\n communicationMessages$ = this.messageService.communicationMessages$;\n latestCommunicationMessages$ = this.messageService.latestCommunicationMessages$;\n\n chat$: Observable<{ user: any, messages: any[]}|any> = combineLatest([this.user$, this.communicationMessages$])\n .pipe(\n map(([user, messages]: any) => ({ user, messages })),\n map(obj => {\n\n if(!obj.user) return EMPTY\n\n const mainUser = ''\n\n const messages = obj.messages.map((item: any) => {\n // Message transformation logic\n })\n\n return { user: mainUser, messages }\n\n })\n );\n\n ngOnInit() {\n\n this.stateService.updateConnection(this.server, this.wsServer, this.jwtToken, this.user);\n\n // Only trigger once when connection becomes true\n this.connectionStatus$.pipe(\n filter(status => status === true),\n take(1),\n takeUntil(this.destroy$)\n ).subscribe(() => {\n // Fetch existing channels when connected (user will create channels in demo)\n this.messageService.getAllChannels();\n });\n\n // Subscribe to latest messages and show toast notification\n this.latestCommunicationMessages$.pipe(\n filter(message => !!message),\n takeUntil(this.destroy$)\n ).subscribe((message: any) => {\n const messageContent = message.content?.message || '';\n\n this.toastService.toastMessage(\n ToastDisplay.adapt({\n message: messageContent,\n color: ToastColors.INFO,\n icon: 'chat',\n action: 'DONE'\n }),\n -1 // Stay until dismissed\n );\n });\n\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Create a new public channel without auto-subscribing\n * Public channels use PUB- prefix, system channels use SYS- prefix\n */\n onCreateChannel() {\n if (this.newChannelName.invalid) return;\n\n const channelName = this.newChannelName.value?.trim();\n if (channelName) {\n // Add PUB- prefix for public channels\n const publicChannelName = channelName.startsWith('PUB-') ? channelName : `PUB-${channelName}`;\n this.messageService.createChannel(publicChannelName);\n this.newChannelName.reset();\n // Server will broadcast updated channel list to all clients automatically\n }\n }\n\n /**\n * Subscribe to a channel to receive messages\n * Auto-adds PUB- prefix for outgoing communication\n */\n onSubscribeToChannel(channel: string) {\n this.messageService.subscribeToChannel(this.toPublicChannel(channel));\n // Reset channel selection when subscriptions change\n this.selectedChannels.reset([]);\n }\n\n /**\n * Unsubscribe from a channel\n * Auto-adds PUB- prefix for outgoing communication\n */\n onUnsubscribeFromChannel(channel: string) {\n this.messageService.unsubscribeFromChannel(this.toPublicChannel(channel));\n // Reset channel selection when subscriptions change\n this.selectedChannels.reset([]);\n }\n\n /**\n * Handle chip toggle for subscribe/unsubscribe\n */\n onChipToggle(channel: string, event: any) {\n if (event.selected) {\n this.onSubscribeToChannel(channel);\n } else {\n this.onUnsubscribeFromChannel(channel);\n }\n }\n\n /**\n * Check if currently subscribed to a channel\n * Compares display names (without PUB- prefix)\n */\n isSubscribed(channel: string, subscribedChannels: string[]): boolean {\n return subscribedChannels.includes(channel);\n }\n\n /**\n * Handle chip click - toggle subscription state\n */\n onChipClick(channel: string, subscribedChannels: string[]) {\n const isCurrentlySubscribed = this.isSubscribed(channel, subscribedChannels);\n if (isCurrentlySubscribed) {\n this.onUnsubscribeFromChannel(channel);\n } else {\n this.onSubscribeToChannel(channel);\n }\n }\n\n onSendMessage(user: WSUser) {\n\n this.messages.markAllAsTouched()\n\n if (this.messages.invalid) return\n\n const channelsToSend = this.selectedChannels.value as string[]\n if (channelsToSend.length === 0) return\n\n // Add PUB- prefix for outgoing channel communication\n const publicChannels = channelsToSend.map(ch => this.toPublicChannel(ch))\n\n const message = ChannelMessage.adapt({\n sessionId: { // user object with 'id' as the ID field\n id: user.id,\n ldap: user.ldap,\n name: user.name,\n email: user.email,\n },\n content: { message: this.messages.value.content },\n })\n\n this.messageService.sendMessage(message, publicChannels);\n this.content.reset();\n\n }\n\n}\n","\n @if ((data$ | async); as data) {\n @if ((user$ | async); as user) {\n <div style=\"display: flex; gap: 1rem; flex-direction: column; margin-top: 1rem;\">\n\n <!-- Channel Creation Section -->\n <div style=\"padding: 1rem; background: #e3f2fd; border-radius: 4px;\">\n <strong>Create New Channel</strong>\n <div style=\"display: flex; flex-direction: column; margin-top: 0.5rem;\">\n <mat-form-field appearance=\"outline\" style=\"width: 100%;\">\n <mat-label>Channel Name</mat-label>\n <input matInput [formControl]=\"newChannelName\" placeholder=\"Enter channel name\"\n (keydown.enter)=\"onCreateChannel()\">\n </mat-form-field>\n <div style=\"display: flex; justify-content: flex-end; margin-top: -0.5rem;\">\n <button mat-raised-button color=\"primary\" (click)=\"onCreateChannel()\"\n [disabled]=\"newChannelName.invalid\">\n Create Channel\n </button>\n </div>\n </div>\n </div>\n\n <!-- Messaging Section - only show when subscribed to channels -->\n @if ((subscribedChannels$ | async); as subscribedChannels) {\n @if (subscribedChannels.length > 0) {\n <div style=\"padding: 1rem; background: #fff3e0; border-radius: 4px;\" [formGroup]=\"messages\">\n <strong>Send Message</strong>\n\n <!-- Channel Selection with Checkboxes -->\n <div style=\"margin-top: 0.5rem;\">\n <mat-form-field appearance=\"outline\" style=\"width: 100%;\">\n <mat-label>Select Channels</mat-label>\n <mat-select formControlName=\"selectedChannels\" multiple>\n <mat-select-trigger>\n @if (selectedChannels.value?.length === 1) {\n {{ selectedChannels.value[0] }}\n } @else if (selectedChannels.value?.length > 1) {\n {{ selectedChannels.value[0] }} (+{{ selectedChannels.value.length - 1 }} {{ selectedChannels.value.length === 2 ? 'other' : 'others' }})\n }\n </mat-select-trigger>\n @for (channel of subscribedChannels; track channel) {\n <mat-option [value]=\"channel\">{{ channel }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- Message Input -->\n <div style=\"display: flex; flex-direction: column;\">\n <mat-form-field style=\"width: 100%;\" appearance=\"outline\">\n <mat-label>Message</mat-label>\n <textarea\n matInput placeholder=\"Type your message...\"\n formControlName=\"content\"\n (keydown.enter)=\"onSendMessage(user); $event.preventDefault()\"\n ></textarea>\n </mat-form-field>\n <div style=\"display: flex; justify-content: flex-end; margin-top: -0.5rem;\">\n <button mat-raised-button color=\"primary\" (click)=\"onSendMessage(user)\"\n [disabled]=\"messages.invalid\">\n Send\n </button>\n </div>\n </div>\n </div>\n }\n }\n\n </div>\n }\n }\n\n <!-- Channel List with Subscription Controls using Chips -->\n @if ((channels$ | async); as channels) {\n @if ((subscribedChannels$ | async); as subscribedChannels) {\n <div style=\"padding: 1rem; background: #f5f5f5; border-radius: 4px; margin-top: 1rem;\">\n <strong>Subscribe to Channel(s)</strong>\n <div style=\"margin-top: 0.5rem;\">\n @if (channels.length === 0) {\n <div style=\"color: #666; font-style: italic;\">No channels available. Create one above.</div>\n } @else {\n <mat-chip-listbox aria-label=\"Channel selection\" [multiple]=\"true\">\n @for (channel of channels; track channel) {\n <mat-chip-option\n [selected]=\"isSubscribed(channel, subscribedChannels)\"\n (click)=\"onChipClick(channel, subscribedChannels)\">\n {{ channel }}\n </mat-chip-option>\n }\n </mat-chip-listbox>\n }\n </div>\n </div>\n }\n }\n","import { Component, inject, Input, OnInit, OnDestroy } from '@angular/core';\nimport { NotificationServiceDemo } from '../../services/notification-service-demo.service';\nimport { StateServiceDemo } from '../../services/state-service-demo.service';\nimport { FormBuilder, FormControl, Validators } from '@angular/forms';\nimport { Subject, takeUntil, filter, startWith, distinctUntilChanged, map, tap, combineLatest } from 'rxjs';\n\n@Component({\n selector: 'app-ws-notifications',\n templateUrl: './ws-notifications.component.html',\n styleUrls: ['./ws-notifications.component.css'],\n standalone: false\n})\nexport class WsNotificationsComponent implements OnInit, OnDestroy {\n\n @Input() server!: string;\n @Input() wsServer!: string;\n @Input() jwtToken!: string;\n @Input() user!: any;\n\n private destroy$ = new Subject<void>();\n\n fb = inject(FormBuilder);\n notificationService = inject(NotificationServiceDemo);\n stateService = inject(StateServiceDemo);\n\n // Combine in-memory channels and today's DB channels, dedupe and strip prefix for display\n todaysNotificationChannels$ = combineLatest([\n this.notificationService.notificationChannels$.pipe(startWith([] as string[])),\n this.notificationService.todaysNotificationChannels$.pipe(startWith([] as string[]))\n ]).pipe(\n tap(([inMemory, fromDb]) => console.log('📢 In-memory channels:', inMemory, 'DB channels:', fromDb)),\n map(([inMemory, fromDb]) => {\n // Merge both sources and dedupe\n const allChannels = [...(inMemory || []), ...(fromDb || [])];\n const uniqueChannels = [...new Set(allChannels)]\n .filter(channel => channel.startsWith('MES-'))\n .map(channel => channel.replace('MES-', ''));\n return uniqueChannels.sort();\n }),\n tap(channels => console.log('📢 Combined channels for display:', channels)),\n distinctUntilChanged((prev, curr) => prev.length === curr.length && prev.every((v, i) => v === curr[i]))\n );\n\n // Track subscribed notification channels, strip prefix for display\n subscribedNotificationChannels$ = this.notificationService.subscribedNotificationChannels$.pipe(\n map(set => Array.from(set)\n .filter(channel => channel.startsWith('MES-'))\n .map(channel => channel.replace('MES-', ''))\n ),\n startWith([] as string[]),\n distinctUntilChanged((prev, curr) => prev.length === curr.length && prev.every((v, i) => v === curr[i]))\n );\n\n // Notification messages\n notificationMessages$ = this.notificationService.notificationMessages$;\n\n connectionStatus$ = this.stateService.connectionStatus$;\n\n /**\n * Helper to ensure channel has MES- prefix for outgoing communication\n */\n private toNotificationChannel(channel: string): string {\n return channel.startsWith('MES-') ? channel : `MES-${channel}`;\n }\n\n // Form for creating new notification channels\n newChannelName = this.fb.control<string>('', [Validators.required, Validators.minLength(2)]);\n\n // Channel connection selection\n selectedConnectionChannel = this.fb.control<string | null>(null);\n connectedChannel: string | null = null;\n\n // Table columns for notifications display\n displayedColumns: string[] = ['date', 'user', 'message'];\n\n // Form for date filter when subscribing\n dateFilter = this.fb.group({\n startDate: this.fb.control<Date | null>(null),\n endDate: this.fb.control<Date | null>(null),\n });\n\n // Form for sending notifications\n notificationForm = this.fb.group({\n content: this.fb.control<string | null>(null, Validators.required),\n });\n\n get content() {\n return this.notificationForm.get('content') as FormControl;\n }\n\n /**\n * Check if currently connected to a channel\n */\n isChannelConnected(subscribedChannels: string[]): boolean {\n return this.connectedChannel !== null && subscribedChannels.includes(this.connectedChannel);\n }\n\n /**\n * Connect to the selected channel\n */\n onConnectToChannel() {\n const channel = this.selectedConnectionChannel.value;\n if (!channel) return;\n\n this.connectedChannel = channel;\n this.onSubscribeToChannel(channel);\n }\n\n /**\n * Disconnect from the current channel\n */\n onDisconnectFromChannel() {\n if (this.connectedChannel) {\n this.onUnsubscribeFromChannel(this.connectedChannel);\n this.connectedChannel = null;\n }\n }\n\n ngOnInit() {\n // Request today's notification channels when connection is established\n this.connectionStatus$.pipe(\n filter(isConnected => isConnected),\n takeUntil(this.destroy$)\n ).subscribe(() => {\n // Request the list of today's notification channels from database\n this.notificationService.getTodaysNotificationChannels();\n });\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Create a new notification channel\n */\n onCreateChannel() {\n if (this.newChannelName.invalid) return;\n\n const channelName = this.newChannelName.value?.trim();\n if (channelName) {\n this.notificationService.createNotificationChannel(channelName);\n this.newChannelName.reset();\n }\n }\n\n /**\n * Subscribe to a notification channel with optional date filter\n */\n onSubscribeToChannel(channel: string) {\n const startDate = this.dateFilter.get('startDate')?.value as Date | null;\n const endDate = this.dateFilter.get('endDate')?.value as Date | null;\n\n const options: { startEpoch?: number; endEpoch?: number } = {};\n\n if (startDate) {\n // Set to start of day\n const startOfDay = new Date(startDate);\n startOfDay.setHours(0, 0, 0, 0);\n options.startEpoch = Math.floor(startOfDay.getTime() / 1000);\n }\n if (endDate) {\n // Set to end of day\n const endOfDay = new Date(endDate);\n endOfDay.setHours(23, 59, 59, 999);\n options.endEpoch = Math.floor(endOfDay.getTime() / 1000);\n }\n\n this.notificationService.subscribeToNotificationChannel(channel, options, this.user);\n }\n\n /**\n * Unsubscribe from a notification channel\n */\n onUnsubscribeFromChannel(channel: string) {\n this.notificationService.unsubscribeFromNotificationChannel(channel);\n }\n\n /**\n * Check if currently subscribed to a channel\n */\n isSubscribed(channel: string, subscribedChannels: string[]): boolean {\n return subscribedChannels.includes(channel);\n }\n\n /**\n * Handle chip click - toggle subscription state\n */\n onChipClick(channel: string, subscribedChannels: string[]) {\n const isCurrentlySubscribed = this.isSubscribed(channel, subscribedChannels);\n if (isCurrentlySubscribed) {\n this.onUnsubscribeFromChannel(channel);\n } else {\n this.onSubscribeToChannel(channel);\n }\n }\n\n /**\n * Send a notification\n */\n onSendNotification() {\n this.notificationForm.markAllAsTouched();\n\n if (this.notificationForm.invalid) return;\n\n const channel = this.connectedChannel;\n if (!channel) return;\n\n const messageContent = {\n message: this.content.value\n };\n\n this.notificationService.sendNotification(channel, messageContent, this.user);\n this.content.reset();\n }\n\n /**\n * Format epoch timestamp to readable date/time\n */\n formatTimestamp(epoch: number): string {\n return new Date(epoch * 1000).toLocaleString();\n }\n\n /**\n * Get today's date in YYYY-MM-DD format for date input default\n */\n getTodayDate(): string {\n return new Date().toISOString().split('T')[0];\n }\n\n}\n","<div style=\"display: flex; gap: 1rem; flex-direction: column; margin-top: 1rem;\">\n\n <!-- Channel Creation Section -->\n <div style=\"padding: 1rem; background: #e8f5e9; border-radius: 4px;\">\n <strong>Create Notification Channel</strong>\n <div style=\"display: flex; flex-direction: column; margin-top: 0.5rem;\">\n <mat-form-field appearance=\"outline\" style=\"width: 100%;\">\n <mat-label>Channel Name</mat-label>\n <input\n matInput\n [formControl]=\"newChannelName\"\n placeholder=\"Enter notification channel name\"\n (keydown.enter)=\"onCreateChannel()\"\n >\n </mat-form-field>\n <div style=\"display: flex; justify-content: flex-end;\">\n <button mat-raised-button color=\"primary\" (click)=\"onCreateChannel()\"\n [disabled]=\"newChannelName.invalid\">\n Create Channel\n </button>\n </div>\n </div>\n </div>\n\n <!-- Channel Connection Section - Only shown when NOT connected -->\n @if ((subscribedNotificationChannels$ | async); as subscribedChannels) {\n @if (!isChannelConnected(subscribedChannels)) {\n <div style=\"padding: 1rem; background: #e3f2fd; border-radius: 4px;\">\n <strong>Connect to Channel</strong>\n <div style=\"display: flex; gap: 1rem; margin-top: 0.5rem; flex-wrap: wrap; align-items: flex-start;\">\n <!-- Channel Selection (from today's DB data) -->\n <mat-form-field appearance=\"outline\" style=\"flex: 1; min-width: 200px;\">\n <mat-label>Select Channel</mat-label>\n <mat-select [formControl]=\"selectedConnectionChannel\" placeholder=\"Select a notification channel\">\n @for (channel of (todaysNotificationChannels$ | async) || []; track channel) {\n <mat-option [value]=\"channel\">{{ channel }}</mat-option>\n }\n @empty {\n <mat-option disabled>No channels with data for today</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <!-- Date Filter -->\n <mat-form-field appearance=\"outline\" style=\"flex: 1; min-width: 200px;\" [formGroup]=\"dateFilter\">\n <mat-label>Start Date</mat-label>\n <input matInput [matDatepicker]=\"startPicker\" formControlName=\"startDate\">\n <mat-datepicker-toggle matIconSuffix [for]=\"startPicker\"></mat-datepicker-toggle>\n <mat-datepicker #startPicker></mat-datepicker>\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" style=\"flex: 1; min-width: 200px;\" [formGroup]=\"dateFilter\">\n <mat-label>End Date</mat-label>\n <input matInput [matDatepicker]=\"endPicker\" formControlName=\"endDate\">\n <mat-datepicker-toggle matIconSuffix [for]=\"endPicker\"></mat-datepicker-toggle>\n <mat-datepicker #endPicker></mat-datepicker>\n </mat-form-field>\n </div>\n\n <div style=\"display: flex; gap: 0.5rem;\">\n <span style=\"flex:1\"></span>\n <button\n mat-raised-button color=\"primary\"\n (click)=\"onConnectToChannel()\"\n [disabled]=\"!selectedConnectionChannel.value\"\n >\n Connect\n </button>\n </div>\n </div>\n }\n }\n\n <!-- Send Notification Section -->\n @if ((subscribedNotificationChannels$ | async); as subscribedChannels) {\n @if (subscribedChannels.length > 0) {\n <div\n style=\"padding: 1rem; background: #fff8e1; border-radius: 4px;\"\n [formGroup]=\"notificationForm\"\n >\n <strong>Send Notification</strong>\n\n <!-- Notification Content -->\n <div style=\"display: flex; flex-direction: column; margin-top: 0.5rem;\">\n <mat-form-field style=\"width: 100%;\" appearance=\"outline\">\n <mat-label>Notification Message</mat-label>\n <textarea\n matInput placeholder=\"Type your notification...\"\n formControlName=\"content\"\n rows=\"2\"\n (keydown.enter)=\"onSendNotification(); $event.preventDefault()\"\n ></textarea>\n </mat-form-field>\n <div style=\"display: flex; justify-content: flex-end; margin-top: -0.5rem;\">\n <button\n mat-raised-button color=\"accent\"\n (click)=\"onSendNotification()\"\n [disabled]=\"notificationForm.invalid\"\n >\n Send Notification\n </button>\n </div>\n </div>\n </div>\n }\n }\n\n <!-- Notifications Table - Only shown when connected -->\n @if ((subscribedNotificationChannels$ | async); as subscribedChannels) {\n @if (isChannelConnected(subscribedChannels)) {\n @if ((notificationMessages$ | async); as notifications) {\n <div>\n <div style=\"display: flex; justify-content: space-between; align-items: center;\">\n <strong>Notifications ({{ notifications.length }})</strong>\n </div>\n\n @if (notifications.length > 0) {\n <div style=\"margin-top: 0.5rem; height: 400px; overflow: auto; border: 1px solid #888; border-radius: 4px;\">\n <table mat-table [dataSource]=\"notifications\" style=\"width: 100%;\">\n\n <!-- Date Column -->\n <ng-container matColumnDef=\"date\">\n <th mat-header-cell *matHeaderCellDef style=\"width: 180px;\">Date</th>\n <td mat-cell *matCellDef=\"let notification\">\n {{ formatTimestamp(notification.created) | date }}\n </td>\n </ng-container>\n\n <!-- User Column -->\n <ng-container matColumnDef=\"user\">\n <th mat-header-cell *matHeaderCellDef style=\"width: 150px;\">User</th>\n <td mat-cell *matCellDef=\"let notification\">\n <strong>{{ notification.user_name }}</strong>\n </td>\n </ng-container>\n\n <!-- Message Column -->\n <ng-container matColumnDef=\"message\">\n <th mat-header-cell *matHeaderCellDef>Message</th>\n <td mat-cell *matCellDef=\"let notification\">\n {{ notification.content?.message || notification.content }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n </div>\n } @else {\n <div style=\"text-align: center; color: #666; padding: 2rem;\">\n <mat-icon style=\"font-size: 48px; height: 48px; width: 48px; opacity: 0.5;\">notifications_none</mat-icon>\n <p>No notifications yet. Waiting for notifications on this channel...</p>\n </div>\n }\n </div>\n\n <!-- Disconnect Button - Below the table -->\n <div style=\"display: flex; justify-content: right; padding: 1rem;\">\n <button mat-raised-button color=\"warn\" (click)=\"onDisconnectFromChannel()\">\n Disconnect from Channel\n </button>\n </div>\n }\n }\n }\n\n</div>\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-ws-ai-messaging',\n templateUrl: './ws-ai-messaging.component.html',\n styleUrls: ['./ws-ai-messaging.component.css'],\n standalone: false\n})\nexport class WsAiMessagingComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","<p>\n ws-ai-messaging coming soon!\n</p>\n","import { Component, inject, OnInit, Input } from '@angular/core';\nimport { FormBuilder, Validators, FormControl } from '@angular/forms';\nimport { Observable, combineLatest, map, EMPTY, tap } from 'rxjs';\n\nimport { HTTPManagerService, RandomNumber, CommunicationType } from '../../services';\nimport { StateServiceDemo } from './services';\n\n@Component({\n selector: 'app-request-manager-ws-demo',\n templateUrl: './request-manager-ws-demo.component.html',\n styleUrls: ['./request-manager-ws-demo.component.css'],\n standalone: false\n})\nexport class RequestManagerWsDemoComponent implements OnInit {\n\n httpManagerService = inject(HTTPManagerService)\n stateService = inject(StateServiceDemo)\n\n fb = inject(FormBuilder)\n\n @Input() server!: string;\n @Input() wsServer!: string;\n @Input() jwtToken!: string;\n @Input() user!: any;\n @Input() path: string[] = ['ai','tests'];\n @Input() wsChannel: string = '';\n\n user$ = this.stateService.user$\n // users$ = this.stateService.userList$\n\n attempts$ = this.stateService.wsRetryAttempts$\n nextRetry$ = this.stateService.wsNextRetry$\n\n connectionStatus$ = this.stateService.connectionStatus$\n\n data$ = this.stateService.data$;\n isPending$ = this.stateService.isPending$;\n\n // messages = this.fb.group<any>({\n // toUser: this.fb.control<string|null>(null, Validators.required),\n // content: this.fb.control<string|null>(null, Validators.required),\n // })\n\n // get toUser() {\n // return this.messages.get('toUser') as FormControl\n // }\n\n // get content() {\n // return this.messages.get('content') as FormControl\n // }\n\n // get isValid() {\n // return this.toUser.valid\n // }\n\n // fromMe = (user: string, fromUser: string) => {\n // return user === fromUser\n // }\n\n // communicationMessages$ = this.stateRequestServiceDemo.communicationMessages$\n // latestCommunicationMessages$ = this.stateRequestServiceDemo.latestCommunicationMessages$\n\n // chat$: Observable<{ user: any, messages: any[]}|any> = combineLatest([this.user$, this.communicationMessages$])\n // .pipe(\n // map(([user, messages]: any) => ({ user, messages })),\n // map(obj => {\n\n // if(!obj.user) return EMPTY\n\n // // const mainUser = UserName.adapt({\n // // id: obj.user.username,\n // // first: obj.user?.name?.first,\n // // last: obj.user?.name?.last,\n // // })\n\n // const mainUser = ''\n\n // const messages = obj.messages.map((item: any) => {\n\n // if(item.toUser === 'allChannels') {\n // // item.toUser = UserName.adapt({\n // // id: '',\n // // first: 'All Users',\n // // last: '',\n // // })\n // }\n\n // // return Message.adapt({\n // // fromUser: {\n // // id: item.fromUser.username,\n // // first: item.fromUser?.name?.first,\n // // last: item.fromUser?.name?.last,\n // // },\n // // toUser: {\n // // id: item.toUser.username,\n // // first: item.toUser?.name?.first,\n // // last: item.toUser?.name?.last,\n // // },\n // // content: item.content,\n // // date: item.issued,\n // // })\n // })\n\n // return { user: mainUser, messages }\n\n // })\n // );\n\n ngOnInit() {\n // Initialize WS connection and retry driver\n this.stateService.updateConnection(this.server, this.wsServer, this.jwtToken, this.user);\n }\n\n // onSendMessage() {\n // this.messages.markAllAsTouched()\n // if (this.messages.invalid) return\n // const message = ChannelMessage.adapt(this.messages.value)\n // this.stateRequestServiceDemo.sendMessage(message)\n // this.content.reset()\n // }\n\n // onSendAlert() {\n // this.messages.markAllAsTouched()\n // if (this.messages.invalid) return\n // const message = ChannelMessage.adapt({ ...this.messages.value, type: CommunicationType.ALERT })\n // this.stateRequestServiceDemo.sendMessage(message)\n // this.content.reset()\n // }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <h2 style=\"display: flex;\">\n <span style=\"flex:1\">HTTP Request State Manager - Websockets</span>\n @if ((connectionStatus$ | async); as connected) {\n <span>\n WS -\n <span style=\"color: green;\">Connected</span>\n </span>\n } @else {\n <span style=\"color: red;\">Disconnected {{ attempts$ | async }} - {{ nextRetry$ |async }}</span>\n }\n </h2>\n\n <div>\n\n @if ((user$ | async); as userInfo) {\n <div>\n <mat-toolbar>\n <div style=\"display: flex; flex:1\">\n <div style=\"flex:1\">{{ userInfo.name }}</div>\n <div>({{ userInfo.ldap }})</div>\n </div>\n </mat-toolbar>\n </div>\n }\n\n @if ((isPending$ | async)) {\n <div>\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n </div>\n }\n\n <mat-tab-group animationDuration=\"0ms\" [selectedIndex]=\"1\">\n\n <mat-tab label=\"WS - Data Control\">\n <!-- DATA CONTROL -->\n <app-ws-data-control\n [server]=\"server\"\n [wsServer]=\"wsServer\"\n [jwtToken]=\"jwtToken\"\n [user]=\"user\"\n [path]=\"path\"\n [wsChannel]=\"wsChannel\"\n ></app-ws-data-control>\n\n </mat-tab>\n\n <mat-tab label=\"WS - Messaging\">\n <!-- MESSAGING -->\n <app-ws-messaging\n [server]=\"server\"\n [wsServer]=\"wsServer\"\n [jwtToken]=\"jwtToken\"\n [user]=\"user\"\n ></app-ws-messaging>\n\n </mat-tab>\n\n <mat-tab label=\"WS - Notifications\">\n <!-- WS - Notifications -->\n <app-ws-notifications\n [server]=\"server\"\n [wsServer]=\"wsServer\"\n [jwtToken]=\"jwtToken\"\n [user]=\"user\"\n ></app-ws-notifications>\n </mat-tab>\n\n <mat-tab label=\"WS - AI Messaging\" [disabled]=\"true\">\n <!-- WS - AI Messaging -->\n <app-ws-ai-messaging></app-ws-ai-messaging>\n </mat-tab>\n\n </mat-tab-group>\n</div>\n\n</div>\n\n","export interface ClientInfoInterface {\n domain: string\n service: string\n id: number\n name: string\n}\n\nexport class ClientInfo implements ClientInfoInterface {\n\n constructor(\n public domain = '',\n public service = '',\n public id = 0,\n public name = '',\n ) {}\n\n static adapt(item?: any): ClientInfo {\n\n return new ClientInfo(\n item?.domain,\n item?.service,\n item?.id,\n (item?.first_name || item?.last_name) ? `${item?.first_name} ${item?.last_name}` : '',\n )\n\n }\n\n}\n\n\n","export interface ClientInfoMapperInterface {\n id: number\n first_name: string\n last_name: string\n email: string\n}\n\nexport class ClientInfoMapper implements ClientInfoMapperInterface {\n\n constructor(\n public id = 0,\n public first_name = '',\n public last_name = '',\n public email = '',\n ) {}\n\n static adapt(item?: any): ClientInfoMapper {\n\n const first_name = (item?.name) ? item.name.split(' ')[0] : ''\n const last_name = (item?.name) ? item.name.split(' ')[1] : ''\n\n return new ClientInfoMapper(\n item?.id,\n first_name,\n last_name,\n item?.email,\n )\n\n }\n\n}\n\n\n","export interface AIPromptInterface {\n response: string\n}\n\nexport class AIPrompt implements AIPromptInterface {\n\n constructor(\n public response = '',\n ) {}\n\n static adapt(item?: any): AIPrompt {\n\n return new AIPrompt(\n item?.response,\n )\n\n }\n\n}\n","import { Component, OnInit, ViewChild, inject } from '@angular/core'\n\nimport { FormArray, FormBuilder, Validators } from '@angular/forms'\n\nimport { ClientInfo } from './models/sample-client-info'\nimport { ClientInfoMapper } from './models/sample-mapper-client-info'\nimport { AIPrompt } from './models/sample-ai-prompt'\nimport { ApiRequest, HTTPManagerSignalsService } from '../..'\n\nimport { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display'\n\n@Component({\n selector: 'app-request-signals-manager-demo',\n templateUrl: './request-signals-manager-demo.component.html',\n styleUrls: ['./request-signals-manager-demo.component.scss'],\n standalone: false\n})\nexport class RequestSignalsManagerDemoComponent implements OnInit {\n\n displayedColumns = ['id','name', 'lastName', 'age']\n\n private fb = inject(FormBuilder)\n private toastMessage = inject(ToastMessageDisplayService)\n\n httpManagerSignalsService = inject(HTTPManagerSignalsService)\n\n // Using signals service: signals are callable in templates (e.g. isPending())\n isPending = this.httpManagerSignalsService.isPending\n countdown = this.httpManagerSignalsService.countdown\n\n // per-operation plain results and error messages (no rxjs in component)\n GET_result: any = null\n POST_result: any = null\n PUT_result: any = null\n DELETE_result: any = null\n\n STREAM_result: any = null\n STREAM_AI_result: any = null\n\n GET_error: string = ''\n POST_error: string = ''\n PUT_error: string = ''\n DELETE_error: string = ''\n STREAM_error: string = ''\n STREAM_AI_error: string = ''\n\n requestParams = {\n GET: ApiRequest.adapt(),\n POST: ApiRequest.adapt(),\n PUT: ApiRequest.adapt(),\n DELETE: ApiRequest.adapt(),\n STREAM: ApiRequest.adapt(),\n }\n\n @ViewChild(\"failedState\", { static: true }) failedState: any\n @ViewChild(\"pollingState\", { static: true }) pollingState: any\n\n questionControl = this.fb.control(\"\", [Validators.required])\n\n downloadRequest = ApiRequest.adapt({\n server: 'assets/images',\n path: ['me.jpg'],\n // saveAs: 'john.jpg' // Optional\n })\n\n // downloadRequest = ApiRequest.adapt({\n // server: 'oidc/ai/file'\n // })\n\n sampleClientData = {\n id: 0,\n name: \"Old School Dates\",\n domain: \"osd.com\",\n service: \"osd\",\n spiffe: \"osd.com/osd\",\n secret: \"SMOPECXP-OS4P-USOG-X2II-3XMD1FQDR3IJX\",\n created: 1693003138,\n modified: 1693003138,\n icon: \"\",\n imageFile: \"\",\n email: \"wavecoders@gmail.com\"\n }\n\n requestForm = this.fb.group({\n path: this.fb.control<string>(\"ai/\"),\n headers: this.fb.array([]),\n adapter: [null],\n mapper: [null],\n retry: this.fb.group({\n times: [3],\n delay: [3],\n }),\n polling: [3],\n })\n\n AIType = 0\n\n sampleAdaptors = [\n { label: \"ClientInfo Basic\", value: ClientInfo.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n sampleMappers = [\n { label: \"Mapper Basic\", value: ClientInfoMapper.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n get retry() {\n return this.requestForm.get('retry')?.value\n }\n\n get headers(): FormArray {\n return this.requestForm.get('headers') as FormArray\n }\n\n get isValid() {\n this.requestForm.markAllAsTouched()\n return this.requestForm.valid\n }\n\n hasId = (arr: any[]) => {\n if (arr.length === 0) return false\n return !isNaN(arr[arr.length - 1])\n }\n\n props = (adapter: any) => {\n return (adapter) ? adapter() : null\n }\n\n // server = `http://sample-endpoint/as/authorization.oauth2`\n\n arrayObjectsToObjects = (arr: any[]) => {\n return Array.isArray(arr) ? arr.reduce((obj, item) => Object.assign(obj, { [item.key]: item.value }), {}) : {}\n }\n\n constructor() { }\n\n ngOnInit() {\n\n // const reqGet2 = ApiRequest.adapt({\n // server,\n // path: ['clients'],\n // headers: { authentication: \"Bearer <KEY>\" },\n // adapter: ClientInfo,\n // dataType: DataType.OBJECT,\n // // concurrent: false,\n // // polling: 3, //seconds\n // })\n\n // const req2 = [1024,1025,1026].map(item => {\n // return this.httpManagerService.getRequest<ClientInfo[]>(reqGet2, [item])\n // .pipe(\n // catchError(error => {\n // return throwError(() => new Error(error.error.message))\n // })\n // )\n // })\n\n // forkJoin(req2)\n // .subscribe(res => console.log(res))\n\n }\n\n addHeader() {\n const header = this.fb.group({\n key: ['', Validators.required],\n value: ['']\n })\n this.headers.push(header)\n }\n\n removeHeader(index: number) {\n this.headers.removeAt(index)\n }\n\n compileRequest() {\n\n const requestParams = this.requestForm.value\n\n requestParams.headers = this.arrayObjectsToObjects(\n requestParams.headers || []\n )\n\n const pathReq = (requestParams.path === \"\") ? [] : (requestParams.path || \"\").split(\"/\")\n\n if (!this.pollingState.checked) requestParams.polling = 0\n\n if (!this.failedState.checked) {\n requestParams.retry = { times: 0,delay: 0 }\n }\n\n const apiOptions = ApiRequest.adapt(requestParams)\n apiOptions.path = []\n\n return { apiOptions: apiOptions, path: pathReq }\n\n }\n\n onGetRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n this.requestParams.GET = reqParams.apiOptions\n\n // reset local state\n this.GET_result = null\n this.GET_error = ''\n\n this.httpManagerSignalsService.getRequest<ClientInfo[]>(reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.GET_result = res,\n error: (err) => this.errorHandling(err, 'GET')\n })\n\n }\n\n onCreateRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n this.requestParams.POST = reqParams.apiOptions\n\n // reset local state\n this.POST_result = null\n this.POST_error = ''\n\n this.httpManagerSignalsService.postRequest<ClientInfo>(this.sampleClientData, reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.POST_result = res,\n error: (err) => this.errorHandling(err, 'POST')\n })\n\n }\n\n onUpdateRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n if(!this.hasId(reqParams.path)) {\n console.log(\"Missing ID\")\n return\n }\n\n this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length-1])\n this.requestParams.PUT = reqParams.apiOptions\n\n // reset local state\n this.PUT_result = null\n this.PUT_error = ''\n\n this.httpManagerSignalsService.putRequest<any>(this.sampleClientData, reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.PUT_result = res,\n error: (err) => this.errorHandling(err, 'PUT')\n })\n\n }\n\n onDeleteRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n this.requestParams.DELETE = reqParams.apiOptions\n\n if(!this.hasId(reqParams.path)) {\n console.log(\"Missing ID\")\n return\n }\n\n this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length-1])\n this.requestParams.DELETE = reqParams.apiOptions\n\n // reset local state\n this.DELETE_result = null\n this.DELETE_error = ''\n\n this.httpManagerSignalsService.deleteRequest<ClientInfo>(reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.DELETE_result = res,\n error: (err) => this.errorHandling(err, 'DELETE')\n })\n\n }\n\n onStreamPostRequest() {\n\n if (!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n let payload = {}\n let apiPath: string[] = reqParams.path\n let apiOptions = reqParams.apiOptions\n let responseMapper: (items: any) => any = (items) => items.response\n\n if (this.AIType === 0) {\n\n // API request\n payload = { prompt: this.questionControl.value }\n\n } else {\n\n // Local Ollama request\n apiOptions.server = \"api\"\n apiPath = [\"generate\"]\n apiOptions.stream = true\n payload = {\n model: \"phi3:latest\",\n prompt: this.questionControl.value,\n stream: true,\n }\n\n responseMapper = (items) => items.map((word: any) => word.response).flat().join('')\n\n }\n\n this.requestParams.STREAM = apiOptions\n this.STREAM_AI_result = null\n this.STREAM_AI_error = ''\n\n this.httpManagerSignalsService.postRequest<any>(payload, apiOptions, apiPath)\n .subscribe({\n next: (res) => {\n try {\n this.STREAM_AI_result = responseMapper(res)\n } catch (e) {\n this.STREAM_AI_result = res\n }\n this.questionControl.reset()\n },\n error: (err) => this.errorHandling(err, 'STREAM')\n })\n\n }\n\n\n onStreamRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n reqParams.apiOptions.stream = true\n\n this.requestParams.GET = reqParams.apiOptions\n this.STREAM_result = null\n this.STREAM_error = ''\n\n this.httpManagerSignalsService.getRequest<ClientInfo[]>(reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.STREAM_result = res,\n error: (err) => this.errorHandling(err, 'STREAM')\n })\n\n }\n\n onDownloadCompleted() {\n\n const message = \"Download Completed\"\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.SUCCESS,\n icon: 'sentiment_satisfied_alt',\n })\n\n this.toastMessage.toastMessage(display)\n }\n\n onDownloadFailed(err: string) {\n\n const message = \"Download Failed\"\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.ERROR,\n icon: 'warning',\n })\n\n this.toastMessage.toastMessage(display)\n }\n\n errorHandling(err: any, type: string) {\n const message = err?.message || String(err)\n // set local error state\n if (type === 'GET') this.GET_error = message\n if (type === 'POST') this.POST_error = message\n if (type === 'PUT') this.PUT_error = message\n if (type === 'DELETE') this.DELETE_error = message\n if (type === 'STREAM') this.STREAM_error = message\n\n // also set the shared service error signal\n this.httpManagerSignalsService.error.set(message)\n\n return err\n }\n\n onSelectAIType(type: number) {\n this.AIType = type\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <h2>\n <span>HTTP Request Signals Manager</span>\n <span style=\"margin-left: .5rem;\">\n <mat-icon color=\"accent\">fiber_new</mat-icon>\n </span>\n </h2>\n\n <div [formGroup]=\"requestForm\" style=\"margin-top: 2rem;\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Adapter (Model)</mat-label>\n <mat-select formControlName=\"adapter\" #adapterSelect>\n <mat-option>None</mat-option>\n @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","export interface SettingsInterface {\n enum_1: any\n enum_2: any\n enum_3: any\n enum_4: any\n}\n\nexport class Settings implements SettingsInterface {\n\n constructor(\n public enum_1 = [],\n public enum_2 = [],\n public enum_3 = [],\n public enum_4 = [],\n ) {}\n\n static adapt(item?: any): Settings {\n\n return new Settings(\n item?.enum_1,\n item?.enum_2,\n item?.enum_3,\n item?.enum_4,\n )\n\n }\n\n}\n","import { Injectable } from '@angular/core';\n\nimport { map } from 'rxjs';\n\nimport { SettingOptions, StorageType } from '../../../services';\nimport { StoreStateManagerService, StateStorageOptions } from '../../../services/store-state-manager-service';\nimport { Settings } from '../models/settings.model';\n\n\n@Injectable()\nexport class SettingsStateService extends StoreStateManagerService {\n\n constructor() {\n\n super(\n StateStorageOptions.adapt({\n store: 'sampleStore',\n options: SettingOptions.adapt({\n storage: StorageType.SESSION,\n encrypted: false\n }),\n model: Settings.adapt,\n }\n ))\n\n }\n\n updateEnum_1(value: any) {\n this.updateData(value)\n }\n\n updateEnum_2(value: any) {\n this.updateData(value)\n }\n\n getEnum(key: string) {\n return this.data$.pipe(\n map(item => item[key])\n )\n }\n\n getEnum_1() {\n return this.data$.pipe(\n map(item => item?.enum_1)\n )\n }\n\n}\n","import { Component, inject, OnInit } from '@angular/core';\nimport { RandomNumber } from '../../services';\nimport { SettingsStateService } from './services/settings-state.service';\n\n@Component({\n selector: 'app-store-state-manager-demo',\n templateUrl: './store-state-manager-demo.component.html',\n styleUrls: ['./store-state-manager-demo.component.css'],\n providers: [SettingsStateService],\n standalone: false\n})\nexport class StoreStateManagerDemoComponent implements OnInit {\n\n settingsStateService = inject(SettingsStateService)\n dataState$ = this.settingsStateService.data$\n\n dataEnum$ = this.settingsStateService.getEnum_1()\n\n ngOnInit() {\n }\n\n onUpdateEnum_1() {\n const rnd = RandomNumber(1000, 9999)\n this.settingsStateService.updateEnum_1({enum_1: [{ users: [1,2,3, rnd], random: rnd }]})\n }\n\n onUpdateEnum_2() {\n const rnd = RandomNumber(1000, 9999)\n this.settingsStateService.updateEnum_2({enum_2: [{ users: [1,2,3, rnd], random: rnd }]})\n }\n\n onGetEnum_1() {\n this.settingsStateService.getEnum_1().subscribe(data => console.log('DUMP:', data))\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <h2>\n <span>Store State Manager</span>\n <span style=\"margin-left: .5rem;\">\n <mat-icon color=\"accent\">fiber_new</mat-icon>\n </span>\n </h2>\n\n {{ dataState$ | async | json}}\n\n <div style=\"display: flex; gap:.5rem; margin-top: 1rem; margin-bottom: 1rem;\">\n <button mat-stroked-button (click)=\"onUpdateEnum_1()\">Update Start</button>\n <button mat-stroked-button (click)=\"onUpdateEnum_2()\">Update End</button>\n <button mat-stroked-button (click)=\"onGetEnum_1()\">Dump</button>\n </div>\n\n <div>\n <h3 style=\"margin: 0;\">Enum 1</h3>\n {{ dataEnum$ | async | json}}\n </div>\n\n</div>\n","import { 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 { 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 { ProxyDebuggerInterceptor } from './interceptors/proxy-debugger.interceptor';\nimport { MatTabsModule } from '@angular/material/tabs';\n\nimport { ConfigOptions } from './models';\nimport { CONFIG_SETTINGS_TOKEN } from './models/config-token.model';\nimport { HTTPManagerService, LocalStorageManagerService } from './services';\n\nimport { FileDownloaderModule } from './http-request-services-demo/request-manager-demo/file-downloader/file-download.module';\nimport { ToastMessageDisplayModule } from 'toast-message-display';\n\nimport { DatabaseDataDemoComponent, HttpRequestServicesDemoComponent, LocalStorageDemoComponent, RequestManagerDemoComponent, RequestManagerStateDemoComponent } from '../public-api';\n\nimport { LocalStorageSignalsDemoComponent } from './http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component';\nimport { RequestManagerWsDemoComponent } from './http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component';\nimport { RequestSignalsManagerDemoComponent } from './http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component';\nimport { StoreStateManagerDemoComponent } from './http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component';\n\nimport { WsDataControlComponent } from './http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component';\nimport { WsMessagingComponent } from './http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component';\nimport { WsNotificationsComponent } from './http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component';\nimport { WsAiMessagingComponent } from './http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component';\n\n// import { MessengerChatModule } from 'src/app/components/messenger-chat/messenger-chat.module';\n// import { StoreStateManagerModule } from \"src/app/beta_components/store-state-manager/store-state-manager.module\";\n\n\n@NgModule({\n imports: [\n CommonModule,\n ToastMessageDisplayModule,\n FormsModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatTabsModule,\n MatSelectModule,\n MatChipsModule,\n MatMenuModule,\n MatIconModule,\n MatTableModule,\n MatButtonToggleModule,\n MatAutocompleteModule,\n MatProgressBarModule,\n MatSlideToggleModule,\n MatDividerModule,\n MatFormFieldModule,\n MatInputModule,\n MatToolbarModule,\n MatSlideToggleModule,\n TranslateModule.forRoot(),\n MatSidenavModule,\n MatDatepickerModule,\n MatNativeDateModule,\n FileDownloaderModule,\n // MessengerChatModule,\n // StoreStateManagerModule\n],\n declarations: [\n HttpRequestServicesDemoComponent,\n RequestManagerStateDemoComponent,\n RequestManagerDemoComponent,\n RequestSignalsManagerDemoComponent,\n LocalStorageDemoComponent,\n LocalStorageSignalsDemoComponent,\n RequestManagerWsDemoComponent,\n StoreStateManagerDemoComponent,\n DatabaseDataDemoComponent,\n WsDataControlComponent,\n WsMessagingComponent,\n WsNotificationsComponent,\n WsAiMessagingComponent,\n ],\n exports: [\n HttpRequestServicesDemoComponent,\n ],\n providers: [\n { provide: HTTP_INTERCEPTORS, useClass: WithCredentialsInterceptor, multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: RequestHeadersInterceptor, multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: ProxyDebuggerInterceptor, multi: true },\n { provide: CONFIG_SETTINGS_TOKEN, useValue: ConfigOptions.adapt() },\n HTTPManagerService, LocalStorageManagerService\n ],\n})\nexport class HttpRequestManagerModule {\n\n static forRoot(config: ConfigOptions = ConfigOptions.adapt()): ModuleWithProviders<HttpRequestManagerModule> {\n return {\n ngModule: HttpRequestManagerModule,\n providers: [\n { provide: CONFIG_SETTINGS_TOKEN, useValue: ConfigOptions.adapt(config) },\n HTTPManagerService, LocalStorageManagerService //all services that need access to config\n ],\n };\n }\n\n}\n\n\n","export interface ClientInfoInterface {\n domain: string\n service: string\n id: number\n name: string\n}\n\nexport class ClientInfo implements ClientInfoInterface {\n\n constructor(\n public domain = '',\n public service = '',\n public id = 0,\n public name = '',\n ) {}\n\n static adapt(item?: any): ClientInfo {\n\n return new ClientInfo(\n item?.domain,\n item?.service,\n item?.id,\n (item?.first_name || item?.last_name) ? `${item?.first_name} ${item?.last_name}` : '',\n )\n\n }\n\n}\n\n\n","export interface ClientInfoMapperInterface {\n id: number\n first_name: string\n last_name: string\n email: string\n}\n\nexport class ClientInfoMapper implements ClientInfoMapperInterface {\n\n constructor(\n public id = 0,\n public first_name = '',\n public last_name = '',\n public email = '',\n ) {}\n\n static adapt(item?: any): ClientInfoMapper {\n\n const first_name = (item?.name) ? item.name.split(' ')[0] : ''\n const last_name = (item?.name) ? item.name.split(' ')[1] : ''\n\n return new ClientInfoMapper(\n item?.id,\n first_name,\n last_name,\n item?.email,\n )\n\n }\n\n}\n\n\n","import { Injectable } from '@angular/core';\n\nimport { DataType, DatabaseStorage } from '../../../models';\nimport { HTTPManagerStateService, ApiRequest, RequestOptions } from '../../../services';\n\nimport { ClientInfo } from '../../request-manager-demo/models/sample-client-info';\nimport { ClientInfoMapper } from '../../request-manager-demo/models/sample-mapper-client-info';\n\n@Injectable()\nexport class StateManagerDemoService extends HTTPManagerStateService<any> {\n\n constructor() {\n super(\n ApiRequest.adapt({\n server: \"\",\n path: [],\n headers: {},\n adapter: ClientInfo.adapt,\n mapper: ClientInfoMapper.adapt,\n stream: false,\n }),\n DataType.ARRAY,\n DatabaseStorage.adapt()\n )\n }\n\n setAPIOptions(apiOptions: ApiRequest, dataType: DataType, database?: DatabaseStorage) {\n this.setApiRequestOptions(apiOptions, dataType, database)\n }\n\n getClients() {\n\n // const headers = {\n // auth: \"sample-auth-token\"\n // }\n // const sampleOptions = RequestOptions.adapt({ path: [\"id\", 12], headers, sample: true })\n this.fetchRecords()\n\n }\n\n createClient(data: any) {\n\n // const headers = {\n // auth: \"sample-auth-token\"\n // }\n\n // const sampleOptions = RequestOptions.adapt({ path: [\"id\", 12], headers, sample: true })\n this.createRecord(data)\n\n }\n\n updateClient(data: ClientInfo) {\n\n // const headers = {\n // auth: \"sample-auth-token\"\n // }\n data.id = 1031\n const sampleOptions = RequestOptions.adapt({ path: [data.id] })\n this.updateRecord(data, sampleOptions)\n\n }\n\n deleteClient(data: ClientInfo) {\n\n // const headers = {\n // auth: \"sample-auth-token\"\n // }\n\n data.id = 1031\n const sampleOptions = RequestOptions.adapt({ path: [data.id] })\n this.deleteRecord(sampleOptions)\n\n }\n\n streamRequest() {\n\n const headers = {\n auth: \"sample-auth-token\"\n }\n\n // const sampleOptions = RequestOptions.adapt({ path: [1], headers })\n this.fetchStream()\n\n }\n\n}\n","export interface AIPromptInterface {\n response: string\n}\n\nexport class AIPrompt implements AIPromptInterface {\n\n constructor(\n public response = '',\n ) {}\n\n static adapt(item?: any): AIPrompt {\n\n return new AIPrompt(\n item?.response,\n )\n\n }\n\n}\n","import { Component, Input, OnInit, ViewChild, inject } from '@angular/core';\n\nimport { StateManagerDemoService } from './services/state-manager-demo.service';\nimport { FormBuilder, Validators, FormArray } from '@angular/forms';\n\nimport { Observable, BehaviorSubject, EMPTY, map, tap, catchError, throwError } from 'rxjs';\n\nimport { ClientInfo } from '../request-manager-demo/models/sample-client-info';\nimport { ClientInfoMapper } from '../request-manager-demo/models/sample-mapper-client-info';\nimport { AIPrompt } from '../request-manager-demo/models/sample-ai-prompt';\n\nimport { DataType } from '../../models';\nimport { DatabaseStorage } from '../../models/database-storage.model';\nimport { HTTPManagerService, ApiRequest } from '../../services';\n\n\n@Component({\n selector: 'app-request-manager-state-demo',\n templateUrl: './request-manager-state-demo.component.html',\n styleUrls: ['./request-manager-state-demo.component.scss'],\n providers: [StateManagerDemoService, HTTPManagerService],\n standalone: false\n})\nexport class RequestManagerStateDemoComponent implements OnInit {\n\n @Input() server = 'http://localhost:8080'\n @Input() adapter?: Function\n @Input() mapper?: Function\n\n stateManagerDemoService = inject(StateManagerDemoService)\n\n displayedColumns = ['id','name', 'lastName', 'age']\n\n selectedRecord$?: Observable<ClientInfo|null>\n\n fb = inject(FormBuilder)\n\n httpManagerService = inject(HTTPManagerService)\n\n isPending$ = this.stateManagerDemoService.isPending$\n error$ = this.stateManagerDemoService.error$\n\n countdown$ = this.httpManagerService.countdown$\n\n GET_error$ = new BehaviorSubject<string>('')\n POST_error$ = new BehaviorSubject<string>('')\n PUT_error$ = new BehaviorSubject<string>('')\n DELETE_error$ = new BehaviorSubject<string>('')\n\n STREAM_error$ = new BehaviorSubject<string>('')\n STREAM_AI_error$ = new BehaviorSubject<string>('')\n\n GET$ = new BehaviorSubject<any>(null)\n POST$ = new BehaviorSubject(null)\n PUT$ = new BehaviorSubject(null)\n DELETE$ = new BehaviorSubject(null)\n\n STREAM = new BehaviorSubject(null)\n STREAM$ = this.STREAM.asObservable()\n\n STREAM_AI = new BehaviorSubject<{response: string}[]>([])\n STREAM_AI$ = this.STREAM_AI.asObservable()\n .pipe(\n map((items: any) => (items) ? items.map((item: any) => item.response) : []),\n map((items: any) => items.join('\\n').trim()),\n )\n\n @ViewChild(\"failedState\", { static: true }) failedState: any\n @ViewChild(\"pollingState\", { static: true }) pollingState: any\n\n questionControl = this.fb.control(\"\", [Validators.required])\n\n requestType = ''\n\n prompts: string[] = []\n\n AIType = 0\n\n get dataObservable$() {\n\n switch (this.requestType) {\n case 'GET':\n return this.GET$\n\n case 'PUT':\n return this.PUT$\n\n case 'POST':\n return this.POST$\n\n case 'DELETE':\n return this.DELETE$\n\n case 'STREAM':\n return this.STREAM\n\n case 'STREAM_AI':\n return this.STREAM_AI\n\n default:\n return this.GET$\n break;\n }\n\n }\n\n sampleClientData = {\n id: 0,\n name: \"Old School Dates\",\n domain: \"osd.com\",\n service: \"osd\",\n spiffe: \"osd.com/osd\",\n secret: \"SMOPECXP-OS4P-USOG-X2II-3XMD1FQDR3IJX\",\n created: 1693003138,\n modified: 1693003138,\n icon: \"\",\n imageFile: \"\",\n }\n\n selectedRecord = this.fb.control(null)\n\n requestForm = this.fb.group({\n datatype: this.fb.control('ARRAY'),\n path: this.fb.control<string>(\"ai/\"),\n headers: this.fb.array([]),\n adapter: [null],\n mapper: [null],\n retry: this.fb.group({\n times: [3],\n delay: [3],\n }),\n polling: [3],\n database: this.fb.group({\n table: [''],\n expiresIn: ['1m'],\n })\n })\n\n get hasChanged() {\n return this.requestForm.dirty || this.requestForm.untouched\n }\n\n get dataType() {\n return this.requestForm.get(\"datatype\")?.value\n }\n\n get database() {\n return this.requestForm.get(\"database\")?.value\n }\n\n get retry() {\n return this.requestForm.get(\"retry\")?.value\n }\n\n sampleAdaptors = [\n { label: \"ClientInfo Basic\", value: ClientInfo.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n sampleMappers = [\n { label: \"Mapper Basic\", value: ClientInfoMapper.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n get headers(): FormArray {\n return this.requestForm.get('headers') as FormArray\n }\n\n get isValid() {\n this.requestForm.markAllAsTouched()\n return this.requestForm.valid\n }\n\n // server = `http://sample-endpoint/as/authorization.oauth2`\n\n arrayObjectsToObjects = (arr: any[]) => {\n return Array.isArray(arr) ? arr.reduce((obj, item) => Object.assign(obj, { [item.key]: item.value }), {}) : {}\n }\n\n props = (adapter: any) => {\n return (adapter) ? adapter() : null\n }\n\n constructor() { }\n\n ngOnInit() {\n\n this.stateManagerDemoService.data$.pipe(\n tap((data) => console.log(\"API STREAM_AI response\", data)),\n )\n\n this.error$.pipe(\n tap((data) => {\n debugger\n console.log(\"API STREAM response\", data)\n }),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'STREAM'))\n })\n )\n\n this.selectedRecord.valueChanges\n .subscribe((data: ClientInfo|null) => {\n this.selectedRecord$ = (data) ? this.stateManagerDemoService.selectRecord$(data.id) : EMPTY\n })\n\n this.stateManagerDemoService.data$\n .pipe(\n tap((data: any) => {\n\n switch (this.requestType) {\n case 'GET':\n this.GET$.next(data)\n break;\n\n case 'PUT':\n this.PUT$.next(data)\n break;\n\n case 'POST':\n this.POST$.next(data)\n break;\n\n case 'DELETE':\n this.DELETE$.next(data)\n break;\n\n case 'STREAM':\n this.STREAM.next(data)\n break;\n\n case 'STREAM_AI':\n this.STREAM_AI.next(data)\n break;\n\n default:\n break;\n }\n\n })\n ).subscribe()\n\n }\n\n addHeader() {\n const header = this.fb.group({\n key: ['', Validators.required],\n value: ['']\n });\n this.headers.push(header)\n }\n\n removeHeader(index: number) {\n this.headers.removeAt(index)\n }\n\n compileRequest() {\n\n const requestParams = this.requestForm.value\n\n requestParams.headers = this.arrayObjectsToObjects(\n requestParams.headers || []\n )\n\n const pathReq = (requestParams.path === \"\") ? [] : (requestParams.path || \"\").split(\"/\")\n\n if (!this.pollingState.checked) requestParams.polling = 0\n\n if (!this.failedState.checked) {\n requestParams.retry = { times: 0,delay: 0 }\n }\n\n const currentOptions = ApiRequest.adapt(requestParams)\n currentOptions.path = []\n currentOptions.server = this.server\n currentOptions.adapter = this.adapter\n currentOptions.mapper = this.mapper\n const apiOptions = ApiRequest.adapt({ ...currentOptions, path: pathReq })\n\n return { apiOptions: apiOptions, path: pathReq }\n\n }\n\n onSetStateOptions() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n const db = DatabaseStorage.adapt(this.database)\n const type = this.dataType === \"ARRAY\" ? DataType.ARRAY : DataType.OBJECT\n this.stateManagerDemoService.setAPIOptions(reqParams.apiOptions, type, db)\n\n this.requestForm.markAsPristine()\n }\n\n onClearRecords() {\n this.stateManagerDemoService.clearRecords()\n }\n\n onGetRequest() {\n this.requestType = 'GET'\n this.stateManagerDemoService.getClients()\n }\n\n onCreateRequest() {\n this.requestType = 'POST'\n this.stateManagerDemoService.createClient(this.sampleClientData)\n }\n\n onUpdateRequest() {\n this.requestType = 'PUT'\n this.stateManagerDemoService.updateClient(this.sampleClientData)\n }\n\n onDeleteRequest() {\n this.requestType = 'DELETE'\n this.stateManagerDemoService.deleteClient(this.sampleClientData)\n }\n\n onStreamRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n reqParams.apiOptions.stream = true\n\n this.requestType = 'STREAM'\n\n this.stateManagerDemoService.streamRequest()\n\n }\n\n errorHandling(err: any, type: string) { console.log(err, type)\n if(type === 'GET') this.GET_error$.next(err.message)\n if(type === 'POST') this.POST_error$.next(err.message)\n if(type === 'PUT') this.PUT_error$.next(err.message)\n if(type === 'DELETE') this.DELETE_error$.next(err.message)\n if(type === 'STREAM') this.STREAM_error$.next(err.message)\n if(type === 'STREAM_AI') this.STREAM_AI_error$.next(err.message)\n }\n\n onSelectAIType(type: number) {\n this.AIType = type\n }\n\n onClearHistory() {\n this.prompts = []\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <h2>\n HTTP Request State Manager\n </h2>\n\n <div [formGroup]=\"requestForm\" style=\"margin-top: 2rem;\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>State Data Type</mat-label>\n <mat-select formControlName=\"datatype\">\n <mat-option value=\"ARRAY\">Array</mat-option>\n <mat-option value=\"OBJECT\">Object</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Adapter (Model)</mat-label>\n <mat-select formControlName=\"adapter\" #adapterSelect>\n <mat-option>None</mat-option>\n @for (adapter of sampleAdaptors; track adapter) {\n <mat-option [value]=\"adapter.value\">\n {{adapter.label}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mapper (Model)</mat-label>\n <mat-select formControlName=\"mapper\" #mapperSelect>\n <mat-option>None</mat-option>\n @for (mapper of sampleMappers; track mapper) {\n <mat-option [value]=\"mapper.value\">\n {{mapper.label}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n\n @if (adapterSelect.value || mapperSelect.value) {\n <div style=\"display: flex; margin-bottom: 2rem;\">\n <div style=\"flex:1\" class=\"box\">\n <h3>Adapter (Incoming)</h3>\n @if (adapterSelect.value) {\n <div>\n {{ props(adapterSelect.value) | json }}\n </div>\n } @else {\n No Transformation\n }\n </div>\n <div style=\"flex:1\" class=\"box\">\n <h3>Mapper (Outgoing)</h3>\n @if (mapperSelect.value) {\n <div>\n {{ props(mapperSelect.value) | json }}\n </div>\n } @else {\n No Transformation\n }\n </div>\n </div>\n }\n\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>RestPath (/ delimited)</mat-label>\n <input matInput placeholder=\"clients/list\" formControlName=\"path\">\n </mat-form-field>\n </div>\n <div>\n <div formArrayName=\"headers\">\n @for (task of headers.controls; track task; let i = $index) {\n <div [formGroupName]=\"i\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Key</mat-label>\n <input matInput placeholder=\"authentication\" formControlName=\"key\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Value</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"value\">\n </mat-form-field>\n <div style=\"margin-top: .5rem;\">\n <button mat-icon-button (click)=\"removeHeader(i)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n <button mat-stroked-button (click)=\"addHeader()\">Add Header</button>\n </div>\n <div style=\"margin-top: 2rem; display: flex; flex-direction:column; gap: 1rem;\">\n <div>\n <mat-slide-toggle #failedState>Retry on Failed</mat-slide-toggle>\n @if (failedState.checked) {\n <div style=\"display: flex; gap: .5rem; margin-top: 1rem;\" formGroupName=\"retry\">\n <mat-form-field appearance=\"outline\">\n <mat-label>#of Times</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"times\" value=\"3\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Delay Until Next</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"delay\" value=\"3\">\n </mat-form-field>\n </div>\n }\n </div>\n <div>\n <mat-slide-toggle #pollingState>Polling</mat-slide-toggle>\n @if (pollingState.checked) {\n <div>\n <mat-form-field appearance=\"outline\" style=\"margin-top: 1rem\">\n <mat-label>#of Seconds</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"polling\" value=\"3\">\n </mat-form-field>\n </div>\n }\n </div>\n <div>\n <mat-slide-toggle #DBState>Database Storage</mat-slide-toggle>\n @if (DBState.checked) {\n <div style=\"display: flex; gap: .5rem; margin-top: 1rem\" formGroupName=\"database\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Table Name</mat-label>\n <input matInput placeholder=\"table\" formControlName=\"table\" value=\"\">\n </mat-form-field>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Expires In</mat-label>\n <mat-select formControlName=\"expiresIn\">\n <mat-option value=\"1m\">One Minute</mat-option>\n <mat-option value=\"1h\">One Hour</mat-option>\n <mat-option value=\"1d\">One Day</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n }\n </div>\n <div style=\"margin-top: 1rem; display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onSetStateOptions()\" [disabled]=\"!hasChanged\">\n Set API Request Options\n </button>\n </div>\n <div>\n @if ((error$ | async); as error) {\n <mat-error>\n {{ error }}\n </mat-error>\n }\n </div>\n </div>\n </div>\n\n <div style=\"margin-bottom: 1rem; margin-top: 2rem;\">\n @if ((isPending$ | async)) {\n <mat-progress-bar mode=\"indeterminate\"\n ></mat-progress-bar>\n }\n @if (pollingState.checked) {\n <div>\n @if (!(isPending$ | async) && (this.countdown$ | async) || -1 > 0) {\n <mat-progress-bar mode=\"determinate\"\n [value]=\"(this.countdown$ | async)\"\n ></mat-progress-bar>\n }\n </div>\n }\n\n </div>\n\n @if ((GET$ | async); as data) {\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1;\">CURRENT STATE ({{ dataType }})</h2>\n </div>\n @if (data.length > 1) {\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Records</mat-label>\n <mat-select [formControl]=\"selectedRecord\" [disabled]=\"data === null && data?.length === 0\">\n <mat-option [value]=\"\">None</mat-option>\n @for (item of data; track item) {\n <mat-option [value]=\"item\">\n {{item.name || (item.first_name) | titlecase}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n }\n @if ((dataObservable$ | async); as dataRecord) {\n <div>\n @if ((selectedRecord$ | async); as record) {\n <div>\n {{ record | json }}\n </div>\n } @else {\n No Record Selected from State\n }\n </div>\n }\n <div style=\"margin-top: 1rem;\">\n @if (data !== null && data?.length > 0) {\n <span>\n State contains a Total of {{ data.length }} Records\n </span>\n } @else {\n No Records\n }\n <div style=\"display: flex; gap: .5rem; text-align: end; justify-content: flex-end;\">\n <button class=\"btn\" mat-stroked-button (click)=\"onClearRecords()\">Clear</button>\n </div>\n </div>\n </div>\n }\n\n\n\n\n <div style=\"margin-top: 1rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">GET Request ({{ dataType }})</h2>\n <div>\n <button mat-raised-button (click)=\"onGetRequest()\" [disabled]=\"hasChanged\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if ((GET_error$ | async); as get_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ get_error }}</mat-error>\n </div>\n }\n\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(GET$ | async) | jsonv\"></div> -->\n @if ((GET$ | async); as getData) {\n <div>{{ getData | json }}</div>\n }\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">POST Request</h2>\n <div>\n <button mat-raised-button (click)=\"onCreateRequest()\" [disabled]=\"hasChanged\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if ((POST_error$ | async); as post_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ post_error }}</mat-error>\n </div>\n }\n\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(POST$ | async) | jsonv\"></div> -->\n @if ((POST$ | async); as postData) {\n <div>{{ postData | json }}</div>\n }\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">PUT Request</h2>\n <div>\n <button mat-raised-button (click)=\"onUpdateRequest()\" [disabled]=\"hasChanged\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if ((PUT_error$ | async); as put_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ put_error }}</mat-error>\n </div>\n }\n\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(PUT$ | async) | jsonv\"></div> -->\n @if ((PUT$ | async); as putData) {\n <div>{{ putData | json }}</div>\n }\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">DELETE Request</h2>\n <div>\n <button mat-raised-button (click)=\"onDeleteRequest()\" [disabled]=\"hasChanged\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if ((DELETE_error$ | async); as delete_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ delete_error }}</mat-error>\n </div>\n }\n\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(DELETE$ | async) | jsonv\"></div> -->\n @if ((DELETE$ | async); as deleteData) {\n <div>{{ deleteData | json }}</div>\n }\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">Streaming GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onStreamRequest()\" class=\"btn\" [disabled]=\"hasChanged\">Request</button>\n </div>\n </div>\n\n @if ((STREAM_error$ | async); as stream_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ stream_error }}</mat-error>\n </div>\n }\n\n <div style=\"margin-top: 1rem;\">\n @if ((STREAM$ | async); as data) {\n <div class=\"container\">\n <table mat-table [dataSource]=\"data\">\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>\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 } from '../..'\nimport { catchError, map, tap } from 'rxjs/operators'\n\nimport { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display'\n\n@Component({\n selector: 'app-request-manager-demo',\n templateUrl: './request-manager-demo.component.html',\n styleUrls: ['./request-manager-demo.component.scss'],\n 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 = ['id','name', 'lastName', 'age']\n\n private fb = inject(FormBuilder)\n private toastMessage = inject(ToastMessageDisplayService)\n\n httpManagerService = inject(HTTPManagerService)\n\n isPending$ = this.httpManagerService.isPending$\n countdown$ = this.httpManagerService.countdown$\n\n GET_error$ = new BehaviorSubject<string>('')\n POST_error$ = new BehaviorSubject<string>('')\n PUT_error$ = new BehaviorSubject<string>('')\n DELETE_error$ = new BehaviorSubject<string>('')\n\n STREAM_error$ = new BehaviorSubject<string>('')\n STREAM_AI_error$ = new BehaviorSubject<string>('')\n\n GET$?: Observable<any>\n POST$?: Observable<any>\n PUT$?: Observable<any>\n DELETE$?: Observable<any>\n\n STREAM_AI$?: Observable<any>\n STREAM$?: Observable<any>\n\n requestParams = {\n GET: ApiRequest.adapt(),\n POST: ApiRequest.adapt(),\n PUT: ApiRequest.adapt(),\n DELETE: ApiRequest.adapt(),\n STREAM: ApiRequest.adapt(),\n }\n\n @ViewChild(\"failedState\", { static: true }) failedState: any\n @ViewChild(\"pollingState\", { static: true }) pollingState: any\n\n questionControl = this.fb.control(\"\", [Validators.required])\n\n downloadRequest = ApiRequest.adapt({\n server: 'assets/images',\n path: ['me.jpg'],\n saveAs: 'john.jpg' // Optional\n })\n\n // downloadRequest = ApiRequest.adapt({\n // server: 'oidc/ai/file'\n // })\n\n sampleClientData = {\n id: 0,\n name: \"Old School Dates\",\n domain: \"osd.com\",\n service: \"osd\",\n spiffe: \"osd.com/osd\",\n secret: \"SMOPECXP-OS4P-USOG-X2II-3XMD1FQDR3IJX\",\n created: 1693003138,\n modified: 1693003138,\n icon: \"\",\n imageFile: \"\",\n email: \"wavecoders@gmail.com\"\n }\n\n requestForm = this.fb.group({\n path: this.fb.control<string>(\"ai/\"),\n headers: this.fb.array([]),\n adapter: [null],\n mapper: [null],\n retry: this.fb.group({\n times: [3],\n delay: [3],\n }),\n polling: [3],\n })\n\n AIType = 0\n\n sampleAdaptors = [\n { label: \"ClientInfo Basic\", value: ClientInfo.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n sampleMappers = [\n { label: \"Mapper Basic\", value: ClientInfoMapper.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n get retry() {\n return this.requestForm.get('retry')?.value\n }\n\n get headers(): FormArray {\n return this.requestForm.get('headers') as FormArray\n }\n\n get isValid() {\n this.requestForm.markAllAsTouched()\n return this.requestForm.valid\n }\n\n hasId = (arr: any[]) => {\n if (arr.length === 0) return false\n return !isNaN(arr[arr.length - 1])\n }\n\n props = (adapter: any) => {\n return (adapter) ? adapter() : null\n }\n\n // server = `http://sample-endpoint/as/authorization.oauth2`\n\n arrayObjectsToObjects = (arr: any[]) => {\n return Array.isArray(arr) ? arr.reduce((obj, item) => Object.assign(obj, { [item.key]: item.value }), {}) : {}\n }\n\n constructor() { }\n\n ngOnInit() {\n\n // const reqGet2 = ApiRequest.adapt({\n // server,\n // path: ['clients'],\n // headers: { authentication: \"Bearer <KEY>\" },\n // adapter: ClientInfo,\n // dataType: DataType.OBJECT,\n // // concurrent: false,\n // // polling: 3, //seconds\n // })\n\n // const req2 = [1024,1025,1026].map(item => {\n // return this.httpManagerService.getRequest<ClientInfo[]>(reqGet2, [item])\n // .pipe(\n // catchError(error => {\n // return throwError(() => new Error(error.error.message))\n // })\n // )\n // })\n\n // forkJoin(req2)\n // .subscribe(res => console.log(res))\n\n }\n\n addHeader() {\n const header = this.fb.group({\n key: ['', Validators.required],\n value: ['']\n })\n this.headers.push(header)\n }\n\n removeHeader(index: number) {\n this.headers.removeAt(index)\n }\n\n compileRequest() {\n\n const requestParams = this.requestForm.value\n\n requestParams.headers = this.arrayObjectsToObjects(\n requestParams.headers || []\n )\n\n const pathReq = (requestParams.path === \"\") ? [] : (requestParams.path || \"\").split(\"/\")\n\n if (!this.pollingState.checked) requestParams.polling = 0\n\n if (!this.failedState.checked) {\n requestParams.retry = { times: 0,delay: 0 }\n }\n\n const apiOptions = ApiRequest.adapt(requestParams)\n apiOptions.path = []\n 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 payload = {\n model: \"phi3:latest\",\n prompt: this.questionControl.value,\n stream: true,\n }\n\n responseMapper = (items) => items.map((word: any) => word.response).flat().join('')\n\n }\n\n this.requestParams.STREAM = apiOptions\n this.STREAM_AI$ = EMPTY\n this.STREAM_AI_error$.next('')\n\n this.STREAM_AI$ = this.httpManagerService.postRequest<any>(payload, apiOptions, apiPath).pipe(\n map(responseMapper),\n tap(() => this.questionControl.reset()),\n catchError(error => throwError(() => this.errorHandling(error, 'STREAM')))\n )\n\n }\n\n\n onStreamRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n reqParams.apiOptions.stream = true\n\n this.requestParams.GET = reqParams.apiOptions\n this.STREAM$ = this.httpManagerService.getRequest<ClientInfo[]>(reqParams.apiOptions, reqParams.path)\n .pipe(\n // tap((data) => console.log(\"API STREAM response\", data)),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'STREAM'))\n })\n )\n\n }\n\n onDownloadCompleted() {\n\n const message = \"Download Completed\"\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.SUCCESS,\n icon: 'sentiment_satisfied_alt',\n })\n\n this.toastMessage.toastMessage(display)\n }\n\n onDownloadFailed(err: string) {\n\n const message = \"Download Failed\"\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.ERROR,\n icon: 'warning',\n })\n\n this.toastMessage.toastMessage(display)\n }\n\n errorHandling(err: any, type: string) {\n if(type === 'GET') this.GET_error$.next(err.message)\n if(type === 'POST') this.POST_error$.next(err.message)\n if(type === 'PUT') this.PUT_error$.next(err.message)\n if(type === 'DELETE') this.DELETE_error$.next(err.message)\n if(type === 'STREAM') this.STREAM_error$.next(err.message)\n }\n\n onSelectAIType(type: number) {\n this.AIType = type\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <h2>\n HTTP Request Manager\n </h2>\n\n <div [formGroup]=\"requestForm\" style=\"margin-top: 2rem;\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Adapter (Model)</mat-label>\n <mat-select formControlName=\"adapter\" #adapterSelect>\n <mat-option>None</mat-option>\n @for (adapter of sampleAdaptors; track adapter) {\n <mat-option [value]=\"adapter.value\">\n {{adapter.label}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mapper (Model)</mat-label>\n <mat-select formControlName=\"mapper\" #mapperSelect>\n <mat-option>None</mat-option>\n @for (mapper of sampleMappers; track mapper) {\n <mat-option [value]=\"mapper.value\">\n {{mapper.label}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n @if (adapterSelect.value || mapperSelect.value) {\n <div style=\"display: flex; margin-bottom: 2rem;\">\n <div style=\"flex:1\" class=\"box\">\n <h3>Adapter (Incoming)</h3>\n @if (adapterSelect.value) {\n <div>\n {{ props(adapterSelect.value) | json }}\n </div>\n } @else {\n No Transformation\n }\n </div>\n <div style=\"flex:1\" class=\"box\">\n <h3>Mapper (Outgoing)</h3>\n @if (mapperSelect.value) {\n <div>\n {{ props(mapperSelect.value) | json }}\n </div>\n } @else {\n No Transformation\n }\n </div>\n </div>\n }\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>RestPath (/ delimited)</mat-label>\n <input matInput placeholder=\"clients/list\" formControlName=\"path\">\n </mat-form-field>\n </div>\n <div>\n <div formArrayName=\"headers\">\n @for (task of headers.controls; track task; let i = $index) {\n <div [formGroupName]=\"i\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Key</mat-label>\n <input matInput placeholder=\"authentication\" formControlName=\"key\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Value</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"value\">\n </mat-form-field>\n <div style=\"margin-top: .5rem;\">\n <button mat-icon-button (click)=\"removeHeader(i)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n <button mat-stroked-button (click)=\"addHeader()\" class=\"btn\">Add Header</button>\n </div>\n <div style=\"margin-top: 2rem; display: flex; flex-direction:column; gap: 1rem;\">\n <div>\n <mat-slide-toggle #failedState>Retry on Failed</mat-slide-toggle>\n @if (failedState.checked) {\n <div style=\"display: flex; gap: .5rem; margin-top: 1rem;\" formGroupName=\"retry\">\n <mat-form-field appearance=\"outline\">\n <mat-label>#of Times</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"times\" value=\"3\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Delay Until Next</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"delay\" value=\"3\">\n </mat-form-field>\n </div>\n }\n </div>\n <div>\n <mat-slide-toggle #pollingState>Polling</mat-slide-toggle>\n @if (pollingState.checked) {\n <div>\n <mat-form-field appearance=\"outline\" style=\"margin-top: 1rem\">\n <mat-label>#of Seconds</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"polling\" value=\"3\">\n </mat-form-field>\n </div>\n }\n </div>\n </div>\n </div>\n\n <div style=\"margin-bottom: 1rem; margin-top: 2rem;\">\n @if ((isPending$ | async)) {\n <mat-progress-bar mode=\"indeterminate\"\n ></mat-progress-bar>\n }\n @if (pollingState.checked && !(isPending$ | async)) {\n <mat-progress-bar mode=\"determinate\"\n [value]=\"(this.countdown$ | async)\"\n ></mat-progress-bar>\n }\n </div>\n\n <div style=\"margin-top: 1rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onGetRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if ((GET_error$ | async); as get_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ get_error }}</mat-error>\n </div>\n }\n\n @if ((GET$ | async); as dataRecord) {\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(GET$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n }\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">POST Request</h2>\n <div>\n <button mat-raised-button (click)=\"onCreateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if ((POST_error$ | async); as post_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ post_error }}</mat-error>\n </div>\n }\n\n @if ((POST$ | async); as dataRecord) {\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(POST$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n }\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">PUT Request</h2>\n <div>\n <button mat-raised-button (click)=\"onUpdateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if ((PUT_error$ | async); as put_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ put_error }}</mat-error>\n </div>\n }\n\n <h3>Include Record ID in the RestPath</h3>\n\n @if ((PUT$ | async); as dataRecord) {\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(PUT$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n }\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">DELETE Request</h2>\n <div>\n <button mat-raised-button (click)=\"onDeleteRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <h3>Include Record ID in the RestPath</h3>\n\n @if ((DELETE_error$ | async); as delete_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ delete_error }}</mat-error>\n </div>\n }\n\n @if ((DELETE$ | async); as dataRecord) {\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(DELETE$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n }\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">Streaming GET Request</h2>\n <div>\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\">\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$ | 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","import { Component, Inject, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { LocalStorageManagerService, SettingOptions, StorageOption, StorageType } from '../../services/local-storage-manager-service';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { BehaviorSubject, EMPTY, Observable, of } from 'rxjs';\nimport { ConfigOptions, LocalStorageOptions, UtilsService } from '../../services';\nimport { switchMap, tap, map } from 'rxjs/operators';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\n\n@Component({\n selector: 'app-local-storage-demo',\n templateUrl: './local-storage-demo.component.html',\n styleUrls: ['./local-storage-demo.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class LocalStorageDemoComponent implements OnInit {\n\n fb = inject(FormBuilder)\n utils = inject(UtilsService)\n\n type$ = new BehaviorSubject(StorageType.GLOBAL)\n get type() {\n return (this.typeControl.value) ? +this.typeControl.value : 0\n }\n\n typeControl = this.fb.control(StorageType.GLOBAL.toString())\n\n localStorageManagerService = inject(LocalStorageManagerService)\n\n settings$: Observable<any> = this.localStorageManagerService.settings$\n\n setting$ = (store: string) => this.localStorageManagerService.setting$(store)\n\n storageForm = this.fb.group({\n store: this.fb.control<string|null>(null),\n type: 'local',\n settingType: 'local',\n encrypted: false,\n data: this.fb.control<string>('', Validators.required),\n })\n\n newStoreForm = this.fb.group({\n name: this.fb.control<string|null>(null, Validators.required),\n storage: 'local',\n encrypted: false,\n data: this.fb.control<string>('', Validators.required),\n expiresIn: this.fb.control('0')\n })\n\n store$?: Observable<any>\n\n storeData$ = this.storageForm.get('store')?.valueChanges\n .pipe(\n switchMap((data: any) => {\n return data\n ? this.localStorageManagerService.store$(data.name)\n : of('')\n }),\n tap(data => {\n this.storageForm.get('data')?.patchValue(data, { emitEvent: false })\n })\n )\n\n expiresIn = (epoch: number) => this.utils.expiresIn(epoch)\n\n get isValid() {\n return this.newStoreForm.valid\n }\n\n get isValidData() {\n return this.storageForm.valid\n }\n\n isValidJSON = (str: string) => {\n try {\n JSON.parse(str)\n return true\n } catch (e) {\n return false\n }\n }\n\n displayedColumns: string[] = ['name', 'id', 'encrypted', 'expires', \"option\"];\n\n filterData = (values: SettingOptions[]) => {\n if(!values) return []\n return values.filter((item: any) => item.options.storage === +this.type)\n }\n\n data$?: Observable<any>\n\n store: any\n\n create = false\n\n storeProps?: LocalStorageOptions\n options?: SettingOptions\n\n constructor(@Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) { }\n\n ngOnInit() {\n\n this.storeProps = this.configOptions?.LocalStorageOptions\n this.options = this.storeProps?.options\n\n if(this.options?.storage) {\n this.typeControl.patchValue(this.options.storage.toString())\n this.typeControl.disable()\n } else {\n this.typeControl.enable()\n }\n\n if(this.options?.expiresIn) {\n this.newStoreForm.get('expiresIn')?.patchValue(this.options.expiresIn)\n this.newStoreForm.get('expiresIn')?.disable()\n } else {\n this.newStoreForm.get('expiresIn')?.enable()\n }\n\n if(this.options?.encrypted) {\n this.newStoreForm.get('encrypted')?.patchValue(this.options.encrypted)\n this.newStoreForm.get('encrypted')?.disable()\n } else {\n this.newStoreForm.get('encrypted')?.enable()\n }\n\n }\n\n onCreateStore() {\n\n if(!this.isValid) return\n\n const store = this.newStoreForm.value\n if(!store.name || store.name === '') return\n\n const options = { storage: this.type, encrypted: store.encrypted, expiresIn: store.expiresIn }\n\n this.localStorageManagerService.createStore({\n name: store.name,\n data: store.data,\n options: SettingOptions.adapt(options)\n })\n\n this.newStoreForm.reset()\n this.create = false\n }\n\n onUpdateStore(store: any) {\n\n if(!this.storageForm.valid) return\n\n const storeData = this.storageForm.value\n\n const data = JSON.parse(storeData.data || '')\n\n const type = (storeData.type === 'local') ? StorageType.GLOBAL : StorageType.SESSION\n\n this.localStorageManagerService.updateStore({\n name: store.name,\n data\n })\n\n }\n\n onSelectedRow(store: any) {\n this.store = store\n this.data$ = this.localStorageManagerService.store$(store.name).pipe(map(item => JSON.stringify(item)))\n this.create = false\n }\n\n onCreate() {\n this.onCancel()\n this.create = true\n }\n\n onDelete(store: StorageOption) {\n\n this.localStorageManagerService.deleteStore({\n name: store.name,\n })\n\n this.onCancel()\n }\n\n onCancel() {\n this.data$ = EMPTY\n this.store = null\n this.create = false\n }\n\n onUpdate(store: StorageOption, data: any) {\n\n this.localStorageManagerService.updateStore({\n name: store.name,\n data: JSON.parse(data)\n })\n\n this.onCancel()\n\n }\n\n onReset() {\n this.localStorageManagerService.resetStore()\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <div style=\"display: flex; gap: 1rem\">\n <h2 style=\"padding-top: .5rem; display: flex;\">\n <div style=\"padding-top: .5rem;\">Local Storage Manager</div>\n <div>\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon>info</mat-icon>\n </button>\n </div>\n </h2>\n <span style=\"flex:1\"></span>\n <div style=\"padding-top: .25rem;\">\n <mat-button-toggle-group name=\"storage\" [formControl]=\"typeControl\" (change)=\"onCancel()\">\n <mat-button-toggle value=\"0\">Local Storage</mat-button-toggle>\n <mat-button-toggle value=\"1\">Session Storage</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n <div style=\"margin-top: .25rem;\">\n <button mat-icon-button (click)=\"onCreate()\">\n <mat-icon>add</mat-icon>\n </button>\n </div>\n </div>\n\n <ng-container *ngIf=\"storeProps?.storageName || storeProps?.storageSettingsName\">\n <div style=\"display: flex; gap: .5rem; flex-direction: column; border: gray solid thin; background-color: whitesmoke; padding: 1rem;\"\n >\n <div style=\"display: flex;\">\n <div *ngIf=\"storeProps?.storageSettingsName\" style=\"flex:1\">\n Database: <b>{{ storeProps?.storageSettingsName }}</b>\n </div>\n <div *ngIf=\"storeProps?.storageName\" style=\"flex:1\">\n Data: <b>{{ storeProps?.storageName }}</b>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div style=\"margin-top: 2rem;\" [formGroup]=\"newStoreForm\" *ngIf=\"create; else LIST\">\n\n <h2>Create Store</h2>\n\n <div style=\"display: flex; gap: 1rem;\">\n <div style=\"flex:1\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Store Name</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"name\">\n </mat-form-field>\n </div>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Expires In...</mat-label>\n <mat-select formControlName=\"expiresIn\">\n <mat-option value=\"0\">None</mat-option>\n <mat-option value=\"30s\">30 Seconds</mat-option>\n <mat-option value=\"1mn\">1 Minute</mat-option>\n <mat-option value=\"1hr\">1 Hour</mat-option>\n <mat-option value=\"1d\">1 Day</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"margin-top: 1rem;\">\n <mat-slide-toggle formControlName=\"encrypted\">Encrypted</mat-slide-toggle>\n </div>\n </div>\n\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex: 1;\">\n <mat-label>Data (Must be an Object or Array of any)</mat-label>\n <textarea matInput placeholder=\"[]\" formControlName=\"data\" #json></textarea>\n </mat-form-field>\n </div>\n <mat-error *ngIf=\"!isValidJSON(json.value)\">Not Valid Data</mat-error>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onCreateStore()\" [disabled]=\"!(isValid && isValidJSON(json.value))\">\n Save Store\n </button>\n </div>\n\n </div>\n\n <ng-template #LIST>\n\n <div style=\"margin-top: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n{{ settings$ | async | json }}\n <div *ngIf=\"filterData(settings$ | async) as data\">\n <ng-container *ngIf=\"data.length > 0; else NO_DATA\">\n <table mat-table [dataSource]=\"data\">\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> Store </th>\n <td mat-cell *matCellDef=\"let element\" style=\"font-weight: bold; text-transform: uppercase;\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"encrypted\">\n <th mat-header-cell *matHeaderCellDef style=\"text-align: center;\"> Encrypted </th>\n <td mat-cell *matCellDef=\"let element\" style=\"text-align: center;\">\n <ng-container *ngIf=\"element.options.encrypted; else NO\">YES</ng-container>\n <ng-template #NO><span style=\"color:gray\">NO</span></ng-template>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"expires\">\n <th mat-header-cell *matHeaderCellDef style=\"text-align: center;\"> Expires </th>\n <td mat-cell *matCellDef=\"let element\" style=\"text-align: center;\">\n <ng-container *ngIf=\"element.options.expires !== 0; else NO_DATA\">\n {{expiresIn(element.options.expires)}}\n </ng-container>\n <ng-template #NO_DATA>\n ∞\n </ng-template>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"option\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell *matCellDef=\"let element\" style=\"padding-right: 0;\">\n <div style=\"display: flex;justify-content: flex-end;\">\n <button mat-icon-button color=\"warn\" (click)=\"onDelete(element); $event.stopPropagation()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" (click)=\"onSelectedRow(row)\"></tr>\n </table>\n </ng-container>\n\n <ng-template #NO_DATA>\n <h3 style=\"margin-top: 1rem;\">No Data</h3>\n </ng-template>\n\n <div *ngIf=\"(data$ | async) as data\" style=\"margin-top: 2rem;\">\n <div style=\"margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <h3>STORE: <span style=\"font-weight: bold;\">{{ store.name | uppercase }}</span></h3>\n <h3>SETTINGS: {{ setting$(store.name) | async | json }}</h3>\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex: 1;\">\n <mat-label>Data (Must be an Object or Array of any)</mat-label>\n <textarea matInput placeholder=\"[]\" #json [value]=\"data\"></textarea>\n </mat-form-field>\n </div>\n <mat-error *ngIf=\"!isValidJSON(json.value)\">Not Valid Data</mat-error>\n\n <div style=\"display: flex; gap: .5rem;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onCancel()\">Cancel</button>\n <button mat-stroked-button (click)=\"onUpdate(store, json.value)\" [disabled]=\"!(isValidJSON(json.value))\">Update</button>\n </div>\n </div>\n </div>\n\n </ng-template>\n\n <div style=\"margin-top: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <button mat-stroked-button (click)=\"onReset()\">Delete All Stores</button>\n </div>\n\n</div>\n\n\n<mat-menu #menu=\"matMenu\">\n <div style=\"padding: 1rem;\">\n <p>Please note that the LocalStorage (encryption) and management of data is dependant on initializing the APP_ID</p>\n <p>Must provide a value for <b>APP_ID</b> in AppModule->Providers</p>\n <mat-divider></mat-divider>\n <div style=\"font-size: smaller; margin-top: .5rem;\">\n <p>Example: UUID (self.crypto.randomUUID() to generate)</p>\n <div style=\"background-color: whitesmoke; padding: 1rem;\">\n &#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","import { Component, OnInit, inject, OnDestroy } from '@angular/core';\nimport { Subject, Observable, ReplaySubject } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { DataSource } from '@angular/cdk/collections';\n\nimport { TableSchemaDef } from '../../services/database-manager-service/models/table-schema';\nimport { DatabaseManagerService } from '../../services/database-manager-service';\n\nexport interface TableRecord {\n id: number;\n last_name: string;\n age: number;\n amount: number;\n}\n\n@Component({\n selector: 'app-database-data-demo',\n templateUrl: './database-data-demo.component.html',\n styleUrls: ['./database-data-demo.component.scss'],\n standalone: false\n})\nexport class DatabaseDataDemoComponent implements OnInit, OnDestroy {\n\n db = inject(DatabaseManagerService)\n private destroy$ = new Subject<void>();\n\n dataToDisplay: TableRecord[] = [];\n dataSource = new DatabaseDataSource(this.dataToDisplay);\n displayedColumns: string[] = ['id', 'last_name', 'age', 'amount'];\n\n names = ['Smith', 'Johnson', 'Williams', 'Brown', 'Jones', 'Garcia', 'Miller', 'Davis'];\n\n constructor() { }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n addData() {\n\n const newRecord: TableRecord = {\n id: Math.max(...this.dataToDisplay.map(r => r.id), 0) + 1,\n last_name: this.names[Math.floor(Math.random() * this.names.length)],\n age: Math.floor(Math.random() * 80) + 18,\n amount: Math.floor(Math.random() * 1000)\n };\n\n this.dataToDisplay = [...this.dataToDisplay, newRecord];\n this.db.createTableRecord('sample_table', newRecord).subscribe(\n () => this.refreshData()\n );\n\n }\n\n removeData() {\n if (this.dataToDisplay.length > 0) {\n const removedRecord = this.dataToDisplay[this.dataToDisplay.length - 1];\n this.dataToDisplay = this.dataToDisplay.slice(0, -1);\n this.db.deleteTableRecord('sample_table', removedRecord.id).subscribe(\n () => this.refreshData()\n );\n }\n }\n\n updateData() {\n\n if (this.dataToDisplay.length === 0) return;\n\n const randomIndex = Math.floor(Math.random() * this.dataToDisplay.length);\n const recordToUpdate = this.dataToDisplay[randomIndex];\n\n const updatedRecord: TableRecord = {\n ...recordToUpdate,\n last_name: this.names[Math.floor(Math.random() * this.names.length)],\n age: Math.floor(Math.random() * 80) + 18,\n amount: Math.floor(Math.random() * 1000)\n };\n\n this.dataToDisplay = this.dataToDisplay.map((r, index) =>\n index === randomIndex ? updatedRecord : r\n );\n\n this.db.updateTableRecord('sample_table', updatedRecord).subscribe(\n () => this.refreshData()\n );\n\n }\n\n clearAllData() {\n if (this.dataToDisplay.length === 0) return;\n\n const idsToDelete = this.dataToDisplay.map(r => r.id);\n this.dataToDisplay = [];\n\n this.db.deleteTableRecords('sample_table', idsToDelete).subscribe(\n () => this.refreshData()\n );\n }\n\n private refreshData() {\n this.db.getTableRecords('sample_table').subscribe(\n (records: any) => {\n this.dataToDisplay = records || [];\n this.dataSource.setData(this.dataToDisplay);\n }\n );\n }\n\n ngOnInit() {\n\n const tableDef = TableSchemaDef.adapt({\n table: 'sample_table',\n schema: '++id, last_name, age, amount'\n });\n\n this.db.createDatabaseTable(tableDef).subscribe(() => {\n console.log('Database Table Initialized');\n\n // hasTable\n this.db.hasDatabaseTable('sample_table')\n .subscribe(data => console.log('hasDatabaseTable:', data))\n\n // Tables\n this.db.getDatabaseTables()\n .subscribe(data => console.log('getDatabaseTables:', data))\n\n // getTable\n this.db.getDatabaseTable('sample_table')\n .subscribe(data => console.log('getDatabaseTable:', data))\n\n // Table Schema\n this.db.getDatabaseTableSchema('sample_table')\n .subscribe(data => console.log('getDatabaseTableSchema:', data))\n\n // Insert Table Records\n const records = [\n { id: 1, age: 12, last_name: 'Bonifacio', amount: 80 },\n { id: 2, age: 15, last_name: 'Johns', amount: 700 },\n { id: 3, age: 22, last_name: 'Kims', amount: 234 },\n { id: 4, age: 45, last_name: 'Harrys', amount: 1200 },\n ]\n\n this.db.createTableRecords('sample_table', records).subscribe(() => {\n this.refreshData();\n });\n });\n }\n\n createTable(tableDef: TableSchemaDef) {\n return this.db.createDatabaseTable(tableDef)\n }\n\n // CRUD\n findTableRecords(table: string, column: string, value: any) {\n return this.db.findTableRecords(table, column, value)\n .pipe(\n tap((data: any) => console.log('findTableRecords:', data))\n )\n }\n\n findTableRecord(table: string, column: string, value: any) {\n return this.db.findTableRecord(table, column, value)\n .pipe(\n tap((data: any) => console.log('findTableRecord:', data))\n )\n }\n\n getTableRecords(table: string) {\n return this.db.getTableRecords(table)\n .pipe(\n tap((data: any) => console.log('getTableRecords:', data))\n )\n }\n\n getTableRecord(table: string, id: number) {\n return this.db.getTableRecord(table, id)\n .pipe(\n tap((data: any) => console.log('getTableRecord:', data))\n )\n }\n\n createTableRecord<T>(table: string, record: T) {\n return this.db.createTableRecord(table, record)\n .pipe(\n tap((data: any) => console.log('createTableRecord:', data))\n )\n }\n\n updateTableRecord<T>(table: string, record: T) {\n return this.db.updateTableRecord(table, record)\n .pipe(\n tap((data: any) => console.log('updateTableRecord:', data))\n )\n }\n\n deleteTableRecord<T>(table: string, id: number) {\n return this.db.deleteTableRecord(table, id)\n .pipe(\n tap((data: any) => console.log('deleteTableRecord:', data))\n )\n }\n\n}\n\nclass DatabaseDataSource extends DataSource<TableRecord> {\n private _dataStream = new ReplaySubject<TableRecord[]>();\n\n constructor(initialData: TableRecord[]) {\n super();\n this.setData(initialData);\n }\n\n connect(): Observable<TableRecord[]> {\n return this._dataStream;\n }\n\n disconnect() {}\n\n setData(data: TableRecord[]) {\n this._dataStream.next(data);\n }\n\n}\n","<div style=\"padding: 2rem;\">\n\n <h2>\n Database Manager Service Demo\n </h2>\n\n <div style=\"margin-bottom: 1rem; display: flex; gap: 1rem;\">\n <button mat-stroked-button\n color=\"primary\"\n (click)=\"clearAllData()\"\n >\n Clear Data\n </button>\n <button mat-stroked-button\n color=\"primary\"\n (click)=\"updateData()\"\n >\n Update Data\n </button>\n <div style=\"flex:1\"></div>\n <button\n mat-stroked-button\n color=\"warn\"\n [disabled]=\"!dataToDisplay.length\"\n (click)=\"removeData()\"\n >\n Remove Data\n </button>\n <button mat-stroked-button\n color=\"primary\"\n (click)=\"addData()\"\n >\n Add Data\n </button>\n </div>\n\n <div class=\"table-container\">\n <table mat-table [dataSource]=\"dataSource\">\n\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef>ID</th>\n <td mat-cell *matCellDef=\"let element\">{{element.id}}</td>\n </ng-container>\n\n <ng-container matColumnDef=\"last_name\">\n <th mat-header-cell *matHeaderCellDef>Last Name</th>\n <td mat-cell *matCellDef=\"let element\">{{element.last_name}}</td>\n </ng-container>\n\n <ng-container matColumnDef=\"age\">\n <th mat-header-cell *matHeaderCellDef>Age</th>\n <td mat-cell *matCellDef=\"let element\">{{element.age}}</td>\n </ng-container>\n\n <ng-container matColumnDef=\"amount\">\n <th mat-header-cell *matHeaderCellDef>Amount</th>\n <td mat-cell *matCellDef=\"let element\">{{element.amount | currency}}</td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n </div>\n\n</div>\n","import { Component, Inject, Input, OnInit } from '@angular/core';\n\nimport { CONFIG_SETTINGS_TOKEN } from '../models/config-token.model';\nimport { ConfigOptions } from '../models/config-options.model';\nimport { UserData } from './request-manager-ws-demo/models/user-data.model';\n\n@Component({\n selector: 'app-http-request-services-demo',\n templateUrl: './http-request-services-demo.component.html',\n styleUrls: ['./http-request-services-demo.component.scss'],\n standalone: false\n})\nexport class HttpRequestServicesDemoComponent implements OnInit {\n\n @Input() wsServer = 'ws:'\n @Input() jwtToken = ''\n @Input() server = 'http:'\n @Input() user?: UserData\n @Input() path: string[] = ['ai','tests'];\n @Input() wsChannel: string = '';\n\n @Input() adapter?: Function\n @Input() mapper?: Function\n\n requestTypes = [\n { name: \"Http Service\", value: 'http_service' },\n // { name: \"Http Signals Service\", value: 'http_signals_service', new: true },\n { name: \"Http State Service\", value: 'http_state_service' },\n { name: \"Http State Service - Websockets\", value: 'http_state_service_ws', new: false },\n { name: \"Database Service\", value: 'database_service', divider: true, disabled: false },\n { name: \"Local Storage Service\", value: 'local_storage_service' },\n // { name: \"Local Signals Storage Service\", value: 'local_storage_signals_service', new: true },\n { name: \"Store State Manager Service\", value: 'store_state_manager', new: true },\n ]\n\n selectedService = this.requestTypes[5].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 ('http_service') {\n <p>\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-manager-demo\n [server]=\"server\"\n [adapter]=\"adapter\"\n [mapper]=\"mapper\"\n ></app-request-manager-demo>\n </p>\n }\n <!-- <p *ngSwitchCase=\"'http_signals_service'\">\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-signals-manager-demo></app-request-signals-manager-demo>\n </p> -->\n @case ('http_state_service') {\n <p>\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-manager-state-demo\n [server]=\"server\"\n [adapter]=\"adapter\"\n [mapper]=\"mapper\"\n ></app-request-manager-state-demo>\n </p>\n }\n @case ('http_state_service_ws') {\n <p>\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-manager-ws-demo\n [server]=\"server\"\n [wsServer]=\"wsServer\"\n [jwtToken]=\"jwtToken\"\n [user]=\"user\"\n [wsChannel]=\"wsChannel\"\n [path]=\"path\"\n ></app-request-manager-ws-demo>\n </p>\n }\n @case ('database_service') {\n <p>\n <app-database-data-demo></app-database-data-demo>\n </p>\n }\n @case ('local_storage_service') {\n <p>\n <ng-container *ngTemplateOutlet=\"LOCAL_OPTIONS\"></ng-container>\n <app-local-storage-demo></app-local-storage-demo>\n </p>\n }\n <!-- <p *ngSwitchCase=\"'local_storage_signals_service'\">\n <ng-container *ngTemplateOutlet=\"LOCAL_OPTIONS\"></ng-container>\n <app-local-storage-signals-demo></app-local-storage-signals-demo>\n</p> -->\n@case ('store_state_manager') {\n <p>\n <ng-container *ngTemplateOutlet=\"LOCAL_OPTIONS\"></ng-container>\n <app-store-state-manager-demo></app-store-state-manager-demo>\n </p>\n}\n@default {\n <p>\n Other\n </p>\n}\n}\n</span>\n\n<ng-template #HTTP_OPTIONS>\n @if (injectionOptions?.httpRequestOptions) {\n <div class=\"box\">\n <h3 style=\"font-weight: bold;\">Injection Token Detected - HTTP Options</h3>\n {{ injectionOptions?.httpRequestOptions| json }}\n </div>\n }\n</ng-template>\n\n<ng-template #LOCAL_OPTIONS>\n @if (injectionOptions?.LocalStorageOptions) {\n <ng-container class=\"box\">\n <div class=\"box\">\n <h3 style=\"font-weight: bold;\">Injection Token Detected - LocalStorage Options</h3>\n {{ injectionOptions?.LocalStorageOptions| json }}\n </div>\n </ng-container>\n }\n</ng-template>\n\n\n","/*\n * Public API Surface of http-request-manager\n */\n\nexport * from './lib/index';\nexport * from './lib/http-request-manager.module';\n\nexport * from './lib/http-request-services-demo/http-request-services-demo.component';\n\nexport * from './lib/http-request-services-demo/database-data-demo/database-data-demo.component';\nexport * from './lib/http-request-services-demo/local-storage-demo/local-storage-demo.component';\nexport * from './lib/http-request-services-demo/request-manager-demo/request-manager-demo.component';\nexport * from './lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["take","i1.StateStorageOptions","catchError","i1","i3","i1.DownloadFileComponent","i2","i4","i5","i6","i7","i8","i9","i11","i12","i13","switchMap","map","startWith","distinctUntilChanged","filter","takeUntil","tap","i10","i4.WsDataControlComponent","i5.WsMessagingComponent","i6.WsNotificationsComponent","i7.WsAiMessagingComponent","ClientInfo","AIPrompt","ClientInfoMapper","i13.FileDownloaderComponent","i14","i6.RequestManagerStateDemoComponent","i7.RequestManagerDemoComponent","i8.LocalStorageDemoComponent","i9.RequestManagerWsDemoComponent","i10.StoreStateManagerDemoComponent","i11.DatabaseDataDemoComponent"],"mappings":"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"}
1
+ {"version":3,"file":"http-request-manager.mjs","sources":["../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/models/storage-type.enum.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/models/setting-options.model.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/models/storage-option.model.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/models/global-store-options.model.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/models/storage-data.model.ts","../../../projects/http-request-manager/src/lib/services/utils/utils.service.ts","../../../projects/http-request-manager/src/lib/services/utils/encryption/random.ts","../../../projects/http-request-manager/src/lib/services/utils/app.service.ts","../../../projects/http-request-manager/src/lib/services/utils/encryption/symmetrical-encryption.service.ts","../../../projects/http-request-manager/src/lib/services/utils/encryption/encryption-test.service.ts","../../../projects/http-request-manager/src/lib/models/config-token.model.ts","../../../projects/http-request-manager/src/lib/services/utils/headers.service.ts","../../../projects/http-request-manager/src/lib/services/utils/path-query.service.ts","../../../projects/http-request-manager/src/lib/services/utils/encryption/asymmetrical-encryption.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/rxjs-operators/request-streaming.ts","../../../projects/http-request-manager/src/lib/services/ws-manager-service/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/services/websocket.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/request.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/rxjs-operators/countdown.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/rxjs-operators/delay-retry.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/rxjs-operators/request-polling.ts","../../../projects/http-request-manager/src/lib/models/database-storage.model.ts","../../../projects/http-request-manager/src/lib/models/retry-options.model.ts","../../../projects/http-request-manager/src/lib/models/data-type.enum.ts","../../../projects/http-request-manager/src/lib/models/config-http-options.model.ts","../../../projects/http-request-manager/src/lib/models/config-local-storage-options.model.ts","../../../projects/http-request-manager/src/lib/models/config-options.model.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/http-manager.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/request-signals.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/http-manager-signals.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/models/api-request.model.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/models/request-options.model.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/models/ws-options.model.ts","../../../projects/http-request-manager/src/lib/services/utils/object-merger.service.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/local-storage-manager.service.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.ts","../../../projects/http-request-manager/src/lib/services/database-manager-service/models/table-schema.ts","../../../projects/http-request-manager/src/lib/services/database-manager-service/db.storage.service.ts","../../../projects/http-request-manager/src/lib/services/database-manager-service/database.manager.service.ts","../../../projects/http-request-manager/src/lib/services/ws-manager-service/models/channel-message.model.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/http-manager-state.store.ts","../../../projects/http-request-manager/src/lib/services/store-state-manager-service/models/state-storage-options.model.ts","../../../projects/http-request-manager/src/lib/services/store-state-manager-service/store-state-manager.service.ts","../../../projects/http-request-manager/src/lib/services/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/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-manager-ws-demo/models/oidc-client.model.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/services/state-service-demo.service.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/services/message-service-demo.service.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/services/notification-service-demo.service.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/models/user-data.model.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/services/state-data-request.service.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-info.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-mapper-client-info.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-ai-prompt.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/store-state-manager-demo/models/settings.model.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/store-state-manager-demo/services/settings-state.service.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-manager.module.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/http-request-services-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/http-request-services-demo.component.html","../../../projects/http-request-manager/src/public-api.ts","../../../projects/http-request-manager/src/http-request-manager.ts"],"sourcesContent":["export enum StorageType {\n GLOBAL,\n SESSION,\n DB\n}\n","import { StorageType } from \"./storage-type.enum\"\n\nexport interface SettingOptionsInterface {\n storage?: StorageType\n expires?: number\n expiresIn?: string\n encrypted?: boolean\n}\n\nexport class SettingOptions implements SettingOptionsInterface {\n\n constructor(\n public storage?: StorageType,\n public expires?: number,\n public expiresIn?: string,\n public encrypted?: boolean,\n ) {}\n\n static adapt(item?: any): SettingOptions {\n\n const storage = (typeof item?.storage !== 'undefined' && item?.storage !== null) ? Number(item.storage) : StorageType.GLOBAL;\n const expires = (typeof item?.expires !== 'undefined' && item?.expires !== null) ? Number(item.expires) : 0;\n const expiresIn = (typeof item?.expiresIn !== 'undefined' && item?.expiresIn !== null) ? item.expiresIn : '';\n const encrypted = (typeof item?.encrypted !== 'undefined' && item?.encrypted !== null) ? Boolean(item.encrypted) : false;\n\n return new SettingOptions(\n storage,\n expires,\n expiresIn,\n encrypted,\n )\n\n }\n\n}\n","import { SettingOptions } from \"./setting-options.model\"\n\nexport interface StorageOptionInterface {\n id?: string\n name: string\n data?: any\n options?: SettingOptions\n}\n\nexport class StorageOption implements StorageOptionInterface {\n\n constructor(\n public id?: string,\n public name: string = 'untitled',\n public data?: any,\n public options?: SettingOptions,\n ) {}\n\n static adapt(item?: any): StorageOption {\n\n return new StorageOption(\n (item?.id) ? item.id : crypto.randomUUID(),\n (item?.name) ? item.name.toLowerCase() : 'untitled',\n item?.data,\n (item?.options) ? SettingOptions.adapt(item.options) : SettingOptions.adapt(),\n )\n\n }\n\n}\n\n\n","import { StorageOption } from \"./storage-option.model\"\n\nexport interface GlobalStoreOptionsInterface {\n encryption?: boolean\n expiresIn?: string\n expires?: number\n stores: StorageOption[]|null\n}\n\nexport class GlobalStoreOptions implements GlobalStoreOptionsInterface {\n\n constructor(\n public encryption = false,\n public expiresIn?: string,\n public expires?: number,\n public stores: StorageOption[]|null = [],\n ) {}\n\n static adapt(item?: any): GlobalStoreOptions {\n\n return new GlobalStoreOptions(\n (item?.encryption) ? item.encryption : false,\n (item?.expiresIn) ? item.expiresIn : '',\n (item?.expires) ? item.expires : 0,\n (item?.stores) ? item.stores.map((item: any) => StorageOption.adapt(item)) : []\n )\n\n }\n\n}\n","export interface StorageDataInterface {\n id?: string\n data?: any\n}\n\nexport class StorageData implements StorageDataInterface {\n\n constructor(\n public id?: string,\n public data?: any,\n ) {}\n\n static adapt(item?: any): StorageData {\n\n return new StorageData(\n (item?.id) ? item.id : crypto.randomUUID(),\n (item?.data) ? item.data : null\n )\n\n }\n\n}\n\n\n","\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UtilsService {\n\n http = inject(HttpClient)\n\n constructor() { }\n\n isString(x: string | number) {\n return Object.prototype.toString.call(x) === '[object String]'\n }\n\n isObject(obj: any) {\n return Object.prototype.toString.call(obj) === '[object Object]'\n }\n\n JSONToString(value: any) {\n return (this.isObject(value)) ? JSON.stringify(value) : value\n }\n\n stringToJSON(value: string) {\n return (this.isJSON(value)) ? JSON.parse(value) : value\n }\n\n isJSON(str: any) {\n try {\n JSON.parse(str)\n } catch (e) {\n return false\n }\n return true\n }\n\n getValueByProp(obj: any, prop: string) {\n if(typeof obj === 'undefined') return false\n return obj[prop]\n }\n\n objectsEqual(x: any, y: any): boolean {\n\n const ok = Object.keys, tx = typeof x, ty = typeof y\n\n return x && y && tx === 'object' && tx === ty ? (\n ok(x).length === ok(y).length &&\n ok(x).every((key: any) => this.objectsEqual(x[key], y[key]))\n ) : (x === y)\n\n }\n\n getJSON(file: string) {\n return this.http.get(`assets/data/${file}`)\n }\n\n get today() {\n return new Date().getMilliseconds() / 1000\n }\n\n base32ToHex(base32: string): string {\n\n const base32chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\"\n\n const charToValue = (char: string) => base32chars.indexOf(char.toUpperCase())\n\n let bits = ''\n let hex = ''\n\n for (let i = 0; i < base32.length; i++) {\n const val = charToValue(base32.charAt(i))\n bits += val.toString(2).padStart(5, '0')\n }\n\n for (let i = 0; i + 4 <= bits.length; i += 4) {\n const chunk = bits.substr(i, 4)\n hex += parseInt(chunk, 2).toString(16)\n }\n\n return hex.toUpperCase()\n }\n\n binaryToHex(binary: string): string {\n let hex = '';\n for (let i = 0; i < binary.length; i += 8) {\n const byte = binary.substr(i, 8);\n const decimal = parseInt(byte, 2);\n hex += decimal.toString(16).padStart(2, '0');\n }\n return hex.padStart(32, '0').substr(0, 32);\n }\n\n // y = years, m = months, w = weeks, d = days, hr = hours, mn = minutes else seconds\n // returns epoch time corresponding to the expiry type\n expires(str?: string) {\n\n if(!str) return undefined\n\n const match = str.match(/[^0-9]+$/)\n\n const type = (match) ? str.slice(-match[0].length) : 0\n\n const now = Math.floor(new Date().getTime() / 1000)\n\n let value = 0;\n\n switch (type) {\n case\n 'y':\n const years = parseInt(str.slice(0, -1))\n value = now + (years * 31556926)\n break;\n case\n 'm':\n const months = parseInt(str.slice(0, -1))\n value = now + (months * 2629743)\n break;\n case\n 'w':\n const weeks = parseInt(str.slice(0, -1))\n value = now + (weeks * 604800)\n break;\n case\n 'd':\n const days = parseInt(str.slice(0, -1))\n value = now + (days * 86400)\n break;\n case\n 'hr':\n const hrs = parseInt(str.slice(0, -2))\n value = now + (hrs * 3600)\n break;\n case\n 'mn':\n const min = parseInt(str.slice(0, -2))\n value = now + (min * 60)\n break;\n default: //seconds\n const sec = parseInt(str.slice(0, -1))\n value = now + sec\n break;\n }\n return value;\n }\n\n hasExpired(expiryDate: number): boolean {\n if (!expiryDate || expiryDate === 0) return false\n const currentTime = Math.floor(new Date().getTime() / 1000)\n return expiryDate < currentTime\n }\n\n hasExpiry(setting: any) {\n return (setting?.expires) ? true : false\n }\n\n expiresIn(expiryDate: number) {\n\n if (!expiryDate) return;\n\n const now = Math.floor(new Date().getTime() / 1000);\n let diff = expiryDate - now;\n\n if (diff <= 0) return \"Expired\";\n\n const units = [\n { label: 'y', s: 31536000 },\n { label: 'm', s: 2592000 },\n { label: 'w', s: 604800 },\n { label: 'd', s: 86400 },\n { label: 'h', s: 3600 },\n { label: 'min', s: 60 },\n { label: 's', s: 1 },\n ];\n\n let result = [];\n\n for (const unit of units) {\n if (diff >= unit.s) {\n const value = Math.floor(diff / unit.s);\n diff %= unit.s;\n result.push(`${value}${unit.label}`);\n }\n }\n\n return result.join(', ');\n }\n\n lc = (str: string) => str.toLowerCase().replace(/[^\\w\\s]/g, '').replace(/\\s+/g, '_')\n\n}\n","export const Random = () => {\n const typedArray = new Uint8Array(1)\n const randomValue = crypto.getRandomValues(typedArray)[0]\n const randomFloat = randomValue / Math.pow(2, 8)\n return randomFloat\n}\n\nexport const RandomNumber = (min: number, max: number) => {\n return Math.floor(Random() * max) + min\n}\n\nexport const RandomNumbers = (min: number, max: number, length: number) => {\n const numbers: number[] = []\n for (let i = 0; i < length; i++) numbers.push(Math.floor(Random() * max) + min)\n return numbers\n}\n\nexport const RandomNumbersUnique = (min: number, max: number, length: number) => {\n let count = 0;\n\n // Adjust the length if it exceeds the number of unique numbers possible in the range\n if (length > (max - min + 1)) {\n console.error('error encountered');\n length = max - min + 1;\n }\n\n console.log('length', length);\n const numbers: number[] = [];\n const maxAttempts = length * 100 ; // Safeguard to prevent infinite loops\n\n while (numbers.length < length && count < maxAttempts) {\n\n const num = Math.floor(Random() * max) + min;\n\n if (!numbers.includes(num)) {\n numbers.push(num);\n }\n }\n\n if (count >= maxAttempts) {\n throw new Error('Maximum attempts exceeded while generating unique numbers');\n }\n\n return numbers;\n};\n\nexport const RandomStr = () => {\n\n const typedArray = new Uint8Array(8)\n const array = new Uint32Array(1)\n crypto.getRandomValues(array)\n return array[0].toString(36)\n\n}\n\nexport const RandomSignature = () => {\n\n const typedArray = new Uint8Array(8)\n const array = new Uint32Array(1)\n crypto.getRandomValues(array)\n return array[0]\n\n}\n\nexport const UUID = () => {\n return self.crypto.randomUUID()\n}\n\n/**\n * Generate a UUID string (legacy format)\n */\nexport const UUID_STR = (): string => {\n const s4 = () => {\n return Math.floor((1 + Random()) * 0x10000)\n .toString(16)\n .substring(1);\n };\n return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\n};\n\n\n","import { APP_ID, Inject, Injectable } from '@angular/core';\n\n// Must provide a value for APP_ID in AppModule->Providers\n// providers: [\n// {\n// provide: APP_ID,\n// useValue: \"056991ac-3537-43ab-b5b9-83edf6554eff\",\n// },\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AppService {\n\n appID: string\n\n constructor(@Inject(APP_ID) private id: string) {\n this.appID = this.id\n }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport * as CryptoJS from 'crypto-js';\n\nimport { RandomSignature } from './random';\nimport { AppService } from '../app.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SymmetricalEncryptionService {\n\n appID: string; // APP SERVICE TO MANAGER ENCRYPTION KEY\n\n private appService = inject(AppService)\n\n constructor() {\n // TODO: The APP ID is not a string, it is a function\n this.appID = (this.appService.appID) ? this.appService.appID : ''\n if(this.appID === '') console.warn('No App Key has been define')\n }\n\n generateCipherKey() {\n return (RandomSignature().toString() + RandomSignature().toString()).substring(0, 8)\n }\n\n encrypt(str: any, key = this.appID) {\n\n if(!str || key === '') return ''\n\n let _key = CryptoJS.enc.Utf8.parse(key)\n let _iv = CryptoJS.enc.Utf8.parse(key)\n\n try {\n\n const encrypted = CryptoJS.AES.encrypt(\n JSON.stringify(str), _key, {\n keySize: 16,\n iv: _iv,\n mode: CryptoJS.mode.ECB,\n padding: CryptoJS.pad.Pkcs7\n });\n\n return encrypted.toString()\n\n } catch(error: any) {\n console.log(error)\n }\n\n return\n }\n\n decrypt(str: string, key = this.appID) {\n\n if(!str || key === '') return\n\n let _key = CryptoJS.enc.Utf8.parse(key)\n let _iv = CryptoJS.enc.Utf8.parse(key)\n\n try {\n\n return CryptoJS.AES.decrypt(\n str, _key, {\n keySize: 16,\n iv: _iv,\n mode: CryptoJS.mode.ECB,\n padding: CryptoJS.pad.Pkcs7\n }).toString(CryptoJS.enc.Utf8);\n\n } catch(error: any) {\n console.log(error)\n }\n\n return\n }\n\n createSignature(url: string, len = 16) {\n const sig = CryptoJS.SHA256(url).toString(CryptoJS.enc.Hex)\n return sig.substring(0, len).toUpperCase()\n }\n\n normalizeURL(url: string) {\n const normalizedURL = url.replace(/(https?:\\/\\/)?(www\\.)?/, '').replace(/\\/+$/, '');\n return normalizedURL;\n }\n\n generateSignature(url: string) {\n const normalizedURL = this.normalizeURL(url)\n const hash = CryptoJS.SHA256(normalizedURL)\n const signature = hash.toString(CryptoJS.enc.Hex)\n return signature;\n }\n\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EncryptionTestService {\n\n constructor() { }\n\n private isBase64(str: string): boolean {\n const base64Pattern = /^(?:[A-Z0-9+/]{4})*(?:[A-Z0-9+/]{2}==|[A-Z0-9+/]{3}=)?$/i;\n return base64Pattern.test(str);\n }\n\n private isHexadecimal(str: string): boolean {\n const hexPattern = /^[0-9a-fA-F]+$/;\n return hexPattern.test(str) && (str.length % 2 === 0);\n }\n\n private hasHighEntropy(str: string): boolean {\n const uniqueChars = new Set(str).size;\n return uniqueChars > str.length * 0.6;\n }\n\n isEncrypted(str: string): boolean {\n\n if (typeof str !== 'string') {\n return false;\n }\n\n if (this.isBase64(str) || this.isHexadecimal(str)) {\n return true;\n }\n\n return this.hasHighEntropy(str);\n\n }\n\n}\n","import { InjectionToken } from \"@angular/core\";\nimport { ConfigOptions } from \"./config-options.model\";\n\n/**\n * An injection token that provides the configuration settings for the application.\n * This token can be used to inject the `ConfigSettings` instance into components or services\n * that require access to the application configuration.\n */\nexport const CONFIG_SETTINGS_TOKEN = new InjectionToken<ConfigOptions>('http.config');\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HeadersService {\n\n headers = {}\n\n generateHeaders(headers?: Record<string, string>): { headers: HttpHeaders } {\n\n const allHeaders = headers ? { ...this.headers, ...headers } : {}\n return { headers: new HttpHeaders(allHeaders) }\n\n }\n\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PathQueryService {\n\n buildAPIPath(server: string|string[], params?: any[]|any) {\n\n server = (Array.isArray(server)) ? server.join('/') : server\n\n const pathObjects = (params) ? params.filter((path:any) => (!this.isObject(path))) : []\n const queryObjects = (params) ? params.filter((path:any) => (this.isObject(path))) : []\n\n const query = this.removeEmptyParams(queryObjects.reduce((r: any, c: any) => {\n Object.entries(c).forEach(([key, value]) => {\n r[key] = Array.isArray(value) ? value.join(',') : value\n })\n return r\n }, {}))\n\n let path = this.buildRestPath(server, pathObjects)\n\n return(Object.keys(query).length > 0) ? path + '?' + this.buildQueryPath(query) : path\n\n }\n\n private buildRestPath(server: string, params: any[]): string {\n server = (server) ? server : ''\n server = (server.charAt(0) === '/') ? server.substring(1) : server\n return this.cleanUrlPath(server +'/'+ params.join('/'))\n }\n\n private buildQueryPath(params: any): string {\n\n const searchParams = new URLSearchParams()\n\n for (const key in params) {\n\n if (Array.isArray(params[key])) {\n params[key].forEach((value: any) => searchParams.append(key, value));\n } else {\n searchParams.append(key, params[key]);\n }\n\n }\n\n return searchParams.toString()\n\n }\n\n private cleanUrlPath(str: string) {\n return str.replace(/([^:]\\/)\\/+/g, \"$1\").replace(/\\/$/,'')\n }\n\n private isObject(val: any): boolean {\n return (val === null) ? false : ( (typeof val === 'function') || (typeof val === 'object') )\n }\n\n private removeEmptyParams = (obj: any): Record<string, any> =>\n Object.fromEntries(\n Object.entries(obj)\n .map(([key, value]) =>\n [key, value && typeof value === 'object' ? this.removeEmptyParams(value) : value]\n )\n .filter(([_, value]) => value !== undefined && value !== \"\")\n )\n\n}\n","import { Injectable } from '@angular/core';\n\nimport { BehaviorSubject, EMPTY, Observable, from, of } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AsymmetricalEncryptionService {\n\n constructor() {}\n\n generateKeyPair(modulusLength = 2048): Observable<CryptoKeyPair> {\n \n // modulusLength - 1024, 2048, 4096\n // hash - SHA-256\n\n return from(crypto.subtle.generateKey(\n {\n name: \"RSA-OAEP\",\n modulusLength,\n publicExponent: new Uint8Array([1, 0, 1]), // 65537\n hash: { name: \"SHA-256\" }\n },\n true, // Extractable keys\n [\"encrypt\", \"decrypt\"]\n ))\n\n }\n\n encryptData(publicKey: CryptoKey, data: string) {\n\n const encodedData = new TextEncoder().encode(data)\n\n return from(crypto.subtle.encrypt(\n {\n name: \"RSA-OAEP\"\n },\n publicKey,\n encodedData\n )).pipe(\n map(enc => this.arrayBufferToBase64(enc))\n )\n\n }\n\n decryptData(privateKey: CryptoKey, encryptedData: string) {\n\n const encStr = this.base64ToArrayBuffer(encryptedData)\n\n return from(crypto.subtle.decrypt(\n {\n name: \"RSA-OAEP\"\n },\n privateKey,\n encStr\n ).then(decryptedData => {\n return new TextDecoder().decode(decryptedData)\n }))\n\n }\n\n pemToArrayBuffer(pem: string): ArrayBuffer {\n\n const b64 = pem.replace(/(-----BEGIN (RSA )?(PRIVATE|PUBLIC) KEY-----|-----END (RSA )?(PRIVATE|PUBLIC) KEY-----|\\n)/g, '')\n const binaryString = atob(b64)\n const len = binaryString.length\n const buffer = new ArrayBuffer(len)\n const view = new Uint8Array(buffer)\n\n for (let i = 0; i < len; i++) {\n view[i] = binaryString.charCodeAt(i)\n }\n\n return buffer\n\n }\n\n base64ToArrayBuffer(base64: string): ArrayBuffer {\n \n const binaryString = atob(base64);\n const len = binaryString.length;\n const buffer = new ArrayBuffer(len);\n const view = new Uint8Array(buffer);\n\n for (let i = 0; i < len; i++) {\n view[i] = binaryString.charCodeAt(i);\n }\n\n return buffer;\n }\n\n arrayBufferToBase64(buffer: ArrayBuffer): string {\n\n let binary = '';\n const bytes = new Uint8Array(buffer);\n const len = bytes.byteLength;\n\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n\n return window.btoa(binary)\n\n }\n\n base64ToPEM(base64Key: string, publicKey = true) {\n\n const keyType = (publicKey) ? 'PUBLIC' : 'PRIVATE'\n\n const header = `-----BEGIN ${keyType} KEY-----\\n`\n const footer = `\\n-----END ${keyType} KEY-----`\n\n const keyBody = base64Key.match(/.{1,64}/g)?.join(\"\\n\") || \"\"\n\n return header + keyBody + footer\n\n }\n\n pemToCryptoKey(\n pem: string, \n algorithm: RsaHashedKeyGenParams, \n extractable: boolean, \n keyUsages: KeyUsage[],\n format: any = \"pkcs8\" //\"raw\" | \"pkcs8\" | \"spki\"\n ) {\n \n const buffer = this.pemToArrayBuffer(pem);\n\n console.log('buffer found ', buffer);\n \n return from(crypto.subtle.importKey(\n format,\n buffer,\n algorithm,\n extractable,\n keyUsages\n ))\n\n }\n \n // TESTING\n\n testGenerateKeys(): Observable<string> {\n const testSequence: BehaviorSubject<string> = new BehaviorSubject<string>(\"\");\n const testSequence$: Observable<string> = testSequence.asObservable();\n testSequence.next(\"Test Generating Keys\");\n\n // GENERATE KEYS\n this.generateKeyPair().subscribe((data) => {\n\n console.log(\"GEN-GENERATED KEYS: \", data)\n\n crypto.subtle.exportKey('spki', data.publicKey)\n .then(key => {\n const publicKeyBase64 = this.arrayBufferToBase64(key);\n console.log(\"GEN-EXPORT PUBLIC KEY: \", this.base64ToPEM(publicKeyBase64, true));\n })\n\n crypto.subtle.exportKey('pkcs8', data.privateKey)\n .then(key => {\n const privateKeyBase64 = this.arrayBufferToBase64(key);\n console.log(\"GEN-EXPORT PRIVATE KEY: \", this.base64ToPEM(privateKeyBase64, false));\n });\n\n // TEST WITH GENERATED KEYS\n this.encryptData(data.publicKey, \"Sample Data here - Mike Bonifacio\")\n .subscribe((enc) => {\n\n console.log(\"GEN-ENCRYPT==>: \", enc)\n\n this.decryptData(data.privateKey, enc).subscribe((dec) => {\n testSequence.next('Test Passed');\n testSequence.complete();\n })\n\n })\n\n })\n return testSequence$;\n\n }\n\n testDecryptionWithKeys(): Observable<string> {\n const testSequence: BehaviorSubject<string> = new BehaviorSubject<string>(\"\");\n const testSequence$: Observable<string> = testSequence.asObservable();\n testSequence.next(\"Test Generating Keys\");\n\n const privateKey = `-----BEGIN PRIVATE KEY-----\n MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDKVBkCWNb9eHVF\n twAA5mdAyvXFix3WavdrsoYRkvtCl8ogDBQf8f6N0bRkDF1zcVHRrNAEyozXDtuD\n kFgSiivBFREI7fiS3sOvduq6FaGXzX0IY6oaVMu8oOPgDvC0yvoohR+0Qxq2d6lP\n SPyHeKQaxP4KxzCJJzB1XAcbd2eFzUUDv25mNlwdVkmW8FI/sAxnJLgPTW78dzfX\n Ddfk+nxdIqxVKSLATnL0kMN7aGJx24UozioAIpzvvvF5/+7HTd1gi6NeCqrAYr3g\n iP364AE26CFwFvHnafO9uNQhlQ+uiNnOoInXByfFGVP+RidSpfLzaxDjs6RDwpol\n h098btONAgMBAAECggEAAVhHM2OD5IkUtuowwcKNaCTKGmrClRE3gMuzJeBsSJEy\n uAReUFILZylcnhegDytSti2vDA9T7xqtO6CU0p3V8LpU89JMOPRb/deirI4UXSpx\n xbNyjirOO6bnrNlOWfKexdQQsikYPzF2iM1Scpr1u9ZDCHZOl1ZYSrkve5My4coP\n 3Gx6tTBqL0jQBfcpf4ES8BH3JSawR/MgqzDS74+bI2VH+kvuPAC1L4fBgaV3VUv0\n nFzim5A3s5VaXPgJbEIghP9BkYGFkeT9ma3nliEZWc96AzsmowFn1ayCvrNVPo9R\n ECD2NnttBiCJZt3H93sR9+OTeA8Bls+aZGlKd5mLAQKBgQDpf8nIYUm/Zmls7/lQ\n QBUSGHEYrbjNsEejQsPgNDtg2EVSxdUkvTn7Wb+HExTk09Z5bNvhaO2532/FH9y8\n ahSXafiMXpfR2olwXdOB9yXXl4F5C0LGnmzGim4OSeWzAX0JCL470KaS0QN3EmoG\n 9F0YCfMnZXNTweSSx4xvlO6ggQKBgQDd01uIolm7z1DIWCwNERAXP2GDwcvxyzYK\n YqJfKDeHt2t6yIzZMMotnPDy+OlcdGspIIHkB5a+SZN5Nt7DUKg/MnyOZ3KbVq41\n k7dR4Ka3LRnGkesy7lSr7ef1rfquyR75OXJQcPWvkFcLu0TMiQhvptatZ8VN+F4n\n fDQELRotDQKBgQCgN+AUT7VT0QjcCBnRV/ddUEoiPenFsYSmYMSYzh5ESIHg1wB2\n 0iS79Iw4Of6nOTg8X1bM57vfQ5Kk90T2P+/bKYqzfqC8DTErWiYsUpKzyTC9Bt4N\n /Vz0Kr5zrX8ggg/yp/4oevYhXav8AzWfigNq4EDpMnKc8TlPAf+5/L50gQKBgQC2\n mLPhPhr1gUszD3l7bA89w7uGlLFHoQoj9FtKTzWervp3QLzIT+QtNeIVb5XQuDg5\n y3uAdEq+6pvNjMBEMJG+K9Xh9v+dJPYUPjsJ2A4D/MkZ7qWX8B2cxSJK1uLim8W2\n S3ZxBvsGgJ9WldmlMCvUlJZkeWYtr4P5psC+q02/xQKBgQCDII/jcV2+lRM2iNTe\n vBijZSaNMEWOK/Y+/HFK8GYKXnB+xNWhrm8rKgWGzpDJAUPMh9Tt+leW9LKEBuzF\n Y1bGblmGm1zsPWpIx05Fdtv9eOJmFnXbGzIsYyhadZnPcQOWhqxtpVxSuul0Jc7Q\n XNq4qPaPXhbQAshgtyBt75DMkw==\n -----END PRIVATE KEY-----`\n \n const pubKey = `-----BEGIN PUBLIC KEY-----\n MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylQZAljW/Xh1RbcAAOZn\n QMr1xYsd1mr3a7KGEZL7QpfKIAwUH/H+jdG0ZAxdc3FR0azQBMqM1w7bg5BYEoor\n wRURCO34kt7Dr3bquhWhl819CGOqGlTLvKDj4A7wtMr6KIUftEMatnepT0j8h3ik\n GsT+CscwiScwdVwHG3dnhc1FA79uZjZcHVZJlvBSP7AMZyS4D01u/Hc31w3X5Pp8\n XSKsVSkiwE5y9JDDe2hicduFKM4qACKc777xef/ux03dYIujXgqqwGK94Ij9+uAB\n NughcBbx52nzvbjUIZUProjZzqCJ1wcnxRlT/kYnUqXy82sQ47OkQ8KaJYdPfG7T\n jQIDAQAB\n -----END PUBLIC KEY-----`\n\n const algorithm: RsaHashedKeyGenParams = {\n name: \"RSA-OAEP\",\n modulusLength: 2048,\n publicExponent: new Uint8Array([1, 0, 1]),\n hash: \"SHA-256\"\n };\n\n // ENCRYPT\n this.pemToCryptoKey(\n pubKey,\n algorithm,\n true,\n [\"encrypt\"],\n \"spki\"\n ).subscribe((keyPublic) => {\n\n // console.log(\"PUBLIC KEY: \", keyPublic)\n\n this.encryptData(keyPublic, \"Sample Data here - Mike Bonifacio\")\n .subscribe((str) => {\n console.log(\"ENCRYPTED STRING: \", str);\n testSequence.next('encrypted string success');\n })\n\n })\n\n const enc = \"r7UOuEGBZ6jbVTOIBuv9jFOEtRiedmS27hfW40k7XKCTsQ5VhWup0qu2BA2ANZaGKii/uehJ/RSPiyfGbJ6leJrat0mA1hPqH/XodaBzLMDigvdYM1NSXFZMDa40OpLUIXbPlAvybjcGu7Bal+LMA8htHrFu/OmM/fHI66xOzzpuXSYx0OkWjtY81rUQ1FFkvrkx2jGFPZ0p+Nw/v3Q4cJnet6V63vCueFlD749VMcVXo7pvz4AIPpB+IOy3kbxaYTPakLVioJERU6GFMXWkECuRvohhS9CETcORZtRVRkvhcHk3lxgIhfqojUKYgD6K5dDELDPsWIS+iTG1XIQIlg==\";\n\n // DECRYPTION\n this.pemToCryptoKey(\n privateKey,\n algorithm,\n false,\n [\"decrypt\"],\n \"pkcs8\"\n ).subscribe((key) => {\n\n // console.log(\"DECRYPT ===\", key)\n\n this.decryptData(key, enc)\n .pipe(\n catchError(err => {\n console.log(\"ERROR: \", err);\n return EMPTY\n })\n ).subscribe((str) => {\n console.log(\"DECRYPTED STRING: \", str);\n testSequence.next('decrypted string success');\n })\n\n })\n\n return testSequence$;\n };\n}\n","import { OperatorFunction } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { HttpEventType } from '@angular/common/http';\n\nexport function requestStreaming(): OperatorFunction<any, any> {\n\n return input$ => input$.pipe(\n filter((event: any) =>\n event.type === HttpEventType.DownloadProgress || event.type === HttpEventType.Response\n ),\n\n map((event: any) => {\n\n if (event.type === HttpEventType.DownloadProgress) {\n return event.partialText || ''\n } else if (event.type === HttpEventType.Response) {\n return event.body\n }\n\n }),\n\n map((data: any) => {\n if (typeof data === 'string') {\n const matches = data.match(/{[^}]+}/g) || []\n return (matches.length > 0) ? matches.map(match => JSON.parse(match)) : data\n }\n return data\n })\n )\n\n}\n\n","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\n return new ChannelInfo(\n item?.name,\n item?.canSubscribe,\n )\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","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { WSOptions } from '../../request-manager-state-service';\nimport { UUID_STR } from '../../utils/encryption/random';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WebsocketService {\n\n private socket: WebSocket | null = null;\n\n private messages = new BehaviorSubject<any>(null);\n public messages$: Observable<any> = this.messages.asObservable();\n\n private connectionStatus = new BehaviorSubject<boolean>(false);\n public connectionStatus$: Observable<boolean> = this.connectionStatus.asObservable();\n\n private isSubscribed: boolean = false;\n\n // Track currently subscribed channels\n private subscribedChannels = new BehaviorSubject<Set<string>>(new Set());\n public subscribedChannels$: Observable<Set<string>> = this.subscribedChannels.asObservable();\n\n // Store last options for reconnection\n private lastOptions: WSOptions | null = null;\n\n private getSessionId(): string {\n return sessionStorage.getItem('WSID') ?? (() => {\n const uuid = UUID_STR()\n sessionStorage.setItem('WSID', uuid)\n return uuid\n })()\n }\n\n private sendSubscribe(channelName: string, user: any) {\n\n // Check if already subscribed to THIS specific channel (not just any channel)\n const alreadySubscribed = this.subscribedChannels.value.has(channelName);\n\n if (this.socket?.readyState === WebSocket.OPEN && !alreadySubscribed) {\n const message = {\n type: 'subscribe',\n subscribedChannel: channelName,\n content: {\n id: this.getSessionId(),\n ...user\n }\n };\n this.socket.send(JSON.stringify(message));\n\n // Track this channel as subscribed\n const current = new Set(this.subscribedChannels.value);\n current.add(channelName);\n this.subscribedChannels.next(current);\n\n this.isSubscribed = true; // Keep for backward compatibility\n console.log(`[CLIENT] Sent initial subscription to: ${channelName}`);\n } else {\n console.warn(`[CLIENT] Subscription prevented. Open: ${this.socket?.readyState === WebSocket.OPEN}, Already subscribed to ${channelName}: ${alreadySubscribed}`);\n }\n }\n\n connect(options: WSOptions, jwtToken: string) {\n\n if (this.socket) {\n\n if (this.socket.readyState === WebSocket.OPEN) {\n console.log('WebSocket connection is already OPEN.');\n return;\n }\n\n if (this.socket.readyState === WebSocket.CONNECTING) {\n console.log('WebSocket is already CONNECTING. Waiting for handshake.');\n return;\n }\n\n if (this.socket.readyState === WebSocket.CLOSING || this.socket.readyState === WebSocket.CLOSED) {\n console.log(`Cleaning up stale socket (State: ${this.socket.readyState}).`);\n this.socket.close();\n this.socket = null;\n }\n }\n\n this.isSubscribed = false;\n\n const sessionId = this.getSessionId();\n const URL = (jwtToken) ? `${options.wsServer}?token=${jwtToken}&sessionId=${sessionId}` : `${options.wsServer}?sessionId=${sessionId}`;\n\n this.socket = new WebSocket(URL);\n\n this.socket.onopen = () => {\n console.log(`📡 Connected to WebSocket`);\n this.connectionStatus.next(true);\n this.lastOptions = options;\n\n // Subscribe to primary channel\n this.sendSubscribe(options.id, options.user);\n\n // Auto-subscribe to additional channels from options.channels[]\n if (options.channels && options.channels.length > 0) {\n options.channels.forEach(channel => {\n if (channel !== options.id) {\n this.subscribeToChannel(channel);\n }\n });\n }\n\n // Re-subscribe to any previously subscribed channels (reconnection scenario)\n const previousChannels = this.subscribedChannels.value;\n if (previousChannels.size > 0) {\n previousChannels.forEach(channel => {\n if (channel !== options.id && (!options.channels || !options.channels.includes(channel))) {\n this.subscribeToChannel(channel);\n }\n });\n }\n };\n\n this.socket.onmessage = (event) => {\n\n try {\n\n const data = JSON.parse(event.data);\n\n if (data.error && data.error === 'JWT_INVALID') {\n\n console.error('JWT validation failed. Authentication error!');\n\n this.messages.next(data);\n this.connectionStatus.next(false);\n this.socket?.close();\n\n return;\n\n }\n\n this.messages.next(data);\n\n } catch (error) {\n console.error('Error parsing WebSocket message:', event.data);\n }\n\n };\n\n this.socket.onclose = () => {\n\n console.log('WebSocket connection closed');\n\n this.connectionStatus.next(false);\n this.socket = null;\n };\n\n this.socket.onerror = (error) => {\n console.error('WebSocket error:', error);\n this.connectionStatus.next(false);\n };\n\n }\n\n disconnect() {\n if (this.socket) {\n this.socket.close();\n this.socket = null;\n }\n }\n\n subscribeToChannel(channelName: string) {\n\n if (this.socket?.readyState === WebSocket.OPEN) {\n\n const message = {\n type: 'subscribe',\n subscribedChannel: channelName,\n content: {}\n };\n\n this.socket.send(JSON.stringify(message));\n\n // Track locally - create new Set to trigger change detection\n const current = new Set(this.subscribedChannels.value);\n current.add(channelName);\n this.subscribedChannels.next(current);\n console.log(`📝 Subscribed to channel: ${channelName}`);\n\n } else {\n console.warn('Cannot subscribe: WebSocket not yet open.');\n }\n\n }\n\n subscribeToChannels(channelNames: string[]) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n channelNames.forEach(channel => this.subscribeToChannel(channel));\n } else {\n console.warn('Cannot subscribe: WebSocket not yet open.');\n }\n }\n\n unsubscribeFromChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'unsubscribe', subscribedChannel: channel }));\n\n // Remove from local tracking - create new Set to trigger change detection\n const current = new Set(this.subscribedChannels.value);\n current.delete(channel);\n this.subscribedChannels.next(current);\n console.log(`💬 Unsubscribed from channel: ${channel}`);\n } else {\n console.error('WebSocket is not open. Cannot unsubscribe from channel.');\n }\n }\n\n unsubscribeToChannel(channel: string) {\n // Deprecated: Use unsubscribeFromChannel instead\n this.unsubscribeFromChannel(channel);\n }\n\n getSubscribedChannels(): Set<string> {\n return this.subscribedChannels.value;\n }\n\n sendBroadcast(content: any) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'broadcast', content }));\n console.log(`📢 Send broadcast: ${content}`);\n } else {\n console.error('WebSocket is not open. Cannot send broadcast.');\n }\n }\n\n sendMessageInChannel(channel: string, content: any) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'stateMangerMessage', subscribedChannel: channel, content }));\n console.log(`💬 Send message:`, content);\n } else {\n console.error('WebSocket is not open. Cannot send message.');\n }\n }\n\n /**\n * Send a message to a specific channel for channel-based messaging\n * This uses the 'message' type which broadcasts to all subscribers in the channel\n */\n sendChannelMessage(channel: string, content: any) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'message', subscribedChannel: channel, content }));\n 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 sendMessageToUser(user: string, content: any) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'userMessage', subscribedChannel: user, content }));\n console.log(`💬 Send message:`, content);\n } else {\n console.error('WebSocket is not open. Cannot send message.');\n }\n }\n\n getAllChannels() {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'getChannels' }));\n console.log('🗂️ List of all channels');\n } else {\n console.error('WebSocket is not open. Cannot request channels.');\n }\n }\n\n createChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'createChannel', content: channel }));\n console.log('🗂️ Created channel:', channel);\n } else {\n console.error('WebSocket is not open. Cannot request channels.');\n }\n }\n\n deleteChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'deleteChannel', content: channel }));\n console.log('🗂️ Delete channel:', channel);\n } else {\n console.error('WebSocket is not open. Cannot request channels.');\n }\n }\n\n getUsersInChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'getUsers', subscribedChannel: channel }));\n console.log(`👥 List all users in channel: ${channel}`);\n } else {\n console.error('WebSocket is not open. Cannot request users.');\n }\n }\n\n // =====================\n // Notification Channel Methods (MES- prefix)\n // =====================\n\n /**\n * Create a notification channel\n */\n createNotificationChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'createNotificationChannel', content: channel }));\n console.log('📢 Created notification channel:', channel);\n } else {\n console.error('WebSocket is not open. Cannot create notification channel.');\n }\n }\n\n /**\n * Get all notification channels (in-memory)\n */\n getNotificationChannels() {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'getNotificationChannels' }));\n 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 * Returns unique channels that have notifications posted today\n */\n getTodaysNotificationChannels() {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.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 */\n subscribeToNotificationChannel(channel: string, options?: { startEpoch?: number; endEpoch?: number }, user?: any) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({\n type: 'subscribeNotifications',\n subscribedChannel: channel,\n content: {\n ...options,\n ...user\n }\n }));\n console.log(`📢 Subscribed to notification channel: ${channel}`, options);\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 */\n unsubscribeFromNotificationChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({\n type: 'unsubscribeNotifications',\n subscribedChannel: channel\n }));\n 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 a notification to a channel\n */\n sendNotification(channel: string, content: any) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({\n type: 'notification',\n subscribedChannel: channel,\n content\n }));\n 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","import { HttpClient, HttpEvent, HttpEventType, HttpHeaderResponse } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject, Observable, throwError } from 'rxjs';\nimport { catchError, delay, finalize, map } from 'rxjs/operators';\n\nimport { ApiRequest } from '../request-manager-state-service/models/api-request.model';\nimport { PathQueryService, HeadersService } from '../utils';\nimport { requestStreaming } from './rxjs-operators/request-streaming';\nimport { WebsocketService } from '../ws-manager-service';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RequestService extends WebsocketService {\n\n private http = inject(HttpClient)\n\n private pathQueryService = inject(PathQueryService)\n private headersService = inject(HeadersService)\n\n isPending = new BehaviorSubject<boolean>(false)\n isPending$ = this.isPending.asObservable()\n\n progress = new BehaviorSubject<number>(0)\n progress$ = this.progress.asObservable()\n\n getRecordRequest<T>(options: ApiRequest): Observable<T> {\n\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildCombinedHeaders(options);\n\n this.isPending.next(true);\n\n return (options.stream)\n ? this.http.get<any>(urlPath, headers).pipe(\n requestStreaming(),\n this.handleFinalize()\n )\n : this.http.get<T>(urlPath, headers).pipe(\n this.request(options),\n )\n }\n\n createRecordRequest<T>(options: ApiRequest, data: any): Observable<T> {\n\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildCombinedHeaders(options);\n\n this.isPending.next(true);\n\n return (options.stream)\n ? this.http.post<any>(urlPath, data, headers).pipe(\n requestStreaming(),\n this.handleFinalize()\n )\n : this.http.post<T>(urlPath, data, headers).pipe(\n this.request(options),\n )\n }\n\n updateRecordRequest<T>(options: ApiRequest, data: any): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildHeaders(options);\n\n this.isPending.next(true);\n\n return this.http.put<any>(urlPath, data, headers).pipe(\n this.request(options),\n )\n }\n\n deleteRecordRequest<T>(options: ApiRequest): Observable<T> {\n\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildHeaders(options);\n\n this.isPending.next(true);\n\n return this.http.delete<any>(urlPath, headers).pipe(\n this.request(options),\n )\n }\n\n // Helper functions\n private buildUrlPath(options: ApiRequest): string {\n return this.pathQueryService.buildAPIPath(options.server, options.path);\n }\n\n private buildHeaders(options: ApiRequest): any {\n return this.headersService.generateHeaders(options.headers);\n }\n\n private buildCombinedHeaders(options: ApiRequest): any {\n const headers = this.headersService.generateHeaders(options.headers)\n return this.combineHeaders(headers, options.stream || false)\n }\n\n private request<T>(options: ApiRequest): (source: Observable<any>) => Observable<T> {\n return (source$: Observable<any>): Observable<T> => {\n return source$.pipe(\n map(data => {\n if (!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 downloadFileRequest(options: ApiRequest): Observable<any> {\n\n this.isPending.next(true);\n\n const urlPath = this.buildUrlPath(options);\n\n return this.http.get(urlPath, { responseType: 'blob', observe: 'events', reportProgress: true })\n .pipe(\n map((event: HttpEvent<any>) => {\n\n this.isPending.next(true)\n\n if (event instanceof HttpHeaderResponse) {\n if(event.status !== 200) {\n this.isPending.next(false)\n throw new Error('Download failed');\n }\n }\n\n // 0\tSent\tRequest has been sent.\n // 1\tUploadProgress\tUpload is in progress.\n // 2\tResponseHeader\tResponse headers received.\n // 3\tDownloadProgress\tDownload is in progress.\n // 4\tResponse\tResponse is fully received.\n // 5\tUser\tCustom user event.\n\n switch (event.type) {\n\n case HttpEventType.DownloadProgress:\n\n const status = (event.total) ? Math.round(event.loaded / (event.total || 1) * 100) : 100\n this.progress.next(status)\n return status\n\n case HttpEventType.Response:\n\n try {\n\n const fileNamePath = (options?.saveAs) ? options.saveAs : (options.path) ? options.path[options.path.length - 1] : []\n const fileContentHeader = options.fileContentHeader || 'Content-Disposition'\n const header_content = event.headers.get(fileContentHeader);\n\n // checks if header_content is not empty and splits the header_content to get the file name\n // otherwise, it will use the fileDownload - contains the file name and extension\n const file = (header_content) ? header_content.split('=')[1].substring(0, header_content.split('=')[1].length) : ''\n\n const fileName = (file) ? file : fileNamePath\n\n if (fileName === '') {\n this.isPending.next(false);\n throw new Error('Save File: (file name and extension) not found in Headers or Path');\n }\n\n this.downloadFile(fileName, event.body)\n this.isPending.next(false)\n\n return 100\n\n } catch (error) {\n throw new Error('Download failed');\n }\n\n default:\n this.isPending.next(false)\n return 0\n }\n\n }),\n catchError(err => {\n return throwError(() => err)\n })\n )\n }\n\n private handleFinalize(): (source: Observable<any>) => Observable<any> {\n return finalize(() => this.isPending.next(false));\n }\n\n private downloadFile(file:string, fileData: any) {\n\n const navigatorAny = window.navigator as any\n\n const extension = file.split('.')[1].toLowerCase()\n\n var newBlob = new Blob([fileData], { type: this.createFileType(extension) })\n\n if (navigatorAny.msSaveOrOpenBlob) {\n navigatorAny.msSaveOrOpenBlob(newBlob, file)\n } else {\n const link = document.createElement('a')\n const url = window.URL.createObjectURL(newBlob)\n link.href = url\n link.download = file\n link.click()\n window.URL.revokeObjectURL(url)\n }\n\n }\n\n private createFileType(ext: any): string {\n\n let fileType: string = \"\"\n\n if (ext == 'pdf' || ext == 'csv') {\n fileType = `application/${ext}`\n }\n else if (ext == 'jpeg' || ext == 'jpg' || ext == 'png') {\n fileType = `image/${ext}`\n }\n else if (ext == 'txt') {\n fileType = 'text/plain'\n }\n\n else if (ext == 'ppt' || ext == 'pot' || ext == 'pps' || ext == 'ppa') {\n fileType = 'application/vnd.ms-powerpoint'\n }\n else if (ext == 'pptx') {\n fileType = 'application/vnd.openxmlformats-officedocument.presentationml.presentation'\n }\n else if (ext == 'doc' || ext == 'dot') {\n fileType = 'application/msword'\n }\n else if (ext == 'docx') {\n fileType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n }\n else if (ext == 'xls' || ext == 'xlt' || ext == 'xla') {\n fileType = 'application/vnd.ms-excel'\n }\n else if (ext == 'xlsx') {\n fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n }\n\n return fileType\n\n }\n\n private combineHeaders(headers: any, isStreaming: boolean) {\n\n return (isStreaming) ?\n {\n ...headers,\n observe: 'events',\n responseType: 'text',\n reportProgress: true,\n Accept: 'text/event-stream'\n }\n : headers\n\n }\n\n}\n","import { Observable, defer, interval } from 'rxjs';\nimport { takeWhile, map, tap } from 'rxjs/operators';\n\nexport function countdown(duration: number): Observable<number> {\n\n return defer(() => {\n\n const currentCount = { current: duration }\n\n return interval(1000).pipe(\n map(() => --currentCount.current),\n takeWhile(count => count >= 0)\n )\n\n })\n\n}\n","import { Observable, timer } from 'rxjs';\nimport { retry } from 'rxjs/operators';\n\nconst DEFAULT_MAX_RETRIES = 3;\n\nexport function delayedRetry<T>(delayMs: number, maxRetry = DEFAULT_MAX_RETRIES) {\n return (src: Observable<T>) =>\n src.pipe(\n retry({\n count: maxRetry,\n delay: () => timer(delayMs)\n })\n );\n}\n\n\n","import { Observable, interval } from 'rxjs';\nimport { mergeMap, startWith, takeUntil, tap } from 'rxjs/operators';\n\nexport function requestPolling<T>(pollInterval: number, stopCondition$: Observable<any>, isPending$: any) {\n return (source: Observable<T>): Observable<T> => {\n return interval(pollInterval * 1000)\n .pipe(\n startWith(0),\n tap(() => {\n try {\n if (isPending$ && typeof isPending$.next === 'function') {\n isPending$.next(true);\n } else if (isPending$ && typeof isPending$.set === 'function') {\n isPending$.set(true);\n }\n } catch (e) {\n // no-op if setting fails\n }\n }),\n mergeMap(() => source),\n tap(() => {\n try {\n if (isPending$ && typeof isPending$.next === 'function') {\n isPending$.next(false);\n } else if (isPending$ && typeof isPending$.set === 'function') {\n isPending$.set(false);\n }\n } catch (e) {\n // no-op if setting fails\n }\n }),\n takeUntil(stopCondition$),\n );\n };\n}\n","export interface DatabaseStorageInterface {\n table: string\n expiresIn: string\n}\n\nexport class DatabaseStorage implements DatabaseStorageInterface {\n\n constructor(\n public table = '',\n public expiresIn: '',\n ) {}\n\n static adapt(item?: any): any {\n\n if(!item?.table) return\n\n return new DatabaseStorage(\n item?.table,\n item?.expiresIn,\n )\n\n }\n\n}\n","export interface RetryOptionsInterface {\n times?: number // total request to be made including initial request\n delay?: number // seconds (<= 3 default 3 seconds)\n}\n\nexport class RetryOptions implements RetryOptionsInterface {\n\n constructor(\n public times = 0,\n public delay = 3,\n ) {}\n\n static adapt(item?: any): RetryOptions {\n\n return new RetryOptions(\n item?.times,\n item?.delay\n )\n\n }\n\n}\n","export enum DataType {\n ANY = 0,\n ARRAY,\n OBJECT\n}\n","import { RetryOptions } from \"./retry-options.model\"\n\nexport interface ConfigHTTPOptionsInterface {\n server: string\n path?: any[]\n headers?: any\n polling?: number // seconds (undefined | 0 = none)\n retry?: RetryOptions\n stream?: boolean\n displayError?: boolean\n}\n\nexport class ConfigHTTPOptions implements ConfigHTTPOptionsInterface {\n\n constructor(\n public server = '',\n public path?: any[],\n public headers?: any,\n public polling?: number,\n public retry?: RetryOptions,\n public stream?: boolean,\n public displayError?: boolean,\n ) {}\n\n static adapt(item?: any): ConfigHTTPOptions {\n\n const server = Array.isArray(item?.server) ? item.server.join('/') : item?.server || '';\n const retryOptions = item?.retry ? RetryOptions.adapt(item.retry) : RetryOptions.adapt();\n\n return new ConfigHTTPOptions(\n server,\n (item?.path) ? item.path : [],\n (item?.headers) ? item.headers : {},\n item?.polling ? Math.floor(item.polling) : 0,\n retryOptions,\n (item?.stream) ? item.stream : false,\n (item?.displayError) ? item.displayError : false,\n )\n\n }\n\n}\n","import { SettingOptions } from \"../services\"\n\nexport interface LocalStorageOptionsInterface {\n storageName?: string\n storageSettingsName?: string\n options?: SettingOptions,\n}\n\nexport class LocalStorageOptions implements LocalStorageOptionsInterface {\n\n constructor(\n public storageName?: string,\n public storageSettingsName?: string,\n public options?: SettingOptions,\n ) {}\n\n static adapt(item?: any): LocalStorageOptions {\n\n return new LocalStorageOptions(\n (item?.storageName) ? item.storageName : 'storage',\n (item?.storageSettingsName) ? item.storageSettingsName : 'global-storage',\n (item?.options) ? SettingOptions.adapt(item.options) : SettingOptions.adapt(),\n )\n\n }\n\n}\n","import { ConfigHTTPOptions } from \"./config-http-options.model\";\nimport { LocalStorageOptions } from \"./config-local-storage-options.model\";\n\nexport interface ConfigOptionsInterface {\n httpRequestOptions?: ConfigHTTPOptions\n LocalStorageOptions?: LocalStorageOptions\n // DatabaseOptions: any\n}\n\nexport class ConfigOptions implements ConfigOptionsInterface {\n\n constructor(\n public httpRequestOptions?: ConfigHTTPOptions,\n public LocalStorageOptions?: LocalStorageOptions,\n // public DatabaseOptions?: any,\n ) {}\n\n static adapt(item?: any): ConfigOptions {\n return new ConfigOptions(\n (item?.httpRequestOptions) ? ConfigHTTPOptions.adapt(item.httpRequestOptions) : undefined,\n (item?.LocalStorageOptions) ? LocalStorageOptions.adapt(item.LocalStorageOptions) : undefined,\n // item?.DatabaseOptions,\n )\n\n }\n\n}\n","import { Inject, inject, Injectable, Injector, Optional } from '@angular/core';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { BehaviorSubject, Observable, Subject, throwError } from 'rxjs';\nimport { tap, map, finalize, catchError } from 'rxjs/operators';\n\nimport { ApiRequest } from '../request-manager-state-service/models/api-request.model';\nimport { RequestService } from './request.service';\nimport { requestPolling, countdown, delayedRetry } from './rxjs-operators';\n\n\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigOptions } from '../../models';\nimport { ObjectMergerService } from '../utils/object-merger.service';\nimport { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HTTPManagerService<T> extends RequestService {\n\n toastMessage = inject(ToastMessageDisplayService)\n ng_injector = inject(Injector)\n objectMergerService = inject(ObjectMergerService)\n\n private countdown = new BehaviorSubject<number>(0);\n countdown$ = this.countdown.asObservable();\n\n private error = new BehaviorSubject<boolean>(false);\n error$ = this.error.asObservable();\n\n private data = new BehaviorSubject<any>(null)\n data$ = this.data.asObservable()\n\n private polling$ = new Subject<void>();\n\n config = ApiRequest.adapt();\n\n constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {\n super()\n this.config = (configOptions) ? ApiRequest.adapt(configOptions.httpRequestOptions) : this.config\n }\n\n // REQUESTS\n\n getRequest<T>(options?: ApiRequest, params?: any[]) {\n\n this.isPending.next(true);\n this.data.next(null)\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.getRecordRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name)\n .pipe(\n tap(data => this.data.next(data))\n ).pipe(\n finalize(() => this.isPending.next(false)),\n catchError((err) => {\n if(updatedOptions.displayError) this.handleErrorWithSnackBar(err)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n }\n\n postRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {\n\n this.isPending.next(true);\n this.data.next(null)\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.createRecordRequest;\n const requests = this.createRequest(func, updatedOptions, data);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(tap(data => this.data.next(data)))\n .pipe(\n finalize(() => this.isPending.next(false)),\n catchError((err) => {\n if(updatedOptions.displayError) this.handleErrorWithSnackBar(err)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n }\n\n putRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {\n\n this.isPending.next(true);\n this.data.next(null)\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.updateRecordRequest;\n const requests = this.createRequest(func, updatedOptions, data);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(tap(data => this.data.next(data)))\n .pipe(\n finalize(() => this.isPending.next(false)),\n catchError((err) => {\n if(updatedOptions.displayError) this.handleErrorWithSnackBar(err)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n }\n\n deleteRequest<T>(options: ApiRequest, params?: any[]) {\n\n this.isPending.next(true);\n this.data.next(null)\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.deleteRecordRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(tap(data => this.data.next(data)))\n .pipe(\n finalize(() => this.isPending.next(false)),\n catchError((err) => {\n if(updatedOptions.displayError) this.handleErrorWithSnackBar(err)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n }\n\n downloadRequest<T>(options: ApiRequest, params?: any[], saveAs?: string) {\n\n this.isPending.next(true);\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.downloadFileRequest;\n const requests = this.createRequest(func, updatedOptions)\n\n return this.createObservable<T>(updatedOptions, requests, func.name)\n .pipe(\n catchError((err) => {\n this.error.next(true)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n\n }\n\n private createObservable<T>(options: ApiRequest, request$: Observable<T>, funcName: string) {\n\n const polling = options.polling ? (options.polling > 0 ? true : false) : false;\n const isPolling =\n polling &&\n !(funcName === 'deleteRecordRequest' || funcName === 'updateRecordRequest' || funcName === 'createRecordRequest')\n ? true\n : false;\n\n this.polling$.next();\n\n const polling$ =\n (isPolling && options.polling) || 0 >= 3\n ? request$.pipe(\n requestPolling((options.polling || 0) + 1, this.polling$, this.isPending),\n tap(() => this.countdown.next(0)),\n tap(() => {\n if (!options.polling) return;\n const count = options.polling ? options.polling : 0;\n // console.log('COUNT:', count);\n countdown(count)\n .pipe(\n map((x: number) => {\n // console.log('XX:', count, x);\n const pollingInSec = options.polling || 0;\n const percentageCompleted = ((pollingInSec - x) / pollingInSec) * 100;\n return Math.round(percentageCompleted);\n })\n )\n .subscribe((countDownValue: number) => {\n // console.log(this.countdown.value, countDownValue);\n this.countdown.next(countDownValue);\n });\n }),\n )\n : request$.pipe(\n catchError((err: any) => {\n\n if (err instanceof HttpErrorResponse) {\n this.error.next(true);\n return this.handleError(err);\n }\n\n return throwError(() => err);\n }),\n // finalize(() => this.isPending.next(false))\n )\n\n return polling$.pipe(\n catchError((err: any, caught: Observable<T>) => {\n\n if (err instanceof HttpErrorResponse) {\n this.error.next(true);\n if(isPolling) this.stopPolling();\n return this.handleError(err);\n }\n\n return throwError(() => err);\n }),\n (options?.retry && options.retry.times > 0)\n ? delayedRetry((options.retry.delay || 3) * 1000, (options.retry.times || 0) - 1)\n : (source: Observable<T>) => source\n );\n }\n\n private createRequest(func: Function, options: ApiRequest, data?: any | any[]) {\n const dataItem = this.prepareRequestData(options, data, func.name);\n return func.bind(this)(dataItem.options, dataItem.data);\n }\n\n private prepareRequestData(options: ApiRequest, data: any, funcName: string) {\n\n if ((options.mapper && funcName === 'updateRecordRequest') || funcName === 'createRecordRequest') {\n if (options?.mapper) {\n data = options.mapper\n ? Array.isArray(data)\n ? map((item) => options.mapper(item))\n : options.mapper(data)\n : data;\n }\n } else {\n if (options?.adapter) {\n data = Array.isArray(data)\n ? map((item) => options.adapter(item))\n : options.adapter(data)\n }\n }\n\n return { options: options, data: data };\n }\n\n // MISC\n\n private handleError(error: Response | any) {\n this.error.next(error.message || `${error.status} - ${error.statusText}`)\n return throwError(() => error)\n }\n\n private handleErrorWithSnackBar(error: Response | any) {\n\n const displayError = ToastDisplay.adapt({\n message: error.message || `${error.status} - ${error.statusText}`,\n action: 'OK',\n color: ToastColors.ERROR,\n icon: 'error',\n duration: 5 * 1000, //5 seconds\n })\n\n this.toastMessage.toastMessage(displayError)\n\n }\n\n private stopPolling() {\n this.isPending.next(false);\n this.polling$.next();\n }\n\n private defineReqOptions(options: any, params?: any[]) {\n\n const req = ApiRequest.adapt(options)\n if(req?.path) req.path = (params) ? [...req.path, ...params] : req.path\n\n const optionsReq = (req)? req : ApiRequest.adapt()\n const updatedOptions = this.objectMergerService.mergeOptions(optionsReq)\n\n return updatedOptions\n\n }\n}\n","import { HttpClient, HttpEvent, HttpEventType, HttpHeaderResponse } from '@angular/common/http';\nimport { Injectable, inject, signal, computed } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, finalize, map } from 'rxjs/operators';\n\nimport { ApiRequest } from '../request-manager-state-service/models/api-request.model';\nimport { PathQueryService, HeadersService } from '../utils';\nimport { requestStreaming } from './rxjs-operators/request-streaming';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RequestSignalsService {\n\n private http = inject(HttpClient);\n private pathQueryService = inject(PathQueryService);\n private headersService = inject(HeadersService);\n\n isPending = signal(false);\n progress = signal(0);\n\n isIdle = computed(() => !this.isPending());\n\n getRecordRequest<T>(options: ApiRequest): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildCombinedHeaders(options);\n\n this.isPending.set(true);\n\n return (options.stream)\n ? this.http.get<any>(urlPath, headers).pipe(\n requestStreaming(),\n this.handleFinalize()\n )\n : this.http.get<T>(urlPath, headers).pipe(\n this.request(options),\n this.handleFinalize()\n );\n }\n\n createRecordRequest<T>(options: ApiRequest, data: any): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildCombinedHeaders(options);\n\n this.isPending.set(true);\n\n return (options.stream)\n ? this.http.post<any>(urlPath, data, headers).pipe(\n requestStreaming(),\n this.handleFinalize()\n )\n : this.http.post<T>(urlPath, data, headers).pipe(\n this.request(options),\n this.handleFinalize()\n );\n }\n\n updateRecordRequest<T>(options: ApiRequest, data: any): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildHeaders(options);\n\n this.isPending.set(true);\n\n return this.http.put<any>(urlPath, data, headers).pipe(\n this.request(options),\n this.handleFinalize()\n );\n }\n\n deleteRecordRequest<T>(options: ApiRequest): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildHeaders(options);\n\n this.isPending.set(true);\n\n return this.http.delete<any>(urlPath, headers).pipe(\n this.request(options),\n this.handleFinalize()\n );\n }\n\n private buildUrlPath(options: ApiRequest): string {\n return this.pathQueryService.buildAPIPath(options.server, options.path);\n }\n\n private buildHeaders(options: ApiRequest): any {\n return this.headersService.generateHeaders(options.headers);\n }\n\n private buildCombinedHeaders(options: ApiRequest): any {\n const headers = this.headersService.generateHeaders(options.headers);\n return this.combineHeaders(headers, options.stream || false);\n }\n\n private request<T>(options: ApiRequest): (source: Observable<any>) => Observable<T> {\n return (source$: Observable<any>): Observable<T> => {\n return source$.pipe(\n map(data => {\n if (options?.adapter) {\n return Array.isArray(data)\n ? data.map((item: any) => options.adapter(item))\n : options.adapter(data);\n }\n return data;\n })\n );\n };\n }\n\n downloadFileRequest(options: ApiRequest): Observable<any> {\n this.isPending.set(true);\n\n const urlPath = this.buildUrlPath(options);\n\n return this.http.get(urlPath, { responseType: 'blob', observe: 'events', reportProgress: true })\n .pipe(\n map((event: HttpEvent<any>) => {\n this.isPending.set(true);\n\n if (event instanceof HttpHeaderResponse) {\n if (event.status !== 200) {\n this.isPending.set(false);\n throw new Error('Download failed');\n }\n }\n\n switch (event.type) {\n case HttpEventType.DownloadProgress:\n const status = (event.total) ? Math.round(event.loaded / (event.total || 1) * 100) : 100;\n this.progress.set(status);\n return status;\n\n case HttpEventType.Response:\n try {\n const fileNamePath = (options?.saveAs) ? options.saveAs : (options.path) ? options.path[options.path.length - 1] : [];\n const header_content = event.headers.get('Content-Disposition') || '';\n const file = (header_content) ? header_content.split('=')[1].substring(0, header_content.split('=')[1].length) : '';\n\n const fileName = (fileNamePath !== '') ? fileNamePath : file;\n\n if (fileName === '') {\n this.isPending.set(false);\n throw new Error('Save File: (file name and extension) not found in Headers or Path');\n }\n\n this.downloadFile(fileName, event.body);\n this.isPending.set(false);\n\n return 100;\n\n } catch (error) {\n throw new Error('Download failed');\n }\n\n default:\n this.isPending.set(false);\n return 0;\n }\n }),\n catchError(err => {\n return throwError(() => err);\n })\n );\n }\n\n private handleFinalize(): (source: Observable<any>) => Observable<any> {\n return finalize(() => this.isPending.set(false));\n }\n\n private downloadFile(file: string, fileData: any) {\n const navigatorAny = window.navigator as any;\n const extension = file.split('.')[1]?.toLowerCase();\n const newBlob = new Blob([fileData], { type: this.createFileType(extension) });\n\n if (navigatorAny.msSaveOrOpenBlob) {\n navigatorAny.msSaveOrOpenBlob(newBlob, file);\n } else {\n const link = document.createElement('a');\n const url = window.URL.createObjectURL(newBlob);\n link.href = url;\n link.download = file;\n link.click();\n window.URL.revokeObjectURL(url);\n }\n }\n\n private createFileType(ext: string): string {\n let fileType = \"\";\n\n if (ext === 'pdf' || ext === 'csv') fileType = `application/${ext}`;\n else if (ext === 'jpeg' || ext === 'jpg' || ext === 'png') fileType = `image/${ext}`;\n else if (ext === 'txt') fileType = 'text/plain';\n else if (ext === 'ppt' || ext === 'pot' || ext === 'pps' || ext === 'ppa') fileType = 'application/vnd.ms-powerpoint';\n else if (ext === 'pptx') fileType = 'application/vnd.openxmlformats-officedocument.presentationml.presentation';\n else if (ext === 'doc' || ext === 'dot') fileType = 'application/msword';\n else if (ext === 'docx') fileType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n else if (ext === 'xls' || ext === 'xlt' || ext === 'xla') fileType = 'application/vnd.ms-excel';\n else if (ext === 'xlsx') fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n\n return fileType;\n }\n\n private combineHeaders(headers: any, isStreaming: boolean) {\n return (isStreaming)\n ? {\n ...headers,\n observe: 'events',\n responseType: 'text',\n reportProgress: true,\n Accept: 'text/event-stream'\n }\n : headers;\n }\n}\n","import { Inject, inject, Injectable, Injector, Optional, signal } from '@angular/core';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Observable, Subject, throwError } from 'rxjs';\nimport { tap, map, finalize, catchError } from 'rxjs/operators';\n\nimport { ApiRequest } from '../request-manager-state-service/models/api-request.model';\nimport { RequestSignalsService } from './request-signals.service'; // 👈 updated\nimport { requestPolling, countdown, delayedRetry } from './rxjs-operators';\n\nimport { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigOptions } from '../../models';\nimport { ObjectMergerService } from '../utils/object-merger.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HTTPManagerSignalsService<T> extends RequestSignalsService { // 👈 use signals service\n\n toastMessage = inject(ToastMessageDisplayService);\n ng_injector = inject(Injector);\n objectMergerService = inject(ObjectMergerService);\n\n // ✅ Replaced BehaviorSubjects with Angular signals\n countdown = signal<number>(0);\n error = signal<string | boolean>(false);\n data = signal<any>(null);\n\n private polling$ = new Subject<void>();\n\n config = ApiRequest.adapt();\n\n constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {\n super();\n this.config = configOptions\n ? ApiRequest.adapt(configOptions.httpRequestOptions)\n : this.config;\n }\n\n // REQUESTS\n getRequest<T>(options?: ApiRequest, params?: any[]) {\n this.isPending.set(true);\n this.data.set(null);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.getRecordRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n tap(data => this.data.set(data)),\n finalize(() => this.isPending.set(false)),\n catchError((err) => {\n if (updatedOptions.displayError) this.handleErrorWithSnackBar(err);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n postRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {\n this.isPending.set(true);\n this.data.set(null);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.createRecordRequest;\n const requests = this.createRequest(func, updatedOptions, data);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n tap(data => this.data.set(data)),\n finalize(() => this.isPending.set(false)),\n catchError((err) => {\n if (updatedOptions.displayError) this.handleErrorWithSnackBar(err);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n putRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {\n this.isPending.set(true);\n this.data.set(null);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.updateRecordRequest;\n const requests = this.createRequest(func, updatedOptions, data);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n tap(data => this.data.set(data)),\n finalize(() => this.isPending.set(false)),\n catchError((err) => {\n if (updatedOptions.displayError) this.handleErrorWithSnackBar(err);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n deleteRequest<T>(options: ApiRequest, params?: any[]) {\n this.isPending.set(true);\n this.data.set(null);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.deleteRecordRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n tap(data => this.data.set(data)),\n finalize(() => this.isPending.set(false)),\n catchError((err) => {\n if (updatedOptions.displayError) this.handleErrorWithSnackBar(err);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n downloadRequest<T>(options: ApiRequest, params?: any[], saveAs?: string) {\n this.isPending.set(true);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.downloadFileRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n catchError((err) => {\n this.error.set(true);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n // --- private helpers ---\n private createObservable<T>(options: ApiRequest, request$: Observable<T>, funcName: string) {\n const polling =\n options.polling ? (options.polling > 0 ? true : false) : false;\n\n const isPolling =\n polling &&\n !(funcName === 'deleteRecordRequest' ||\n funcName === 'updateRecordRequest' ||\n funcName === 'createRecordRequest');\n\n this.polling$.next();\n\n const polling$ =\n (isPolling && options.polling) || 0 >= 3\n ? request$.pipe(\n requestPolling((options.polling || 0) + 1, this.polling$, this.isPending),\n tap(() => this.countdown.set(0)),\n tap(() => {\n if (!options.polling) return;\n const count = options.polling ? options.polling : 0;\n countdown(count)\n .pipe(\n map((x: number) => {\n const pollingInSec = options.polling || 0;\n const percentageCompleted = ((pollingInSec - x) / pollingInSec) * 100;\n return Math.round(percentageCompleted);\n })\n )\n .subscribe((countDownValue: number) => {\n this.countdown.set(countDownValue);\n });\n }),\n )\n : request$.pipe(\n catchError((err: any) => {\n if (err instanceof HttpErrorResponse) {\n this.error.set(true);\n return this.handleError(err);\n }\n return throwError(() => err);\n })\n );\n\n return polling$.pipe(\n catchError((err: any, caught: Observable<T>) => {\n if (err instanceof HttpErrorResponse) {\n this.error.set(true);\n if (isPolling) this.stopPolling();\n return this.handleError(err);\n }\n return throwError(() => err);\n }),\n options?.retry && options.retry.times > 0\n ? delayedRetry((options.retry.delay || 3) * 1000, (options.retry.times || 0) - 1)\n : (source: Observable<T>) => source\n );\n }\n\n private createRequest(func: Function, options: ApiRequest, data?: any | any[]) {\n const dataItem = this.prepareRequestData(options, data, func.name);\n return func.bind(this)(dataItem.options, dataItem.data);\n }\n\n private prepareRequestData(options: ApiRequest, data: any, funcName: string) {\n if ((options.mapper && funcName === 'updateRecordRequest') || funcName === 'createRecordRequest') {\n if (options?.mapper) {\n data = options.mapper\n ? Array.isArray(data)\n ? map((item) => options.mapper(item))\n : options.mapper(data)\n : data;\n }\n } else {\n if (options?.adapter) {\n data = Array.isArray(data)\n ? map((item) => options.adapter(item))\n : options.adapter(data);\n }\n }\n return { options: options, data: data };\n }\n\n private handleError(error: Response | any) {\n this.error.set(error.message || `${error.status} - ${error.statusText}`);\n return throwError(() => error);\n }\n\n private handleErrorWithSnackBar(error: Response | any) {\n const displayError = ToastDisplay.adapt({\n message: error.message || `${error.status} - ${error.statusText}`,\n action: 'OK',\n color: ToastColors.ERROR,\n icon: 'error',\n duration: 5 * 1000,\n });\n this.toastMessage.toastMessage(displayError);\n }\n\n private stopPolling() {\n this.isPending.set(false);\n this.polling$.next();\n }\n\n private defineReqOptions(options: any, params?: any[]) {\n const req = ApiRequest.adapt(options);\n if (req?.path) req.path = params ? [...req.path, ...params] : req.path;\n\n const optionsReq = req ? req : ApiRequest.adapt();\n const updatedOptions = this.objectMergerService.mergeOptions(optionsReq);\n\n return updatedOptions;\n }\n}\n","import { RetryOptions } from \"../../request-manager-services\"\nimport { WSOptions } from \"./ws-options.model\"\n\nexport interface ApiRequestInterface {\n server: string\n path?: any[]\n headers?: any\n adapter?: any\n mapper?: any\n polling?: number // seconds (undefined | 0 = none)\n retry?: RetryOptions\n stream?: boolean\n displayError?: boolean\n saveAs?: string\n fileContentHeader?: string\n ws?: WSOptions // Websocket Options\n}\n\nexport class ApiRequest implements ApiRequestInterface {\n\n constructor(\n public server = '',\n public path?: any[],\n public headers?: any,\n public adapter?: any,\n public mapper?: any,\n public polling?: number,\n public retry?: RetryOptions,\n public stream?: boolean,\n public displayError?: boolean,\n public saveAs?: string,\n public fileContentHeader?: string,\n public ws?: WSOptions,\n ) {}\n\n static adapt(item?: any): ApiRequest {\n\n const server = Array.isArray(item?.server) ? item.server.join('/') : item?.server || '';\n\n return new ApiRequest(\n server,\n (item?.path) ? item.path : [],\n (item?.headers) ? item.headers : {},\n item?.adapter,\n item?.mapper,\n item?.polling ? Math.floor(item.polling) : 0,\n item?.retry ? RetryOptions.adapt(item.retry) : RetryOptions.adapt(),\n (item?.stream) ? item.stream : false,\n (item?.displayError) ? item.displayError : false,\n item?.saveAs,\n item?.fileContentHeader,\n item?.ws,\n )\n\n }\n\n}\n","export interface RequestOptionsInterface {\n path: any[],\n headers: any,\n}\n\nexport class RequestOptions implements RequestOptionsInterface {\n\n constructor(\n public path: any[] = [],\n public headers = {},\n ) {}\n\n static adapt(item?: any): RequestOptions {\n\n return new RequestOptions(\n item?.path,\n item?.headers,\n )\n\n }\n\n}\n","import { 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 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 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?.user,\n item?.retry\n )\n\n }\n\n}\n","import { Inject, Injectable, Optional, inject } from '@angular/core';\n\nimport { ApiRequest } from '../request-manager-state-service/models';\nimport { SettingOptions } from '../local-storage-manager-service';\nimport { UtilsService } from './utils.service';\n\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigHTTPOptions, ConfigOptions, LocalStorageOptions } from '../request-manager-services';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ObjectMergerService {\n\n utils = inject(UtilsService);\n\n constructor(@Inject(CONFIG_SETTINGS_TOKEN) @Optional() private configOptions?: ConfigOptions) {\n if (!this.configOptions) this.configOptions = ConfigOptions.adapt()\n }\n\n mergeOptions(options = ApiRequest.adapt()) {\n\n const configForRoot = (this.configOptions?.httpRequestOptions) ? this.configOptions.httpRequestOptions : ConfigHTTPOptions.adapt()\n const mergedOptions = ApiRequest.adapt(options)\n\n mergedOptions.server = (options && options.server === '') ? configForRoot?.server || '' : options.server\n\n mergedOptions.path = [ ...options.path || [], ...configForRoot?.path || [] ]\n\n mergedOptions.headers = { ...options.headers || {}, ...configForRoot?.headers || {} }\n\n mergedOptions.retry = (options && (options?.retry?.times !== 0 || options?.retry?.delay !== 3)) ? options.retry : configForRoot?.retry || { times: 0, delay: 3 };\n\n mergedOptions.polling = (options && options?.polling !== 0) ? options.polling : configForRoot?.polling || 0;\n\n mergedOptions.displayError = (options && options?.displayError) ? options.displayError : configForRoot?.displayError || false;\n\n mergedOptions.stream = (options && options?.stream) ? options.stream : configForRoot?.stream || false;\n\n return mergedOptions;\n\n }\n\n mergeStorageOptions(options = SettingOptions.adapt()) {\n\n const configForRoot = (this.configOptions?.LocalStorageOptions) ? this.configOptions.LocalStorageOptions : LocalStorageOptions.adapt()\n const configForRootOptions = configForRoot.options || LocalStorageOptions.adapt().options\n\n const mergedOptions = SettingOptions.adapt(options)\n\n // storage type\n mergedOptions.storage = (options && (typeof options.storage !== 'undefined')) ? options.storage : (configForRootOptions?.storage ?? 0)\n\n // expires: prefer explicit numeric expires; if not provided, compute from expiresIn string; otherwise use config default\n // if an explicit, non-zero numeric expires is provided, use it\n if (options && (typeof options.expires !== 'undefined') && options.expires !== null && Number(options.expires) > 0) {\n mergedOptions.expires = Number(options.expires);\n } else if (options && options.expiresIn) {\n // compute numeric epoch from expiresIn string using UtilsService if available\n try {\n mergedOptions.expires = this.utils ? this.utils.expires(options.expiresIn) : 0;\n } catch {\n mergedOptions.expires = 0;\n }\n } else {\n mergedOptions.expires = configForRootOptions?.expires ?? 0;\n }\n\n // keep expiresIn string if explicitly provided, otherwise use config default\n mergedOptions.expiresIn = (options && (typeof options.expiresIn !== 'undefined')) ? options.expiresIn : (configForRootOptions?.expiresIn || '')\n\n mergedOptions.encrypted = (options && (typeof options.encrypted !== 'undefined')) ? options.encrypted : (configForRootOptions?.encrypted || false)\n\n return mergedOptions;\n\n }\n\n}\n","import { Inject, Injectable, OnDestroy, Optional, inject } from '@angular/core';\nimport { ComponentStore } from '@ngrx/component-store';\nimport { withLatestFrom, map, tap } from 'rxjs/operators';\n\nimport { UtilsService } from '../utils/utils.service';\nimport { SymmetricalEncryptionService } from '../utils/encryption/symmetrical-encryption.service';\n\nimport { StorageOption, StorageType } from './models';\nimport { SettingOptions } from './models/setting-options.model';\nimport { StorageData } from './models/storage-data.model';\nimport { EncryptionTestService } from '../utils/encryption/encryption-test.service';\nimport { interval } from 'rxjs';\nimport { AppService } from '../utils/app.service';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigOptions } from '../request-manager-services';\nimport { ObjectMergerService } from '../utils/object-merger.service';\n\nexport interface State {\n localStores: StorageData[]\n sessionStores: StorageData[]\n settings: StorageOption[]\n}\n\nconst storage: State = {\n localStores: [],\n sessionStores: [],\n settings: [],\n};\n\n@Injectable({ providedIn: 'root' })\nexport class LocalStorageManagerService extends ComponentStore<State> implements OnDestroy {\n\n storageName = 'storage'\n storageSettingsName = 'global-storage'\n defaultOptions = SettingOptions.adapt()\n\n stateRetrieved = false\n encrypted = false\n\n app = inject(AppService)\n utils = inject(UtilsService)\n objectMergerService = inject(ObjectMergerService)\n encryption = inject(SymmetricalEncryptionService)\n encryptionTest = inject(EncryptionTestService)\n\n // SELECTORS\n\n private readonly data$ = this.select((state) => state)\n\n readonly stores$ = this.select((state) => state.settings)\n\n readonly storeExists$ = (store: string) => this.select(\n this.data$,\n (data) => data.settings.find(item => item.name === store) ? true : false\n )\n\n readonly store$ = (store: string) => this.select(\n this.data$,\n (data) => {\n store = store.toLowerCase()\n const foundStore = data.settings.find(item => item.name === store)\n\n if(foundStore) {\n\n const options = SettingOptions.adapt(foundStore.options)\n\n const found = foundStore.options?.storage === StorageType.GLOBAL\n ? data.localStores.find(item => item.id === foundStore.id) as StorageData\n : data.sessionStores.find(item => item.id === foundStore.id) as StorageData\n\n if(!found) {\n this.deleteStore({ name: store })\n return\n }\n\n if(!this.app?.appID) {\n console.warn('No App ID found - AppId not Provided')\n return\n }\n\n const storageData = (options.encrypted) ? this.encryption.decrypt(found.data, this.app.appID) : found.data\n return (this.isString(storageData)) ? JSON.parse(storageData): storageData\n\n } else {\n return null\n }\n\n }\n )\n\n readonly settings$ = this.select(state => (state) ? state.settings : storage.settings)\n\n readonly setting$ = (store: string) => this.select(\n this.data$,\n (state) => {\n const foundSetting = state.settings.find(item => item.name === store)\n return (foundSetting) ? foundSetting : null\n }\n )\n\n persistence$ = this.data$\n .subscribe(data => {\n if(this.stateRetrieved) this.persistState(data)\n })\n\n startTimer() {\n const timer$ = interval(1000 * 3).pipe(\n withLatestFrom(this.data$),\n map(([_, state]) => state),\n tap((state) => {\n\n const expired: StorageOption[] = this.expired(state) ? this.expired(state) : []\n\n if (expired.length > 0) {\n\n const ids = expired.map((item) => item.id)\n\n const updatedState: State = {\n ...state,\n localStores: state.localStores.filter((item) => !ids.includes(item.id)),\n sessionStores: state.sessionStores.filter((item) => !ids.includes(item.id)),\n settings: state.settings.filter((item) => !ids.includes(item.id)),\n };\n\n this.persistState(updatedState)\n this.updateState(updatedState)\n\n }\n })\n );\n\n timer$.subscribe()\n }\n\n private updateState = this.updater((state, updatedState: State) => ({\n ...updatedState,\n }))\n\n\n constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {\n\n super(storage)\n\n this.storageName = configOptions?.LocalStorageOptions?.storageName || this.storageName\n this.storageSettingsName = configOptions?.LocalStorageOptions?.storageSettingsName || this.storageSettingsName\n this.defaultOptions = configOptions?.LocalStorageOptions?.options || this.defaultOptions\n\n this.retrieveState()\n this.startTimer()\n }\n\n readonly setStore = this.updater((state: State, store: { id: string, name: string, data: any, options: SettingOptions }): any => {\n\n const settings = StorageOption.adapt(store)\n store.name = store.name.toLowerCase()\n settings.options = this.objectMergerService.mergeStorageOptions(settings.options)\n\n const type = store.options.storage\n const hasStore = this.hasGlobalStorage(type, store.id)\n\n store.name = this.validStoreName(store.name)\n\n if(!hasStore) {\n console.warn(`No such Store: ${store.name}`)\n return state\n } else {\n\n const str = this.encryptionTest.isEncrypted(store.data) ? store.data : JSON.stringify(store.data)\n const dataStr = (this.isObjectOrArray(str)) ? (store.options.encrypted) ? this.encryption.encrypt(str, this.app.appID) : store.data : store.data\n\n const localData = (dataStr && settings.options?.storage === StorageType.GLOBAL) ? [{ data: dataStr, id: settings.id }] : []\n const sessionData = (dataStr && settings.options?.storage === StorageType.SESSION) ? [{ data: dataStr, id: settings.id }] : []\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n settings: [...state.settings, ...[settings]],\n }\n\n }\n\n })\n\n readonly createStore = this.updater((state: State, store: { id?: string, name: string, data: any, options: SettingOptions }): any => {\n\n store.name = store.name.toLowerCase()\n store.options = this.objectMergerService.mergeStorageOptions(store.options)\n const settings = StorageOption.adapt(store)\n settings.options = this.objectMergerService.mergeStorageOptions(settings.options)\n const foundStore = state?.settings.some(item => item.name === store.name)\n\n const expires = (settings.options?.expiresIn) ? this.utils.expires(settings.options?.expiresIn) : 0\n if(settings.options) settings.options.expires = expires\n\n store.name = this.validStoreName(store.name)\n\n if(foundStore) {\n return state\n } else {\n if(!this.isObjectOrArray(store.data)) {\n console.warn('Data must ba an Object or Array')\n return\n }\n\n store.data = (this.isString(store.data)) ? JSON.parse(store.data) : store.data\n const dataStr = (store.options.encrypted) ? this.encryption.encrypt(store.data, this.app.appID) : store.data\n\n const localData = (settings.options?.storage === StorageType.GLOBAL) ? [{ data: dataStr, id: settings.id }] : []\n const sessionData = (settings.options?.storage === StorageType.SESSION) ? [{ data: dataStr, id: settings.id }] : []\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n settings: [...state.settings, ...[settings]],\n }\n\n }\n\n })\n\n readonly updateStore = this.updater((state: State, store: { name: string, data: any }): any => {\n\n store.name = store.name.toLowerCase()\n store.name = this.validStoreName(store.name)\n\n const settings = state.settings.find(item => item.name === store.name)\n\n if(settings) {\n\n const type = settings.options?.storage\n const hasStore = this.hasGlobalStorage(type, settings.id || '')\n\n if(!hasStore) {\n console.warn(`No such Store: ${store.name}`)\n } else {\n\n const dataStr = (settings.options?.encrypted) ? this.encryption.encrypt(store.data, this.app.appID) : store.data\n\n const localData = (dataStr && settings.options?.storage === StorageType.GLOBAL) ? [{ data: dataStr, id: settings.id }] : []\n const sessionData = (dataStr && settings.options?.storage === StorageType.SESSION) ? [{ data: dataStr, id: settings.id }] : []\n\n state.localStores = state.localStores.filter(item => item.id !== settings.id)\n state.sessionStores = state.sessionStores.filter(item => item.id !== settings.id)\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n }\n\n }\n }\n\n return state\n\n })\n\n readonly deleteStore = this.updater((state: State, store: { name: string }): any => {\n\n store.name = store.name.toLowerCase()\n store.name = this.validStoreName(store.name)\n\n const id = state.settings.find(item => item.name === store.name)?.id\n\n if(id) {\n\n const settings = state.settings.filter(item => item.id !== id)\n const localData = state.localStores.filter(item => item.id !== id)\n const sessionData = state.sessionStores.filter(item => item.id !== id)\n\n return {\n ...state,\n localStores: [...localData],\n sessionStores: [...sessionData],\n settings: [...settings],\n }\n\n } else {\n console.warn(`No such Store: ${store.name}`)\n return state\n }\n\n })\n\n resetStore() {\n\n const newState = {\n localStores: [],\n sessionStores: [],\n settings: [],\n }\n\n this.updateState(newState)\n this.persistState(newState)\n\n }\n\n private persistState(state: State|null) {\n\n if(!state) return\n\n const strLocal = JSON.stringify(state.localStores)\n localStorage.setItem(this.storageName, strLocal)\n\n const strSession = JSON.stringify(state.sessionStores)\n sessionStorage.setItem(this.storageName, strSession)\n\n const settingsStr = this.encryption.encrypt(state.settings, this.app.appID)\n localStorage.setItem(this.storageSettingsName, settingsStr || '')\n\n }\n\n private expired(state: State|null) {\n\n if(!state) return []\n return state.settings?.filter(item => (item.options?.expires || 0) > 0 && this.utils.hasExpired(item.options?.expires || 0))\n\n }\n\n retrieveState() {\n\n const str = localStorage.getItem(this.storageSettingsName)\n\n const localStr = localStorage.getItem(this.storageName)\n const sessionStr = sessionStorage.getItem(this.storageName)\n\n const localData: StorageData[] = (localStr) ? JSON.parse(localStr) : null\n const sessionData: StorageData[] = (sessionStr) ? JSON.parse(sessionStr) : null\n\n const decryptedStr = str ? this.encryption.decrypt(str, this.app.appID) : null\n const settings: StorageOption[] = (decryptedStr && decryptedStr !== null) ? JSON.parse(decryptedStr) : []\n\n settings.forEach(store => {\n\n const expired = (store.options?.expires || 0) > 0 && this.utils.hasExpired(store.options?.expires || 0)\n\n if(!expired) {\n\n const hasStorage = this.hasGlobalStorage(store.options?.storage, store.id || '')\n\n if(!hasStorage) {\n this.createStore({ id: store.id, name: store.name, data: [], options: SettingOptions.adapt(store.options)})\n } else {\n const storeData = (store.options?.storage === StorageType.GLOBAL) ? localData.find(item => item.id === store.id) : sessionData.find(item => item.id === store.id)\n this.setStore({ id: store.id || '', name: store.name, data: storeData?.data, options: SettingOptions.adapt(store.options) })\n }\n\n }\n\n })\n\n this.stateRetrieved = true\n\n }\n\n private isObjectOrArray = (obj: any) => {\n\n let parsed;\n\n try {\n parsed = (typeof obj === 'object') ? obj : JSON.parse(obj)\n } catch (e) {\n return false;\n }\n\n if (Array.isArray(parsed)) {\n const allStringsOrObjectsOrNumbers = parsed.every(item =>\n typeof item === 'string' ||\n typeof item === 'object' && item !== null ||\n typeof item === 'number'\n );\n return allStringsOrObjectsOrNumbers;\n }\n\n return typeof parsed === 'object' && parsed !== null;\n\n }\n\n private isString (obj: any) {\n return (Object.prototype.toString.call(obj) === '[object String]')\n }\n\n private fixAndParseJSON(jsonString: string): any {\n const fixedString = jsonString\n .replace(/'/g, '\"')\n .replace(/([{,]\\s*)(\\w+)\\s*:/g, '$1\"$2\":')\n .replace(/,\\s*(\\}|\\])/g, '$1');\n\n try {\n return JSON.parse(fixedString);\n } catch (error: any) {\n throw new Error('Failed to parse JSON: ' + error.message);\n }\n }\n\n private validStoreName(str: string) {\n return str\n .toLowerCase() // Convert to lowercase\n .replace(/\\s+/g, '_') // Replace spaces with underscores\n .replace(/[^ -~]/g, ''); // Remove non-ASCII characters\n }\n\n private hasGlobalStorage(type: StorageType = StorageType.GLOBAL, id: string) {\n\n const strData: StorageOption[] = []\n\n if(type === StorageType.GLOBAL) {\n const str = localStorage.getItem(this.storageName)\n strData.push(...(str ? JSON.parse(str) : []))\n } else {\n const str = sessionStorage.getItem(this.storageName)\n strData.push(...(str ? JSON.parse(str) : []))\n }\n\n const found = strData.find(store => store.id === id)\n return (found) ? true : false\n\n }\n\n override ngOnDestroy() {\n this.persistence$.unsubscribe()\n }\n\n}\n","import { Inject, Injectable, Optional, WritableSignal, signal, computed, effect, inject } from '@angular/core';\n\nimport { UtilsService } from '../utils/utils.service';\nimport { SymmetricalEncryptionService } from '../utils/encryption/symmetrical-encryption.service';\n\nimport { StorageOption, StorageType } from './models';\nimport { SettingOptions } from './models/setting-options.model';\nimport { StorageData } from './models/storage-data.model';\nimport { EncryptionTestService } from '../utils/encryption/encryption-test.service';\nimport { AppService } from '../utils/app.service';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigOptions } from '../request-manager-services';\nimport { ObjectMergerService } from '../utils/object-merger.service';\n\nexport interface State {\n localStores: StorageData[];\n sessionStores: StorageData[];\n settings: StorageOption[];\n}\n\nconst initialState: State = {\n localStores: [],\n sessionStores: [],\n settings: [],\n};\n\n@Injectable({ providedIn: 'root' })\nexport class LocalStorageSignalsManagerService {\n\n private state: WritableSignal<State> = signal(initialState);\n\n storageName = 'storage';\n storageSettingsName = 'global-storage';\n defaultOptions = SettingOptions.adapt();\n\n stateRetrieved = false;\n encrypted = false;\n\n app = inject(AppService);\n utils = inject(UtilsService);\n objectMergerService = inject(ObjectMergerService);\n encryption = inject(SymmetricalEncryptionService);\n encryptionTest = inject(EncryptionTestService);\n\n // --- SELECTORS ---\n\n readonly stores = computed(() => this.state().settings);\n\n readonly storeExists = (store: string) =>\n computed(() => !!this.state().settings.find(item => item.name === store));\n\n readonly store = (store: string) =>\n computed(() => {\n const data = this.state();\n const foundStore = data.settings.find(item => item.name === store);\n if (!foundStore) return null;\n\n const options = SettingOptions.adapt(foundStore.options);\n const found =\n options.storage === StorageType.GLOBAL\n ? data.localStores.find(item => item.id === foundStore.id)\n : data.sessionStores.find(item => item.id === foundStore.id);\n\n if (!found) {\n this.deleteStore({ name: store });\n return null;\n }\n\n if (!this.app?.appID) {\n console.warn('No App ID found - AppId not Provided');\n return null;\n }\n\n const storageData = options.encrypted\n ? this.encryption.decrypt(found.data, this.app.appID)\n : found.data;\n\n return this.isString(storageData) ? JSON.parse(storageData) : storageData;\n });\n\n readonly settings = computed(() => this.state().settings);\n\n readonly setting = (store: string) =>\n computed(() => this.state().settings.find(item => item.name === store) ?? null);\n\n constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {\n this.storageName = configOptions?.LocalStorageOptions?.storageName || this.storageName;\n this.storageSettingsName = configOptions?.LocalStorageOptions?.storageSettingsName || this.storageSettingsName;\n this.defaultOptions = configOptions?.LocalStorageOptions?.options || this.defaultOptions;\n\n this.retrieveState();\n // Auto-persist when state changes\n effect(() => {\n if (this.stateRetrieved) {\n this.persistState(this.state());\n }\n });\n\n // Expiration timer every 3s\n setInterval(() => {\n const state = this.state();\n const expired = this.expired(state);\n if (expired.length > 0) {\n const ids = expired.map(i => i.id);\n const updated: State = {\n ...state,\n localStores: state.localStores.filter(i => !ids.includes(i.id)),\n sessionStores: state.sessionStores.filter(i => !ids.includes(i.id)),\n settings: state.settings.filter(i => !ids.includes(i.id)),\n };\n this.state.set(updated);\n this.persistState(updated);\n }\n }, 3000);\n }\n\n // --- STATE MUTATORS ---\n\n setStore(store: { id: string; name: string; data: any; options: SettingOptions }) {\n this.state.update(state => {\n const settings = StorageOption.adapt(store);\n settings.options = this.objectMergerService.mergeStorageOptions(settings.options);\n store.name = this.validStoreName(store.name);\n\n const str = this.encryptionTest.isEncrypted(store.data) ? store.data : JSON.stringify(store.data);\n const dataStr =\n this.isObjectOrArray(str) && store.options.encrypted\n ? this.encryption.encrypt(str, this.app.appID)\n : store.data;\n\n const localData =\n dataStr && settings.options?.storage === StorageType.GLOBAL\n ? [{ data: dataStr, id: settings.id }]\n : [];\n const sessionData =\n dataStr && settings.options?.storage === StorageType.SESSION\n ? [{ data: dataStr, id: settings.id }]\n : [];\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n settings: [...state.settings, settings],\n };\n });\n }\n\n createStore(store: { id?: string; name: string; data: any; options: SettingOptions }) {\n this.state.update(state => {\n const settings = StorageOption.adapt(store);\n settings.options = this.objectMergerService.mergeStorageOptions(settings.options);\n\n if (state.settings.some(item => item.name === store.name)) {\n return state;\n }\n\n if (!this.isObjectOrArray(store.data)) {\n console.warn('Data must be an Object or Array');\n return state;\n }\n\n const dataStr =\n store.options.encrypted ? this.encryption.encrypt(store.data, this.app.appID) : store.data;\n\n const localData =\n settings.options?.storage === StorageType.GLOBAL ? [{ data: dataStr, id: settings.id }] : [];\n const sessionData =\n settings.options?.storage === StorageType.SESSION ? [{ data: dataStr, id: settings.id }] : [];\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n settings: [...state.settings, settings],\n };\n });\n }\n\n updateStore(store: { name: string; data: any }) {\n this.state.update(state => {\n const settings = state.settings.find(item => item.name === store.name);\n if (!settings) return state;\n\n const dataStr =\n settings.options?.encrypted\n ? this.encryption.encrypt(store.data, this.app.appID)\n : store.data;\n\n const localData =\n settings.options?.storage === StorageType.GLOBAL ? [{ data: dataStr, id: settings.id }] : [];\n const sessionData =\n settings.options?.storage === StorageType.SESSION ? [{ data: dataStr, id: settings.id }] : [];\n\n return {\n ...state,\n localStores: [...state.localStores.filter(i => i.id !== settings.id), ...localData],\n sessionStores: [...state.sessionStores.filter(i => i.id !== settings.id), ...sessionData],\n };\n });\n }\n\n deleteStore(store: { name: string }) {\n this.state.update(state => {\n const id = state.settings.find(item => item.name === store.name)?.id;\n if (!id) return state;\n return {\n ...state,\n localStores: state.localStores.filter(i => i.id !== id),\n sessionStores: state.sessionStores.filter(i => i.id !== id),\n settings: state.settings.filter(i => i.id !== id),\n };\n });\n }\n\n resetStore() {\n const cleared: State = { localStores: [], sessionStores: [], settings: [] };\n this.state.set(cleared);\n this.persistState(cleared);\n }\n\n // --- HELPERS ---\n\n private persistState(state: State) {\n localStorage.setItem(this.storageName, JSON.stringify(state.localStores));\n sessionStorage.setItem(this.storageName, JSON.stringify(state.sessionStores));\n const settingsStr = this.encryption.encrypt(state.settings, this.app.appID);\n localStorage.setItem(this.storageSettingsName, settingsStr || '');\n }\n\n private expired(state: State) {\n return state.settings.filter(\n s => (s.options?.expires || 0) > 0 && this.utils.hasExpired(s.options?.expires!)\n );\n }\n\n retrieveState() {\n\n const str = localStorage.getItem(this.storageSettingsName);\n\n const localStr = localStorage.getItem(this.storageName);\n const sessionStr = sessionStorage.getItem(this.storageName);\n\n const localData: StorageData[] = localStr ? JSON.parse(localStr) : [];\n const sessionData: StorageData[] = sessionStr ? JSON.parse(sessionStr) : [];\n\n const decryptedStr = str ? this.encryption.decrypt(str, this.app.appID) : null;\n const settings: StorageOption[] = decryptedStr ? JSON.parse(decryptedStr) : [];\n\n settings.forEach(store => {\n\n\n // normalize options so we compare numbers and compute expires correctly\n const options = SettingOptions.adapt(store.options);\n\n // if persisted data included expiresIn but not numeric expires, compute it now\n if ((!options.expires || options.expires === 0) && options.expiresIn) {\n try {\n const computed = this.utils.expires(options.expiresIn as string);\n options.expires = computed || 0;\n } catch {\n options.expires = 0;\n }\n }\n\n const expired = (options.expires || 0) > 0 && this.utils.hasExpired(options.expires || 0);\n\n if (!expired) {\n\n const hasStorage = this.hasGlobalStorage(options.storage, store.id || '');\n\n if (!hasStorage) {\n this.createStore({ id: store.id, name: store.name, data: [], options });\n } else {\n const storeData = (options.storage === StorageType.GLOBAL)\n ? localData.find(item => item.id === store.id)\n : sessionData.find(item => item.id === store.id);\n this.setStore({ id: store.id || '', name: store.name, data: storeData?.data, options });\n }\n\n }\n\n });\n\n this.stateRetrieved = true;\n\n // Ensure all stored settings have numeric expires computed and persisted\n try {\n const current = this.state();\n let changed = false;\n const normalizedSettings = current.settings.map(s => {\n const opts = SettingOptions.adapt(s.options);\n if ((!opts.expires || opts.expires === 0) && opts.expiresIn) {\n const computed = this.utils.expires(opts.expiresIn as string) || 0;\n if (computed && computed !== opts.expires) {\n opts.expires = computed;\n changed = true;\n }\n }\n return { ...s, options: opts } as StorageOption;\n });\n\n if (changed) {\n const updated: State = { ...current, settings: normalizedSettings };\n this.state.set(updated);\n this.persistState(updated);\n }\n } catch (e) {\n // swallow normalization errors to avoid breaking init\n }\n\n }\n\n private hasGlobalStorage(type: StorageType = StorageType.GLOBAL, id: string) {\n const strData: StorageData[] = [];\n\n if (type === StorageType.GLOBAL) {\n const str = localStorage.getItem(this.storageName);\n strData.push(...(str ? JSON.parse(str) : []));\n } else {\n const str = sessionStorage.getItem(this.storageName);\n strData.push(...(str ? JSON.parse(str) : []));\n }\n\n const found = strData.find(store => store.id === id);\n return !!found;\n }\n\n private isObjectOrArray(obj: any) {\n try {\n const parsed = typeof obj === 'object' ? obj : JSON.parse(obj);\n return typeof parsed === 'object' && parsed !== null;\n } catch {\n return false;\n }\n }\n\n private isString(obj: any) {\n return Object.prototype.toString.call(obj) === '[object String]';\n }\n\n private validStoreName(str: string) {\n return str.toLowerCase().replace(/\\s+/g, '_').replace(/[^ -~]/g, '');\n }\n}\n","export interface TableSchemaDefInterface {\n table: string\n schema: string\n}\n\nexport class TableSchemaDef implements TableSchemaDefInterface {\n constructor(\n public table = 'unknown',\n public schema: string = '',\n ) {}\n\n static adapt(item?: any): TableSchemaDef {\n\n const schemaArray = (item?.schema && Array.isArray(item.schema)) ? item.schema : item.schema.split(',')\n const schema = schemaArray.map((item: string) => this.cleanString(item)).join()\n\n return new TableSchemaDef(\n (item?.table) ? this.cleanString(item.table) : 'unknown',\n schema,\n )\n\n }\n\n static cleanString(str: string): string {\n // Allow alphanumeric, spaces, underscores, and Dexie schema characters (+, &, *, [, ])\n const cleanStr = str\n .replace(/[^a-zA-Z0-9\\s_+\\&*\\[\\]]/g, '')\n .trim();\n\n return cleanStr;\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport Dexie, {Table} from 'dexie';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DbService extends Dexie {\n\n readonly storageDB = \"global_storage_db\"\n\n get db() { return this; }\n\n private dbReady: Promise<void>;\n\n constructor() {\n\n super(\"global_storage_db\");\n\n this.on('blocked', () => {\n console.warn('Database upgrade blocked! Please close other tabs/windows of this app.');\n });\n\n this.on('versionchange', () => {\n console.warn('Database version changed in another tab. Reloading...');\n window.location.reload();\n });\n\n this.dbReady = this.init();\n\n }\n\n private async init() {\n try {\n // Check if database already exists\n const dbExists = await Dexie.exists(this.storageDB);\n\n if (dbExists) {\n // Database exists - just open it without declaring version\n // This allows Dexie to use the existing schema and version\n console.log(`Database \"${this.storageDB}\" already exists. Opening with existing schema...`);\n\n if (!this.isOpen()) {\n await this.open();\n }\n\n console.log(`✅ Connected to existing database. Current version: ${this.verno}`);\n console.log(`📊 Existing tables: ${this.getTables.join(', ')}`);\n } else {\n // New database - initialize with empty schema at version 1\n console.log(`Creating new database \"${this.storageDB}\"...`);\n\n if (this.isOpen()) {\n this.close();\n }\n\n this.version(1).stores({});\n await this.open();\n console.log(`✅ New database initialized. Current version: ${this.verno}`);\n }\n } catch (err) {\n console.error('Failed to initialize database:', err);\n throw err;\n }\n }\n\n protected async createNewDatabase() {\n return this.dbReady;\n }\n\n get vr() {\n return this.verno;\n }\n\n get nextVr() {\n const v = this.verno;\n return (isNaN(v) || v === 0) ? 1 : v + 1;\n }\n\n get getTables() {\n return this.tables.map((table) => table.name);\n }\n\n async hasDatabase() {\n return await Dexie.exists(this.storageDB);\n }\n\n getTable(tableName: string): Table<any, any> | undefined {\n try {\n return this.table(tableName);\n } catch (error) {\n return undefined;\n }\n }\n\n tableExists(tableName: string): boolean {\n return this.tables.some(t => t.name === tableName);\n }\n\n protected async updateTable(tableName: string, find: { key: string, value: string | number }, data: any): Promise<boolean> {\n const table = this.getTable(tableName);\n if (!table || !find || !find.key) return false;\n\n try {\n const count = await table.where(find.key).equals(find.value).modify(data);\n return count > 0;\n } catch (error) {\n console.error('Error updating table:', error);\n return false;\n }\n }\n\n protected async createTable(tableName: string, schema: string) {\n if (!tableName || !schema) return;\n\n await this.dbReady;\n\n const safeTableName = this.cleanTableName(tableName);\n const safeSchema = schema.trim();\n\n if (this.tableExists(safeTableName)) return;\n\n const currentSchema = this.getCurrentSchema();\n console.log('Current Schema before update:', currentSchema);\n\n currentSchema[safeTableName] = safeSchema;\n\n const nextVersion = this.verno + 1;\n console.log(`Creating table ${safeTableName}. Upgrading to version ${nextVersion}. New Schema:`, currentSchema);\n\n if (this.isOpen()) {\n this.close();\n }\n\n this.version(nextVersion).stores(currentSchema);\n\n try {\n await this.open();\n const created = this.tables.some(t => t.name === safeTableName);\n if (!created) {\n console.error(`CRITICAL: Table ${safeTableName} was NOT created after upgrade! Tables found:`, this.tables.map(t => t.name));\n } else {\n console.log(`Database opened successfully version ${this.verno}. Table ${safeTableName} verified.`);\n }\n } catch (err) {\n console.error('Error opening database after schema update:', err);\n }\n }\n\n protected async DBOpened() {\n if (!this.isOpen()) {\n try {\n await this.open();\n return true;\n } catch (err) {\n return false;\n }\n }\n return true;\n }\n\n private getCurrentSchema(): { [key: string]: string } {\n const schema: { [key: string]: string } = {};\n\n if (!this.tables || this.tables.length === 0) {\n return schema;\n }\n\n this.tables.forEach(table => {\n const primKey = table.schema.primKey;\n const indexes = table.schema.indexes;\n\n let schemaStr = \"\";\n\n if (primKey.auto) schemaStr += \"++\";\n\n if (Array.isArray(primKey.keyPath)) {\n schemaStr += `[${primKey.keyPath.join('+')}]`;\n } else {\n schemaStr += primKey.keyPath || \"\";\n }\n\n indexes.forEach(idx => {\n schemaStr += \",\";\n if (idx.unique) schemaStr += \"&\";\n if (idx.multi) schemaStr += \"*\";\n\n if (Array.isArray(idx.keyPath)) {\n schemaStr += `[${idx.keyPath.join('+')}]`;\n } else {\n schemaStr += idx.keyPath || \"\";\n }\n });\n\n schema[table.name] = schemaStr;\n });\n return schema;\n }\n\n protected cleanTableName(str: string): string {\n return str\n .replace(/[^a-zA-Z0-9\\s_]/g, '')\n .replace(/\\s+/g, '_')\n .trim()\n .toLowerCase();\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { DbService } from './db.storage.service';\n\nimport { TableSchemaDef } from './models/table-schema';\nimport { EMPTY, from, Observable } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DatabaseManagerService extends DbService {\n\n constructor() {\n super()\n }\n\n getDatabaseTables() {\n return from(this.DBOpened()).pipe(\n map(() => this.tables.map((item: any) => item.name))\n )\n }\n\n databaseExists(): Observable<boolean> {\n return from(this.hasDatabase());\n }\n\n hasDatabaseTable(table: string): Observable<boolean> {\n const tableName = this.cleanTableName(table);\n return from(this.DBOpened()).pipe(\n map(() => {\n return this.tableExists(tableName)\n })\n )\n }\n\n getDatabaseTable(table: string): Observable<any> {\n const tableName = this.cleanTableName(table);\n return from(this.DBOpened()).pipe(\n map(() => {\n const found = this.getTable(tableName);\n if(!found) {\n console.warn('No Such Table:', tableName)\n return null;\n }\n return found;\n })\n )\n }\n\n getDatabaseTableSchema(table: string): Observable<string[]> {\n const tableName = this.cleanTableName(table);\n return this.getDatabaseTable(tableName).pipe(\n map((dbTable: any) => {\n if(!dbTable) return []\n const cols = dbTable.schema.indexes.map((col: any) => col.name)\n const pri = dbTable.schema.primKey.name\n return [pri, ...cols]\n })\n )\n }\n\n createDatabaseTable(tableDef: TableSchemaDef) {\n return from(this.createTable(tableDef.table, tableDef.schema)).pipe(\n switchMap(() => this.DBOpened())\n )\n }\n\n updateDatabaseTableSchema(tableDef: TableSchemaDef) {\n return from(this.createTable(tableDef.table, tableDef.schema)).pipe(\n switchMap(() => this.getDatabaseTable(tableDef.table))\n )\n }\n\n // CRUD\n findTableRecords(table: string, column: string, value: any) {\n const tableName = this.cleanTableName(table);\n return this.getDatabaseTable(tableName).pipe(\n switchMap((tableData: any) => {\n if (!tableData) {\n console.warn(`findTableRecords: Table '${tableName}' not found`);\n return from([]);\n }\n return from(tableData.where(column).equals(value).toArray());\n })\n );\n }\n\n findTableRecord(table: string, column: string, value: any) {\n const tableName = this.cleanTableName(table);\n return this.findTableRecords(tableName, column, value).pipe(\n map((records: any) => records && records.length > 0 ? records[0] : null)\n );\n }\n\n getTableRecords(table: string) {\n const tableName = this.cleanTableName(table);\n return this.getDatabaseTable(tableName).pipe(\n switchMap((tableData: any) => {\n if (!tableData) {\n console.warn(`getTableRecords: Table '${tableName}' not found`);\n return from([]);\n }\n return from(tableData.toArray());\n })\n );\n }\n\n getTableRecord(table: string, id: number) {\n const tableName = this.cleanTableName(table);\n return this.getDatabaseTable(tableName).pipe(\n switchMap((tableData: any) => {\n if (!tableData) {\n console.warn(`getTableRecord: Table '${tableName}' not found`);\n return from([null]);\n }\n return from(tableData.get(id)).pipe(\n map((record: any) => record || null)\n );\n })\n );\n }\n\n createTableRecord(table: string, record: any) {\n const tableName = this.cleanTableName(table);\n return this.createTableRecords(tableName, [record])\n .pipe(\n map((item: any) => item ? item[0] : null))\n }\n\n createTableRecords(table: string, records: any[]) {\n const tableName = this.cleanTableName(table);\n return from(this.DBOpened()).pipe(\n switchMap(() => {\n if (!this.tables.some(t => t.name === tableName)) {\n console.error(`createTableRecords: Table '${tableName}' does not exist in DB version ${this.verno}. Available:`, this.tables.map(t => t.name));\n return EMPTY;\n }\n\n const tableInstance = this.table(tableName);\n\n // Extract schema fields directly from the table instance\n const schema = tableInstance.schema;\n const validFields = [\n schema.primKey.name,\n ...schema.indexes.map(idx => idx.name)\n ];\n\n const insertRecords = records.map((record: any) => {\n const objectFromSchema: { [key: string]: any } = {};\n validFields.forEach((field: string) => {\n if (field) {\n objectFromSchema[field] = (record as any)[field] ?? null;\n }\n });\n return objectFromSchema;\n });\n\n console.log(`createTableRecords: Bulk putting ${insertRecords.length} records into ${tableName}`);\n\n return from(tableInstance.bulkPut(insertRecords)).pipe(\n map(() => insertRecords)\n );\n })\n );\n }\n\n updateTableRecord(table: string, record: any) {\n const tableName = this.cleanTableName(table);\n return this.updateTableRecords(tableName, [record])\n .pipe(\n map(item => item.length > 0 ? item[0] : null)\n )\n }\n\n updateTableRecords(table: string, records: any[]) {\n\n const tableName = this.cleanTableName(table);\n\n return this.getDatabaseTable(tableName).pipe(\n\n switchMap((tableData: any) => {\n\n return this.getDatabaseTableSchema(tableName).pipe(\n\n switchMap((schema: string[]) => {\n\n const insertRecords = records.map((record: any) => {\n\n const objectFromSchema: { [key: string]: any } = {}\n\n schema.forEach((field: string) => {\n const data = (record as any)[field] ?? null\n objectFromSchema[field] = data\n })\n\n return objectFromSchema\n\n })\n\n return from(tableData.bulkPut(insertRecords)).pipe(\n map(() => insertRecords)\n );\n\n })\n\n )\n\n })\n\n )\n\n }\n\n deleteTableRecord<T>(table: string, id: number) {\n const tableName = this.cleanTableName(table);\n return this.deleteTableRecords(tableName, [id])\n .pipe(\n map(item => item.length > 0 ? item[0] : null)\n )\n }\n\n deleteTableRecords(table: string, ids: number[]) {\n const tableName = this.cleanTableName(table);\n return this.getDatabaseTable(tableName).pipe(\n\n switchMap((tableData: any) => {\n\n return this.getDatabaseTableSchema(tableName).pipe(\n\n switchMap((schema: string[]) => {\n\n console.log(`deleteTableRecords: Starting delete of ${ids.length} records from ${table}. IDs:`, ids);\n\n return from(tableData.bulkDelete(ids)).pipe(\n map(() => ids)\n );\n\n })\n\n )\n\n })\n\n )\n\n }\n\n clearTable(table: string) {\n const tableName = this.cleanTableName(table);\n return this.getDatabaseTable(tableName).pipe(\n switchMap((tableData: any) => {\n if (!tableData) {\n console.warn(`clearTable: Table '${tableName}' not found`);\n return from([]);\n }\n console.log(`clearTable: Clearing all records from ${tableName}`);\n return from(tableData.clear());\n })\n );\n }\n\n}\n","import { WSUser } from \"./ws-user.model\";\n\nexport interface ChannelMessageInterface {\n sessionId: any,\n content: any,\n}\n\nexport class ChannelMessage implements ChannelMessageInterface {\n\n constructor(\n public sessionId: any = null,\n public content: any = null,\n ) {}\n\n static adapt(item?: any): ChannelMessage {\n\n return new ChannelMessage(\n item?.sessionId || item?.id, // Support both for backward compatibility\n item?.content,\n )\n\n }\n\n}\n","import { inject, Inject, Injectable, InjectionToken } from '@angular/core';\nimport { ComponentStore } from '@ngrx/component-store';\n\nimport { BehaviorSubject, Observable, of, Subject, timer, merge } from 'rxjs';\nimport { tap, switchMap, concatMap, scan, delay, take, map, distinctUntilChanged, takeUntil, takeWhile, filter } from 'rxjs/operators';\nimport { DatabaseStorage } from '../../models/database-storage.model';\nimport { ApiRequest, RequestOptions, WSOptions } from './models';\nimport { WSUser } from '../ws-manager-service/models';\nimport { HTTPManagerService, DataType } from '../request-manager-services';\nimport { DatabaseManagerService } from '../database-manager-service';\nimport { TableSchemaDef } from '../database-manager-service/models/table-schema';\nimport { LocalStorageManagerService, StorageType } from '../local-storage-manager-service';\nimport { SettingOptions } from '../local-storage-manager-service/models/setting-options.model';\nimport { UtilsService } from '../..';\nimport { ChannelMessage } from '../ws-manager-service/models/channel-message.model';\n\nconst API_OPTS = new InjectionToken<ApiRequest>('API_OPTS');\n\nexport interface APIStateManagerData<T> {\n data: T[]\n dataObject: T | null\n}\n\nconst defaultState: APIStateManagerData<any> = {\n data: [],\n dataObject: null,\n};\n\n@Injectable()\nexport class HTTPManagerStateService<T extends { id: number|string }> extends ComponentStore<APIStateManagerData<T>> {\n\n httpManagerService = inject(HTTPManagerService)\n dbManagerService = inject(DatabaseManagerService)\n localStorageManagerService = inject(LocalStorageManagerService)\n utils = inject(UtilsService)\n\n error$ = this.httpManagerService.error$\n isPending$ = this.httpManagerService.isPending$.pipe(delay(1))\n\n // PAGINATION\n private page = new BehaviorSubject<number>(0)\n page$ = this.page.asObservable()\n\n private totalPages = new BehaviorSubject<number>(0)\n totalPages$ = this.totalPages.asObservable()\n\n private percentage = new BehaviorSubject<number>(0)\n percentage$ = this.percentage.asObservable()\n\n private hasDatabase = false\n\n streamedResponse = []\n\n // WS\n private maxRetries: number\n private retryDelay: number\n private shouldRetry = true\n\n private databaseOptions?: DatabaseStorage\n\n private wsRetryAttempts = new BehaviorSubject<number>(0)\n wsRetryAttempts$ = this.wsRetryAttempts.asObservable()\n\n private wsNextRetry: BehaviorSubject<number>\n wsNextRetry$: Observable<number>\n\n\n private messages = new BehaviorSubject<any[]>([])\n messages$ = this.messages.asObservable()\n\n private userListByChannel = new BehaviorSubject<Map<string, any[]>>(new Map())\n userListByChannel$ = this.userListByChannel.asObservable()\n\n // Convenience observable that returns users for a specific channel\n getUsersForChannel$(channel: string) {\n return this.userListByChannel$.pipe(\n map(channelMap => channelMap.get(channel) || [])\n )\n }\n\n // Legacy support - returns all unique users across all channels\n private userList = new BehaviorSubject<any[]>([])\n userList$ = this.userList.asObservable()\n\n private user = new BehaviorSubject<WSUser|null>(null)\n user$ = this.user.asObservable()\n\n private channels = new BehaviorSubject<string[]|null>(null)\n channels$ = this.channels.asObservable()\n\n // In-memory notification channels (from server)\n private notificationChannels = new BehaviorSubject<string[]>([])\n notificationChannels$ = this.notificationChannels.asObservable()\n\n // Today's notification channels (from database - channels with data for today)\n private todaysNotificationChannels = new BehaviorSubject<string[]>([])\n todaysNotificationChannels$ = this.todaysNotificationChannels.asObservable()\n\n // Notification messages (MES- channels)\n private notificationMessages = new BehaviorSubject<any[]>([])\n notificationMessages$ = this.notificationMessages.asObservable()\n\n private latestNotification = new Subject<any>()\n latestNotification$ = this.latestNotification.asObservable()\n\n private communicationMessages = new BehaviorSubject<any[]>([])\n communicationMessages$ = this.communicationMessages.asObservable()\n\n private latestCommunicationMessages = new BehaviorSubject<any|null>(null)\n latestCommunicationMessages$ = this.latestCommunicationMessages.asObservable()\n\n private userAction = new BehaviorSubject<any|null>(null)\n userAction$ = this.userAction.asObservable()\n\n wsConnection = false\n wsOptions = WSOptions.adapt()\n\n // Expose raw WS connection status directly to UI\n public connectionStatus$: Observable<boolean> = this.httpManagerService.connectionStatus$\n\n constructor(\n @Inject(API_OPTS) private apiOptions = ApiRequest.adapt(),\n @Inject(\"dataType\") private dataType: DataType | undefined,\n @Inject(\"database\") private database?: DatabaseStorage | undefined\n ) {\n\n super(defaultState);\n\n this.databaseOptions = database\n this.maxRetries = this.apiOptions.ws?.retry?.times || 3\n this.retryDelay = (this.apiOptions.ws?.retry?.delay && this.apiOptions.ws.retry.delay * 1000) || 5 * 1000\n // Start next retry countdown at 0 to avoid showing 5000 pre-connection\n this.wsNextRetry = new BehaviorSubject<number>(0)\n this.wsNextRetry$ = this.wsNextRetry.asObservable()\n\n this.setApiRequestOptions(apiOptions, dataType, database)\n\n if (this.databaseOptions && this.databaseOptions.table) {\n\n this.localStorageManagerService.createStore({\n name: this.databaseOptions.table,\n data: { ...this.databaseOptions, ...{ expires: this.utils.expires(this.databaseOptions.expiresIn)} },\n options: SettingOptions.adapt({\n storage: StorageType.GLOBAL,\n encrypted: false,\n })\n })\n\n this.initDBStorage()\n\n }\n\n }\n\n setApiRequestOptions(apiOptions?: ApiRequest, dataType?: DataType, database?: DatabaseStorage) {\n\n this.apiOptions = ApiRequest.adapt(apiOptions)\n this.dataType = (dataType) ? dataType : DataType.ARRAY\n\n // Only update database options if a database parameter is explicitly provided\n if (database !== undefined) {\n this.hasDatabase = (database?.table) ? true : false\n this.databaseOptions = (this.hasDatabase) ? DatabaseStorage.adapt(database) : undefined\n }\n\n if(this.apiOptions.ws && this.apiOptions.ws.id !== '') {\n\n // Update WebSocket retry settings when options change\n if (this.apiOptions.ws?.retry) {\n this.maxRetries = this.apiOptions.ws.retry.times || 3\n this.retryDelay = (this.apiOptions.ws.retry.delay && this.apiOptions.ws.retry.delay * 1000) || 5 * 1000\n this.wsNextRetry.next(this.retryDelay)\n }\n\n // Validate wsServer before attempting connection\n if (!this.apiOptions.ws.wsServer || this.apiOptions.ws.wsServer === '') {\n console.error('WSOptions invalid: wsServer is missing or empty');\n return;\n }\n\n // Setup connection status monitoring (internal subscription to drive retry counters)\n this.setupConnectionStatus().subscribe();\n\n // Make initial connection attempt\n console.log('🔄 Initial WebSocket connection attempt...');\n this.httpManagerService.connect(this.apiOptions.ws as WSOptions, this.apiOptions.ws.jwtToken || '');\n\n // Initialize WS effect to handle messages\n this.initWS(this.apiOptions.ws as WSOptions)\n\n } else {\n console.warn('WSOptions invalid Id: empty')\n }\n\n }\n\n // WebSocket\n private setupConnectionStatus(): Observable<boolean> {\n return this.httpManagerService.connectionStatus$.pipe(\n distinctUntilChanged(),\n tap(status => {\n if (status === true) {\n console.log('🟢 WebSocket connection is open.')\n } else {\n console.log('🔴 WebSocket connection is closed.')\n }\n }),\n switchMap(status => {\n\n if (status === true) {\n this.shouldRetry = true\n this.wsRetryAttempts.next(0);\n this.wsNextRetry.next(0);\n return of(true);\n }\n\n if (!this.shouldRetry) return of(false)\n\n const countdownEnder$ = new Subject<void>();\n\n // Immediately reflect upcoming retry delay in seconds on UI\n const seconds = this.retryDelay / 1000;\n this.wsNextRetry.next(seconds);\n\n return timer(0, this.retryDelay)\n .pipe(\n take(this.maxRetries),\n tap(i => {\n\n const attempt = i + 1;\n this.wsRetryAttempts.next(attempt);\n countdownEnder$.next();\n\n // Validate WS options; abort retries if invalid\n const hasValidWS = !!(this.apiOptions.ws && this.apiOptions.ws.wsServer && this.apiOptions.ws.wsServer !== '');\n\n if (!hasValidWS) {\n this.shouldRetry = false;\n this.wsNextRetry.next(0);\n this.wsRetryAttempts.next(0);\n return; // Skip connect and countdown\n }\n\n console.log(`🔄 Retry attempt #${attempt}/${this.maxRetries}`);\n this.httpManagerService.connect(this.apiOptions.ws as WSOptions, this.apiOptions.ws!.jwtToken || '');\n\n if (attempt === this.maxRetries) {\n this.wsNextRetry.next(0)\n // console.error(`🚨 FAILED CONNECTION: Tried #${attempt} times`);\n } else {\n // console.log(`⚠️ Retry Attempt #${attempt}: Retrying in ${this.retryDelay / 1000}s`);\n const seconds = this.retryDelay / 1000;\n\n timer(0, 1000).pipe(\n map(tick => seconds - tick),\n takeWhile(val => val >= 0),\n takeUntil(countdownEnder$)\n ).subscribe(remaining => {\n this.wsNextRetry.next(remaining);\n })\n\n }\n\n }),\n map(() => false)\n )\n })\n );\n }\n\n // WebSocket\n readonly initWS = this.effect<WSOptions>((wsOptions$) =>\n wsOptions$.pipe(\n // tap((wsOptions) => { debugger\n // this.wsOptions = wsOptions\n // }),\n switchMap((wsOptions) =>\n merge(\n this.httpManagerService.connectionStatus$.pipe(\n tap((isConnected: any) => {\n this.wsConnection = isConnected\n })\n ),\n this.httpManagerService.messages$.pipe(\n tap((message: any) => {\n if (!message) return\n\n // Add message to messages array\n const currentMessages = this.messages.value\n this.messages.next([...currentMessages, message])\n\n console.log('Received:', message)\n\n if (message.error === 'JWT_INVALID') {\n this.shouldRetry = false\n this.httpManagerService.disconnect()\n }\n\n if (message.type === 'success') {\n if(message.data.id !== this.user.value?.id) {\n const user = WSUser.adapt(message.data)\n this.user.next(user)\n }\n }\n\n switch (message.type) {\n case 'channelsList':\n\n console.log('💬 Channels:', message.channels)\n\n // this.channelList = message.channels\n\n // if (this.channelList.includes(wsOptions.id)) {\n // this.httpManagerService.subscribeToChannel(wsOptions.id)\n // } else {\n // this.httpManagerService.createChannel(wsOptions.id)\n // }\n\n this.channels.next(message.channels)\n\n break;\n\n case 'subscribed':\n console.log(`✅ Subscription confirmed: ${message.channel}`)\n break;\n\n case 'unsubscribed':\n console.log(`🔓 Unsubscription confirmed: ${message.channel}`)\n break;\n\n case 'info':\n // Already subscribed or other info messages\n console.log(`ℹ️ Info: ${message.message}`)\n break;\n\n case 'stateMangerMessage':\n // Compare sender's session ID with current user's ID\n // message.data.sessionId is an object with 'id' property from server\n const stateManagerSenderId = message.data.sessionId?.id || message.data.sessionId;\n console.log('🔍 State Manager: Sender ID:', stateManagerSenderId, 'Current User ID:', this.user.value?.id);\n if(stateManagerSenderId !== this.user.value?.id) {\n console.log('💬 State Manager Message:', message.data)\n console.log('📥 Fetching record with path:', message.data.content.path, 'method:', message.data.content.method)\n this.userAction.next(message.data)\n this.fetchRecord(RequestOptions.adapt({ path: message.data.content.path }), message.data.content.method)\n } else {\n console.log('⏭️ Skipping own message');\n }\n break;\n\n case 'channelMessage':\n // Handle channel-based messages (from sendChannelMessage)\n // Structure: { type: 'channelMessage', channels: [...], sessionId: {id, ldap, name, email}, content: {message payload} }\n // Skip messages from self\n const senderSessionId = message.sessionId?.id;\n if (senderSessionId === this.user.value?.id) {\n break;\n }\n console.log('💬 Channel Message received:', message);\n if (message.content) {\n this.appendMessages(ChannelMessage.adapt({\n sessionId: message.sessionId,\n content: message.content,\n }));\n }\n break;\n\n case 'usersInChannel':\n console.log(`👥 Users in channel \"${message.channel}\":`, message.data.users)\n\n // Update channel-specific user list\n const currentMap = new Map(this.userListByChannel.value)\n currentMap.set(message.channel, message.data.users)\n this.userListByChannel.next(currentMap)\n\n // Update legacy userList with unique users across all channels\n const allUsers = Array.from(currentMap.values()).flat()\n const uniqueUsers = allUsers.filter((user, index, self) =>\n index === self.findIndex(u => u.id === user.id)\n )\n this.userList.next(uniqueUsers)\n break;\n\n case 'notificationChannelsList':\n console.log('📢 Notification Channels (in-memory):', message.channels)\n this.notificationChannels.next(message.channels || [])\n break;\n\n case 'todaysNotificationChannelsList':\n console.log('📢 Today\\'s Notification Channels (from DB):', message.channels)\n this.todaysNotificationChannels.next(message.channels || [])\n break;\n\n case 'notificationSubscribed':\n console.log(`📢 Notification subscription confirmed: ${message.channel}`, message.notifications)\n // Set historical notifications from subscription\n if (message.notifications && Array.isArray(message.notifications)) {\n this.notificationMessages.next(message.notifications)\n }\n break;\n\n case 'notificationUnsubscribed':\n console.log(`📢 Notification unsubscription confirmed: ${message.channel}`)\n break;\n\n case 'notification':\n console.log('📢 Notification received:', message)\n // Add to notifications array\n const currentNotifications = this.notificationMessages.value\n this.notificationMessages.next([...currentNotifications, message])\n // Emit as latest notification\n this.latestNotification.next(message)\n break;\n\n default:\n // Messages are already added at the beginning of the tap\n break\n }\n })\n )\n )\n )\n )\n );\n\n appendMessages(message: any) {\n const currentMessages = this.communicationMessages.value\n this.communicationMessages.next([...currentMessages, message])\n this.latestMessage()\n }\n\n latestMessage() {\n const messages = this.communicationMessages.value\n const latestMessage = messages[messages.length -1]\n this.latestCommunicationMessages.next(latestMessage)\n }\n\n clearMessages() {\n this.communicationMessages.next([])\n }\n\n get ApiRequestOptions() {\n return this.apiOptions\n }\n\n readonly initDBStorage = this.effect<void>((trigger$) =>\n trigger$.pipe(\n tap(() => {\n if (this.dataType !== DataType.ARRAY) console.warn('Database storage requires dataType to be ARRAY')\n if (!this.apiOptions.adapter) console.warn('Database storage requires an adapter to define the data shape')\n if (this.databaseOptions && this.databaseOptions?.table === '') console.warn('Database storage requires a table name')\n }),\n filter(() => this.dataType === DataType.ARRAY && !!this.apiOptions.adapter && !!this.databaseOptions?.table),\n switchMap(() => {\n const sampleData = this.apiOptions.adapter?.({}) || {}\n const schemaKeys = Object.keys(sampleData).filter(key => sampleData[key] !== undefined)\n\n let schema = '++id'\n\n if (schemaKeys.length > 0) {\n const otherKeys = schemaKeys.filter(k => k !== 'id')\n if (otherKeys.length > 0) {\n schema += ', ' + otherKeys.join(', ')\n }\n }\n\n const tableDef = TableSchemaDef.adapt({\n table: this.databaseOptions?.table,\n schema: schema\n });\n\n return this.dbManagerService.createDatabaseTable(tableDef)\n })\n )\n )\n\n initializeState(data: any) {\n this.setData$(data)\n }\n\n // --------------------------------------------------------------------------------------------------\n // SELECTORS\n readonly data$ = this.select(({ data, dataObject }) => {\n const isArray =( this.dataType === DataType.ARRAY) ? true : false\n return (isArray) ? data : dataObject\n })\n\n readonly selectRecord$ = (id: number) => this.select(\n this.data$,\n (data) => {\n if (this.dataType === DataType.ARRAY && Array.isArray(data)) {\n return data.find(item => item.id === id) as T | null\n } else {\n return (data as T).id === id ? data : null\n }\n }\n )\n\n // --------------------------------------------------------------------------------------------------\n\n // UPDATERS\n private readonly setData$ = this.updater((state: APIStateManagerData<T>, data: T | T[] | any) => {\n\n if (!data) return state;\n\n if (this.dataType === DataType.ARRAY) {\n\n const dataArray = Array.isArray(data) ? data : [data]\n\n const stateDataSample = (state.data.length > 0) ? Object.keys(state.data[0]) : []\n const newDataSample = (dataArray.length > 0) ? Object.keys(dataArray[0]) : []\n\n const isSame = (state.data.length === 0) ? false : stateDataSample.every((value, index) => value === newDataSample[index])\n const updatedData = (!isSame && dataArray.length !== 0) ? this.updateArrayState([], dataArray) : this.updateArrayState(state.data, dataArray)\n\n return { ...state, data: updatedData, dataObject: null } as APIStateManagerData<T>;\n\n } else {\n const dataObject = this.isEmpty(data) ? null : data;\n return { ...state, data: [], dataObject: dataObject } as APIStateManagerData<T>;\n }\n\n })\n\n private updateArrayState(currentData: any[], newData: any[]): any[] {\n\n const filterCurrentData = () => {\n const ids = this.streamedResponse.map((obj: any) => obj.id)\n return currentData.filter(obj => (obj.id) ? ids.includes(obj.id) : obj)\n }\n\n const filteredCurrentData = (this.httpManagerService.isPending.value) ? currentData : filterCurrentData()\n\n const updatedData = filteredCurrentData.map(item => {\n const newItem = newData.find(newItem => {\n const hasId = (newItem?.id && item?.id) ? true : false\n return (hasId) ? newItem.id === item.id : JSON.stringify(newItem) === JSON.stringify(item)\n })\n return (newItem) ? { ...item, ...newItem } : item\n })\n\n const addedData = newData.filter(newItem => {\n return !filteredCurrentData.some(item => {\n const hasId = (newItem?.id && item?.id) ? true : false\n return (hasId) ? item.id === newItem.id : JSON.stringify(newItem) === JSON.stringify(item)\n })\n })\n\n return [...updatedData, ...addedData]\n\n }\n\n private readonly addData$ = this.updater((state: APIStateManagerData<T>, data: T) => {\n\n if (this.dataType === DataType.ARRAY) {\n const exists = state.data.some(item => item.id === data.id);\n\n if (exists) {\n const updatedData = state.data.map(item =>\n item.id === data.id ? data : item\n );\n\n return { ...state, data: updatedData };\n } else {\n const newState = [...state.data, data];\n return { ...state, data: newState };\n }\n } else {\n return { ...state, dataObject: data };\n }\n\n })\n\n private readonly deleteData$ = this.updater((state: APIStateManagerData<T>, data: T & { id: number }) => {\n if (this.dataType === DataType.ARRAY) {\n const newState = state.data.filter(item => item.id !== data.id)\n return { ...state, ...{ data: newState } }\n } else {\n return { ...state, ...{ dataObject: null } }\n }\n })\n\n private readonly updateData$ = this.updater((state: APIStateManagerData<T>, data: T) => {\n\n if (this.dataType === DataType.ARRAY) {\n\n const objIndex = state.data.findIndex(item => item.id === data.id)\n\n if (objIndex > -1) {\n const newState = [...state.data]\n newState[objIndex] = data\n return { ...state, ...{ data: newState } }\n }\n\n return state\n\n } else {\n return { ...state, ...{ dataObject: data } }\n }\n\n })\n\n // --------------------------------------------------------------------------------------------------\n // EFFECTS\n\n readonly clearRecords = this.effect(data =>\n data.pipe(\n\n tap(() => {\n\n if (this.dataType === DataType.ARRAY) {\n this.setData$([])\n } else {\n this.setData$({})\n }\n\n }),\n concatMap(() => {\n if (this.hasDatabase && this.databaseOptions?.table) {\n\n const currentData = this.get()?.data;\n const idsToDelete = Array.isArray(currentData) ? currentData.map((r: any) => r.id) : [];\n\n if (idsToDelete.length > 0) {\n return this.dbManagerService.deleteTableRecords(this.databaseOptions.table, idsToDelete);\n }\n\n }\n return of(null);\n })\n ))\n\n // --------------------------------------------------------------------------------------------------\n // CRUD OPERATIONS\n\n // FETCH RECORDS\n readonly fetchRecords = (options?: RequestOptions) =>\n this.effect<any>(() =>\n of(RequestOptions.adapt(options)).pipe(\n switchMap(() => {\n\n this.streamedResponse = []\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n const fetchFromAPI = () => {\n\n return this.httpManagerService.getRequest(requestOptions, options?.path).pipe(\n tap((data: any) => {\n data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data\n this.setData$(data)\n }),\n concatMap((data: any) => {\n if (this.hasDatabase && this.databaseOptions?.table && Array.isArray(data) && data.length > 0) {\n\n this.localStorageManagerService.updateStore({\n name: this.databaseOptions!.table,\n data: { ...this.databaseOptions, ...{ expires: this.utils.expires(this.databaseOptions!.expiresIn)} }\n })\n\n return this.dbManagerService.createTableRecords(this.databaseOptions.table, data);\n }\n return of(data);\n })\n );\n\n }\n\n if (this.hasDatabase && this.databaseOptions?.table) {\n\n return this.dbManagerService.databaseExists().pipe(\n switchMap((dbExists: boolean) => {\n\n if (!dbExists) {\n const initObs: Observable<any> = this.initDBStorageAsync();\n return initObs.pipe(\n switchMap(() => fetchFromAPI())\n );\n }\n\n return this.dbManagerService.hasDatabaseTable(this.databaseOptions!.table).pipe(\n switchMap((tableExists: boolean): Observable<any> => {\n\n if (!tableExists) {\n const initObs: Observable<any> = this.initDBStorageAsync();\n return initObs.pipe(\n switchMap(() => fetchFromAPI())\n );\n }\n\n return this.localStorageManagerService.store$(this.databaseOptions!.table).pipe(\n take(1),\n switchMap((storeData: any) => {\n\n const expires = storeData?.expires || 0;\n const hasExpired = expires > 0 && this.utils.hasExpired(expires);\n\n if (hasExpired) {\n return this.dbManagerService.clearTable(this.databaseOptions!.table).pipe(\n switchMap(() => fetchFromAPI()),\n tap(() => {\n this.localStorageManagerService.updateStore({\n name: this.databaseOptions!.table,\n data: { ...this.databaseOptions, ...{ expires: this.utils.expires(this.databaseOptions!.expiresIn)} }\n })\n })\n );\n }\n\n return this.dbManagerService.getTableRecords(this.databaseOptions!.table).pipe(\n switchMap((dbData: any) => {\n\n if (Array.isArray(dbData) && dbData.length > 0) {\n this.setData$(dbData);\n return of(dbData);\n }\n\n return fetchFromAPI();\n\n })\n );\n })\n );\n\n })\n );\n })\n );\n\n }\n\n return fetchFromAPI();\n\n })\n )\n )\n\n private initDBStorageAsync() {\n\n if (this.dataType !== DataType.ARRAY) {\n console.warn('Database storage requires dataType to be ARRAY');\n return of(null);\n }\n\n if (!this.apiOptions.adapter) {\n console.warn('Database storage requires an adapter to define the data shape');\n return of(null);\n }\n\n if (!this.databaseOptions?.table) {\n console.warn('Database storage requires a table name');\n return of(null);\n }\n\n const sampleData = this.apiOptions.adapter?.({}) || {};\n const schemaKeys = Object.keys(sampleData).filter(key => sampleData[key] !== undefined);\n\n let schema = '++id';\n\n if (schemaKeys.length > 0) {\n const otherKeys = schemaKeys.filter(k => k !== 'id');\n if (otherKeys.length > 0) {\n schema += ', ' + otherKeys.join(', ');\n }\n }\n\n const tableDef = TableSchemaDef.adapt({\n table: this.databaseOptions?.table,\n schema: schema\n });\n\n return this.dbManagerService.createDatabaseTable(tableDef);\n\n }\n\n // FETCH RECORD\n readonly fetchRecord = (options: RequestOptions, method: string) =>\n this.effect<any>(() =>\n of(RequestOptions.adapt(options)).pipe(\n tap(() => console.log('🔄 fetchRecord effect triggered with path:', options?.path, 'method:', method)),\n switchMap((options) => {\n\n this.streamedResponse = []\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n console.log('🌐 Making GET request to path:', options?.path)\n return this.httpManagerService.getRequest(requestOptions, options?.path)\n .pipe(\n tap((data: any) => {\n console.log('📦 fetchRecord received data:', data)\n\n data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data\n\n const id = (options as any).path?.length ? options.path[options.path.length -1] : null\n\n if(method === 'DELETE') {\n console.log('🗑️ Deleting record with id:', id)\n this.deleteData$({ id } as T & { id: number })\n }\n if(method === 'UPDATE') {\n console.log('✏️ Updating record:', data)\n this.updateData$(data)\n }\n if(method === 'CREATE') {\n console.log('➕ Adding record:', data)\n this.addData$(data)\n }\n\n }),\n concatMap((data: any) => {\n if (this.hasDatabase && this.databaseOptions?.table) {\n const id = (options as any).path?.length ? options.path[options.path.length -1] : null\n\n if(method === 'DELETE' && id) return this.dbManagerService.deleteTableRecord(this.databaseOptions.table, id)\n if(method === 'UPDATE' && data) return this.dbManagerService.updateTableRecord(this.databaseOptions.table, data)\n if(method === 'CREATE' && data) return this.dbManagerService.createTableRecord(this.databaseOptions.table, data)\n }\n return of(data)\n })\n )\n\n })\n )\n )\n\n // CREATE RECORD\n readonly createRecord = (data: any|null, options?: RequestOptions) =>\n this.effect<any>(() =>\n of(data).pipe(\n switchMap((data: any) => {\n\n this.streamedResponse = []\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.postRequest(data, requestOptions, options?.path)\n .pipe(\n tap((data: any) => {\n data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data\n this.addData$(data)\n if(this.wsConnection) this.wsCommunication('CREATE', [...options?.path || [], data.id])\n }),\n concatMap((data: any) => {\n if (this.hasDatabase && this.databaseOptions?.table && data?.id) {\n return this.dbManagerService.createTableRecord(this.databaseOptions.table, data);\n }\n return of(data);\n })\n )\n\n })\n )\n )\n\n // UPDATE RECORD\n readonly updateRecord = (data: any|null, options?: RequestOptions) =>\n this.effect<any>(() =>\n of(data).pipe(\n concatMap((data: any) => {\n\n this.streamedResponse = []\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.putRequest(data, requestOptions, options?.path)\n .pipe(\n tap((data: any) => {\n data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data\n this.updateData$(data)\n if(this.wsConnection) this.wsCommunication('UPDATE', [...options?.path || []])\n }),\n concatMap((data: any) => {\n if (this.hasDatabase && this.databaseOptions?.table && data?.id) {\n return this.dbManagerService.updateTableRecord(this.databaseOptions.table, data);\n }\n return of(data);\n })\n )\n\n })\n )\n )\n\n // DELETE RECORD\n readonly deleteRecord = (options?: RequestOptions) =>\n this.effect<any>(() =>\n of(options).pipe(\n concatMap((data: any) => {\n\n this.streamedResponse = []\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.deleteRequest(requestOptions, options?.path)\n .pipe(\n tap((data: any) => {\n data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data\n this.deleteData$(data)\n if(this.wsConnection) this.wsCommunication('DELETE', [...options?.path || []])\n }),\n concatMap((data: any) => {\n if (this.hasDatabase && this.databaseOptions?.table && data?.id) {\n return this.dbManagerService.deleteTableRecord(this.databaseOptions.table, data.id);\n }\n return of(data);\n })\n )\n\n })\n )\n )\n\n // --------------------------------------------------------------------------------------------------\n // FETCH STREAM\n readonly createStream = (data: any|null, options?: RequestOptions) =>\n this.effect<any>(() =>\n of(data).pipe(\n tap(() => this.httpManagerService.isPending.next(true)),\n switchMap((data: any) => {\n\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.postRequest(data, requestOptions, options?.path)\n .pipe(\n tap((res: any) => {\n if(res.length > 0) this.setData$(res)\n this.streamedResponse = res\n }),\n scan((acc, res: any) => {\n\n const previous = acc.current\n const current = res\n return { previous, current };\n\n }, { previous: null, current: null }),\n tap(({ previous, current }) => {\n\n if(previous && JSON.stringify(previous) === JSON.stringify(current)) {\n this.httpManagerService.isPending.next(false)\n this.setData$([])\n } else {\n this.httpManagerService.isPending.next(true)\n }\n\n })\n )\n\n })\n )\n\n )\n\n readonly fetchStream = (options?: RequestOptions) =>\n this.effect<any>(() =>\n of(options).pipe(\n tap(() => this.httpManagerService.isPending.next(true)),\n switchMap((options: any) => {\n\n const requestOptions = this.updateRequestOptions(options?.headers)\n requestOptions.stream = true\n\n return this.httpManagerService.getRequest(requestOptions, options?.path)\n .pipe(\n tap((res: any) => {\n\n if(res.length > 0) this.setData$(res)\n this.streamedResponse = res\n }),\n scan((acc, res: any) => {\n\n const previous = acc.current\n const current = res\n return { previous, current }\n\n }, { previous: null, current: null }),\n tap(({ previous, current }) => {\n\n if(previous && JSON.stringify(previous) === JSON.stringify(current)) {\n this.httpManagerService.isPending.next(false)\n this.setData$([])\n } else {\n this.httpManagerService.isPending.next(true)\n }\n\n })\n )\n\n }),\n )\n )\n\n // WEBSOCKET COMMUNICATION (STATE MANAGER)\n private wsCommunication(method: string, path?: string|number[]) {\n if(this.wsConnection && this.apiOptions.ws) {\n const wsServer = this.apiOptions.ws.id\n this.httpManagerService.sendMessageInChannel(wsServer, { method, path, user: this.apiOptions.ws.user })\n }\n\n }\n\n wsMessaging(message: ChannelMessage, channels?: string[]) {\n\n const user = this.user.value\n const messageInfo = ChannelMessage.adapt({ ...message, fromUser: user })\n\n console.log('📤 wsMessaging called with channels:', channels);\n\n if(this.wsConnection && this.apiOptions.ws) {\n\n // If specific channels provided, send to each channel\n if (channels && channels.length > 0) {\n console.log(`📤 Sending to ${channels.length} channel(s):`, channels);\n channels.forEach(channel => {\n if (channel === 'allChannels') {\n this.httpManagerService.sendBroadcast(messageInfo);\n } else {\n this.httpManagerService.sendChannelMessage(channel, messageInfo);\n }\n });\n } else {\n // Fallback to the primary WS channel\n const wsChannel = this.apiOptions.ws.id;\n console.log(`📤 Sending to fallback channel:`, wsChannel);\n this.httpManagerService.sendChannelMessage(wsChannel, messageInfo);\n }\n\n }\n\n }\n\n // --------------------------------------------------------------------------------------------------\n // CHANNEL MANAGEMENT\n\n /**\n * Subscribe to a single channel\n */\n subscribeToChannel(channel: string) {\n if (this.wsConnection) {\n this.httpManagerService.subscribeToChannel(channel);\n } else {\n console.warn('Cannot subscribe: WebSocket not connected.');\n }\n }\n\n /**\n * Subscribe to multiple channels at once\n */\n subscribeToChannels(channels: string[]) {\n if (this.wsConnection) {\n this.httpManagerService.subscribeToChannels(channels);\n } else {\n console.warn('Cannot subscribe: WebSocket not connected.');\n }\n }\n\n /**\n * Unsubscribe from a channel\n */\n unsubscribeFromChannel(channel: string) {\n if (this.wsConnection) {\n this.httpManagerService.unsubscribeFromChannel(channel);\n } else {\n console.warn('Cannot unsubscribe: WebSocket not connected.');\n }\n }\n\n /**\n * Get observable of currently subscribed channels\n */\n get subscribedChannels$(): Observable<Set<string>> {\n return this.httpManagerService.subscribedChannels$;\n }\n\n /**\n * Get current subscribed channels synchronously\n */\n getSubscribedChannels(): Set<string> {\n return this.httpManagerService.getSubscribedChannels();\n }\n\n /**\n * Create a new channel on the server\n */\n createChannel(channel: string) {\n if (this.wsConnection) {\n this.httpManagerService.createChannel(channel);\n } else {\n console.warn('Cannot create channel: WebSocket not connected.');\n }\n }\n\n /**\n * Delete a channel from the server\n */\n deleteChannel(channel: string) {\n if (this.wsConnection) {\n this.httpManagerService.deleteChannel(channel);\n } else {\n console.warn('Cannot delete channel: WebSocket not connected.');\n }\n }\n\n /**\n * Request list of all channels from server\n */\n getAllChannels() {\n if (this.wsConnection) {\n this.httpManagerService.getAllChannels();\n } else {\n console.warn('Cannot get channels: WebSocket not connected.');\n }\n }\n\n /**\n * Get users in a specific channel\n */\n getUsersInChannel(channel: string) {\n if (this.wsConnection) {\n this.httpManagerService.getUsersInChannel(channel);\n } else {\n console.warn('Cannot get users: WebSocket not connected.');\n }\n }\n\n // --------------------------------------------------------------------------------------------------\n // NOTIFICATION CHANNELS (MES- prefix)\n\n /**\n * Create a notification channel on the server\n */\n createNotificationChannel(channel: string) {\n if (this.wsConnection) {\n this.httpManagerService.createNotificationChannel(channel);\n } else {\n console.warn('Cannot create notification channel: WebSocket not connected.');\n }\n }\n\n /**\n * Request list of all notification channels from server (in-memory)\n */\n getNotificationChannels() {\n if (this.wsConnection) {\n this.httpManagerService.getNotificationChannels();\n } else {\n console.warn('Cannot get notification channels: WebSocket not connected.');\n }\n }\n\n /**\n * Request list of today's notification channels from database\n * Returns unique channels that have notifications posted today\n */\n getTodaysNotificationChannels() {\n if (this.wsConnection) {\n this.httpManagerService.getTodaysNotificationChannels();\n } else {\n console.warn('Cannot get today\\'s notification channels: WebSocket not connected.');\n }\n }\n\n /**\n * Subscribe to a notification channel with optional date filters\n */\n subscribeToNotificationChannel(channel: string, options?: { startEpoch?: number; endEpoch?: number }, user?: any) {\n if (this.wsConnection) {\n this.httpManagerService.subscribeToNotificationChannel(channel, options, user);\n } else {\n console.warn('Cannot subscribe to notification channel: WebSocket not connected.');\n }\n }\n\n /**\n * Unsubscribe from a notification channel\n */\n unsubscribeFromNotificationChannel(channel: string) {\n if (this.wsConnection) {\n this.httpManagerService.unsubscribeFromNotificationChannel(channel);\n } else {\n console.warn('Cannot unsubscribe from notification channel: WebSocket not connected.');\n }\n }\n\n /**\n * Send a notification to a channel\n */\n sendNotification(channel: string, content: any) {\n if (this.wsConnection) {\n this.httpManagerService.sendNotification(channel, content);\n } else {\n console.warn('Cannot send notification: WebSocket not connected.');\n }\n }\n\n // --------------------------------------------------------------------------------------------------\n // MISC\n\n private isEmpty(obj: any) {\n return Object.keys(obj).length === 0\n }\n\n private updateRequestOptions(headers?: any): ApiRequest {\n\n const options = ApiRequest.adapt({ ...this.apiOptions })\n\n options.headers = (headers)\n ? { ...options.headers, ...headers }\n : { ...options.headers }\n\n return options\n }\n\n}\n","import { SettingOptions } from \"../../local-storage-manager-service\";\n\nexport interface StateStorageOptionsInterface {\n store?: string;\n options?: SettingOptions;\n model?: (state: any) => any;\n}\n\nexport class StateStorageOptions implements StateStorageOptionsInterface {\n\n constructor(\n public store?: string,\n public options?: SettingOptions,\n public model?: (state: any) => any\n ) {}\n\n static adapt(item?: any): StateStorageOptions {\n return new StateStorageOptions(\n item?.store ?? 'temp',\n item?.options ? SettingOptions.adapt(item.options) : SettingOptions.adapt(),\n item?.model\n );\n }\n}\n","import { LocalStorageManagerService } from '../local-storage-manager-service/local-storage-manager.service';\nimport { inject, Injectable } from '@angular/core';\nimport { ComponentStore } from '@ngrx/component-store';\nimport { StateStorageOptions } from './models/state-storage-options.model';\nimport { Subscription, take } from 'rxjs';\n\nexport interface StateStoreManagerData<T> {}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StoreStateManagerService<T extends object = StateStoreManagerData<any>> extends ComponentStore<T> {\n\n localStorageManagerService = inject(LocalStorageManagerService)\n\n subscriptions = new Subscription\n settings: any = null\n\n private isRestoring = false\n\n constructor(\n private options: StateStorageOptions = StateStorageOptions.adapt()\n ) {\n super(StoreStateManagerService.init(options))\n this.init(options)\n }\n\n private static init(options: StateStorageOptions): any {\n\n const model = options?.model\n return (model) ? (model as () => any)() : {}\n\n }\n\n init(options?: StateStorageOptions) {\n\n this.settings = options\n\n this.localStorageManagerService.createStore({\n name: this.settings?.store,\n data: this.settings?.model(),\n options: this.settings?.options,\n })\n\n this.localStorageManagerService.store$(this.settings?.store)\n .subscribe(data => this.setState(data))\n\n }\n\n restoreState(): Subscription {\n\n return this.localStorageManagerService.store$(this.settings?.store)\n .pipe(take(1))\n .subscribe(data => {\n this.updateData(data)\n })\n\n }\n\n updateState(state: any) {\n if(this.isRestoring) return\n this.localStorageManagerService.updateStore({\n name: this.settings?.store,\n data: state\n })\n\n }\n\n // Selectors\n readonly data$ = this.select((state: any) => {\n const model = this.options.model;\n return (typeof model === 'function' && !model.prototype) ? model(state) : state\n });\n\n // Updaters\n readonly updateData = this.updater((state, data: any) => {\n\n const key = Object.keys(data)[0]\n const hasKey = Object.keys(state).includes(key)\n\n if (!hasKey) return state\n const newState = { ...state, [key]: data[key] }\n this.updateState(newState)\n return { ...state, ...newState }\n\n })\n\n}\n","\n// export * from \"./database-manager-services/index\";\nexport * from \"./local-storage-manager-service/index\";\n\nexport * from \"./request-manager-services/index\";\nexport * from \"./request-manager-state-service/index\";\n\nexport * from \"./ws-manager-service/index\";\nexport * from \"./store-state-manager-service/index\";\nexport * from \"./database-manager-service/index\";\n\nexport * from \"./utils/index\";\n","export interface ErrorDisplaySettingsInterface {\n displayTime: number\n position: string\n}\n\nexport class ErrorDisplaySettings implements ErrorDisplaySettingsInterface {\n\n constructor(\n public displayTime = 3 * 1000,\n public position = 'top'\n ) {}\n\n static adapt(item?: any): ErrorDisplaySettings {\n\n return new ErrorDisplaySettings(\n (item?.displayTime) ? item.displayTime * 1000 : 3 * 1000,\n item?.position,\n )\n\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class WithCredentialsInterceptor implements HttpInterceptor {\n\n intercept(req: HttpRequest<any>, next: HttpHandler):\n Observable<HttpEvent<any>> {\n\n req = req.clone({ withCredentials: true })\n\n return next.handle(req);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';\nimport { Observable, Subscription } from 'rxjs';\nimport { LangChangeEvent, TranslateService } from '@ngx-translate/core';\n\n@Injectable()\nexport class RequestHeadersInterceptor implements HttpInterceptor {\n\n subscriptions = new Subscription()\n language = 'en-CA'\n\n get currentDate() {\n\n const date = new Date()\n\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const day = String(date.getDate()).padStart(2, '0')\n\n return `${year}-${month}-${day}`\n\n }\n\n constructor(\n private translate: TranslateService\n ) {\n this.subscriptions.add(\n this.translate.onLangChange\n .subscribe((params: LangChangeEvent) => {\n this.language = `${params.lang}-CA`\n })\n )\n }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n request = request.clone({\n setHeaders: {\n 'Content-Type': 'application/json',\n 'Accept-Language': this.language || 'en-CA',\n 'Current-Date': this.currentDate\n }\n })\n\n return next.handle(request)\n\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe()\n }\n}\n\n","import { inject, Injectable } from '@angular/core'\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpErrorResponse } from '@angular/common/http'\nimport { Observable, catchError, throwError } from 'rxjs'\n\nimport { ToastMessageDisplayService, ToastDisplay, ToastColors } from 'toast-message-display'\n\n@Injectable()\nexport class RequestErrorInterceptor implements HttpInterceptor {\n\n toastMessage = inject(ToastMessageDisplayService)\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n return next.handle(req).pipe(\n\n catchError((error: HttpErrorResponse) => {\n\n const displayError = ToastDisplay.adapt({\n message: 'This is a toast message. This is an Error!!',\n action: 'OK',\n color: ToastColors.SUCCESS,\n icon: 'info',\n duration: 5 * 1000, //5 seconds\n })\n\n if (error.status >= 400 && error.status < 500) {\n\n displayError.color = ToastColors.WARN\n displayError.message = error.error || `${error.status}: ${error.statusText}`\n\n console.error('Client Error:', {\n status: error.status,\n message: error.message,\n error: error.error,\n text: error.statusText,\n })\n\n this.toastMessage.toastMessage(displayError)\n\n } else if (error.status >= 500) {\n\n displayError.color = ToastColors.ERROR\n displayError.message = error.error || `${error.status}: ${error.statusText}`\n\n console.error('Server Error:', {\n status: error.status,\n message: error.message,\n error: error.error,\n text: error.statusText,\n })\n\n this.toastMessage.toastMessage(displayError)\n\n }\n\n return throwError(() => error)\n\n })\n\n )\n }\n\n}\n\n\n","import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\nimport { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\nexport const PROXY_CONFIG = new InjectionToken<Record<string, any>>('PROXY_CONFIG');\n\n@Injectable()\nexport class ProxyDebuggerInterceptor implements HttpInterceptor {\n\n constructor(@Optional() @Inject(PROXY_CONFIG) private proxyConfig: Record<string, any>) {}\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n if (!this.proxyConfig) {\n return next.handle(req);\n }\n\n const headers = req.headers.keys().reduce((acc, key) => {\n acc[key] = req.headers.get(key) || '';\n return acc;\n }, {} as Record<string, string>);\n\n for (const proxyPath in this.proxyConfig) {\n if (this.proxyConfig.hasOwnProperty(proxyPath)) {\n const proxyDetails = this.proxyConfig[proxyPath];\n const regex = new RegExp('^' + proxyPath.replace('/', '').replace('*', '(.*)'));\n\n if (regex.test(req.url)) {\n const target = proxyDetails.target;\n const endpoint = req.url.replace(regex, '$1');\n const actualPath = target + '/' + endpoint;\n\n console.log('Request Proxied:', {\n requestUrl: req.url,\n requestPayload: req.body,\n headers: headers,\n proxyPath: proxyPath,\n actualPath: actualPath,\n });\n }\n }\n }\n\n return next.handle(req);\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { ProgressSpinnerMode } from '@angular/material/progress-spinner';\nimport { Subscription, timer } from 'rxjs';\n\n@Component({\n selector: 'app-download-file',\n templateUrl: './download-file.component.html',\n styleUrls: ['./download-file.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class DownloadFileComponent implements OnInit {\n\n private subscriptions = new Subscription();\n\n @Input() event?: Function;\n @Input() displayError = 3; // seconds\n @Input() diameter = 32;\n @Input() mode: ProgressSpinnerMode = 'determinate';\n @Input() isPending = false;\n\n @Input() active = false;\n @Input() disabled = false;\n\n @Output() error = new EventEmitter<void>();\n\n private _progress = 0;\n @Input() set progress(value: any) {\n this._progress = value ?? 0;\n }\n\n get progress() {\n return this._progress;\n }\n\n private _hasError = false;\n private errorTimerActive = false;\n\n @Input() set hasError(value: boolean | any) {\n\n this._hasError = !!value;\n\n if (this._hasError && !this.errorTimerActive) {\n this.errorTimerActive = true;\n this.active = false;\n this.error.emit()\n this.subscriptions.add(\n timer(this.displayError * 1000)\n .subscribe((err) => {\n this._hasError = false;\n this.errorTimerActive = false;\n })\n );\n }\n\n }\n\n get hasError() {\n return this._hasError;\n }\n\n ngOnInit() {}\n\n onAction() {\n this.isPending = false\n if (this.event) this.event()\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe()\n }\n}\n","@if (!isPending) {\n @if (hasError) {\n <div class=\"width center-txt\" style=\"margin-bottom: 4px;\">\n <mat-icon color=\"warn\" class=\"warn-icon\">warning</mat-icon>\n </div>\n } @else {\n @if (active) {\n <div class=\"container-obj\">\n <div class=\"centered-obj-div\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"44\"\n ></mat-progress-spinner>\n </div>\n </div>\n } @else {\n <button data-tracking=\"export-btn\" mat-icon-button (click)=\"onAction()\" class=\"icon-button\" [disabled]=\"disabled\">\n <mat-icon class=\"custom-icon\">file_download</mat-icon>\n </button>\n }\n }\n} @else {\n @if ((progress > 0 && progress < 100)) {\n <div\n class=\"spinner-container\"\n >\n <div class=\"spinner-background\">\n {{progress}}%\n </div>\n <mat-progress-spinner\n color=\"primary\"\n [mode]=\"mode\"\n [value]=\"progress\"\n [diameter]=\"44\"\n ></mat-progress-spinner>\n </div>\n } @else {\n <div class=\"container-obj\">\n <div class=\"centered-obj-div\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"44\"\n ></mat-progress-spinner>\n </div>\n </div>\n }\n}\n\n\n\n\n","export interface DownloadLabelsInterface {\n error: string;\n action: string;\n icon: string;\n}\n\nexport class DownloadLabels implements DownloadLabelsInterface {\n constructor(\n public error = '',\n public action = '',\n public icon = 'error',\n ) {}\n\n static adapt(item?: any): DownloadLabelsInterface {\n return new DownloadLabels(\n item?.error,\n item?.action,\n item?.icon,\n )\n\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { catchError, distinctUntilChanged, finalize } from 'rxjs/operators';\n\nimport { ToastColors, ToastDisplay } from 'toast-message-display';\n\nimport { DownloadLabels } from './models/download-labels-model';\nimport { HTTPManagerService } from '../../../services/request-manager-services';\nimport { ApiRequest } from '../../../services';\nimport { Subscription, throwError } from 'rxjs';\n\n@Component({\n selector: 'app-file-downloader',\n templateUrl: './file-downloader.component.html',\n styleUrls: ['./file-downloader.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class FileDownloaderComponent extends HTTPManagerService<any> implements OnInit {\n\n @Input() delayError = 3\n @Input() apiRequest: ApiRequest = ApiRequest.adapt()\n @Input() displayErrorMessage = false\n\n @Input() saveFileAs?: string\n\n _labels = DownloadLabels.adapt()\n @Input() set labels(value: DownloadLabels) {\n this._labels = (value) ? DownloadLabels.adapt(value) : DownloadLabels.adapt()\n }\n\n active = false\n\n subscription = new Subscription()\n\n get labels() {\n return this._labels\n }\n\n @Output() completed = new EventEmitter<void>()\n @Output() failed = new EventEmitter<string>()\n\n @Input() disabled = false\n\n constructor() {\n super()\n }\n\n ngOnInit() {\n\n }\n\n onDownloadStreaming() {\n\n if (this.active) return;\n this.active = true;\n\n return this.downloadRequest(this.apiRequest, [])\n .pipe(\n distinctUntilChanged(),\n catchError((err) => {\n\n this.onError(err.message)\n this.active = false\n this.failed.emit(err)\n\n return throwError(() => err)\n\n }),\n finalize(() => {\n if (!this.active) return\n this.active = false\n this.completed.emit()\n })\n )\n .subscribe()\n }\n\n\n onError(message: string) {\n\n if(!message || !this.displayErrorMessage) return\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.ERROR,\n icon: 'error',\n });\n\n this.active = false\n\n this.toastMessage.toastMessage(display);\n\n }\n\n OnDestroy() {\n this.subscription.unsubscribe()\n }\n\n}\n","<app-download-file\n [disabled]=\"disabled\"\n [displayError]=\"3\"\n [event]=\"onDownloadStreaming.bind(this)\"\n [isPending]=\"(isPending$ | async) || false\"\n [progress]=\"(progress$ | async)\"\n [hasError]=\"(error$ | async)\"\n (error)=\"onError(labels.error)\"\n [active]=\"active\"\n></app-download-file>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ThemePalette } from '@angular/material/core';\nimport { ProgressSpinnerMode } from '@angular/material/progress-spinner';\n\n@Component({\n selector: 'app-spinner',\n templateUrl: './spinner.component.html',\n styleUrls: ['./spinner.component.scss'],\n standalone: false\n})\nexport class SpinnerComponent implements OnInit {\n\n @Input() color: ThemePalette;\n\n @Input() diameter?: number;\n @Input() display?: string | number;\n @Input() mode?: ProgressSpinnerMode;\n @Input() strokeWidth?: number;\n @Input() value = 0\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","<div class=\"spinner-background\">{{display}}</div>\n<mat-progress-spinner\n [color]=\"color\"\n [diameter]=\"diameter\"\n [mode]=\"mode || 'indeterminate'\"\n [strokeWidth]=\"strokeWidth\"\n [value]=\"value\">\n</mat-progress-spinner>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { DownloadFileComponent } from './download-file/download-file.component';\nimport { FileDownloaderComponent } from './file-downloader.component';\n\nimport { SpinnerComponent } from './spinner/spinner.component';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatButtonModule } from '@angular/material/button';\n\n@NgModule({\n imports: [\n CommonModule,\n MatIconModule,\n MatProgressSpinnerModule,\n MatButtonModule,\n ],\n declarations: [\n SpinnerComponent,\n DownloadFileComponent,\n FileDownloaderComponent,\n ],\n exports: [\n FileDownloaderComponent\n ]\n})\nexport class FileDownloaderModule { }\n","import { Component, Inject, inject, OnInit, ViewEncapsulation, effect, signal, computed } from '@angular/core';\nimport { LocalStorageSignalsManagerService, SettingOptions, StorageOption, StorageType } from '../../services/local-storage-manager-service';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { ConfigOptions, LocalStorageOptions, UtilsService } from '../../services';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\n\n@Component({\n selector: 'app-local-storage-signals-demo',\n templateUrl: './local-storage-signals-demo.component.html',\n styleUrls: ['./local-storage-signals-demo.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class LocalStorageSignalsDemoComponent implements OnInit {\n\n fb = inject(FormBuilder)\n utils = inject(UtilsService)\n\n // store type is driven by the form control\n get type() {\n return (this.typeControl.value) ? +this.typeControl.value : 0;\n }\n\n typeControl = this.fb.control(StorageType.GLOBAL.toString())\n\n localStorageManagerService = inject(LocalStorageSignalsManagerService)\n\n // Use signals directly and computed values for template binding\n readonly settings = computed(() => this.localStorageManagerService.settings());\n\n // selected store (signal) and its JSON data for template\n storeSelected = signal<StorageOption | null>(null);\n selectedStoreData = computed(() => {\n const s = this.storeSelected();\n if (!s) return '';\n const computed = this.localStorageManagerService.store(s.name);\n return computed ? JSON.stringify(computed()) : '';\n });\n\n // filtered settings by selected type\n selectedType = signal<number>(StorageType.GLOBAL);\n filteredSettings = computed(() => {\n const values = this.settings() || [];\n return values.filter((item: any) => item.options.storage === +this.selectedType());\n });\n\n storageForm = this.fb.group({\n store: this.fb.control<string|null>(null),\n type: 'local',\n settingType: 'local',\n encrypted: false,\n data: this.fb.control<string>('', Validators.required),\n })\n\n newStoreForm = this.fb.group({\n name: this.fb.control<string|null>(null, Validators.required),\n storage: 'local',\n encrypted: false,\n data: this.fb.control<string>('', Validators.required),\n expiresIn: this.fb.control('0')\n })\n\n // no RxJS Observables here; template uses signals/computed directly\n\n expiresIn = (epoch: number) => this.utils.expiresIn(epoch)\n\n get isValid() {\n return this.newStoreForm.valid\n }\n\n get isValidData() {\n return this.storageForm.valid\n }\n\n isValidJSON = (str: string) => {\n try {\n JSON.parse(str)\n return true\n } catch (e) {\n return false\n }\n }\n\n displayedColumns: string[] = ['name', 'id', 'encrypted', 'expires', \"option\"];\n\n filterData = (values: StorageOption[] | null | undefined) => {\n if(!values) return []\n return values.filter((item: any) => item.options && item.options.storage === +this.type)\n }\n\n settingFor(name: string) {\n const c = this.localStorageManagerService.setting(name);\n return c ? c() : null;\n }\n\n // data and selected store\n store: any\n create = false\n\n storeProps?: LocalStorageOptions\n options?: SettingOptions\n\n constructor(@Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) { }\n\n ngOnInit() {\n\n this.storeProps = this.configOptions?.LocalStorageOptions\n this.options = this.storeProps?.options\n\n if(this.options?.storage) {\n this.typeControl.patchValue(this.options.storage.toString())\n this.typeControl.disable()\n } else {\n this.typeControl.enable()\n }\n\n if(this.options?.expiresIn) {\n this.newStoreForm.get('expiresIn')?.patchValue(this.options.expiresIn)\n this.newStoreForm.get('expiresIn')?.disable()\n } else {\n this.newStoreForm.get('expiresIn')?.enable()\n }\n\n if(this.options?.encrypted) {\n this.newStoreForm.get('encrypted')?.patchValue(this.options.encrypted)\n this.newStoreForm.get('encrypted')?.disable()\n } else {\n this.newStoreForm.get('encrypted')?.enable()\n }\n\n // nothing to synchronize - templates read computed signals directly\n\n }\n\n onCreateStore() {\n\n if(!this.isValid) return\n\n const store = this.newStoreForm.value\n if(!store.name || store.name === '') return\n\n const options = { storage: this.type, encrypted: store.encrypted, expiresIn: store.expiresIn }\n\n this.localStorageManagerService.createStore({\n name: store.name,\n data: store.data,\n options: SettingOptions.adapt(options)\n })\n\n this.newStoreForm.reset()\n this.create = false\n }\n\n onUpdateStore(store: any) {\n\n if(!this.storageForm.valid) return\n\n const storeData = this.storageForm.value\n\n const data = JSON.parse(storeData.data || '')\n\n const type = (storeData.type === 'local') ? StorageType.GLOBAL : StorageType.SESSION\n\n this.localStorageManagerService.updateStore({\n name: store.name,\n data\n })\n\n }\n\n onSelectedRow(store: any) {\n this.store = store\n this.storeSelected.set(store)\n this.create = false\n }\n\n onCreate() {\n this.onCancel()\n this.create = true\n }\n\n onDelete(store: StorageOption) {\n\n this.localStorageManagerService.deleteStore({\n name: store.name,\n })\n\n this.onCancel()\n }\n\n onCancel() {\n this.storeSelected.set(null)\n this.store = null\n this.create = false\n }\n\n onUpdate(store: StorageOption, data: any) {\n\n this.localStorageManagerService.updateStore({\n name: store.name,\n data: JSON.parse(data)\n })\n\n this.onCancel()\n\n }\n\n onReset() {\n this.localStorageManagerService.resetStore()\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <div style=\"display: flex; gap: 1rem\">\n <h2 style=\"padding-top: .5rem; display: flex;\">\n <div style=\"padding-top: .5rem;\">\n <span>Local Storage Manager</span>\n <span style=\"margin-left: .5rem;\">\n <mat-icon color=\"accent\">fiber_new</mat-icon>\n </span>\n </div>\n <div>\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon>info</mat-icon>\n </button>\n </div>\n </h2>\n <span style=\"flex:1\"></span>\n <div style=\"padding-top: .25rem;\">\n <mat-button-toggle-group name=\"storage\" [formControl]=\"typeControl\" (change)=\"onCancel()\">\n <mat-button-toggle value=\"0\">Local Storage</mat-button-toggle>\n <mat-button-toggle value=\"1\">Session Storage</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n <div style=\"margin-top: .25rem;\">\n <button mat-icon-button (click)=\"onCreate()\">\n <mat-icon>add</mat-icon>\n </button>\n </div>\n </div>\n\n <ng-container *ngIf=\"storeProps?.storageName || storeProps?.storageSettingsName\">\n <div style=\"display: flex; gap: .5rem; flex-direction: column; border: gray solid thin; background-color: whitesmoke; padding: 1rem;\"\n >\n <div style=\"display: flex;\">\n <div *ngIf=\"storeProps?.storageSettingsName\" style=\"flex:1\">\n Database: <b>{{ storeProps?.storageSettingsName }}</b>\n </div>\n <div *ngIf=\"storeProps?.storageName\" style=\"flex:1\">\n Data: <b>{{ storeProps?.storageName }}</b>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div style=\"margin-top: 2rem;\" [formGroup]=\"newStoreForm\" *ngIf=\"create; else LIST\">\n\n <h2>Create Store</h2>\n\n <div style=\"display: flex; gap: 1rem;\">\n <div style=\"flex:1\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Store Name</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"name\">\n </mat-form-field>\n </div>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Expires In...</mat-label>\n <mat-select formControlName=\"expiresIn\">\n <mat-option value=\"0\">None</mat-option>\n <mat-option value=\"30s\">30 Seconds</mat-option>\n <mat-option value=\"1mn\">1 Minute</mat-option>\n <mat-option value=\"1hr\">1 Hour</mat-option>\n <mat-option value=\"1d\">1 Day</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"margin-top: 1rem;\">\n <mat-slide-toggle formControlName=\"encrypted\">Encrypted</mat-slide-toggle>\n </div>\n </div>\n\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex: 1;\">\n <mat-label>Data (Must be an Object or Array of any)</mat-label>\n <textarea matInput placeholder=\"[]\" formControlName=\"data\" #json></textarea>\n </mat-form-field>\n </div>\n <mat-error *ngIf=\"!isValidJSON(json.value)\">Not Valid Data</mat-error>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onCreateStore()\" [disabled]=\"!(isValid && isValidJSON(json.value))\">\n Save Store\n </button>\n </div>\n\n </div>\n\n <ng-template #LIST>\n\n <div style=\"margin-top: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n{{ settings() | json }}\n <div *ngIf=\"filterData(settings()) as data\">\n <ng-container *ngIf=\"data.length > 0; else NO_DATA\">\n <table mat-table [dataSource]=\"data\">\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> Store </th>\n <td mat-cell *matCellDef=\"let element\" style=\"font-weight: bold; text-transform: uppercase;\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"encrypted\">\n <th mat-header-cell *matHeaderCellDef style=\"text-align: center;\"> Encrypted </th>\n <td mat-cell *matCellDef=\"let element\" style=\"text-align: center;\">\n <ng-container *ngIf=\"element.options.encrypted; else NO\">YES</ng-container>\n <ng-template #NO><span style=\"color:gray\">NO</span></ng-template>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"expires\">\n <th mat-header-cell *matHeaderCellDef style=\"text-align: center;\"> Expires </th>\n <td mat-cell *matCellDef=\"let element\" style=\"text-align: center;\">\n <ng-container *ngIf=\"element.options.expires !== 0; else NO_DATA\">\n {{expiresIn(element.options.expires)}}\n </ng-container>\n <ng-template #NO_DATA>\n ∞\n </ng-template>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"option\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell *matCellDef=\"let element\" style=\"padding-right: 0;\">\n <div style=\"display: flex;justify-content: flex-end;\">\n <button mat-icon-button color=\"warn\" (click)=\"onDelete(element); $event.stopPropagation()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" (click)=\"onSelectedRow(row)\"></tr>\n </table>\n </ng-container>\n\n <ng-template #NO_DATA>\n <h3 style=\"margin-top: 1rem;\">No Data</h3>\n </ng-template>\n\n <div *ngIf=\"storeSelected() as selectedStore\" style=\"margin-top: 2rem;\">\n <div style=\"margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <h3>STORE: <span style=\"font-weight: bold;\">{{ selectedStore.name | uppercase }}</span></h3>\n <h3>SETTINGS: {{ localStorageManagerService.setting(selectedStore.name) ? (localStorageManagerService.setting(selectedStore.name)() | json) : '{}' }}</h3>\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex: 1;\">\n <mat-label>Data (Must be an Object or Array of any)</mat-label>\n <textarea matInput placeholder=\"[]\" #json [value]=\"selectedStoreData()\"></textarea>\n </mat-form-field>\n </div>\n <mat-error *ngIf=\"!isValidJSON(json.value)\">Not Valid Data</mat-error>\n\n <div style=\"display: flex; gap: .5rem;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onCancel()\">Cancel</button>\n <button mat-stroked-button (click)=\"onUpdate(selectedStore, json.value)\" [disabled]=\"!(isValidJSON(json.value))\">Update</button>\n </div>\n </div>\n </div>\n\n </ng-template>\n\n <div style=\"margin-top: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <button mat-stroked-button (click)=\"onReset()\">Delete All Stores</button>\n </div>\n\n</div>\n\n\n<mat-menu #menu=\"matMenu\">\n <div style=\"padding: 1rem;\">\n <p>Please note that the LocalStorage (encryption) and management of data is dependant on initializing the APP_ID</p>\n <p>Must provide a value for <b>APP_ID</b> in AppModule->Providers</p>\n <mat-divider></mat-divider>\n <div style=\"font-size: smaller; margin-top: .5rem;\">\n <p>Example: UUID (self.crypto.randomUUID() to generate)</p>\n <div style=\"background-color: whitesmoke; padding: 1rem;\">\n &#123;<br>\n provide: APP_ID,<br>\n useValue: \"056991ac-3537-43ab-b5b9-83edf6554eff\",<br>\n &#125;\n </div>\n </div>\n </div>\n</mat-menu>\n","export interface OIDCClientInterface {\n spiffe: string\n id: number\n first_name: string\n last_name: string\n email: string\n}\n\nexport class OIDCClient implements OIDCClientInterface {\n\n constructor(\n public spiffe: string = '',\n public id: number = 0,\n public first_name: string = '',\n public last_name: string = '',\n public email: string = '',\n ) {}\n\n static adapt(item?: any): OIDCClient {\n\n return new OIDCClient(\n item?.spiffe,\n item?.id,\n item?.first_name,\n item?.last_name,\n item?.email,\n )\n\n }\n\n}\n","import { Injectable } from '@angular/core';\n\nimport { DatabaseStorage, DataType, RetryOptions } from '../../../models';\nimport { HTTPManagerStateService, ApiRequest } from '../../../services';\nimport { OIDCClient } from '../models/oidc-client.model';\n\n/**\n * StateServiceDemo - Core state management and WebSocket connection service\n *\n * Handles:\n * - WebSocket connection setup\n * - Base HTTP state management\n * - Connection status and retry logic\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class StateServiceDemo extends HTTPManagerStateService<any> {\n\n attempts$ = this.wsRetryAttempts$;\n nextRetry$ = this.wsNextRetry$;\n\n constructor() {\n super(\n ApiRequest.adapt({\n server: '',\n retry: RetryOptions.adapt({\n times: 3,\n delay: 1,\n }),\n adapter: OIDCClient.adapt,\n }),\n DataType.ARRAY,\n DatabaseStorage.adapt({\n table: 'ws_demo_data',\n expiresIn: '5mn',\n })\n );\n }\n\n /**\n * Initialize WebSocket connection with server configuration\n */\n updateConnection(server: string, wsServer: string, jwtToken: string, user: any) {\n this.setApiRequestOptions({\n server,\n retry: RetryOptions.adapt({\n times: 3,\n delay: 1,\n }),\n adapter: OIDCClient.adapt,\n ws: {\n id: 'SYS-USERS123',\n wsServer,\n jwtToken,\n user,\n retry: RetryOptions.adapt({\n times: 10,\n delay: 5,\n }),\n }\n });\n\n this.userAction$.subscribe(user => {\n console.log('User Action:', user);\n });\n }\n\n /**\n * Get all available channels\n */\n override getAllChannels() {\n this.httpManagerService.getAllChannels();\n }\n\n /**\n * Subscribe to a channel\n */\n override subscribeToChannel(channel: string) {\n super.subscribeToChannel(channel);\n }\n\n /**\n * Unsubscribe from a channel\n */\n override unsubscribeFromChannel(channel: string) {\n super.unsubscribeFromChannel(channel);\n }\n\n // =====================\n // Notification Channel Methods (MES- prefix)\n // These override methods from HTTPManagerStateService\n // =====================\n\n /**\n * Create a notification channel (MES- prefix)\n */\n override createNotificationChannel(channel: string) {\n super.createNotificationChannel(channel);\n }\n\n /**\n * Get all notification channels list (in-memory)\n */\n override getNotificationChannels() {\n super.getNotificationChannels();\n }\n\n /**\n * Get today's notification channels from database\n * Returns unique channels that have notifications posted today\n */\n override getTodaysNotificationChannels() {\n super.getTodaysNotificationChannels();\n }\n\n /**\n * Subscribe to notification channel with optional date filters\n */\n override subscribeToNotificationChannel(channel: string, options?: { startEpoch?: number; endEpoch?: number }, user?: any) {\n super.subscribeToNotificationChannel(channel, options, user);\n }\n\n /**\n * Unsubscribe from notification channel\n */\n override unsubscribeFromNotificationChannel(channel: string) {\n super.unsubscribeFromNotificationChannel(channel);\n }\n\n /**\n * Send a notification to a channel\n */\n override sendNotification(channel: string, content: any) {\n super.sendNotification(channel, content);\n }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ChannelMessage } from '../../../services/ws-manager-service/models/channel-message.model';\nimport { StateServiceDemo } from './state-service-demo.service';\n\n/**\n * MessageServiceDemo - Channel messaging service (PUB- prefix channels)\n *\n * Handles:\n * - Sending messages to channels\n * - Channel subscription for messaging\n * - Real-time message broadcast\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class MessageServiceDemo {\n\n private stateService = inject(StateServiceDemo);\n\n // Expose observables from state service\n channels$ = this.stateService.channels$;\n subscribedChannels$ = this.stateService.subscribedChannels$;\n communicationMessages$ = this.stateService.communicationMessages$;\n latestCommunicationMessages$ = this.stateService.latestCommunicationMessages$;\n connectionStatus$ = this.stateService.connectionStatus$;\n user$ = this.stateService.user$;\n data$ = this.stateService.data$;\n\n /**\n * Helper to ensure channel has PUB- prefix\n */\n private toPublicChannel(channel: string): string {\n return channel.startsWith('PUB-') ? channel : `PUB-${channel}`;\n }\n\n /**\n * Helper to strip PUB- prefix for display\n */\n private fromPublicChannel(channel: string): string {\n return channel.startsWith('PUB-') ? channel.replace('PUB-', '') : channel;\n }\n\n /**\n * Create a new public channel\n */\n createChannel(channel: string) {\n const publicChannel = this.toPublicChannel(channel);\n this.stateService.createChannel(publicChannel);\n }\n\n /**\n * Get all available channels\n */\n getAllChannels() {\n this.stateService.getAllChannels();\n }\n\n /**\n * Subscribe to a channel to receive messages\n */\n subscribeToChannel(channel: string) {\n const publicChannel = this.toPublicChannel(channel);\n this.stateService.subscribeToChannel(publicChannel);\n }\n\n /**\n * Unsubscribe from a channel\n */\n unsubscribeFromChannel(channel: string) {\n const publicChannel = this.toPublicChannel(channel);\n this.stateService.unsubscribeFromChannel(publicChannel);\n }\n\n /**\n * Send a message to one or more channels\n */\n sendMessage(data: ChannelMessage, channels?: string[]) {\n const publicChannels = channels?.map(ch => this.toPublicChannel(ch));\n console.log('sendMessage', data, 'to channels:', publicChannels);\n this.stateService.wsMessaging(data, publicChannels);\n }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { StateServiceDemo } from './state-service-demo.service';\n\n/**\n * Notification message interface\n */\nexport interface NotificationMessage {\n id: number;\n channel: string;\n created: number; // epoch seconds\n user_name: string;\n sessionId: any;\n content: any;\n}\n\n/**\n * NotificationServiceDemo - Notification channel service (MES- prefix channels)\n *\n * Handles:\n * - Creating notification channels\n * - Subscribing to notifications with date filters\n * - Sending notifications (persisted to database)\n * - Receiving real-time and historical notifications\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NotificationServiceDemo {\n\n private stateService = inject(StateServiceDemo);\n\n // Notification channels from state service (in-memory - contains MES- channels from server)\n notificationChannels$ = this.stateService.notificationChannels$;\n\n // Today's notification channels from database (channels with data for today)\n todaysNotificationChannels$ = this.stateService.todaysNotificationChannels$;\n\n private subscribedNotificationChannelsSubject = new BehaviorSubject<Set<string>>(new Set());\n subscribedNotificationChannels$ = this.subscribedNotificationChannelsSubject.asObservable();\n\n // Notification messages from state service\n notificationMessages$ = this.stateService.notificationMessages$;\n\n // Latest notification from state service\n latestNotification$ = this.stateService.latestNotification$;\n\n // Expose connection status from state service\n connectionStatus$ = this.stateService.connectionStatus$;\n\n /**\n * Helper to ensure channel has MES- prefix\n */\n private toNotificationChannel(channel: string): string {\n return channel.startsWith('MES-') ? channel : `MES-${channel}`;\n }\n\n /**\n * Helper to strip MES- prefix for display\n */\n private fromNotificationChannel(channel: string): string {\n return channel.startsWith('MES-') ? channel.replace('MES-', '') : channel;\n }\n\n /**\n * Create a notification channel\n */\n createNotificationChannel(channel: string) {\n const notifyChannel = this.toNotificationChannel(channel);\n console.log('📢 createNotificationChannel:', notifyChannel);\n this.stateService.createNotificationChannel(notifyChannel);\n }\n\n /**\n * Get all notification channels (in-memory)\n */\n getNotificationChannels() {\n console.log('📢 getNotificationChannels');\n this.stateService.getNotificationChannels();\n }\n\n /**\n * Get today's notification channels from database\n * Returns unique channels that have notifications posted today\n */\n getTodaysNotificationChannels() {\n console.log('📢 getTodaysNotificationChannels (from DB)');\n this.stateService.getTodaysNotificationChannels();\n }\n\n /**\n * Subscribe to a notification channel with optional date filter\n * @param channel Channel name (MES- prefix will be added if not present)\n * @param options { startEpoch?, endEpoch? }\n * @param user User info for subscription\n */\n subscribeToNotificationChannel(channel: string, options?: { startEpoch?: number; endEpoch?: number }, user?: any) {\n const notifyChannel = this.toNotificationChannel(channel);\n console.log('📢 subscribeToNotificationChannel:', notifyChannel, options);\n\n // Add to local subscribed channels immediately for UI feedback\n const currentSubs = this.subscribedNotificationChannelsSubject.value;\n currentSubs.add(notifyChannel);\n this.subscribedNotificationChannelsSubject.next(new Set(currentSubs));\n\n // Send subscription request to server\n this.stateService.subscribeToNotificationChannel(notifyChannel, options, user);\n }\n\n /**\n * Unsubscribe from a notification channel\n */\n unsubscribeFromNotificationChannel(channel: string) {\n const notifyChannel = this.toNotificationChannel(channel);\n console.log('📢 unsubscribeFromNotificationChannel:', notifyChannel);\n\n // Remove from local subscribed channels immediately for UI feedback\n const currentSubs = this.subscribedNotificationChannelsSubject.value;\n currentSubs.delete(notifyChannel);\n this.subscribedNotificationChannelsSubject.next(new Set(currentSubs));\n\n // Send unsubscription request to server\n this.stateService.unsubscribeFromNotificationChannel(notifyChannel);\n }\n\n /**\n * Send a notification to a channel\n */\n sendNotification(channel: string, content: any, user?: any) {\n const notifyChannel = this.toNotificationChannel(channel);\n\n const notificationContent = {\n sessionId: {\n id: user?.id,\n ldap: user?.ldap,\n name: user?.name,\n email: user?.email,\n },\n ...content\n };\n\n console.log('📢 sendNotification:', notifyChannel, notificationContent);\n\n this.stateService.sendNotification(notifyChannel, notificationContent);\n }\n\n}\n","export interface UserDataInterface {\n ldap: string\n name: string\n email: string\n}\n\nexport class UserData implements UserDataInterface {\n\n constructor(\n public ldap = '',\n public name = '',\n public email = '',\n ) {}\n\n static adapt(item?: any): UserData {\n\n const userName = `${item?.first_name} ${item?.last_name}`\n\n return new UserData(\n item?.ldap,\n userName,\n item?.email,\n )\n\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { RandomNumber } from '../../../../services/utils/encryption/random';\nimport { RetryOptions, DataType, DatabaseStorage } from '../../../../models';\n\nimport { HTTPManagerStateService, ApiRequest, RequestOptions } from '../../../../services';\n\nimport { OIDCClient } from '../../models/oidc-client.model';\nimport { UserData } from '../../models/user-data.model';\nimport { ChannelMessage } from '../../../../services/ws-manager-service/models/channel-message.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StateDataRequestService extends HTTPManagerStateService<any> {\n\n attempts$ = this.wsRetryAttempts$\n nextRetry$ = this.wsNextRetry$\n\n path = ['ai','tests']\n\n constructor() {\n super(\n ApiRequest.adapt({\n server: '',\n retry: RetryOptions.adapt({\n times: 3,\n delay: 1,\n }),\n adapter: OIDCClient.adapt,\n ws: {\n id: ``,\n // wsChannels: ['allChannels'],\n // access: ['read,write,delete,update'],\n wsServer: '',\n jwtToken: '',\n user: UserData.adapt(),\n retry: RetryOptions.adapt({\n times: 3,\n delay: 10,\n }),\n }\n }),\n DataType.ARRAY,\n DatabaseStorage.adapt({\n table: 'ws_demo_data',\n expiresIn: '5mn',\n })\n )\n }\n\n updateConnection(\n server: string,\n wsServer: string,\n jwtToken: string,\n user: any,\n path: string[] = [],\n wsChannel: string = ''\n ) {\n\n this.path = path\n\n this.setApiRequestOptions({\n server,\n retry: RetryOptions.adapt({\n times: 3,\n delay: 1,\n }),\n adapter: OIDCClient.adapt,\n ws: {\n id: wsChannel,\n wsServer,\n jwtToken,\n user, // general info about user\n retry: RetryOptions.adapt({\n times: 3,\n delay: 10,\n }),\n }\n })\n\n }\n\n addData() {\n\n const num = RandomNumber(1000, 9999)\n\n const newData = {\n \"spiffe\": `sample.com/developer/${num}`,\n \"last_name\": \"boni\",\n \"email\": \"mikeboni@hotmail.com\",\n \"first_name\": \"mike\"\n }\n\n this.createRecord(newData, RequestOptions.adapt({ path: this.path }) )\n\n }\n\n sendMessage(data: ChannelMessage) {\n console.log('sendMessage', data)\n this.wsMessaging(data)\n }\n\n getData() {\n this.fetchRecords(RequestOptions.adapt({ path: this.path }) )\n }\n\n updateData(data: any) {\n const sampleOptions = RequestOptions.adapt({ path: [...this.path, data.id] })\n console.log('updateData', sampleOptions)\n this.updateRecord(data, sampleOptions)\n\n }\n\n deleteData(data: any) {\n const sampleOptions = RequestOptions.adapt({ path: [...this.path, data.id] })\n console.log('deleteData', sampleOptions)\n this.deleteRecord(sampleOptions)\n }\n\n}\n","import { Component, inject, Input, OnInit } from '@angular/core';\nimport { RandomNumber } from '../../../../services/utils/encryption/random';\n\nimport { StateDataRequestService } from '../services/state-data-request.service';\nimport { switchMap, timer, map, startWith } from 'rxjs';\n\n@Component({\n selector: 'app-ws-data-control',\n templateUrl: './ws-data-control.component.html',\n styleUrls: ['./ws-data-control.component.scss'],\n standalone: false\n})\nexport class WsDataControlComponent implements OnInit {\n\n @Input() server!: string;\n @Input() wsServer!: string;\n @Input() jwtToken!: string;\n @Input() user!: any;\n @Input() path: string[] = ['ai','tests'];\n @Input() wsChannel: string = '';\n\n stateDataRequestService = inject(StateDataRequestService)\n\n user$ = this.stateDataRequestService.user$\n users$ = this.stateDataRequestService.userList$\n\n userAction$ = this.stateDataRequestService.userAction$\n .pipe(\n switchMap((action) =>\n timer(3 * 1000).pipe(\n map(() => null),\n startWith(action)\n )\n )\n );\n\n data$ = this.stateDataRequestService.data$;\n\n isUser = (user: any, userItem: any) => {\n return user.sessionId === userItem.sessionId\n }\n\n ngOnInit() {\n this.stateDataRequestService.updateConnection(this.server, this.wsServer, this.jwtToken, this.user, this.path, this.wsChannel);\n this.stateDataRequestService.getData()\n }\n\n onGetData() {\n this.stateDataRequestService.getData()\n }\n\n onAddData() {\n this.stateDataRequestService.addData()\n }\n\n onUpdateData(data: any[]) {\n\n const num = RandomNumber(1000, 9999)\n\n const newData = {\n \"spiffe\": `wavecoders.com/developer/${num}`,\n \"id\": 63,\n \"last_name\": \"boni\",\n \"email\": \"mikeboni@hotmail.com\",\n \"first_name\": \"mike\"\n }\n\n this.stateDataRequestService.updateData(newData)\n\n }\n\n onRemoveData(data: any) {\n const lastRec = data[data.length -1]\n this.stateDataRequestService.deleteData(lastRec)\n }\n\n}\n","@if ((data$ | async); as data) {\n <div style=\"margin: 1rem;\">\n @if ((users$ |async); as users) {\n <div>\n @if (users.length > 0) {\n <h3 style=\"margin: 0;\">Connected Users</h3>\n } @else {\n <h3 style=\"margin: 0;\">No Users</h3>\n }\n <mat-chip-set>\n @for (user of users; track user.sessionId) {\n <mat-chip\n [class.user-chip--primary]=\"isUser(user, (user$ | async))\"\n [style.color]=\"isUser(user, (user$ | async)) ? '#fff' : null\"\n [disableRipple]=\"true\"\n >\n {{ user.name }}\n </mat-chip>\n }\n </mat-chip-set>\n </div>\n }\n <div style=\"margin-top: 1rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div class=\"box\" style=\"margin-bottom: 1rem;\" *ngIf=\"(userAction$ | async) as userAction\">\n {{ userAction?.content?.user?.name }} has {{ userAction?.content?.method }}\n </div>\n\n <h3 style=\"margin: 0;\">Data Actions</h3>\n <div style=\"display: flex; gap: 1rem; margin-bottom: 1rem;\">\n <button mat-stroked-button (click)=\"onGetData()\">Get Data</button>\n <div style=\"flex:1\"></div>\n <button mat-stroked-button color=\"accent\" (click)=\"onUpdateData(data)\">Update Data</button>\n <button mat-stroked-button color=\"warn\" (click)=\"onRemoveData(data)\">Remove Data</button>\n <button mat-stroked-button color=\"primary\" (click)=\"onAddData()\">Add Data</button>\n </div>\n @if (data.length > 0) {\n <div>\n <table mat-table [dataSource]=\"data\" style=\"border: 1px solid grey;\">\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n <ng-container matColumnDef=\"spiffe\">\n <th mat-header-cell *matHeaderCellDef> Spiffe </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.spiffe}} </td>\n </ng-container>\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.first_name}} {{element.last_name}}</td>\n </ng-container>\n <ng-container matColumnDef=\"email\">\n <th mat-header-cell *matHeaderCellDef> Email </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.email}} </td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"['id', 'spiffe', 'name', 'email']\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['id', 'spiffe', 'name', 'email'];\"></tr>\n </table>\n <div style=\"border: 1px solid grey; padding: .5rem; border-top: none;\">\n <h3 style=\"margin: 0;\">Total Records {{ data.length }}</h3>\n </div>\n </div>\n } @else {\n <div style=\"margin-top: 1rem; font-style: italic;\">\n No Data Available\n </div>\n }\n </div>\n}\n\n","import { Component, inject, Input, OnInit, OnDestroy } from '@angular/core';\nimport { MessageServiceDemo } from '../../services/message-service-demo.service';\nimport { StateServiceDemo } from '../../services/state-service-demo.service';\nimport { FormBuilder, FormControl, Validators } from '@angular/forms';\nimport { WSUser } from '../../../..';\nimport { Observable, combineLatest, map, EMPTY, Subject, takeUntil, filter, take, startWith, distinctUntilChanged } from 'rxjs';\n\nimport { ChannelMessage } from '../../../../services/ws-manager-service/models/channel-message.model';\nimport { ToastMessageDisplayService, ToastDisplay, ToastColors } from 'toast-message-display';\n\n@Component({\n selector: 'app-ws-messaging',\n templateUrl: './ws-messaging.component.html',\n styleUrls: ['./ws-messaging.component.css'],\n standalone: false\n})\nexport class WsMessagingComponent implements OnInit, OnDestroy {\n\n @Input() server!: string;\n @Input() wsServer!: string;\n @Input() jwtToken!: string;\n @Input() user!: any;\n\n private destroy$ = new Subject<void>();\n\n fb = inject(FormBuilder);\n messageService = inject(MessageServiceDemo);\n stateService = inject(StateServiceDemo);\n toastService = inject(ToastMessageDisplayService);\n\n // Only show public channels (starting with \"PUB-\"), strip prefix for display\n // SYS- channels are private/internal and hidden from users\n channels$ = this.messageService.channels$.pipe(\n map(channels => channels\n ?.filter(channel => channel.startsWith('PUB-'))\n .map(channel => channel.replace('PUB-', '')) || []\n ),\n startWith([] as string[]),\n distinctUntilChanged((prev, curr) => prev.length === curr.length && prev.every((v, i) => v === curr[i]))\n );\n\n // Track subscribed public channels only, strip prefix for display\n subscribedChannels$ = this.messageService.subscribedChannels$.pipe(\n map(set => Array.from(set)\n .filter(channel => channel.startsWith('PUB-'))\n .map(channel => channel.replace('PUB-', ''))\n ),\n startWith([] as string[]),\n distinctUntilChanged((prev, curr) => prev.length === curr.length && prev.every((v, i) => v === curr[i]))\n );\n\n /**\n * Helper to ensure channel has PUB- prefix for outgoing communication\n */\n private toPublicChannel(channel: string): string {\n return channel.startsWith('PUB-') ? channel : `PUB-${channel}`;\n }\n\n user$ = this.stateService.user$;\n\n data$ = this.stateService.data$;\n\n connectionStatus$ = this.stateService.connectionStatus$;\n\n // Form for creating new channels\n newChannelName = this.fb.control<string>('', [Validators.required, Validators.minLength(2)])\n\n // Form for selecting channels to send to and message content\n messages = this.fb.group({\n selectedChannels: this.fb.control<string[]>([], Validators.required),\n content: this.fb.control<string|null>(null, Validators.required),\n })\n\n get selectedChannels() {\n return this.messages.get('selectedChannels') as FormControl\n }\n\n get content() {\n return this.messages.get('content') as FormControl\n }\n\n communicationMessages$ = this.messageService.communicationMessages$;\n latestCommunicationMessages$ = this.messageService.latestCommunicationMessages$;\n\n chat$: Observable<{ user: any, messages: any[]}|any> = combineLatest([this.user$, this.communicationMessages$])\n .pipe(\n map(([user, messages]: any) => ({ user, messages })),\n map(obj => {\n\n if(!obj.user) return EMPTY\n\n const mainUser = ''\n\n const messages = obj.messages.map((item: any) => {\n // Message transformation logic\n })\n\n return { user: mainUser, messages }\n\n })\n );\n\n ngOnInit() {\n\n this.stateService.updateConnection(this.server, this.wsServer, this.jwtToken, this.user);\n\n // Only trigger once when connection becomes true\n this.connectionStatus$.pipe(\n filter(status => status === true),\n take(1),\n takeUntil(this.destroy$)\n ).subscribe(() => {\n // Fetch existing channels when connected (user will create channels in demo)\n this.messageService.getAllChannels();\n });\n\n // Subscribe to latest messages and show toast notification\n this.latestCommunicationMessages$.pipe(\n filter(message => !!message),\n takeUntil(this.destroy$)\n ).subscribe((message: any) => {\n const messageContent = message.content?.message || '';\n\n this.toastService.toastMessage(\n ToastDisplay.adapt({\n message: messageContent,\n color: ToastColors.INFO,\n icon: 'chat',\n action: 'DONE'\n }),\n -1 // Stay until dismissed\n );\n });\n\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Create a new public channel without auto-subscribing\n * Public channels use PUB- prefix, system channels use SYS- prefix\n */\n onCreateChannel() {\n if (this.newChannelName.invalid) return;\n\n const channelName = this.newChannelName.value?.trim();\n if (channelName) {\n // Add PUB- prefix for public channels\n const publicChannelName = channelName.startsWith('PUB-') ? channelName : `PUB-${channelName}`;\n this.messageService.createChannel(publicChannelName);\n this.newChannelName.reset();\n // Server will broadcast updated channel list to all clients automatically\n }\n }\n\n /**\n * Subscribe to a channel to receive messages\n * Auto-adds PUB- prefix for outgoing communication\n */\n onSubscribeToChannel(channel: string) {\n this.messageService.subscribeToChannel(this.toPublicChannel(channel));\n // Reset channel selection when subscriptions change\n this.selectedChannels.reset([]);\n }\n\n /**\n * Unsubscribe from a channel\n * Auto-adds PUB- prefix for outgoing communication\n */\n onUnsubscribeFromChannel(channel: string) {\n this.messageService.unsubscribeFromChannel(this.toPublicChannel(channel));\n // Reset channel selection when subscriptions change\n this.selectedChannels.reset([]);\n }\n\n /**\n * Handle chip toggle for subscribe/unsubscribe\n */\n onChipToggle(channel: string, event: any) {\n if (event.selected) {\n this.onSubscribeToChannel(channel);\n } else {\n this.onUnsubscribeFromChannel(channel);\n }\n }\n\n /**\n * Check if currently subscribed to a channel\n * Compares display names (without PUB- prefix)\n */\n isSubscribed(channel: string, subscribedChannels: string[]): boolean {\n return subscribedChannels.includes(channel);\n }\n\n /**\n * Handle chip click - toggle subscription state\n */\n onChipClick(channel: string, subscribedChannels: string[]) {\n const isCurrentlySubscribed = this.isSubscribed(channel, subscribedChannels);\n if (isCurrentlySubscribed) {\n this.onUnsubscribeFromChannel(channel);\n } else {\n this.onSubscribeToChannel(channel);\n }\n }\n\n onSendMessage(user: WSUser) {\n\n this.messages.markAllAsTouched()\n\n if (this.messages.invalid) return\n\n const channelsToSend = this.selectedChannels.value as string[]\n if (channelsToSend.length === 0) return\n\n // Add PUB- prefix for outgoing channel communication\n const publicChannels = channelsToSend.map(ch => this.toPublicChannel(ch))\n\n const message = ChannelMessage.adapt({\n sessionId: { // user object with 'id' as the ID field\n id: user.id,\n ldap: user.ldap,\n name: user.name,\n email: user.email,\n },\n content: { message: this.messages.value.content },\n })\n\n this.messageService.sendMessage(message, publicChannels);\n this.content.reset();\n\n }\n\n}\n","\n @if ((data$ | async); as data) {\n @if ((user$ | async); as user) {\n <div style=\"display: flex; gap: 1rem; flex-direction: column; margin-top: 1rem;\">\n\n <!-- Channel Creation Section -->\n <div style=\"padding: 1rem; background: #e3f2fd; border-radius: 4px;\">\n <strong>Create New Channel</strong>\n <div style=\"display: flex; flex-direction: column; margin-top: 0.5rem;\">\n <mat-form-field appearance=\"outline\" style=\"width: 100%;\">\n <mat-label>Channel Name</mat-label>\n <input matInput [formControl]=\"newChannelName\" placeholder=\"Enter channel name\"\n (keydown.enter)=\"onCreateChannel()\">\n </mat-form-field>\n <div style=\"display: flex; justify-content: flex-end; margin-top: -0.5rem;\">\n <button mat-raised-button color=\"primary\" (click)=\"onCreateChannel()\"\n [disabled]=\"newChannelName.invalid\">\n Create Channel\n </button>\n </div>\n </div>\n </div>\n\n <!-- Messaging Section - only show when subscribed to channels -->\n @if ((subscribedChannels$ | async); as subscribedChannels) {\n @if (subscribedChannels.length > 0) {\n <div style=\"padding: 1rem; background: #fff3e0; border-radius: 4px;\" [formGroup]=\"messages\">\n <strong>Send Message</strong>\n\n <!-- Channel Selection with Checkboxes -->\n <div style=\"margin-top: 0.5rem;\">\n <mat-form-field appearance=\"outline\" style=\"width: 100%;\">\n <mat-label>Select Channels</mat-label>\n <mat-select formControlName=\"selectedChannels\" multiple>\n <mat-select-trigger>\n @if (selectedChannels.value?.length === 1) {\n {{ selectedChannels.value[0] }}\n } @else if (selectedChannels.value?.length > 1) {\n {{ selectedChannels.value[0] }} (+{{ selectedChannels.value.length - 1 }} {{ selectedChannels.value.length === 2 ? 'other' : 'others' }})\n }\n </mat-select-trigger>\n @for (channel of subscribedChannels; track channel) {\n <mat-option [value]=\"channel\">{{ channel }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- Message Input -->\n <div style=\"display: flex; flex-direction: column;\">\n <mat-form-field style=\"width: 100%;\" appearance=\"outline\">\n <mat-label>Message</mat-label>\n <textarea\n matInput placeholder=\"Type your message...\"\n formControlName=\"content\"\n (keydown.enter)=\"onSendMessage(user); $event.preventDefault()\"\n ></textarea>\n </mat-form-field>\n <div style=\"display: flex; justify-content: flex-end; margin-top: -0.5rem;\">\n <button mat-raised-button color=\"primary\" (click)=\"onSendMessage(user)\"\n [disabled]=\"messages.invalid\">\n Send\n </button>\n </div>\n </div>\n </div>\n }\n }\n\n </div>\n }\n }\n\n <!-- Channel List with Subscription Controls using Chips -->\n @if ((channels$ | async); as channels) {\n @if ((subscribedChannels$ | async); as subscribedChannels) {\n <div style=\"padding: 1rem; background: #f5f5f5; border-radius: 4px; margin-top: 1rem;\">\n <strong>Subscribe to Channel(s)</strong>\n <div style=\"margin-top: 0.5rem;\">\n @if (channels.length === 0) {\n <div style=\"color: #666; font-style: italic;\">No channels available. Create one above.</div>\n } @else {\n <mat-chip-listbox aria-label=\"Channel selection\" [multiple]=\"true\">\n @for (channel of channels; track channel) {\n <mat-chip-option\n [selected]=\"isSubscribed(channel, subscribedChannels)\"\n (click)=\"onChipClick(channel, subscribedChannels)\">\n {{ channel }}\n </mat-chip-option>\n }\n </mat-chip-listbox>\n }\n </div>\n </div>\n }\n }\n","import { Component, inject, Input, OnInit, OnDestroy } from '@angular/core';\nimport { NotificationServiceDemo } from '../../services/notification-service-demo.service';\nimport { StateServiceDemo } from '../../services/state-service-demo.service';\nimport { FormBuilder, FormControl, Validators } from '@angular/forms';\nimport { Subject, takeUntil, filter, startWith, distinctUntilChanged, map, tap, combineLatest } from 'rxjs';\n\n@Component({\n selector: 'app-ws-notifications',\n templateUrl: './ws-notifications.component.html',\n styleUrls: ['./ws-notifications.component.css'],\n standalone: false\n})\nexport class WsNotificationsComponent implements OnInit, OnDestroy {\n\n @Input() server!: string;\n @Input() wsServer!: string;\n @Input() jwtToken!: string;\n @Input() user!: any;\n\n private destroy$ = new Subject<void>();\n\n fb = inject(FormBuilder);\n notificationService = inject(NotificationServiceDemo);\n stateService = inject(StateServiceDemo);\n\n // Combine in-memory channels and today's DB channels, dedupe and strip prefix for display\n todaysNotificationChannels$ = combineLatest([\n this.notificationService.notificationChannels$.pipe(startWith([] as string[])),\n this.notificationService.todaysNotificationChannels$.pipe(startWith([] as string[]))\n ]).pipe(\n tap(([inMemory, fromDb]) => console.log('📢 In-memory channels:', inMemory, 'DB channels:', fromDb)),\n map(([inMemory, fromDb]) => {\n // Merge both sources and dedupe\n const allChannels = [...(inMemory || []), ...(fromDb || [])];\n const uniqueChannels = [...new Set(allChannels)]\n .filter(channel => channel.startsWith('MES-'))\n .map(channel => channel.replace('MES-', ''));\n return uniqueChannels.sort();\n }),\n tap(channels => console.log('📢 Combined channels for display:', channels)),\n distinctUntilChanged((prev, curr) => prev.length === curr.length && prev.every((v, i) => v === curr[i]))\n );\n\n // Track subscribed notification channels, strip prefix for display\n subscribedNotificationChannels$ = this.notificationService.subscribedNotificationChannels$.pipe(\n map(set => Array.from(set)\n .filter(channel => channel.startsWith('MES-'))\n .map(channel => channel.replace('MES-', ''))\n ),\n startWith([] as string[]),\n distinctUntilChanged((prev, curr) => prev.length === curr.length && prev.every((v, i) => v === curr[i]))\n );\n\n // Notification messages\n notificationMessages$ = this.notificationService.notificationMessages$;\n\n connectionStatus$ = this.stateService.connectionStatus$;\n\n /**\n * Helper to ensure channel has MES- prefix for outgoing communication\n */\n private toNotificationChannel(channel: string): string {\n return channel.startsWith('MES-') ? channel : `MES-${channel}`;\n }\n\n // Form for creating new notification channels\n newChannelName = this.fb.control<string>('', [Validators.required, Validators.minLength(2)]);\n\n // Channel connection selection\n selectedConnectionChannel = this.fb.control<string | null>(null);\n connectedChannel: string | null = null;\n\n // Table columns for notifications display\n displayedColumns: string[] = ['date', 'user', 'message'];\n\n // Form for date filter when subscribing\n dateFilter = this.fb.group({\n startDate: this.fb.control<Date | null>(null),\n endDate: this.fb.control<Date | null>(null),\n });\n\n // Form for sending notifications\n notificationForm = this.fb.group({\n content: this.fb.control<string | null>(null, Validators.required),\n });\n\n get content() {\n return this.notificationForm.get('content') as FormControl;\n }\n\n /**\n * Check if currently connected to a channel\n */\n isChannelConnected(subscribedChannels: string[]): boolean {\n return this.connectedChannel !== null && subscribedChannels.includes(this.connectedChannel);\n }\n\n /**\n * Connect to the selected channel\n */\n onConnectToChannel() {\n const channel = this.selectedConnectionChannel.value;\n if (!channel) return;\n\n this.connectedChannel = channel;\n this.onSubscribeToChannel(channel);\n }\n\n /**\n * Disconnect from the current channel\n */\n onDisconnectFromChannel() {\n if (this.connectedChannel) {\n this.onUnsubscribeFromChannel(this.connectedChannel);\n this.connectedChannel = null;\n }\n }\n\n ngOnInit() {\n // Request today's notification channels when connection is established\n this.connectionStatus$.pipe(\n filter(isConnected => isConnected),\n takeUntil(this.destroy$)\n ).subscribe(() => {\n // Request the list of today's notification channels from database\n this.notificationService.getTodaysNotificationChannels();\n });\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Create a new notification channel\n */\n onCreateChannel() {\n if (this.newChannelName.invalid) return;\n\n const channelName = this.newChannelName.value?.trim();\n if (channelName) {\n this.notificationService.createNotificationChannel(channelName);\n this.newChannelName.reset();\n }\n }\n\n /**\n * Subscribe to a notification channel with optional date filter\n */\n onSubscribeToChannel(channel: string) {\n const startDate = this.dateFilter.get('startDate')?.value as Date | null;\n const endDate = this.dateFilter.get('endDate')?.value as Date | null;\n\n const options: { startEpoch?: number; endEpoch?: number } = {};\n\n if (startDate) {\n // Set to start of day\n const startOfDay = new Date(startDate);\n startOfDay.setHours(0, 0, 0, 0);\n options.startEpoch = Math.floor(startOfDay.getTime() / 1000);\n }\n if (endDate) {\n // Set to end of day\n const endOfDay = new Date(endDate);\n endOfDay.setHours(23, 59, 59, 999);\n options.endEpoch = Math.floor(endOfDay.getTime() / 1000);\n }\n\n this.notificationService.subscribeToNotificationChannel(channel, options, this.user);\n }\n\n /**\n * Unsubscribe from a notification channel\n */\n onUnsubscribeFromChannel(channel: string) {\n this.notificationService.unsubscribeFromNotificationChannel(channel);\n }\n\n /**\n * Check if currently subscribed to a channel\n */\n isSubscribed(channel: string, subscribedChannels: string[]): boolean {\n return subscribedChannels.includes(channel);\n }\n\n /**\n * Handle chip click - toggle subscription state\n */\n onChipClick(channel: string, subscribedChannels: string[]) {\n const isCurrentlySubscribed = this.isSubscribed(channel, subscribedChannels);\n if (isCurrentlySubscribed) {\n this.onUnsubscribeFromChannel(channel);\n } else {\n this.onSubscribeToChannel(channel);\n }\n }\n\n /**\n * Send a notification\n */\n onSendNotification() {\n this.notificationForm.markAllAsTouched();\n\n if (this.notificationForm.invalid) return;\n\n const channel = this.connectedChannel;\n if (!channel) return;\n\n const messageContent = {\n message: this.content.value\n };\n\n this.notificationService.sendNotification(channel, messageContent, this.user);\n this.content.reset();\n }\n\n /**\n * Format epoch timestamp to readable date/time\n */\n formatTimestamp(epoch: number): string {\n return new Date(epoch * 1000).toLocaleString();\n }\n\n /**\n * Get today's date in YYYY-MM-DD format for date input default\n */\n getTodayDate(): string {\n return new Date().toISOString().split('T')[0];\n }\n\n}\n","<div style=\"display: flex; gap: 1rem; flex-direction: column; margin-top: 1rem;\">\n\n <!-- Channel Creation Section -->\n <div style=\"padding: 1rem; background: #e8f5e9; border-radius: 4px;\">\n <strong>Create Notification Channel</strong>\n <div style=\"display: flex; flex-direction: column; margin-top: 0.5rem;\">\n <mat-form-field appearance=\"outline\" style=\"width: 100%;\">\n <mat-label>Channel Name</mat-label>\n <input\n matInput\n [formControl]=\"newChannelName\"\n placeholder=\"Enter notification channel name\"\n (keydown.enter)=\"onCreateChannel()\"\n >\n </mat-form-field>\n <div style=\"display: flex; justify-content: flex-end;\">\n <button mat-raised-button color=\"primary\" (click)=\"onCreateChannel()\"\n [disabled]=\"newChannelName.invalid\">\n Create Channel\n </button>\n </div>\n </div>\n </div>\n\n <!-- Channel Connection Section - Only shown when NOT connected -->\n @if ((subscribedNotificationChannels$ | async); as subscribedChannels) {\n @if (!isChannelConnected(subscribedChannels)) {\n <div style=\"padding: 1rem; background: #e3f2fd; border-radius: 4px;\">\n <strong>Connect to Channel</strong>\n <div style=\"display: flex; gap: 1rem; margin-top: 0.5rem; flex-wrap: wrap; align-items: flex-start;\">\n <!-- Channel Selection (from today's DB data) -->\n <mat-form-field appearance=\"outline\" style=\"flex: 1; min-width: 200px;\">\n <mat-label>Select Channel</mat-label>\n <mat-select [formControl]=\"selectedConnectionChannel\" placeholder=\"Select a notification channel\">\n @for (channel of (todaysNotificationChannels$ | async) || []; track channel) {\n <mat-option [value]=\"channel\">{{ channel }}</mat-option>\n }\n @empty {\n <mat-option disabled>No channels with data for today</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <!-- Date Filter -->\n <mat-form-field appearance=\"outline\" style=\"flex: 1; min-width: 200px;\" [formGroup]=\"dateFilter\">\n <mat-label>Start Date</mat-label>\n <input matInput [matDatepicker]=\"startPicker\" formControlName=\"startDate\">\n <mat-datepicker-toggle matIconSuffix [for]=\"startPicker\"></mat-datepicker-toggle>\n <mat-datepicker #startPicker></mat-datepicker>\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" style=\"flex: 1; min-width: 200px;\" [formGroup]=\"dateFilter\">\n <mat-label>End Date</mat-label>\n <input matInput [matDatepicker]=\"endPicker\" formControlName=\"endDate\">\n <mat-datepicker-toggle matIconSuffix [for]=\"endPicker\"></mat-datepicker-toggle>\n <mat-datepicker #endPicker></mat-datepicker>\n </mat-form-field>\n </div>\n\n <div style=\"display: flex; gap: 0.5rem;\">\n <span style=\"flex:1\"></span>\n <button\n mat-raised-button color=\"primary\"\n (click)=\"onConnectToChannel()\"\n [disabled]=\"!selectedConnectionChannel.value\"\n >\n Connect\n </button>\n </div>\n </div>\n }\n }\n\n <!-- Send Notification Section -->\n @if ((subscribedNotificationChannels$ | async); as subscribedChannels) {\n @if (subscribedChannels.length > 0) {\n <div\n style=\"padding: 1rem; background: #fff8e1; border-radius: 4px;\"\n [formGroup]=\"notificationForm\"\n >\n <strong>Send Notification</strong>\n\n <!-- Notification Content -->\n <div style=\"display: flex; flex-direction: column; margin-top: 0.5rem;\">\n <mat-form-field style=\"width: 100%;\" appearance=\"outline\">\n <mat-label>Notification Message</mat-label>\n <textarea\n matInput placeholder=\"Type your notification...\"\n formControlName=\"content\"\n rows=\"2\"\n (keydown.enter)=\"onSendNotification(); $event.preventDefault()\"\n ></textarea>\n </mat-form-field>\n <div style=\"display: flex; justify-content: flex-end; margin-top: -0.5rem;\">\n <button\n mat-raised-button color=\"accent\"\n (click)=\"onSendNotification()\"\n [disabled]=\"notificationForm.invalid\"\n >\n Send Notification\n </button>\n </div>\n </div>\n </div>\n }\n }\n\n <!-- Notifications Table - Only shown when connected -->\n @if ((subscribedNotificationChannels$ | async); as subscribedChannels) {\n @if (isChannelConnected(subscribedChannels)) {\n @if ((notificationMessages$ | async); as notifications) {\n <div>\n <div style=\"display: flex; justify-content: space-between; align-items: center;\">\n <strong>Notifications ({{ notifications.length }})</strong>\n </div>\n\n @if (notifications.length > 0) {\n <div style=\"margin-top: 0.5rem; height: 400px; overflow: auto; border: 1px solid #888; border-radius: 4px;\">\n <table mat-table [dataSource]=\"notifications\" style=\"width: 100%;\">\n\n <!-- Date Column -->\n <ng-container matColumnDef=\"date\">\n <th mat-header-cell *matHeaderCellDef style=\"width: 180px;\">Date</th>\n <td mat-cell *matCellDef=\"let notification\">\n {{ formatTimestamp(notification.created) | date }}\n </td>\n </ng-container>\n\n <!-- User Column -->\n <ng-container matColumnDef=\"user\">\n <th mat-header-cell *matHeaderCellDef style=\"width: 150px;\">User</th>\n <td mat-cell *matCellDef=\"let notification\">\n <strong>{{ notification.user_name }}</strong>\n </td>\n </ng-container>\n\n <!-- Message Column -->\n <ng-container matColumnDef=\"message\">\n <th mat-header-cell *matHeaderCellDef>Message</th>\n <td mat-cell *matCellDef=\"let notification\">\n {{ notification.content?.message || notification.content }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n </div>\n } @else {\n <div style=\"text-align: center; color: #666; padding: 2rem;\">\n <mat-icon style=\"font-size: 48px; height: 48px; width: 48px; opacity: 0.5;\">notifications_none</mat-icon>\n <p>No notifications yet. Waiting for notifications on this channel...</p>\n </div>\n }\n </div>\n\n <!-- Disconnect Button - Below the table -->\n <div style=\"display: flex; justify-content: right; padding: 1rem;\">\n <button mat-raised-button color=\"warn\" (click)=\"onDisconnectFromChannel()\">\n Disconnect from Channel\n </button>\n </div>\n }\n }\n }\n\n</div>\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-ws-ai-messaging',\n templateUrl: './ws-ai-messaging.component.html',\n styleUrls: ['./ws-ai-messaging.component.css'],\n standalone: false\n})\nexport class WsAiMessagingComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","<p>\n ws-ai-messaging coming soon!\n</p>\n","import { Component, inject, OnInit, Input } from '@angular/core';\nimport { FormBuilder, Validators, FormControl } from '@angular/forms';\nimport { Observable, combineLatest, map, EMPTY, tap } from 'rxjs';\n\nimport { HTTPManagerService, RandomNumber, CommunicationType } from '../../services';\nimport { StateServiceDemo } from './services';\n\n@Component({\n selector: 'app-request-manager-ws-demo',\n templateUrl: './request-manager-ws-demo.component.html',\n styleUrls: ['./request-manager-ws-demo.component.css'],\n standalone: false\n})\nexport class RequestManagerWsDemoComponent implements OnInit {\n\n httpManagerService = inject(HTTPManagerService)\n stateService = inject(StateServiceDemo)\n\n fb = inject(FormBuilder)\n\n @Input() server!: string;\n @Input() wsServer!: string;\n @Input() jwtToken!: string;\n @Input() user!: any;\n @Input() path: string[] = ['ai','tests'];\n @Input() wsChannel: string = '';\n\n user$ = this.stateService.user$\n // users$ = this.stateService.userList$\n\n attempts$ = this.stateService.wsRetryAttempts$\n nextRetry$ = this.stateService.wsNextRetry$\n\n connectionStatus$ = this.stateService.connectionStatus$\n\n data$ = this.stateService.data$;\n isPending$ = this.stateService.isPending$;\n\n // messages = this.fb.group<any>({\n // toUser: this.fb.control<string|null>(null, Validators.required),\n // content: this.fb.control<string|null>(null, Validators.required),\n // })\n\n // get toUser() {\n // return this.messages.get('toUser') as FormControl\n // }\n\n // get content() {\n // return this.messages.get('content') as FormControl\n // }\n\n // get isValid() {\n // return this.toUser.valid\n // }\n\n // fromMe = (user: string, fromUser: string) => {\n // return user === fromUser\n // }\n\n // communicationMessages$ = this.stateRequestServiceDemo.communicationMessages$\n // latestCommunicationMessages$ = this.stateRequestServiceDemo.latestCommunicationMessages$\n\n // chat$: Observable<{ user: any, messages: any[]}|any> = combineLatest([this.user$, this.communicationMessages$])\n // .pipe(\n // map(([user, messages]: any) => ({ user, messages })),\n // map(obj => {\n\n // if(!obj.user) return EMPTY\n\n // // const mainUser = UserName.adapt({\n // // id: obj.user.username,\n // // first: obj.user?.name?.first,\n // // last: obj.user?.name?.last,\n // // })\n\n // const mainUser = ''\n\n // const messages = obj.messages.map((item: any) => {\n\n // if(item.toUser === 'allChannels') {\n // // item.toUser = UserName.adapt({\n // // id: '',\n // // first: 'All Users',\n // // last: '',\n // // })\n // }\n\n // // return Message.adapt({\n // // fromUser: {\n // // id: item.fromUser.username,\n // // first: item.fromUser?.name?.first,\n // // last: item.fromUser?.name?.last,\n // // },\n // // toUser: {\n // // id: item.toUser.username,\n // // first: item.toUser?.name?.first,\n // // last: item.toUser?.name?.last,\n // // },\n // // content: item.content,\n // // date: item.issued,\n // // })\n // })\n\n // return { user: mainUser, messages }\n\n // })\n // );\n\n ngOnInit() {\n // Initialize WS connection and retry driver\n this.stateService.updateConnection(this.server, this.wsServer, this.jwtToken, this.user);\n }\n\n // onSendMessage() {\n // this.messages.markAllAsTouched()\n // if (this.messages.invalid) return\n // const message = ChannelMessage.adapt(this.messages.value)\n // this.stateRequestServiceDemo.sendMessage(message)\n // this.content.reset()\n // }\n\n // onSendAlert() {\n // this.messages.markAllAsTouched()\n // if (this.messages.invalid) return\n // const message = ChannelMessage.adapt({ ...this.messages.value, type: CommunicationType.ALERT })\n // this.stateRequestServiceDemo.sendMessage(message)\n // this.content.reset()\n // }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <h2 style=\"display: flex;\">\n <span style=\"flex:1\">HTTP Request State Manager - Websockets</span>\n @if ((connectionStatus$ | async); as connected) {\n <span>\n WS -\n <span style=\"color: green;\">Connected</span>\n </span>\n } @else {\n <span style=\"color: red;\">Disconnected {{ attempts$ | async }} - {{ nextRetry$ |async }}</span>\n }\n </h2>\n\n <div>\n\n @if ((user$ | async); as userInfo) {\n <div>\n <mat-toolbar>\n <div style=\"display: flex; flex:1\">\n <div style=\"flex:1\">{{ userInfo.name }}</div>\n <div>({{ userInfo.ldap }})</div>\n </div>\n </mat-toolbar>\n </div>\n }\n\n @if ((isPending$ | async)) {\n <div>\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n </div>\n }\n\n <mat-tab-group animationDuration=\"0ms\" [selectedIndex]=\"1\">\n\n <mat-tab label=\"WS - Data Control\">\n <!-- DATA CONTROL -->\n <app-ws-data-control\n [server]=\"server\"\n [wsServer]=\"wsServer\"\n [jwtToken]=\"jwtToken\"\n [user]=\"user\"\n [path]=\"path\"\n [wsChannel]=\"wsChannel\"\n ></app-ws-data-control>\n\n </mat-tab>\n\n <mat-tab label=\"WS - Messaging\">\n <!-- MESSAGING -->\n <app-ws-messaging\n [server]=\"server\"\n [wsServer]=\"wsServer\"\n [jwtToken]=\"jwtToken\"\n [user]=\"user\"\n ></app-ws-messaging>\n\n </mat-tab>\n\n <mat-tab label=\"WS - Notifications\">\n <!-- WS - Notifications -->\n <app-ws-notifications\n [server]=\"server\"\n [wsServer]=\"wsServer\"\n [jwtToken]=\"jwtToken\"\n [user]=\"user\"\n ></app-ws-notifications>\n </mat-tab>\n\n <mat-tab label=\"WS - AI Messaging\" [disabled]=\"true\">\n <!-- WS - AI Messaging -->\n <app-ws-ai-messaging></app-ws-ai-messaging>\n </mat-tab>\n\n </mat-tab-group>\n</div>\n\n</div>\n\n","export interface ClientInfoInterface {\n domain: string\n service: string\n id: number\n name: string\n}\n\nexport class ClientInfo implements ClientInfoInterface {\n\n constructor(\n public domain = '',\n public service = '',\n public id = 0,\n public name = '',\n ) {}\n\n static adapt(item?: any): ClientInfo {\n\n return new ClientInfo(\n item?.domain,\n item?.service,\n item?.id,\n (item?.first_name || item?.last_name) ? `${item?.first_name} ${item?.last_name}` : '',\n )\n\n }\n\n}\n\n\n","export interface ClientInfoMapperInterface {\n id: number\n first_name: string\n last_name: string\n email: string\n}\n\nexport class ClientInfoMapper implements ClientInfoMapperInterface {\n\n constructor(\n public id = 0,\n public first_name = '',\n public last_name = '',\n public email = '',\n ) {}\n\n static adapt(item?: any): ClientInfoMapper {\n\n const first_name = (item?.name) ? item.name.split(' ')[0] : ''\n const last_name = (item?.name) ? item.name.split(' ')[1] : ''\n\n return new ClientInfoMapper(\n item?.id,\n first_name,\n last_name,\n item?.email,\n )\n\n }\n\n}\n\n\n","export interface AIPromptInterface {\n response: string\n}\n\nexport class AIPrompt implements AIPromptInterface {\n\n constructor(\n public response = '',\n ) {}\n\n static adapt(item?: any): AIPrompt {\n\n return new AIPrompt(\n item?.response,\n )\n\n }\n\n}\n","import { Component, OnInit, ViewChild, inject } from '@angular/core'\n\nimport { FormArray, FormBuilder, Validators } from '@angular/forms'\n\nimport { ClientInfo } from './models/sample-client-info'\nimport { ClientInfoMapper } from './models/sample-mapper-client-info'\nimport { AIPrompt } from './models/sample-ai-prompt'\nimport { ApiRequest, HTTPManagerSignalsService } from '../..'\n\nimport { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display'\n\n@Component({\n selector: 'app-request-signals-manager-demo',\n templateUrl: './request-signals-manager-demo.component.html',\n styleUrls: ['./request-signals-manager-demo.component.scss'],\n standalone: false\n})\nexport class RequestSignalsManagerDemoComponent implements OnInit {\n\n displayedColumns = ['id','name', 'lastName', 'age']\n\n private fb = inject(FormBuilder)\n private toastMessage = inject(ToastMessageDisplayService)\n\n httpManagerSignalsService = inject(HTTPManagerSignalsService)\n\n // Using signals service: signals are callable in templates (e.g. isPending())\n isPending = this.httpManagerSignalsService.isPending\n countdown = this.httpManagerSignalsService.countdown\n\n // per-operation plain results and error messages (no rxjs in component)\n GET_result: any = null\n POST_result: any = null\n PUT_result: any = null\n DELETE_result: any = null\n\n STREAM_result: any = null\n STREAM_AI_result: any = null\n\n GET_error: string = ''\n POST_error: string = ''\n PUT_error: string = ''\n DELETE_error: string = ''\n STREAM_error: string = ''\n STREAM_AI_error: string = ''\n\n requestParams = {\n GET: ApiRequest.adapt(),\n POST: ApiRequest.adapt(),\n PUT: ApiRequest.adapt(),\n DELETE: ApiRequest.adapt(),\n STREAM: ApiRequest.adapt(),\n }\n\n @ViewChild(\"failedState\", { static: true }) failedState: any\n @ViewChild(\"pollingState\", { static: true }) pollingState: any\n\n questionControl = this.fb.control(\"\", [Validators.required])\n\n downloadRequest = ApiRequest.adapt({\n server: 'assets/images',\n path: ['me.jpg'],\n // saveAs: 'john.jpg' // Optional\n })\n\n // downloadRequest = ApiRequest.adapt({\n // server: 'oidc/ai/file'\n // })\n\n sampleClientData = {\n id: 0,\n name: \"Old School Dates\",\n domain: \"osd.com\",\n service: \"osd\",\n spiffe: \"osd.com/osd\",\n secret: \"SMOPECXP-OS4P-USOG-X2II-3XMD1FQDR3IJX\",\n created: 1693003138,\n modified: 1693003138,\n icon: \"\",\n imageFile: \"\",\n email: \"wavecoders@gmail.com\"\n }\n\n requestForm = this.fb.group({\n path: this.fb.control<string>(\"ai/\"),\n headers: this.fb.array([]),\n adapter: [null],\n mapper: [null],\n retry: this.fb.group({\n times: [3],\n delay: [3],\n }),\n polling: [3],\n })\n\n AIType = 0\n\n sampleAdaptors = [\n { label: \"ClientInfo Basic\", value: ClientInfo.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n sampleMappers = [\n { label: \"Mapper Basic\", value: ClientInfoMapper.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n get retry() {\n return this.requestForm.get('retry')?.value\n }\n\n get headers(): FormArray {\n return this.requestForm.get('headers') as FormArray\n }\n\n get isValid() {\n this.requestForm.markAllAsTouched()\n return this.requestForm.valid\n }\n\n hasId = (arr: any[]) => {\n if (arr.length === 0) return false\n return !isNaN(arr[arr.length - 1])\n }\n\n props = (adapter: any) => {\n return (adapter) ? adapter() : null\n }\n\n // server = `http://sample-endpoint/as/authorization.oauth2`\n\n arrayObjectsToObjects = (arr: any[]) => {\n return Array.isArray(arr) ? arr.reduce((obj, item) => Object.assign(obj, { [item.key]: item.value }), {}) : {}\n }\n\n constructor() { }\n\n ngOnInit() {\n\n // const reqGet2 = ApiRequest.adapt({\n // server,\n // path: ['clients'],\n // headers: { authentication: \"Bearer <KEY>\" },\n // adapter: ClientInfo,\n // dataType: DataType.OBJECT,\n // // concurrent: false,\n // // polling: 3, //seconds\n // })\n\n // const req2 = [1024,1025,1026].map(item => {\n // return this.httpManagerService.getRequest<ClientInfo[]>(reqGet2, [item])\n // .pipe(\n // catchError(error => {\n // return throwError(() => new Error(error.error.message))\n // })\n // )\n // })\n\n // forkJoin(req2)\n // .subscribe(res => console.log(res))\n\n }\n\n addHeader() {\n const header = this.fb.group({\n key: ['', Validators.required],\n value: ['']\n })\n this.headers.push(header)\n }\n\n removeHeader(index: number) {\n this.headers.removeAt(index)\n }\n\n compileRequest() {\n\n const requestParams = this.requestForm.value\n\n requestParams.headers = this.arrayObjectsToObjects(\n requestParams.headers || []\n )\n\n const pathReq = (requestParams.path === \"\") ? [] : (requestParams.path || \"\").split(\"/\")\n\n if (!this.pollingState.checked) requestParams.polling = 0\n\n if (!this.failedState.checked) {\n requestParams.retry = { times: 0,delay: 0 }\n }\n\n const apiOptions = ApiRequest.adapt(requestParams)\n apiOptions.path = []\n\n return { apiOptions: apiOptions, path: pathReq }\n\n }\n\n onGetRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n this.requestParams.GET = reqParams.apiOptions\n\n // reset local state\n this.GET_result = null\n this.GET_error = ''\n\n this.httpManagerSignalsService.getRequest<ClientInfo[]>(reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.GET_result = res,\n error: (err) => this.errorHandling(err, 'GET')\n })\n\n }\n\n onCreateRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n this.requestParams.POST = reqParams.apiOptions\n\n // reset local state\n this.POST_result = null\n this.POST_error = ''\n\n this.httpManagerSignalsService.postRequest<ClientInfo>(this.sampleClientData, reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.POST_result = res,\n error: (err) => this.errorHandling(err, 'POST')\n })\n\n }\n\n onUpdateRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n if(!this.hasId(reqParams.path)) {\n console.log(\"Missing ID\")\n return\n }\n\n this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length-1])\n this.requestParams.PUT = reqParams.apiOptions\n\n // reset local state\n this.PUT_result = null\n this.PUT_error = ''\n\n this.httpManagerSignalsService.putRequest<any>(this.sampleClientData, reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.PUT_result = res,\n error: (err) => this.errorHandling(err, 'PUT')\n })\n\n }\n\n onDeleteRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n this.requestParams.DELETE = reqParams.apiOptions\n\n if(!this.hasId(reqParams.path)) {\n console.log(\"Missing ID\")\n return\n }\n\n this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length-1])\n this.requestParams.DELETE = reqParams.apiOptions\n\n // reset local state\n this.DELETE_result = null\n this.DELETE_error = ''\n\n this.httpManagerSignalsService.deleteRequest<ClientInfo>(reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.DELETE_result = res,\n error: (err) => this.errorHandling(err, 'DELETE')\n })\n\n }\n\n onStreamPostRequest() {\n\n if (!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n let payload = {}\n let apiPath: string[] = reqParams.path\n let apiOptions = reqParams.apiOptions\n let responseMapper: (items: any) => any = (items) => items.response\n\n if (this.AIType === 0) {\n\n // API request\n payload = { prompt: this.questionControl.value }\n\n } else {\n\n // Local Ollama request\n apiOptions.server = \"api\"\n apiPath = [\"generate\"]\n apiOptions.stream = true\n payload = {\n model: \"phi3:latest\",\n prompt: this.questionControl.value,\n stream: true,\n }\n\n responseMapper = (items) => items.map((word: any) => word.response).flat().join('')\n\n }\n\n this.requestParams.STREAM = apiOptions\n this.STREAM_AI_result = null\n this.STREAM_AI_error = ''\n\n this.httpManagerSignalsService.postRequest<any>(payload, apiOptions, apiPath)\n .subscribe({\n next: (res) => {\n try {\n this.STREAM_AI_result = responseMapper(res)\n } catch (e) {\n this.STREAM_AI_result = res\n }\n this.questionControl.reset()\n },\n error: (err) => this.errorHandling(err, 'STREAM')\n })\n\n }\n\n\n onStreamRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n reqParams.apiOptions.stream = true\n\n this.requestParams.GET = reqParams.apiOptions\n this.STREAM_result = null\n this.STREAM_error = ''\n\n this.httpManagerSignalsService.getRequest<ClientInfo[]>(reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.STREAM_result = res,\n error: (err) => this.errorHandling(err, 'STREAM')\n })\n\n }\n\n onDownloadCompleted() {\n\n const message = \"Download Completed\"\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.SUCCESS,\n icon: 'sentiment_satisfied_alt',\n })\n\n this.toastMessage.toastMessage(display)\n }\n\n onDownloadFailed(err: string) {\n\n const message = \"Download Failed\"\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.ERROR,\n icon: 'warning',\n })\n\n this.toastMessage.toastMessage(display)\n }\n\n errorHandling(err: any, type: string) {\n const message = err?.message || String(err)\n // set local error state\n if (type === 'GET') this.GET_error = message\n if (type === 'POST') this.POST_error = message\n if (type === 'PUT') this.PUT_error = message\n if (type === 'DELETE') this.DELETE_error = message\n if (type === 'STREAM') this.STREAM_error = message\n\n // also set the shared service error signal\n this.httpManagerSignalsService.error.set(message)\n\n return err\n }\n\n onSelectAIType(type: number) {\n this.AIType = type\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <h2>\n <span>HTTP Request Signals Manager</span>\n <span style=\"margin-left: .5rem;\">\n <mat-icon color=\"accent\">fiber_new</mat-icon>\n </span>\n </h2>\n\n <div [formGroup]=\"requestForm\" style=\"margin-top: 2rem;\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Adapter (Model)</mat-label>\n <mat-select formControlName=\"adapter\" #adapterSelect>\n <mat-option>None</mat-option>\n @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","export interface SettingsInterface {\n enum_1: any\n enum_2: any\n enum_3: any\n enum_4: any\n}\n\nexport class Settings implements SettingsInterface {\n\n constructor(\n public enum_1 = [],\n public enum_2 = [],\n public enum_3 = [],\n public enum_4 = [],\n ) {}\n\n static adapt(item?: any): Settings {\n\n return new Settings(\n item?.enum_1,\n item?.enum_2,\n item?.enum_3,\n item?.enum_4,\n )\n\n }\n\n}\n","import { Injectable } from '@angular/core';\n\nimport { map } from 'rxjs';\n\nimport { SettingOptions, StorageType } from '../../../services';\nimport { StoreStateManagerService, StateStorageOptions } from '../../../services/store-state-manager-service';\nimport { Settings } from '../models/settings.model';\n\n\n@Injectable()\nexport class SettingsStateService extends StoreStateManagerService {\n\n constructor() {\n\n super(\n StateStorageOptions.adapt({\n store: 'sampleStore',\n options: SettingOptions.adapt({\n storage: StorageType.SESSION,\n encrypted: false\n }),\n model: Settings.adapt,\n }\n ))\n\n }\n\n updateEnum_1(value: any) {\n this.updateData(value)\n }\n\n updateEnum_2(value: any) {\n this.updateData(value)\n }\n\n getEnum(key: string) {\n return this.data$.pipe(\n map(item => item[key])\n )\n }\n\n getEnum_1() {\n return this.data$.pipe(\n map(item => item?.enum_1)\n )\n }\n\n}\n","import { Component, inject, OnInit } from '@angular/core';\nimport { RandomNumber } from '../../services';\nimport { SettingsStateService } from './services/settings-state.service';\n\n@Component({\n selector: 'app-store-state-manager-demo',\n templateUrl: './store-state-manager-demo.component.html',\n styleUrls: ['./store-state-manager-demo.component.css'],\n providers: [SettingsStateService],\n standalone: false\n})\nexport class StoreStateManagerDemoComponent implements OnInit {\n\n settingsStateService = inject(SettingsStateService)\n dataState$ = this.settingsStateService.data$\n\n dataEnum$ = this.settingsStateService.getEnum_1()\n\n ngOnInit() {\n }\n\n onUpdateEnum_1() {\n const rnd = RandomNumber(1000, 9999)\n this.settingsStateService.updateEnum_1({enum_1: [{ users: [1,2,3, rnd], random: rnd }]})\n }\n\n onUpdateEnum_2() {\n const rnd = RandomNumber(1000, 9999)\n this.settingsStateService.updateEnum_2({enum_2: [{ users: [1,2,3, rnd], random: rnd }]})\n }\n\n onGetEnum_1() {\n this.settingsStateService.getEnum_1().subscribe(data => console.log('DUMP:', data))\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <h2>\n <span>Store State Manager</span>\n <span style=\"margin-left: .5rem;\">\n <mat-icon color=\"accent\">fiber_new</mat-icon>\n </span>\n </h2>\n\n {{ dataState$ | async | json}}\n\n <div style=\"display: flex; gap:.5rem; margin-top: 1rem; margin-bottom: 1rem;\">\n <button mat-stroked-button (click)=\"onUpdateEnum_1()\">Update Start</button>\n <button mat-stroked-button (click)=\"onUpdateEnum_2()\">Update End</button>\n <button mat-stroked-button (click)=\"onGetEnum_1()\">Dump</button>\n </div>\n\n <div>\n <h3 style=\"margin: 0;\">Enum 1</h3>\n {{ dataEnum$ | async | json}}\n </div>\n\n</div>\n","import { 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 { 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 { ProxyDebuggerInterceptor } from './interceptors/proxy-debugger.interceptor';\nimport { MatTabsModule } from '@angular/material/tabs';\n\nimport { ConfigOptions } from './models';\nimport { CONFIG_SETTINGS_TOKEN } from './models/config-token.model';\nimport { HTTPManagerService, LocalStorageManagerService } from './services';\n\nimport { FileDownloaderModule } from './http-request-services-demo/request-manager-demo/file-downloader/file-download.module';\nimport { ToastMessageDisplayModule } from 'toast-message-display';\n\nimport { DatabaseDataDemoComponent, HttpRequestServicesDemoComponent, LocalStorageDemoComponent, RequestManagerDemoComponent, RequestManagerStateDemoComponent } from '../public-api';\n\nimport { LocalStorageSignalsDemoComponent } from './http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component';\nimport { RequestManagerWsDemoComponent } from './http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component';\nimport { RequestSignalsManagerDemoComponent } from './http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component';\nimport { StoreStateManagerDemoComponent } from './http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component';\n\nimport { WsDataControlComponent } from './http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component';\nimport { WsMessagingComponent } from './http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component';\nimport { WsNotificationsComponent } from './http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component';\nimport { WsAiMessagingComponent } from './http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component';\n\n// import { MessengerChatModule } from 'src/app/components/messenger-chat/messenger-chat.module';\n// import { StoreStateManagerModule } from \"src/app/beta_components/store-state-manager/store-state-manager.module\";\n\n\n@NgModule({\n imports: [\n CommonModule,\n ToastMessageDisplayModule,\n FormsModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatTabsModule,\n MatSelectModule,\n MatChipsModule,\n MatMenuModule,\n MatIconModule,\n MatTableModule,\n MatButtonToggleModule,\n MatAutocompleteModule,\n MatProgressBarModule,\n MatSlideToggleModule,\n MatDividerModule,\n MatFormFieldModule,\n MatInputModule,\n MatToolbarModule,\n MatSlideToggleModule,\n TranslateModule.forRoot(),\n MatSidenavModule,\n MatDatepickerModule,\n MatNativeDateModule,\n FileDownloaderModule,\n // MessengerChatModule,\n // StoreStateManagerModule\n],\n declarations: [\n HttpRequestServicesDemoComponent,\n RequestManagerStateDemoComponent,\n RequestManagerDemoComponent,\n RequestSignalsManagerDemoComponent,\n LocalStorageDemoComponent,\n LocalStorageSignalsDemoComponent,\n RequestManagerWsDemoComponent,\n StoreStateManagerDemoComponent,\n DatabaseDataDemoComponent,\n WsDataControlComponent,\n WsMessagingComponent,\n WsNotificationsComponent,\n WsAiMessagingComponent,\n ],\n exports: [\n HttpRequestServicesDemoComponent,\n ],\n providers: [\n { provide: HTTP_INTERCEPTORS, useClass: WithCredentialsInterceptor, multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: RequestHeadersInterceptor, multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: ProxyDebuggerInterceptor, multi: true },\n { provide: CONFIG_SETTINGS_TOKEN, useValue: ConfigOptions.adapt() },\n HTTPManagerService, LocalStorageManagerService\n ],\n})\nexport class HttpRequestManagerModule {\n\n static forRoot(config: ConfigOptions = ConfigOptions.adapt()): ModuleWithProviders<HttpRequestManagerModule> {\n return {\n ngModule: HttpRequestManagerModule,\n providers: [\n { provide: CONFIG_SETTINGS_TOKEN, useValue: ConfigOptions.adapt(config) },\n HTTPManagerService, LocalStorageManagerService //all services that need access to config\n ],\n };\n }\n\n}\n\n\n","export interface ClientInfoInterface {\n domain: string\n service: string\n id: number\n name: string\n}\n\nexport class ClientInfo implements ClientInfoInterface {\n\n constructor(\n public domain = '',\n public service = '',\n public id = 0,\n public name = '',\n ) {}\n\n static adapt(item?: any): ClientInfo {\n\n return new ClientInfo(\n item?.domain,\n item?.service,\n item?.id,\n (item?.first_name || item?.last_name) ? `${item?.first_name} ${item?.last_name}` : '',\n )\n\n }\n\n}\n\n\n","export interface ClientInfoMapperInterface {\n id: number\n first_name: string\n last_name: string\n email: string\n}\n\nexport class ClientInfoMapper implements ClientInfoMapperInterface {\n\n constructor(\n public id = 0,\n public first_name = '',\n public last_name = '',\n public email = '',\n ) {}\n\n static adapt(item?: any): ClientInfoMapper {\n\n const first_name = (item?.name) ? item.name.split(' ')[0] : ''\n const last_name = (item?.name) ? item.name.split(' ')[1] : ''\n\n return new ClientInfoMapper(\n item?.id,\n first_name,\n last_name,\n item?.email,\n )\n\n }\n\n}\n\n\n","import { Injectable } from '@angular/core';\n\nimport { DataType, DatabaseStorage } from '../../../models';\nimport { HTTPManagerStateService, ApiRequest, RequestOptions } from '../../../services';\n\nimport { ClientInfo } from '../../request-manager-demo/models/sample-client-info';\nimport { ClientInfoMapper } from '../../request-manager-demo/models/sample-mapper-client-info';\n\n@Injectable()\nexport class StateManagerDemoService extends HTTPManagerStateService<any> {\n\n constructor() {\n super(\n ApiRequest.adapt({\n server: \"\",\n path: [],\n headers: {},\n adapter: ClientInfo.adapt,\n mapper: ClientInfoMapper.adapt,\n stream: false,\n }),\n DataType.ARRAY,\n DatabaseStorage.adapt()\n )\n }\n\n setAPIOptions(apiOptions: ApiRequest, dataType: DataType, database?: DatabaseStorage) {\n this.setApiRequestOptions(apiOptions, dataType, database)\n }\n\n getClients() {\n\n // const headers = {\n // auth: \"sample-auth-token\"\n // }\n // const sampleOptions = RequestOptions.adapt({ path: [\"id\", 12], headers, sample: true })\n this.fetchRecords()\n\n }\n\n createClient(data: any) {\n\n // const headers = {\n // auth: \"sample-auth-token\"\n // }\n\n // const sampleOptions = RequestOptions.adapt({ path: [\"id\", 12], headers, sample: true })\n this.createRecord(data)\n\n }\n\n updateClient(data: ClientInfo) {\n\n // const headers = {\n // auth: \"sample-auth-token\"\n // }\n data.id = 1031\n const sampleOptions = RequestOptions.adapt({ path: [data.id] })\n this.updateRecord(data, sampleOptions)\n\n }\n\n deleteClient(data: ClientInfo) {\n\n // const headers = {\n // auth: \"sample-auth-token\"\n // }\n\n data.id = 1031\n const sampleOptions = RequestOptions.adapt({ path: [data.id] })\n this.deleteRecord(sampleOptions)\n\n }\n\n streamRequest() {\n\n const headers = {\n auth: \"sample-auth-token\"\n }\n\n // const sampleOptions = RequestOptions.adapt({ path: [1], headers })\n this.fetchStream()\n\n }\n\n}\n","export interface AIPromptInterface {\n response: string\n}\n\nexport class AIPrompt implements AIPromptInterface {\n\n constructor(\n public response = '',\n ) {}\n\n static adapt(item?: any): AIPrompt {\n\n return new AIPrompt(\n item?.response,\n )\n\n }\n\n}\n","import { Component, Input, OnInit, ViewChild, inject } from '@angular/core';\n\nimport { StateManagerDemoService } from './services/state-manager-demo.service';\nimport { FormBuilder, Validators, FormArray } from '@angular/forms';\n\nimport { Observable, BehaviorSubject, EMPTY, map, tap, catchError, throwError } from 'rxjs';\n\nimport { ClientInfo } from '../request-manager-demo/models/sample-client-info';\nimport { ClientInfoMapper } from '../request-manager-demo/models/sample-mapper-client-info';\nimport { AIPrompt } from '../request-manager-demo/models/sample-ai-prompt';\n\nimport { DataType } from '../../models';\nimport { DatabaseStorage } from '../../models/database-storage.model';\nimport { HTTPManagerService, ApiRequest } from '../../services';\n\n\n@Component({\n selector: 'app-request-manager-state-demo',\n templateUrl: './request-manager-state-demo.component.html',\n styleUrls: ['./request-manager-state-demo.component.scss'],\n providers: [StateManagerDemoService, HTTPManagerService],\n standalone: false\n})\nexport class RequestManagerStateDemoComponent implements OnInit {\n\n @Input() server = 'http://localhost:8080'\n @Input() adapter?: Function\n @Input() mapper?: Function\n\n stateManagerDemoService = inject(StateManagerDemoService)\n\n displayedColumns = ['id','name', 'lastName', 'age']\n\n selectedRecord$?: Observable<ClientInfo|null>\n\n fb = inject(FormBuilder)\n\n httpManagerService = inject(HTTPManagerService)\n\n isPending$ = this.stateManagerDemoService.isPending$\n error$ = this.stateManagerDemoService.error$\n\n countdown$ = this.httpManagerService.countdown$\n\n GET_error$ = new BehaviorSubject<string>('')\n POST_error$ = new BehaviorSubject<string>('')\n PUT_error$ = new BehaviorSubject<string>('')\n DELETE_error$ = new BehaviorSubject<string>('')\n\n STREAM_error$ = new BehaviorSubject<string>('')\n STREAM_AI_error$ = new BehaviorSubject<string>('')\n\n GET$ = new BehaviorSubject<any>(null)\n POST$ = new BehaviorSubject(null)\n PUT$ = new BehaviorSubject(null)\n DELETE$ = new BehaviorSubject(null)\n\n STREAM = new BehaviorSubject(null)\n STREAM$ = this.STREAM.asObservable()\n\n STREAM_AI = new BehaviorSubject<{response: string}[]>([])\n STREAM_AI$ = this.STREAM_AI.asObservable()\n .pipe(\n map((items: any) => (items) ? items.map((item: any) => item.response) : []),\n map((items: any) => items.join('\\n').trim()),\n )\n\n @ViewChild(\"failedState\", { static: true }) failedState: any\n @ViewChild(\"pollingState\", { static: true }) pollingState: any\n\n questionControl = this.fb.control(\"\", [Validators.required])\n\n requestType = ''\n\n prompts: string[] = []\n\n AIType = 0\n\n get dataObservable$() {\n\n switch (this.requestType) {\n case 'GET':\n return this.GET$\n\n case 'PUT':\n return this.PUT$\n\n case 'POST':\n return this.POST$\n\n case 'DELETE':\n return this.DELETE$\n\n case 'STREAM':\n return this.STREAM\n\n case 'STREAM_AI':\n return this.STREAM_AI\n\n default:\n return this.GET$\n break;\n }\n\n }\n\n sampleClientData = {\n id: 0,\n name: \"Old School Dates\",\n domain: \"osd.com\",\n service: \"osd\",\n spiffe: \"osd.com/osd\",\n secret: \"SMOPECXP-OS4P-USOG-X2II-3XMD1FQDR3IJX\",\n created: 1693003138,\n modified: 1693003138,\n icon: \"\",\n imageFile: \"\",\n }\n\n selectedRecord = this.fb.control(null)\n\n requestForm = this.fb.group({\n datatype: this.fb.control('ARRAY'),\n path: this.fb.control<string>(\"ai/\"),\n headers: this.fb.array([]),\n adapter: [null],\n mapper: [null],\n retry: this.fb.group({\n times: [3],\n delay: [3],\n }),\n polling: [3],\n database: this.fb.group({\n table: [''],\n expiresIn: ['1m'],\n })\n })\n\n get hasChanged() {\n return this.requestForm.dirty || this.requestForm.untouched\n }\n\n get dataType() {\n return this.requestForm.get(\"datatype\")?.value\n }\n\n get database() {\n return this.requestForm.get(\"database\")?.value\n }\n\n get retry() {\n return this.requestForm.get(\"retry\")?.value\n }\n\n sampleAdaptors = [\n { label: \"ClientInfo Basic\", value: ClientInfo.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n sampleMappers = [\n { label: \"Mapper Basic\", value: ClientInfoMapper.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n get headers(): FormArray {\n return this.requestForm.get('headers') as FormArray\n }\n\n get isValid() {\n this.requestForm.markAllAsTouched()\n return this.requestForm.valid\n }\n\n // server = `http://sample-endpoint/as/authorization.oauth2`\n\n arrayObjectsToObjects = (arr: any[]) => {\n return Array.isArray(arr) ? arr.reduce((obj, item) => Object.assign(obj, { [item.key]: item.value }), {}) : {}\n }\n\n props = (adapter: any) => {\n return (adapter) ? adapter() : null\n }\n\n constructor() { }\n\n ngOnInit() {\n\n this.stateManagerDemoService.data$.pipe(\n tap((data) => console.log(\"API STREAM_AI response\", data)),\n )\n\n this.error$.pipe(\n tap((data) => {\n debugger\n console.log(\"API STREAM response\", data)\n }),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'STREAM'))\n })\n )\n\n this.selectedRecord.valueChanges\n .subscribe((data: ClientInfo|null) => {\n this.selectedRecord$ = (data) ? this.stateManagerDemoService.selectRecord$(data.id) : EMPTY\n })\n\n this.stateManagerDemoService.data$\n .pipe(\n tap((data: any) => {\n\n switch (this.requestType) {\n case 'GET':\n this.GET$.next(data)\n break;\n\n case 'PUT':\n this.PUT$.next(data)\n break;\n\n case 'POST':\n this.POST$.next(data)\n break;\n\n case 'DELETE':\n this.DELETE$.next(data)\n break;\n\n case 'STREAM':\n this.STREAM.next(data)\n break;\n\n case 'STREAM_AI':\n this.STREAM_AI.next(data)\n break;\n\n default:\n break;\n }\n\n })\n ).subscribe()\n\n }\n\n addHeader() {\n const header = this.fb.group({\n key: ['', Validators.required],\n value: ['']\n });\n this.headers.push(header)\n }\n\n removeHeader(index: number) {\n this.headers.removeAt(index)\n }\n\n compileRequest() {\n\n const requestParams = this.requestForm.value\n\n requestParams.headers = this.arrayObjectsToObjects(\n requestParams.headers || []\n )\n\n const pathReq = (requestParams.path === \"\") ? [] : (requestParams.path || \"\").split(\"/\")\n\n if (!this.pollingState.checked) requestParams.polling = 0\n\n if (!this.failedState.checked) {\n requestParams.retry = { times: 0,delay: 0 }\n }\n\n const currentOptions = ApiRequest.adapt(requestParams)\n currentOptions.path = []\n currentOptions.server = this.server\n currentOptions.adapter = this.adapter\n currentOptions.mapper = this.mapper\n const apiOptions = ApiRequest.adapt({ ...currentOptions, path: pathReq })\n\n return { apiOptions: apiOptions, path: pathReq }\n\n }\n\n onSetStateOptions() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n const db = DatabaseStorage.adapt(this.database)\n const type = this.dataType === \"ARRAY\" ? DataType.ARRAY : DataType.OBJECT\n this.stateManagerDemoService.setAPIOptions(reqParams.apiOptions, type, db)\n\n this.requestForm.markAsPristine()\n }\n\n onClearRecords() {\n this.stateManagerDemoService.clearRecords()\n }\n\n onGetRequest() {\n this.requestType = 'GET'\n this.stateManagerDemoService.getClients()\n }\n\n onCreateRequest() {\n this.requestType = 'POST'\n this.stateManagerDemoService.createClient(this.sampleClientData)\n }\n\n onUpdateRequest() {\n this.requestType = 'PUT'\n this.stateManagerDemoService.updateClient(this.sampleClientData)\n }\n\n onDeleteRequest() {\n this.requestType = 'DELETE'\n this.stateManagerDemoService.deleteClient(this.sampleClientData)\n }\n\n onStreamRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n reqParams.apiOptions.stream = true\n\n this.requestType = 'STREAM'\n\n this.stateManagerDemoService.streamRequest()\n\n }\n\n errorHandling(err: any, type: string) { console.log(err, type)\n if(type === 'GET') this.GET_error$.next(err.message)\n if(type === 'POST') this.POST_error$.next(err.message)\n if(type === 'PUT') this.PUT_error$.next(err.message)\n if(type === 'DELETE') this.DELETE_error$.next(err.message)\n if(type === 'STREAM') this.STREAM_error$.next(err.message)\n if(type === 'STREAM_AI') this.STREAM_AI_error$.next(err.message)\n }\n\n onSelectAIType(type: number) {\n this.AIType = type\n }\n\n onClearHistory() {\n this.prompts = []\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <h2>\n HTTP Request State Manager\n </h2>\n\n <div [formGroup]=\"requestForm\" style=\"margin-top: 2rem;\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>State Data Type</mat-label>\n <mat-select formControlName=\"datatype\">\n <mat-option value=\"ARRAY\">Array</mat-option>\n <mat-option value=\"OBJECT\">Object</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Adapter (Model)</mat-label>\n <mat-select formControlName=\"adapter\" #adapterSelect>\n <mat-option>None</mat-option>\n @for (adapter of sampleAdaptors; track adapter) {\n <mat-option [value]=\"adapter.value\">\n {{adapter.label}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mapper (Model)</mat-label>\n <mat-select formControlName=\"mapper\" #mapperSelect>\n <mat-option>None</mat-option>\n @for (mapper of sampleMappers; track mapper) {\n <mat-option [value]=\"mapper.value\">\n {{mapper.label}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n\n @if (adapterSelect.value || mapperSelect.value) {\n <div style=\"display: flex; margin-bottom: 2rem;\">\n <div style=\"flex:1\" class=\"box\">\n <h3>Adapter (Incoming)</h3>\n @if (adapterSelect.value) {\n <div>\n {{ props(adapterSelect.value) | json }}\n </div>\n } @else {\n No Transformation\n }\n </div>\n <div style=\"flex:1\" class=\"box\">\n <h3>Mapper (Outgoing)</h3>\n @if (mapperSelect.value) {\n <div>\n {{ props(mapperSelect.value) | json }}\n </div>\n } @else {\n No Transformation\n }\n </div>\n </div>\n }\n\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>RestPath (/ delimited)</mat-label>\n <input matInput placeholder=\"clients/list\" formControlName=\"path\">\n </mat-form-field>\n </div>\n <div>\n <div formArrayName=\"headers\">\n @for (task of headers.controls; track task; let i = $index) {\n <div [formGroupName]=\"i\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Key</mat-label>\n <input matInput placeholder=\"authentication\" formControlName=\"key\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Value</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"value\">\n </mat-form-field>\n <div style=\"margin-top: .5rem;\">\n <button mat-icon-button (click)=\"removeHeader(i)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n <button mat-stroked-button (click)=\"addHeader()\">Add Header</button>\n </div>\n <div style=\"margin-top: 2rem; display: flex; flex-direction:column; gap: 1rem;\">\n <div>\n <mat-slide-toggle #failedState>Retry on Failed</mat-slide-toggle>\n @if (failedState.checked) {\n <div style=\"display: flex; gap: .5rem; margin-top: 1rem;\" formGroupName=\"retry\">\n <mat-form-field appearance=\"outline\">\n <mat-label>#of Times</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"times\" value=\"3\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Delay Until Next</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"delay\" value=\"3\">\n </mat-form-field>\n </div>\n }\n </div>\n <div>\n <mat-slide-toggle #pollingState>Polling</mat-slide-toggle>\n @if (pollingState.checked) {\n <div>\n <mat-form-field appearance=\"outline\" style=\"margin-top: 1rem\">\n <mat-label>#of Seconds</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"polling\" value=\"3\">\n </mat-form-field>\n </div>\n }\n </div>\n <div>\n <mat-slide-toggle #DBState>Database Storage</mat-slide-toggle>\n @if (DBState.checked) {\n <div style=\"display: flex; gap: .5rem; margin-top: 1rem\" formGroupName=\"database\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Table Name</mat-label>\n <input matInput placeholder=\"table\" formControlName=\"table\" value=\"\">\n </mat-form-field>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Expires In</mat-label>\n <mat-select formControlName=\"expiresIn\">\n <mat-option value=\"1m\">One Minute</mat-option>\n <mat-option value=\"1h\">One Hour</mat-option>\n <mat-option value=\"1d\">One Day</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n }\n </div>\n <div style=\"margin-top: 1rem; display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onSetStateOptions()\" [disabled]=\"!hasChanged\">\n Set API Request Options\n </button>\n </div>\n <div>\n @if ((error$ | async); as error) {\n <mat-error>\n {{ error }}\n </mat-error>\n }\n </div>\n </div>\n </div>\n\n <div style=\"margin-bottom: 1rem; margin-top: 2rem;\">\n @if ((isPending$ | async)) {\n <mat-progress-bar mode=\"indeterminate\"\n ></mat-progress-bar>\n }\n @if (pollingState.checked) {\n <div>\n @if (!(isPending$ | async) && (this.countdown$ | async) || -1 > 0) {\n <mat-progress-bar mode=\"determinate\"\n [value]=\"(this.countdown$ | async)\"\n ></mat-progress-bar>\n }\n </div>\n }\n\n </div>\n\n @if ((GET$ | async); as data) {\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1;\">CURRENT STATE ({{ dataType }})</h2>\n </div>\n @if (data.length > 1) {\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Records</mat-label>\n <mat-select [formControl]=\"selectedRecord\" [disabled]=\"data === null && data?.length === 0\">\n <mat-option [value]=\"\">None</mat-option>\n @for (item of data; track item) {\n <mat-option [value]=\"item\">\n {{item.name || (item.first_name) | titlecase}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n }\n @if ((dataObservable$ | async); as dataRecord) {\n <div>\n @if ((selectedRecord$ | async); as record) {\n <div>\n {{ record | json }}\n </div>\n } @else {\n No Record Selected from State\n }\n </div>\n }\n <div style=\"margin-top: 1rem;\">\n @if (data !== null && data?.length > 0) {\n <span>\n State contains a Total of {{ data.length }} Records\n </span>\n } @else {\n No Records\n }\n <div style=\"display: flex; gap: .5rem; text-align: end; justify-content: flex-end;\">\n <button class=\"btn\" mat-stroked-button (click)=\"onClearRecords()\">Clear</button>\n </div>\n </div>\n </div>\n }\n\n\n\n\n <div style=\"margin-top: 1rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">GET Request ({{ dataType }})</h2>\n <div>\n <button mat-raised-button (click)=\"onGetRequest()\" [disabled]=\"hasChanged\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if ((GET_error$ | async); as get_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ get_error }}</mat-error>\n </div>\n }\n\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(GET$ | async) | jsonv\"></div> -->\n @if ((GET$ | async); as getData) {\n <div>{{ getData | json }}</div>\n }\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">POST Request</h2>\n <div>\n <button mat-raised-button (click)=\"onCreateRequest()\" [disabled]=\"hasChanged\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if ((POST_error$ | async); as post_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ post_error }}</mat-error>\n </div>\n }\n\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(POST$ | async) | jsonv\"></div> -->\n @if ((POST$ | async); as postData) {\n <div>{{ postData | json }}</div>\n }\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">PUT Request</h2>\n <div>\n <button mat-raised-button (click)=\"onUpdateRequest()\" [disabled]=\"hasChanged\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if ((PUT_error$ | async); as put_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ put_error }}</mat-error>\n </div>\n }\n\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(PUT$ | async) | jsonv\"></div> -->\n @if ((PUT$ | async); as putData) {\n <div>{{ putData | json }}</div>\n }\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">DELETE Request</h2>\n <div>\n <button mat-raised-button (click)=\"onDeleteRequest()\" [disabled]=\"hasChanged\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if ((DELETE_error$ | async); as delete_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ delete_error }}</mat-error>\n </div>\n }\n\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(DELETE$ | async) | jsonv\"></div> -->\n @if ((DELETE$ | async); as deleteData) {\n <div>{{ deleteData | json }}</div>\n }\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">Streaming GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onStreamRequest()\" class=\"btn\" [disabled]=\"hasChanged\">Request</button>\n </div>\n </div>\n\n @if ((STREAM_error$ | async); as stream_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ stream_error }}</mat-error>\n </div>\n }\n\n <div style=\"margin-top: 1rem;\">\n @if ((STREAM$ | async); as data) {\n <div class=\"container\">\n <table mat-table [dataSource]=\"data\">\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>\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 } from '../..'\nimport { catchError, map, tap } from 'rxjs/operators'\n\nimport { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display'\n\n@Component({\n selector: 'app-request-manager-demo',\n templateUrl: './request-manager-demo.component.html',\n styleUrls: ['./request-manager-demo.component.scss'],\n 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 = ['id','name', 'lastName', 'age']\n\n private fb = inject(FormBuilder)\n private toastMessage = inject(ToastMessageDisplayService)\n\n httpManagerService = inject(HTTPManagerService)\n\n isPending$ = this.httpManagerService.isPending$\n countdown$ = this.httpManagerService.countdown$\n\n GET_error$ = new BehaviorSubject<string>('')\n POST_error$ = new BehaviorSubject<string>('')\n PUT_error$ = new BehaviorSubject<string>('')\n DELETE_error$ = new BehaviorSubject<string>('')\n\n STREAM_error$ = new BehaviorSubject<string>('')\n STREAM_AI_error$ = new BehaviorSubject<string>('')\n\n GET$?: Observable<any>\n POST$?: Observable<any>\n PUT$?: Observable<any>\n DELETE$?: Observable<any>\n\n STREAM_AI$?: Observable<any>\n STREAM$?: Observable<any>\n\n requestParams = {\n GET: ApiRequest.adapt(),\n POST: ApiRequest.adapt(),\n PUT: ApiRequest.adapt(),\n DELETE: ApiRequest.adapt(),\n STREAM: ApiRequest.adapt(),\n }\n\n @ViewChild(\"failedState\", { static: true }) failedState: any\n @ViewChild(\"pollingState\", { static: true }) pollingState: any\n\n questionControl = this.fb.control(\"\", [Validators.required])\n\n downloadRequest = ApiRequest.adapt({\n server: 'assets/images',\n path: ['me.jpg'],\n saveAs: 'john.jpg' // Optional\n })\n\n // downloadRequest = ApiRequest.adapt({\n // server: 'oidc/ai/file'\n // })\n\n sampleClientData = {\n id: 0,\n name: \"Old School Dates\",\n domain: \"osd.com\",\n service: \"osd\",\n spiffe: \"osd.com/osd\",\n secret: \"SMOPECXP-OS4P-USOG-X2II-3XMD1FQDR3IJX\",\n created: 1693003138,\n modified: 1693003138,\n icon: \"\",\n imageFile: \"\",\n email: \"wavecoders@gmail.com\"\n }\n\n requestForm = this.fb.group({\n path: this.fb.control<string>(\"ai/\"),\n headers: this.fb.array([]),\n adapter: [null],\n mapper: [null],\n retry: this.fb.group({\n times: [3],\n delay: [3],\n }),\n polling: [3],\n })\n\n AIType = 0\n\n sampleAdaptors = [\n { label: \"ClientInfo Basic\", value: ClientInfo.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n sampleMappers = [\n { label: \"Mapper Basic\", value: ClientInfoMapper.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n get retry() {\n return this.requestForm.get('retry')?.value\n }\n\n get headers(): FormArray {\n return this.requestForm.get('headers') as FormArray\n }\n\n get isValid() {\n this.requestForm.markAllAsTouched()\n return this.requestForm.valid\n }\n\n hasId = (arr: any[]) => {\n if (arr.length === 0) return false\n return !isNaN(arr[arr.length - 1])\n }\n\n props = (adapter: any) => {\n return (adapter) ? adapter() : null\n }\n\n // server = `http://sample-endpoint/as/authorization.oauth2`\n\n arrayObjectsToObjects = (arr: any[]) => {\n return Array.isArray(arr) ? arr.reduce((obj, item) => Object.assign(obj, { [item.key]: item.value }), {}) : {}\n }\n\n constructor() { }\n\n ngOnInit() {\n\n // const reqGet2 = ApiRequest.adapt({\n // server,\n // path: ['clients'],\n // headers: { authentication: \"Bearer <KEY>\" },\n // adapter: ClientInfo,\n // dataType: DataType.OBJECT,\n // // concurrent: false,\n // // polling: 3, //seconds\n // })\n\n // const req2 = [1024,1025,1026].map(item => {\n // return this.httpManagerService.getRequest<ClientInfo[]>(reqGet2, [item])\n // .pipe(\n // catchError(error => {\n // return throwError(() => new Error(error.error.message))\n // })\n // )\n // })\n\n // forkJoin(req2)\n // .subscribe(res => console.log(res))\n\n }\n\n addHeader() {\n const header = this.fb.group({\n key: ['', Validators.required],\n value: ['']\n })\n this.headers.push(header)\n }\n\n removeHeader(index: number) {\n this.headers.removeAt(index)\n }\n\n compileRequest() {\n\n const requestParams = this.requestForm.value\n\n requestParams.headers = this.arrayObjectsToObjects(\n requestParams.headers || []\n )\n\n const pathReq = (requestParams.path === \"\") ? [] : (requestParams.path || \"\").split(\"/\")\n\n if (!this.pollingState.checked) requestParams.polling = 0\n\n if (!this.failedState.checked) {\n requestParams.retry = { times: 0,delay: 0 }\n }\n\n const apiOptions = ApiRequest.adapt(requestParams)\n apiOptions.path = []\n 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 payload = {\n model: \"phi3:latest\",\n prompt: this.questionControl.value,\n stream: true,\n }\n\n responseMapper = (items) => items.map((word: any) => word.response).flat().join('')\n\n }\n\n this.requestParams.STREAM = apiOptions\n this.STREAM_AI$ = EMPTY\n this.STREAM_AI_error$.next('')\n\n this.STREAM_AI$ = this.httpManagerService.postRequest<any>(payload, apiOptions, apiPath).pipe(\n map(responseMapper),\n tap(() => this.questionControl.reset()),\n catchError(error => throwError(() => this.errorHandling(error, 'STREAM')))\n )\n\n }\n\n\n onStreamRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n reqParams.apiOptions.stream = true\n\n this.requestParams.GET = reqParams.apiOptions\n this.STREAM$ = this.httpManagerService.getRequest<ClientInfo[]>(reqParams.apiOptions, reqParams.path)\n .pipe(\n // tap((data) => console.log(\"API STREAM response\", data)),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'STREAM'))\n })\n )\n\n }\n\n onDownloadCompleted() {\n\n const message = \"Download Completed\"\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.SUCCESS,\n icon: 'sentiment_satisfied_alt',\n })\n\n this.toastMessage.toastMessage(display)\n }\n\n onDownloadFailed(err: string) {\n\n const message = \"Download Failed\"\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.ERROR,\n icon: 'warning',\n })\n\n this.toastMessage.toastMessage(display)\n }\n\n errorHandling(err: any, type: string) {\n if(type === 'GET') this.GET_error$.next(err.message)\n if(type === 'POST') this.POST_error$.next(err.message)\n if(type === 'PUT') this.PUT_error$.next(err.message)\n if(type === 'DELETE') this.DELETE_error$.next(err.message)\n if(type === 'STREAM') this.STREAM_error$.next(err.message)\n }\n\n onSelectAIType(type: number) {\n this.AIType = type\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <h2>\n HTTP Request Manager\n </h2>\n\n <div [formGroup]=\"requestForm\" style=\"margin-top: 2rem;\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Adapter (Model)</mat-label>\n <mat-select formControlName=\"adapter\" #adapterSelect>\n <mat-option>None</mat-option>\n @for (adapter of sampleAdaptors; track adapter) {\n <mat-option [value]=\"adapter.value\">\n {{adapter.label}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mapper (Model)</mat-label>\n <mat-select formControlName=\"mapper\" #mapperSelect>\n <mat-option>None</mat-option>\n @for (mapper of sampleMappers; track mapper) {\n <mat-option [value]=\"mapper.value\">\n {{mapper.label}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n @if (adapterSelect.value || mapperSelect.value) {\n <div style=\"display: flex; margin-bottom: 2rem;\">\n <div style=\"flex:1\" class=\"box\">\n <h3>Adapter (Incoming)</h3>\n @if (adapterSelect.value) {\n <div>\n {{ props(adapterSelect.value) | json }}\n </div>\n } @else {\n No Transformation\n }\n </div>\n <div style=\"flex:1\" class=\"box\">\n <h3>Mapper (Outgoing)</h3>\n @if (mapperSelect.value) {\n <div>\n {{ props(mapperSelect.value) | json }}\n </div>\n } @else {\n No Transformation\n }\n </div>\n </div>\n }\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>RestPath (/ delimited)</mat-label>\n <input matInput placeholder=\"clients/list\" formControlName=\"path\">\n </mat-form-field>\n </div>\n <div>\n <div formArrayName=\"headers\">\n @for (task of headers.controls; track task; let i = $index) {\n <div [formGroupName]=\"i\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Key</mat-label>\n <input matInput placeholder=\"authentication\" formControlName=\"key\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Value</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"value\">\n </mat-form-field>\n <div style=\"margin-top: .5rem;\">\n <button mat-icon-button (click)=\"removeHeader(i)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n <button mat-stroked-button (click)=\"addHeader()\" class=\"btn\">Add Header</button>\n </div>\n <div style=\"margin-top: 2rem; display: flex; flex-direction:column; gap: 1rem;\">\n <div>\n <mat-slide-toggle #failedState>Retry on Failed</mat-slide-toggle>\n @if (failedState.checked) {\n <div style=\"display: flex; gap: .5rem; margin-top: 1rem;\" formGroupName=\"retry\">\n <mat-form-field appearance=\"outline\">\n <mat-label>#of Times</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"times\" value=\"3\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Delay Until Next</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"delay\" value=\"3\">\n </mat-form-field>\n </div>\n }\n </div>\n <div>\n <mat-slide-toggle #pollingState>Polling</mat-slide-toggle>\n @if (pollingState.checked) {\n <div>\n <mat-form-field appearance=\"outline\" style=\"margin-top: 1rem\">\n <mat-label>#of Seconds</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"polling\" value=\"3\">\n </mat-form-field>\n </div>\n }\n </div>\n </div>\n </div>\n\n <div style=\"margin-bottom: 1rem; margin-top: 2rem;\">\n @if ((isPending$ | async)) {\n <mat-progress-bar mode=\"indeterminate\"\n ></mat-progress-bar>\n }\n @if (pollingState.checked && !(isPending$ | async)) {\n <mat-progress-bar mode=\"determinate\"\n [value]=\"(this.countdown$ | async)\"\n ></mat-progress-bar>\n }\n </div>\n\n <div style=\"margin-top: 1rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onGetRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if ((GET_error$ | async); as get_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ get_error }}</mat-error>\n </div>\n }\n\n @if ((GET$ | async); as dataRecord) {\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(GET$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n }\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">POST Request</h2>\n <div>\n <button mat-raised-button (click)=\"onCreateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if ((POST_error$ | async); as post_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ post_error }}</mat-error>\n </div>\n }\n\n @if ((POST$ | async); as dataRecord) {\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(POST$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n }\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">PUT Request</h2>\n <div>\n <button mat-raised-button (click)=\"onUpdateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n @if ((PUT_error$ | async); as put_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ put_error }}</mat-error>\n </div>\n }\n\n <h3>Include Record ID in the RestPath</h3>\n\n @if ((PUT$ | async); as dataRecord) {\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(PUT$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n }\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">DELETE Request</h2>\n <div>\n <button mat-raised-button (click)=\"onDeleteRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <h3>Include Record ID in the RestPath</h3>\n\n @if ((DELETE_error$ | async); as delete_error) {\n <div style=\"margin-top: .5rem;\">\n <mat-error>{{ delete_error }}</mat-error>\n </div>\n }\n\n @if ((DELETE$ | async); as dataRecord) {\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(DELETE$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n }\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">Streaming GET Request</h2>\n <div>\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\">\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$ | 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","import { Component, Inject, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { LocalStorageManagerService, SettingOptions, StorageOption, StorageType } from '../../services/local-storage-manager-service';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { BehaviorSubject, EMPTY, Observable, of } from 'rxjs';\nimport { ConfigOptions, LocalStorageOptions, UtilsService } from '../../services';\nimport { switchMap, tap, map } from 'rxjs/operators';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\n\n@Component({\n selector: 'app-local-storage-demo',\n templateUrl: './local-storage-demo.component.html',\n styleUrls: ['./local-storage-demo.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class LocalStorageDemoComponent implements OnInit {\n\n fb = inject(FormBuilder)\n utils = inject(UtilsService)\n\n type$ = new BehaviorSubject(StorageType.GLOBAL)\n get type() {\n return (this.typeControl.value) ? +this.typeControl.value : 0\n }\n\n typeControl = this.fb.control(StorageType.GLOBAL.toString())\n\n localStorageManagerService = inject(LocalStorageManagerService)\n\n settings$: Observable<any> = this.localStorageManagerService.settings$\n\n setting$ = (store: string) => this.localStorageManagerService.setting$(store)\n\n storageForm = this.fb.group({\n store: this.fb.control<string|null>(null),\n type: 'local',\n settingType: 'local',\n encrypted: false,\n data: this.fb.control<string>('', Validators.required),\n })\n\n newStoreForm = this.fb.group({\n name: this.fb.control<string|null>(null, Validators.required),\n storage: 'local',\n encrypted: false,\n data: this.fb.control<string>('', Validators.required),\n expiresIn: this.fb.control('0')\n })\n\n store$?: Observable<any>\n\n storeData$ = this.storageForm.get('store')?.valueChanges\n .pipe(\n switchMap((data: any) => {\n return data\n ? this.localStorageManagerService.store$(data.name)\n : of('')\n }),\n tap(data => {\n this.storageForm.get('data')?.patchValue(data, { emitEvent: false })\n })\n )\n\n expiresIn = (epoch: number) => this.utils.expiresIn(epoch)\n\n get isValid() {\n return this.newStoreForm.valid\n }\n\n get isValidData() {\n return this.storageForm.valid\n }\n\n isValidJSON = (str: string) => {\n try {\n JSON.parse(str)\n return true\n } catch (e) {\n return false\n }\n }\n\n displayedColumns: string[] = ['name', 'id', 'encrypted', 'expires', \"option\"];\n\n filterData = (values: SettingOptions[]) => {\n if(!values) return []\n return values.filter((item: any) => item.options.storage === +this.type)\n }\n\n data$?: Observable<any>\n\n store: any\n\n create = false\n\n storeProps?: LocalStorageOptions\n options?: SettingOptions\n\n constructor(@Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) { }\n\n ngOnInit() {\n\n this.storeProps = this.configOptions?.LocalStorageOptions\n this.options = this.storeProps?.options\n\n if(this.options?.storage) {\n this.typeControl.patchValue(this.options.storage.toString())\n this.typeControl.disable()\n } else {\n this.typeControl.enable()\n }\n\n if(this.options?.expiresIn) {\n this.newStoreForm.get('expiresIn')?.patchValue(this.options.expiresIn)\n this.newStoreForm.get('expiresIn')?.disable()\n } else {\n this.newStoreForm.get('expiresIn')?.enable()\n }\n\n if(this.options?.encrypted) {\n this.newStoreForm.get('encrypted')?.patchValue(this.options.encrypted)\n this.newStoreForm.get('encrypted')?.disable()\n } else {\n this.newStoreForm.get('encrypted')?.enable()\n }\n\n }\n\n onCreateStore() {\n\n if(!this.isValid) return\n\n const store = this.newStoreForm.value\n if(!store.name || store.name === '') return\n\n const options = { storage: this.type, encrypted: store.encrypted, expiresIn: store.expiresIn }\n\n this.localStorageManagerService.createStore({\n name: store.name,\n data: store.data,\n options: SettingOptions.adapt(options)\n })\n\n this.newStoreForm.reset()\n this.create = false\n }\n\n onUpdateStore(store: any) {\n\n if(!this.storageForm.valid) return\n\n const storeData = this.storageForm.value\n\n const data = JSON.parse(storeData.data || '')\n\n const type = (storeData.type === 'local') ? StorageType.GLOBAL : StorageType.SESSION\n\n this.localStorageManagerService.updateStore({\n name: store.name,\n data\n })\n\n }\n\n onSelectedRow(store: any) {\n this.store = store\n this.data$ = this.localStorageManagerService.store$(store.name).pipe(map(item => JSON.stringify(item)))\n this.create = false\n }\n\n onCreate() {\n this.onCancel()\n this.create = true\n }\n\n onDelete(store: StorageOption) {\n\n this.localStorageManagerService.deleteStore({\n name: store.name,\n })\n\n this.onCancel()\n }\n\n onCancel() {\n this.data$ = EMPTY\n this.store = null\n this.create = false\n }\n\n onUpdate(store: StorageOption, data: any) {\n\n this.localStorageManagerService.updateStore({\n name: store.name,\n data: JSON.parse(data)\n })\n\n this.onCancel()\n\n }\n\n onReset() {\n this.localStorageManagerService.resetStore()\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <div style=\"display: flex; gap: 1rem\">\n <h2 style=\"padding-top: .5rem; display: flex;\">\n <div style=\"padding-top: .5rem;\">Local Storage Manager</div>\n <div>\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon>info</mat-icon>\n </button>\n </div>\n </h2>\n <span style=\"flex:1\"></span>\n <div style=\"padding-top: .25rem;\">\n <mat-button-toggle-group name=\"storage\" [formControl]=\"typeControl\" (change)=\"onCancel()\">\n <mat-button-toggle value=\"0\">Local Storage</mat-button-toggle>\n <mat-button-toggle value=\"1\">Session Storage</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n <div style=\"margin-top: .25rem;\">\n <button mat-icon-button (click)=\"onCreate()\">\n <mat-icon>add</mat-icon>\n </button>\n </div>\n </div>\n\n <ng-container *ngIf=\"storeProps?.storageName || storeProps?.storageSettingsName\">\n <div style=\"display: flex; gap: .5rem; flex-direction: column; border: gray solid thin; background-color: whitesmoke; padding: 1rem;\"\n >\n <div style=\"display: flex;\">\n <div *ngIf=\"storeProps?.storageSettingsName\" style=\"flex:1\">\n Database: <b>{{ storeProps?.storageSettingsName }}</b>\n </div>\n <div *ngIf=\"storeProps?.storageName\" style=\"flex:1\">\n Data: <b>{{ storeProps?.storageName }}</b>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div style=\"margin-top: 2rem;\" [formGroup]=\"newStoreForm\" *ngIf=\"create; else LIST\">\n\n <h2>Create Store</h2>\n\n <div style=\"display: flex; gap: 1rem;\">\n <div style=\"flex:1\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Store Name</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"name\">\n </mat-form-field>\n </div>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Expires In...</mat-label>\n <mat-select formControlName=\"expiresIn\">\n <mat-option value=\"0\">None</mat-option>\n <mat-option value=\"30s\">30 Seconds</mat-option>\n <mat-option value=\"1mn\">1 Minute</mat-option>\n <mat-option value=\"1hr\">1 Hour</mat-option>\n <mat-option value=\"1d\">1 Day</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"margin-top: 1rem;\">\n <mat-slide-toggle formControlName=\"encrypted\">Encrypted</mat-slide-toggle>\n </div>\n </div>\n\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex: 1;\">\n <mat-label>Data (Must be an Object or Array of any)</mat-label>\n <textarea matInput placeholder=\"[]\" formControlName=\"data\" #json></textarea>\n </mat-form-field>\n </div>\n <mat-error *ngIf=\"!isValidJSON(json.value)\">Not Valid Data</mat-error>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onCreateStore()\" [disabled]=\"!(isValid && isValidJSON(json.value))\">\n Save Store\n </button>\n </div>\n\n </div>\n\n <ng-template #LIST>\n\n <div style=\"margin-top: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n{{ settings$ | async | json }}\n <div *ngIf=\"filterData(settings$ | async) as data\">\n <ng-container *ngIf=\"data.length > 0; else NO_DATA\">\n <table mat-table [dataSource]=\"data\">\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> Store </th>\n <td mat-cell *matCellDef=\"let element\" style=\"font-weight: bold; text-transform: uppercase;\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"encrypted\">\n <th mat-header-cell *matHeaderCellDef style=\"text-align: center;\"> Encrypted </th>\n <td mat-cell *matCellDef=\"let element\" style=\"text-align: center;\">\n <ng-container *ngIf=\"element.options.encrypted; else NO\">YES</ng-container>\n <ng-template #NO><span style=\"color:gray\">NO</span></ng-template>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"expires\">\n <th mat-header-cell *matHeaderCellDef style=\"text-align: center;\"> Expires </th>\n <td mat-cell *matCellDef=\"let element\" style=\"text-align: center;\">\n <ng-container *ngIf=\"element.options.expires !== 0; else NO_DATA\">\n {{expiresIn(element.options.expires)}}\n </ng-container>\n <ng-template #NO_DATA>\n ∞\n </ng-template>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"option\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell *matCellDef=\"let element\" style=\"padding-right: 0;\">\n <div style=\"display: flex;justify-content: flex-end;\">\n <button mat-icon-button color=\"warn\" (click)=\"onDelete(element); $event.stopPropagation()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" (click)=\"onSelectedRow(row)\"></tr>\n </table>\n </ng-container>\n\n <ng-template #NO_DATA>\n <h3 style=\"margin-top: 1rem;\">No Data</h3>\n </ng-template>\n\n <div *ngIf=\"(data$ | async) as data\" style=\"margin-top: 2rem;\">\n <div style=\"margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <h3>STORE: <span style=\"font-weight: bold;\">{{ store.name | uppercase }}</span></h3>\n <h3>SETTINGS: {{ setting$(store.name) | async | json }}</h3>\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex: 1;\">\n <mat-label>Data (Must be an Object or Array of any)</mat-label>\n <textarea matInput placeholder=\"[]\" #json [value]=\"data\"></textarea>\n </mat-form-field>\n </div>\n <mat-error *ngIf=\"!isValidJSON(json.value)\">Not Valid Data</mat-error>\n\n <div style=\"display: flex; gap: .5rem;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onCancel()\">Cancel</button>\n <button mat-stroked-button (click)=\"onUpdate(store, json.value)\" [disabled]=\"!(isValidJSON(json.value))\">Update</button>\n </div>\n </div>\n </div>\n\n </ng-template>\n\n <div style=\"margin-top: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <button mat-stroked-button (click)=\"onReset()\">Delete All Stores</button>\n </div>\n\n</div>\n\n\n<mat-menu #menu=\"matMenu\">\n <div style=\"padding: 1rem;\">\n <p>Please note that the LocalStorage (encryption) and management of data is dependant on initializing the APP_ID</p>\n <p>Must provide a value for <b>APP_ID</b> in AppModule->Providers</p>\n <mat-divider></mat-divider>\n <div style=\"font-size: smaller; margin-top: .5rem;\">\n <p>Example: UUID (self.crypto.randomUUID() to generate)</p>\n <div style=\"background-color: whitesmoke; padding: 1rem;\">\n &#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","import { Component, OnInit, inject, OnDestroy } from '@angular/core';\nimport { Subject, Observable, ReplaySubject } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { DataSource } from '@angular/cdk/collections';\n\nimport { TableSchemaDef } from '../../services/database-manager-service/models/table-schema';\nimport { DatabaseManagerService } from '../../services/database-manager-service';\n\nexport interface TableRecord {\n id: number;\n last_name: string;\n age: number;\n amount: number;\n}\n\n@Component({\n selector: 'app-database-data-demo',\n templateUrl: './database-data-demo.component.html',\n styleUrls: ['./database-data-demo.component.scss'],\n standalone: false\n})\nexport class DatabaseDataDemoComponent implements OnInit, OnDestroy {\n\n db = inject(DatabaseManagerService)\n private destroy$ = new Subject<void>();\n\n dataToDisplay: TableRecord[] = [];\n dataSource = new DatabaseDataSource(this.dataToDisplay);\n displayedColumns: string[] = ['id', 'last_name', 'age', 'amount'];\n\n names = ['Smith', 'Johnson', 'Williams', 'Brown', 'Jones', 'Garcia', 'Miller', 'Davis'];\n\n constructor() { }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n addData() {\n\n const newRecord: TableRecord = {\n id: Math.max(...this.dataToDisplay.map(r => r.id), 0) + 1,\n last_name: this.names[Math.floor(Math.random() * this.names.length)],\n age: Math.floor(Math.random() * 80) + 18,\n amount: Math.floor(Math.random() * 1000)\n };\n\n this.dataToDisplay = [...this.dataToDisplay, newRecord];\n this.db.createTableRecord('sample_table', newRecord).subscribe(\n () => this.refreshData()\n );\n\n }\n\n removeData() {\n if (this.dataToDisplay.length > 0) {\n const removedRecord = this.dataToDisplay[this.dataToDisplay.length - 1];\n this.dataToDisplay = this.dataToDisplay.slice(0, -1);\n this.db.deleteTableRecord('sample_table', removedRecord.id).subscribe(\n () => this.refreshData()\n );\n }\n }\n\n updateData() {\n\n if (this.dataToDisplay.length === 0) return;\n\n const randomIndex = Math.floor(Math.random() * this.dataToDisplay.length);\n const recordToUpdate = this.dataToDisplay[randomIndex];\n\n const updatedRecord: TableRecord = {\n ...recordToUpdate,\n last_name: this.names[Math.floor(Math.random() * this.names.length)],\n age: Math.floor(Math.random() * 80) + 18,\n amount: Math.floor(Math.random() * 1000)\n };\n\n this.dataToDisplay = this.dataToDisplay.map((r, index) =>\n index === randomIndex ? updatedRecord : r\n );\n\n this.db.updateTableRecord('sample_table', updatedRecord).subscribe(\n () => this.refreshData()\n );\n\n }\n\n clearAllData() {\n if (this.dataToDisplay.length === 0) return;\n\n const idsToDelete = this.dataToDisplay.map(r => r.id);\n this.dataToDisplay = [];\n\n this.db.deleteTableRecords('sample_table', idsToDelete).subscribe(\n () => this.refreshData()\n );\n }\n\n private refreshData() {\n this.db.getTableRecords('sample_table').subscribe(\n (records: any) => {\n this.dataToDisplay = records || [];\n this.dataSource.setData(this.dataToDisplay);\n }\n );\n }\n\n ngOnInit() {\n\n const tableDef = TableSchemaDef.adapt({\n table: 'sample_table',\n schema: '++id, last_name, age, amount'\n });\n\n this.db.createDatabaseTable(tableDef).subscribe(() => {\n console.log('Database Table Initialized');\n\n // hasTable\n this.db.hasDatabaseTable('sample_table')\n .subscribe(data => console.log('hasDatabaseTable:', data))\n\n // Tables\n this.db.getDatabaseTables()\n .subscribe(data => console.log('getDatabaseTables:', data))\n\n // getTable\n this.db.getDatabaseTable('sample_table')\n .subscribe(data => console.log('getDatabaseTable:', data))\n\n // Table Schema\n this.db.getDatabaseTableSchema('sample_table')\n .subscribe(data => console.log('getDatabaseTableSchema:', data))\n\n // Insert Table Records\n const records = [\n { id: 1, age: 12, last_name: 'Bonifacio', amount: 80 },\n { id: 2, age: 15, last_name: 'Johns', amount: 700 },\n { id: 3, age: 22, last_name: 'Kims', amount: 234 },\n { id: 4, age: 45, last_name: 'Harrys', amount: 1200 },\n ]\n\n this.db.createTableRecords('sample_table', records).subscribe(() => {\n this.refreshData();\n });\n });\n }\n\n createTable(tableDef: TableSchemaDef) {\n return this.db.createDatabaseTable(tableDef)\n }\n\n // CRUD\n findTableRecords(table: string, column: string, value: any) {\n return this.db.findTableRecords(table, column, value)\n .pipe(\n tap((data: any) => console.log('findTableRecords:', data))\n )\n }\n\n findTableRecord(table: string, column: string, value: any) {\n return this.db.findTableRecord(table, column, value)\n .pipe(\n tap((data: any) => console.log('findTableRecord:', data))\n )\n }\n\n getTableRecords(table: string) {\n return this.db.getTableRecords(table)\n .pipe(\n tap((data: any) => console.log('getTableRecords:', data))\n )\n }\n\n getTableRecord(table: string, id: number) {\n return this.db.getTableRecord(table, id)\n .pipe(\n tap((data: any) => console.log('getTableRecord:', data))\n )\n }\n\n createTableRecord<T>(table: string, record: T) {\n return this.db.createTableRecord(table, record)\n .pipe(\n tap((data: any) => console.log('createTableRecord:', data))\n )\n }\n\n updateTableRecord<T>(table: string, record: T) {\n return this.db.updateTableRecord(table, record)\n .pipe(\n tap((data: any) => console.log('updateTableRecord:', data))\n )\n }\n\n deleteTableRecord<T>(table: string, id: number) {\n return this.db.deleteTableRecord(table, id)\n .pipe(\n tap((data: any) => console.log('deleteTableRecord:', data))\n )\n }\n\n}\n\nclass DatabaseDataSource extends DataSource<TableRecord> {\n private _dataStream = new ReplaySubject<TableRecord[]>();\n\n constructor(initialData: TableRecord[]) {\n super();\n this.setData(initialData);\n }\n\n connect(): Observable<TableRecord[]> {\n return this._dataStream;\n }\n\n disconnect() {}\n\n setData(data: TableRecord[]) {\n this._dataStream.next(data);\n }\n\n}\n","<div style=\"padding: 2rem;\">\n\n <h2>\n Database Manager Service Demo\n </h2>\n\n <div style=\"margin-bottom: 1rem; display: flex; gap: 1rem;\">\n <button mat-stroked-button\n color=\"primary\"\n (click)=\"clearAllData()\"\n >\n Clear Data\n </button>\n <button mat-stroked-button\n color=\"primary\"\n (click)=\"updateData()\"\n >\n Update Data\n </button>\n <div style=\"flex:1\"></div>\n <button\n mat-stroked-button\n color=\"warn\"\n [disabled]=\"!dataToDisplay.length\"\n (click)=\"removeData()\"\n >\n Remove Data\n </button>\n <button mat-stroked-button\n color=\"primary\"\n (click)=\"addData()\"\n >\n Add Data\n </button>\n </div>\n\n <div class=\"table-container\">\n <table mat-table [dataSource]=\"dataSource\">\n\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef>ID</th>\n <td mat-cell *matCellDef=\"let element\">{{element.id}}</td>\n </ng-container>\n\n <ng-container matColumnDef=\"last_name\">\n <th mat-header-cell *matHeaderCellDef>Last Name</th>\n <td mat-cell *matCellDef=\"let element\">{{element.last_name}}</td>\n </ng-container>\n\n <ng-container matColumnDef=\"age\">\n <th mat-header-cell *matHeaderCellDef>Age</th>\n <td mat-cell *matCellDef=\"let element\">{{element.age}}</td>\n </ng-container>\n\n <ng-container matColumnDef=\"amount\">\n <th mat-header-cell *matHeaderCellDef>Amount</th>\n <td mat-cell *matCellDef=\"let element\">{{element.amount | currency}}</td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n </div>\n\n</div>\n","import { Component, Inject, Input, OnInit } from '@angular/core';\n\nimport { CONFIG_SETTINGS_TOKEN } from '../models/config-token.model';\nimport { ConfigOptions } from '../models/config-options.model';\nimport { UserData } from './request-manager-ws-demo/models/user-data.model';\n\n@Component({\n selector: 'app-http-request-services-demo',\n templateUrl: './http-request-services-demo.component.html',\n styleUrls: ['./http-request-services-demo.component.scss'],\n standalone: false\n})\nexport class HttpRequestServicesDemoComponent implements OnInit {\n\n @Input() wsServer = 'ws:'\n @Input() jwtToken = ''\n @Input() server = 'http:'\n @Input() user?: UserData\n @Input() path: string[] = ['ai','tests'];\n @Input() wsChannel: string = '';\n\n @Input() adapter?: Function\n @Input() mapper?: Function\n\n requestTypes = [\n { name: \"Http Service\", value: 'http_service' },\n // { name: \"Http Signals Service\", value: 'http_signals_service', new: true },\n { name: \"Http State Service\", value: 'http_state_service' },\n { name: \"Http State Service - Websockets\", value: 'http_state_service_ws', new: false },\n { name: \"Database Service\", value: 'database_service', divider: true, disabled: false },\n { name: \"Local Storage Service\", value: 'local_storage_service' },\n // { name: \"Local Signals Storage Service\", value: 'local_storage_signals_service', new: true },\n { name: \"Store State Manager Service\", value: 'store_state_manager', new: true },\n ]\n\n selectedService = this.requestTypes[5].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 ('http_service') {\n <p>\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-manager-demo\n [server]=\"server\"\n [adapter]=\"adapter\"\n [mapper]=\"mapper\"\n ></app-request-manager-demo>\n </p>\n }\n <!-- <p *ngSwitchCase=\"'http_signals_service'\">\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-signals-manager-demo></app-request-signals-manager-demo>\n </p> -->\n @case ('http_state_service') {\n <p>\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-manager-state-demo\n [server]=\"server\"\n [adapter]=\"adapter\"\n [mapper]=\"mapper\"\n ></app-request-manager-state-demo>\n </p>\n }\n @case ('http_state_service_ws') {\n <p>\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-manager-ws-demo\n [server]=\"server\"\n [wsServer]=\"wsServer\"\n [jwtToken]=\"jwtToken\"\n [user]=\"user\"\n [wsChannel]=\"wsChannel\"\n [path]=\"path\"\n ></app-request-manager-ws-demo>\n </p>\n }\n @case ('database_service') {\n <p>\n <app-database-data-demo></app-database-data-demo>\n </p>\n }\n @case ('local_storage_service') {\n <p>\n <ng-container *ngTemplateOutlet=\"LOCAL_OPTIONS\"></ng-container>\n <app-local-storage-demo></app-local-storage-demo>\n </p>\n }\n <!-- <p *ngSwitchCase=\"'local_storage_signals_service'\">\n <ng-container *ngTemplateOutlet=\"LOCAL_OPTIONS\"></ng-container>\n <app-local-storage-signals-demo></app-local-storage-signals-demo>\n</p> -->\n@case ('store_state_manager') {\n <p>\n <ng-container *ngTemplateOutlet=\"LOCAL_OPTIONS\"></ng-container>\n <app-store-state-manager-demo></app-store-state-manager-demo>\n </p>\n}\n@default {\n <p>\n Other\n </p>\n}\n}\n</span>\n\n<ng-template #HTTP_OPTIONS>\n @if (injectionOptions?.httpRequestOptions) {\n <div class=\"box\">\n <h3 style=\"font-weight: bold;\">Injection Token Detected - HTTP Options</h3>\n {{ injectionOptions?.httpRequestOptions| json }}\n </div>\n }\n</ng-template>\n\n<ng-template #LOCAL_OPTIONS>\n @if (injectionOptions?.LocalStorageOptions) {\n <ng-container class=\"box\">\n <div class=\"box\">\n <h3 style=\"font-weight: bold;\">Injection Token Detected - LocalStorage Options</h3>\n {{ injectionOptions?.LocalStorageOptions| json }}\n </div>\n </ng-container>\n }\n</ng-template>\n\n\n","/*\n * Public API Surface of http-request-manager\n */\n\nexport * from './lib/index';\nexport * from './lib/http-request-manager.module';\n\nexport * from './lib/http-request-services-demo/http-request-services-demo.component';\n\nexport * from './lib/http-request-services-demo/database-data-demo/database-data-demo.component';\nexport * from './lib/http-request-services-demo/local-storage-demo/local-storage-demo.component';\nexport * from './lib/http-request-services-demo/request-manager-demo/request-manager-demo.component';\nexport * from './lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["take","i1.StateStorageOptions","catchError","i1","i3","i1.DownloadFileComponent","i2","i4","i5","i6","i7","i8","i9","i11","i12","i13","switchMap","map","startWith","distinctUntilChanged","filter","takeUntil","tap","i10","i4.WsDataControlComponent","i5.WsMessagingComponent","i6.WsNotificationsComponent","i7.WsAiMessagingComponent","ClientInfo","AIPrompt","ClientInfoMapper","i13.FileDownloaderComponent","i14","i6.RequestManagerStateDemoComponent","i7.RequestManagerDemoComponent","i8.LocalStorageDemoComponent","i9.RequestManagerWsDemoComponent","i10.StoreStateManagerDemoComponent","i11.DatabaseDataDemoComponent"],"mappings":"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"}