http-request-manager 18.2.0 → 19.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/http-request-manager.module.mjs +5 -5
- package/esm2022/lib/http-request-services-demo/database-data-demo/database-data-demo.component.mjs +3 -3
- package/esm2022/lib/http-request-services-demo/http-request-services-demo.component.mjs +3 -3
- package/esm2022/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.mjs +3 -3
- package/esm2022/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.mjs +3 -3
- package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.mjs +3 -3
- package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.mjs +4 -4
- package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.mjs +3 -3
- package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.mjs +3 -3
- package/esm2022/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.mjs +3 -3
- package/esm2022/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.mjs +4 -4
- package/esm2022/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.mjs +3 -3
- package/esm2022/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.mjs +3 -3
- package/esm2022/lib/interceptors/credentials.interceptor.mjs +3 -3
- package/esm2022/lib/interceptors/proxy-debugger.interceptor.mjs +3 -3
- package/esm2022/lib/interceptors/request-error.interceptor.mjs +3 -3
- package/esm2022/lib/interceptors/request-header.interceptor.mjs +3 -3
- package/esm2022/lib/services/database-manager-services/database.manager.service.mjs +6 -6
- package/esm2022/lib/services/database-manager-services/db.storage.service.mjs +8 -8
- package/esm2022/lib/services/local-storage-manager-service/local-storage-manager.service.mjs +3 -3
- package/esm2022/lib/services/local-storage-manager-service/local-storage-signals-manager.service.mjs +3 -3
- package/esm2022/lib/services/request-manager-services/http-manager-signals.service.mjs +3 -3
- package/esm2022/lib/services/request-manager-services/http-manager.service.mjs +3 -3
- package/esm2022/lib/services/request-manager-services/request-signals.service.mjs +3 -3
- package/esm2022/lib/services/request-manager-services/request.service.mjs +7 -5
- package/esm2022/lib/services/request-manager-state-service/http-manager-state.store.mjs +100 -7
- package/esm2022/lib/services/request-manager-state-service/models/api-request.model.mjs +4 -3
- package/esm2022/lib/services/request-manager-state-service/models/ws-options.model.mjs +12 -0
- package/esm2022/lib/services/utils/app.service.mjs +3 -3
- package/esm2022/lib/services/utils/encryption/asymmetrical-encryption.service.mjs +3 -3
- package/esm2022/lib/services/utils/encryption/encryption-test.service.mjs +3 -3
- package/esm2022/lib/services/utils/encryption/symmetrical-encryption.service.mjs +3 -3
- package/esm2022/lib/services/utils/headers.service.mjs +3 -3
- package/esm2022/lib/services/utils/object-merger.service.mjs +3 -3
- package/esm2022/lib/services/utils/path-query.service.mjs +3 -3
- package/esm2022/lib/services/utils/utils.service.mjs +3 -3
- package/esm2022/lib/services/ws-manager-service/models/assortment-data.model.mjs +10 -0
- package/esm2022/lib/services/ws-manager-service/websocket.service.mjs +133 -0
- package/fesm2022/http-request-manager.mjs +341 -116
- package/fesm2022/http-request-manager.mjs.map +1 -1
- package/http-request-manager-19.0.0.tgz +0 -0
- package/lib/services/database-manager-services/database.manager.service.d.ts +1 -1
- package/lib/services/database-manager-services/db.storage.service.d.ts +2 -2
- package/lib/services/request-manager-services/request.service.d.ts +2 -1
- package/lib/services/request-manager-state-service/http-manager-state.store.d.ts +21 -8
- package/lib/services/request-manager-state-service/models/api-request.model.d.ts +4 -1
- package/lib/services/request-manager-state-service/models/ws-options.model.d.ts +14 -0
- package/lib/services/ws-manager-service/models/assortment-data.model.d.ts +10 -0
- package/lib/services/ws-manager-service/websocket.service.d.ts +21 -0
- package/package.json +1 -1
- package/http-request-manager-18.2.0.tgz +0 -0
|
@@ -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/request-manager-services/request.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/rxjs-operators/countdown.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/rxjs-operators/delay-retry.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/rxjs-operators/request-polling.ts","../../../projects/http-request-manager/src/lib/models/database-storage.model.ts","../../../projects/http-request-manager/src/lib/models/retry-options.model.ts","../../../projects/http-request-manager/src/lib/models/data-type.enum.ts","../../../projects/http-request-manager/src/lib/models/config-http-options.model.ts","../../../projects/http-request-manager/src/lib/models/config-local-storage-options.model.ts","../../../projects/http-request-manager/src/lib/models/config-options.model.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/http-manager.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/request-signals.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/http-manager-signals.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/models/api-request.model.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/models/request-options.model.ts","../../../projects/http-request-manager/src/lib/services/utils/object-merger.service.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/local-storage-manager.service.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/http-manager-state.store.ts","../../../projects/http-request-manager/src/lib/services/index.ts","../../../projects/http-request-manager/src/lib/interceptors/models/error-settings.model.ts","../../../projects/http-request-manager/src/lib/interceptors/credentials.interceptor.ts","../../../projects/http-request-manager/src/lib/interceptors/request-header.interceptor.ts","../../../projects/http-request-manager/src/lib/interceptors/request-error.interceptor.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.html","../../../projects/http-request-manager/src/lib/interceptors/proxy-debugger.interceptor.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-info.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-mapper-client-info.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-ai-prompt.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/http-request-services-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/http-request-services-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.ts","../../../projects/http-request-manager/src/lib/http-request-manager.module.ts","../../../projects/http-request-manager/src/lib/services/database-manager-services/models/table-schema.ts","../../../projects/http-request-manager/src/lib/services/database-manager-services/db.storage.service.ts","../../../projects/http-request-manager/src/lib/services/database-manager-services/database.manager.service.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.html","../../../projects/http-request-manager/src/public-api.ts","../../../projects/http-request-manager/src/http-request-manager.ts"],"sourcesContent":["export enum StorageType {\n GLOBAL,\n SESSION,\n DB\n}\n","import { StorageType } from \"./storage-type.enum\"\n\nexport interface SettingOptionsInterface {\n storage?: StorageType\n expires?: number\n expiresIn?: string\n encrypted?: boolean\n}\n\nexport class SettingOptions implements SettingOptionsInterface {\n\n constructor(\n public storage?: StorageType,\n public expires?: number,\n public expiresIn?: string,\n public encrypted?: boolean,\n ) {}\n\n static adapt(item?: any): SettingOptions {\n\n const storage = (typeof item?.storage !== 'undefined' && item?.storage !== null) ? Number(item.storage) : StorageType.GLOBAL;\n const expires = (typeof item?.expires !== 'undefined' && item?.expires !== null) ? Number(item.expires) : 0;\n const expiresIn = (typeof item?.expiresIn !== 'undefined' && item?.expiresIn !== null) ? item.expiresIn : '';\n const encrypted = (typeof item?.encrypted !== 'undefined' && item?.encrypted !== null) ? Boolean(item.encrypted) : false;\n\n return new SettingOptions(\n storage,\n expires,\n expiresIn,\n encrypted,\n )\n\n }\n\n}\n","import { SettingOptions } from \"./setting-options.model\"\n\nexport interface StorageOptionInterface {\n id?: string\n name: string\n options?: SettingOptions\n}\n\nexport class StorageOption implements StorageOptionInterface {\n\n constructor(\n public id?: string,\n public name = 'untitled',\n public options?: SettingOptions,\n ) {}\n\n static adapt(item?: any): StorageOption {\n\n return new StorageOption(\n (item?.id) ? item.id : crypto.randomUUID(),\n item?.name,\n (item?.options) ? SettingOptions.adapt(item.options) : SettingOptions.adapt(),\n )\n\n }\n\n}\n\n\n","import { StorageOption } from \"./storage-option.model\"\n\nexport interface GlobalStoreOptionsInterface {\n encryption?: boolean\n expiresIn?: string\n expires?: number\n stores: StorageOption[]|null\n}\n\nexport class GlobalStoreOptions implements GlobalStoreOptionsInterface {\n\n constructor(\n public encryption = false,\n public expiresIn?: string,\n public expires?: number,\n public stores: StorageOption[]|null = [],\n ) {}\n\n static adapt(item?: any): GlobalStoreOptions {\n\n return new GlobalStoreOptions(\n (item?.encryption) ? item.encryption : false,\n (item?.expiresIn) ? item.expiresIn : '',\n (item?.expires) ? item.expires : 0,\n (item?.stores) ? item.stores.map((item: any) => StorageOption.adapt(item)) : []\n )\n\n }\n\n}\n","export interface StorageDataInterface {\n id?: string\n data?: any\n}\n\nexport class StorageData implements StorageDataInterface {\n\n constructor(\n public id?: string,\n public data?: any,\n ) {}\n\n static adapt(item?: any): StorageData {\n\n return new StorageData(\n (item?.id) ? item.id : crypto.randomUUID(),\n (item?.data) ? item.data : null\n )\n\n }\n\n}\n\n\n","\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UtilsService {\n\n http = inject(HttpClient)\n\n constructor() { }\n\n isString(x: string | number) {\n return Object.prototype.toString.call(x) === '[object String]'\n }\n\n isObject(obj: any) {\n return Object.prototype.toString.call(obj) === '[object Object]'\n }\n\n JSONToString(value: any) {\n return (this.isObject(value)) ? JSON.stringify(value) : value\n }\n\n stringToJSON(value: string) {\n return (this.isJSON(value)) ? JSON.parse(value) : value\n }\n\n isJSON(str: any) {\n try {\n JSON.parse(str)\n } catch (e) {\n return false\n }\n return true\n }\n\n getValueByProp(obj: any, prop: string) {\n if(typeof obj === 'undefined') return false\n return obj[prop]\n }\n\n objectsEqual(x: any, y: any): boolean {\n\n const ok = Object.keys, tx = typeof x, ty = typeof y\n\n return x && y && tx === 'object' && tx === ty ? (\n ok(x).length === ok(y).length &&\n ok(x).every((key: any) => this.objectsEqual(x[key], y[key]))\n ) : (x === y)\n\n }\n\n getJSON(file: string) {\n return this.http.get(`assets/data/${file}`)\n }\n\n get today() {\n return new Date().getMilliseconds() / 1000\n }\n\n base32ToHex(base32: string): string {\n\n const base32chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\"\n\n const charToValue = (char: string) => base32chars.indexOf(char.toUpperCase())\n\n let bits = ''\n let hex = ''\n\n for (let i = 0; i < base32.length; i++) {\n const val = charToValue(base32.charAt(i))\n bits += val.toString(2).padStart(5, '0')\n }\n\n for (let i = 0; i + 4 <= bits.length; i += 4) {\n const chunk = bits.substr(i, 4)\n hex += parseInt(chunk, 2).toString(16)\n }\n\n return hex.toUpperCase()\n }\n\n binaryToHex(binary: string): string {\n let hex = '';\n for (let i = 0; i < binary.length; i += 8) {\n const byte = binary.substr(i, 8);\n const decimal = parseInt(byte, 2);\n hex += decimal.toString(16).padStart(2, '0');\n }\n return hex.padStart(32, '0').substr(0, 32);\n }\n\n // y = years, m = months, w = weeks, d = days, hr = hours, mn = minutes else seconds\n // returns epoch time corresponding to the expiry type\n expires(str?: string) {\n\n if(!str) return\n\n const match = str.match(/[^0-9]+$/)\n\n const type = (match) ? str.slice(-match[0].length) : 0\n\n const now = Math.floor(new Date().getTime() / 1000)\n\n let value = 0;\n\n switch (type) {\n case\n 'y':\n const years = parseInt(str.slice(0, -1))\n value = now + (years * 31556926)\n break;\n case\n 'm':\n const months = parseInt(str.slice(0, -1))\n value = now + (months * 2629743)\n break;\n case\n 'w':\n const weeks = parseInt(str.slice(0, -1))\n value = now + (weeks * 604800)\n break;\n case\n 'd':\n const days = parseInt(str.slice(0, -1))\n value = now + (days * 86400)\n break;\n case\n 'hr':\n const hrs = parseInt(str.slice(0, -2))\n value = now + (hrs * 3600)\n break;\n case\n 'mn':\n const min = parseInt(str.slice(0, -2))\n value = now + (min * 60)\n break;\n default: //seconds\n const sec = parseInt(str.slice(0, -1))\n value = now + (sec)\n break;\n }\n return value;\n }\n\n hasExpired(expiryDate: number): boolean {\n if (!expiryDate || expiryDate === 0) return false\n const currentTime = Math.floor(new Date().getTime() / 1000)\n return expiryDate < currentTime\n }\n\n hasExpiry(setting: any) {\n return (setting?.expires) ? true : false\n }\n\n expiresIn(expiryDate: number) {\n\n if (!expiryDate) return;\n\n const now = Math.floor(new Date().getTime() / 1000);\n let diff = expiryDate - now;\n\n if (diff <= 0) return \"Expired\";\n\n const units = [\n { label: 'y', seconds: 31536000 },\n { label: 'm', seconds: 2592000 },\n { label: 'w', seconds: 604800 },\n { label: 'd', seconds: 86400 },\n { label: 'h', seconds: 3600 },\n { label: 'min', seconds: 60 },\n { label: '', seconds: 1 },\n ];\n\n let result = [];\n\n for (const unit of units) {\n if (diff >= unit.seconds) {\n const value = Math.floor(diff / unit.seconds);\n diff %= unit.seconds;\n result.push(`${value}${unit.label}${value > 1 ? 's' : ''}`);\n }\n }\n\n return result.join(', ');\n }\n\n lc = (str: string) => str.toLowerCase().replace(/[^\\w\\s]/g, '').replace(/\\s+/g, '_')\n\n}\n","export const Random = () => {\n const typedArray = new Uint8Array(1)\n const randomValue = crypto.getRandomValues(typedArray)[0]\n const randomFloat = randomValue / Math.pow(2, 8)\n return randomFloat\n}\n\nexport const RandomNumber = (min: number, max: number) => {\n return Math.floor(Random() * max) + min\n}\n\nexport const RandomNumbers = (min: number, max: number, length: number) => {\n const numbers: number[] = []\n for (let i = 0; i < length; i++) numbers.push(Math.floor(Random() * max) + min)\n return numbers\n}\n\nexport const RandomNumbersUnique = (min: number, max: number, length: number) => {\n let count = 0;\n\n // Adjust the length if it exceeds the number of unique numbers possible in the range\n if (length > (max - min + 1)) {\n console.error('error encountered');\n length = max - min + 1;\n }\n\n console.log('length', length);\n const numbers: number[] = [];\n const maxAttempts = length * 100 ; // Safeguard to prevent infinite loops\n\n while (numbers.length < length && count < maxAttempts) {\n\n const num = Math.floor(Random() * max) + min;\n\n if (!numbers.includes(num)) {\n numbers.push(num);\n }\n }\n\n if (count >= maxAttempts) {\n throw new Error('Maximum attempts exceeded while generating unique numbers');\n }\n\n return numbers;\n};\n\nexport const RandomStr = () => {\n\n const typedArray = new Uint8Array(8)\n const array = new Uint32Array(1)\n crypto.getRandomValues(array)\n return array[0].toString(36)\n\n}\n\nexport const RandomSignature = () => {\n\n const typedArray = new Uint8Array(8)\n const array = new Uint32Array(1)\n crypto.getRandomValues(array)\n return array[0]\n\n}\n\nexport const UUID = () => {\n return self.crypto.randomUUID()\n}\n\n\n","import { APP_ID, Inject, Injectable } from '@angular/core';\n\n// Must provide a value for APP_ID in AppModule->Providers\n// providers: [\n// {\n// provide: APP_ID,\n// useValue: \"056991ac-3537-43ab-b5b9-83edf6554eff\",\n// },\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AppService {\n\n appID: string\n\n constructor(@Inject(APP_ID) private id: string) {\n this.appID = this.id\n }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport * as CryptoJS from 'crypto-js';\n\nimport { RandomSignature } from './random';\nimport { AppService } from '../app.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SymmetricalEncryptionService {\n\n appID: string; // APP SERVICE TO MANAGER ENCRYPTION KEY\n\n private appService = inject(AppService)\n\n constructor() {\n // TODO: The APP ID is not a string, it is a function\n this.appID = (this.appService.appID) ? this.appService.appID : ''\n if(this.appID === '') console.warn('No App Key has been define')\n }\n\n generateCipherKey() {\n return (RandomSignature().toString() + RandomSignature().toString()).substring(0, 8)\n }\n\n encrypt(str: any, key = this.appID) {\n\n if(!str || key === '') return ''\n\n let _key = CryptoJS.enc.Utf8.parse(key)\n let _iv = CryptoJS.enc.Utf8.parse(key)\n\n try {\n\n const encrypted = CryptoJS.AES.encrypt(\n JSON.stringify(str), _key, {\n keySize: 16,\n iv: _iv,\n mode: CryptoJS.mode.ECB,\n padding: CryptoJS.pad.Pkcs7\n });\n\n return encrypted.toString()\n\n } catch(error: any) {\n console.log(error)\n }\n\n return\n }\n\n decrypt(str: string, key = this.appID) {\n\n if(!str || key === '') return\n\n let _key = CryptoJS.enc.Utf8.parse(key)\n let _iv = CryptoJS.enc.Utf8.parse(key)\n\n try {\n\n return CryptoJS.AES.decrypt(\n str, _key, {\n keySize: 16,\n iv: _iv,\n mode: CryptoJS.mode.ECB,\n padding: CryptoJS.pad.Pkcs7\n }).toString(CryptoJS.enc.Utf8);\n\n } catch(error: any) {\n console.log(error)\n }\n\n return\n }\n\n createSignature(url: string, len = 16) {\n const sig = CryptoJS.SHA256(url).toString(CryptoJS.enc.Hex)\n return sig.substring(0, len).toUpperCase()\n }\n\n normalizeURL(url: string) {\n const normalizedURL = url.replace(/(https?:\\/\\/)?(www\\.)?/, '').replace(/\\/+$/, '');\n return normalizedURL;\n }\n\n generateSignature(url: string) {\n const normalizedURL = this.normalizeURL(url)\n const hash = CryptoJS.SHA256(normalizedURL)\n const signature = hash.toString(CryptoJS.enc.Hex)\n return signature;\n }\n\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EncryptionTestService {\n\n constructor() { }\n\n private isBase64(str: string): boolean {\n const base64Pattern = /^(?:[A-Z0-9+/]{4})*(?:[A-Z0-9+/]{2}==|[A-Z0-9+/]{3}=)?$/i;\n return base64Pattern.test(str);\n }\n\n private isHexadecimal(str: string): boolean {\n const hexPattern = /^[0-9a-fA-F]+$/;\n return hexPattern.test(str) && (str.length % 2 === 0);\n }\n\n private hasHighEntropy(str: string): boolean {\n const uniqueChars = new Set(str).size;\n return uniqueChars > str.length * 0.6;\n }\n\n isEncrypted(str: string): boolean {\n\n if (typeof str !== 'string') {\n return false;\n }\n\n if (this.isBase64(str) || this.isHexadecimal(str)) {\n return true;\n }\n\n return this.hasHighEntropy(str);\n\n }\n\n}\n","import { InjectionToken } from \"@angular/core\";\nimport { ConfigOptions } from \"./config-options.model\";\n\n/**\n * An injection token that provides the configuration settings for the application.\n * This token can be used to inject the `ConfigSettings` instance into components or services\n * that require access to the application configuration.\n */\nexport const CONFIG_SETTINGS_TOKEN = new InjectionToken<ConfigOptions>('http.config');\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HeadersService {\n\n headers = {}\n\n generateHeaders(headers?: Record<string, string>): { headers: HttpHeaders } {\n\n const allHeaders = headers ? { ...this.headers, ...headers } : {}\n return { headers: new HttpHeaders(allHeaders) }\n\n }\n\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PathQueryService {\n\n buildAPIPath(server: string|string[], params?: any[]|any) {\n\n server = (Array.isArray(server)) ? server.join('/') : server\n\n const pathObjects = (params) ? params.filter((path:any) => (!this.isObject(path))) : []\n const queryObjects = (params) ? params.filter((path:any) => (this.isObject(path))) : []\n\n const query = this.removeEmptyParams(queryObjects.reduce((r: any, c: any) => {\n Object.entries(c).forEach(([key, value]) => {\n r[key] = Array.isArray(value) ? value.join(',') : value\n })\n return r\n }, {}))\n\n let path = this.buildRestPath(server, pathObjects)\n\n return(Object.keys(query).length > 0) ? path + '?' + this.buildQueryPath(query) : path\n\n }\n\n private buildRestPath(server: string, params: any[]): string {\n server = (server) ? server : ''\n server = (server.charAt(0) === '/') ? server.substring(1) : server\n return this.cleanUrlPath(server +'/'+ params.join('/'))\n }\n\n private buildQueryPath(params: any): string {\n\n const searchParams = new URLSearchParams()\n\n for (const key in params) {\n\n if (Array.isArray(params[key])) {\n params[key].forEach((value: any) => searchParams.append(key, value));\n } else {\n searchParams.append(key, params[key]);\n }\n\n }\n\n return searchParams.toString()\n\n }\n\n private cleanUrlPath(str: string) {\n return str.replace(/([^:]\\/)\\/+/g, \"$1\").replace(/\\/$/,'')\n }\n\n private isObject(val: any): boolean {\n return (val === null) ? false : ( (typeof val === 'function') || (typeof val === 'object') )\n }\n\n private removeEmptyParams = (obj: any): Record<string, any> =>\n Object.fromEntries(\n Object.entries(obj)\n .map(([key, value]) =>\n [key, value && typeof value === 'object' ? this.removeEmptyParams(value) : value]\n )\n .filter(([_, value]) => value !== undefined && value !== \"\")\n )\n\n}\n","import { Injectable } from '@angular/core';\n\nimport { BehaviorSubject, EMPTY, Observable, from, of } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AsymmetricalEncryptionService {\n\n constructor() {}\n\n generateKeyPair(modulusLength = 2048): Observable<CryptoKeyPair> {\n \n // modulusLength - 1024, 2048, 4096\n // hash - SHA-256\n\n return from(crypto.subtle.generateKey(\n {\n name: \"RSA-OAEP\",\n modulusLength,\n publicExponent: new Uint8Array([1, 0, 1]), // 65537\n hash: { name: \"SHA-256\" }\n },\n true, // Extractable keys\n [\"encrypt\", \"decrypt\"]\n ))\n\n }\n\n encryptData(publicKey: CryptoKey, data: string) {\n\n const encodedData = new TextEncoder().encode(data)\n\n return from(crypto.subtle.encrypt(\n {\n name: \"RSA-OAEP\"\n },\n publicKey,\n encodedData\n )).pipe(\n map(enc => this.arrayBufferToBase64(enc))\n )\n\n }\n\n decryptData(privateKey: CryptoKey, encryptedData: string) {\n\n const encStr = this.base64ToArrayBuffer(encryptedData)\n\n return from(crypto.subtle.decrypt(\n {\n name: \"RSA-OAEP\"\n },\n privateKey,\n encStr\n ).then(decryptedData => {\n return new TextDecoder().decode(decryptedData)\n }))\n\n }\n\n pemToArrayBuffer(pem: string): ArrayBuffer {\n\n const b64 = pem.replace(/(-----BEGIN (RSA )?(PRIVATE|PUBLIC) KEY-----|-----END (RSA )?(PRIVATE|PUBLIC) KEY-----|\\n)/g, '')\n const binaryString = atob(b64)\n const len = binaryString.length\n const buffer = new ArrayBuffer(len)\n const view = new Uint8Array(buffer)\n\n for (let i = 0; i < len; i++) {\n view[i] = binaryString.charCodeAt(i)\n }\n\n return buffer\n\n }\n\n base64ToArrayBuffer(base64: string): ArrayBuffer {\n \n const binaryString = atob(base64);\n const len = binaryString.length;\n const buffer = new ArrayBuffer(len);\n const view = new Uint8Array(buffer);\n\n for (let i = 0; i < len; i++) {\n view[i] = binaryString.charCodeAt(i);\n }\n\n return buffer;\n }\n\n arrayBufferToBase64(buffer: ArrayBuffer): string {\n\n let binary = '';\n const bytes = new Uint8Array(buffer);\n const len = bytes.byteLength;\n\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n\n return window.btoa(binary)\n\n }\n\n base64ToPEM(base64Key: string, publicKey = true) {\n\n const keyType = (publicKey) ? 'PUBLIC' : 'PRIVATE'\n\n const header = `-----BEGIN ${keyType} KEY-----\\n`\n const footer = `\\n-----END ${keyType} KEY-----`\n\n const keyBody = base64Key.match(/.{1,64}/g)?.join(\"\\n\") || \"\"\n\n return header + keyBody + footer\n\n }\n\n pemToCryptoKey(\n pem: string, \n algorithm: RsaHashedKeyGenParams, \n extractable: boolean, \n keyUsages: KeyUsage[],\n format: any = \"pkcs8\" //\"raw\" | \"pkcs8\" | \"spki\"\n ) {\n \n const buffer = this.pemToArrayBuffer(pem);\n\n console.log('buffer found ', buffer);\n \n return from(crypto.subtle.importKey(\n format,\n buffer,\n algorithm,\n extractable,\n keyUsages\n ))\n\n }\n \n // TESTING\n\n testGenerateKeys(): Observable<string> {\n const testSequence: BehaviorSubject<string> = new BehaviorSubject<string>(\"\");\n const testSequence$: Observable<string> = testSequence.asObservable();\n testSequence.next(\"Test Generating Keys\");\n\n // GENERATE KEYS\n this.generateKeyPair().subscribe((data) => {\n\n console.log(\"GEN-GENERATED KEYS: \", data)\n\n crypto.subtle.exportKey('spki', data.publicKey)\n .then(key => {\n const publicKeyBase64 = this.arrayBufferToBase64(key);\n console.log(\"GEN-EXPORT PUBLIC KEY: \", this.base64ToPEM(publicKeyBase64, true));\n })\n\n crypto.subtle.exportKey('pkcs8', data.privateKey)\n .then(key => {\n const privateKeyBase64 = this.arrayBufferToBase64(key);\n console.log(\"GEN-EXPORT PRIVATE KEY: \", this.base64ToPEM(privateKeyBase64, false));\n });\n\n // TEST WITH GENERATED KEYS\n this.encryptData(data.publicKey, \"Sample Data here - Mike Bonifacio\")\n .subscribe((enc) => {\n\n console.log(\"GEN-ENCRYPT==>: \", enc)\n\n this.decryptData(data.privateKey, enc).subscribe((dec) => {\n testSequence.next('Test Passed');\n testSequence.complete();\n })\n\n })\n\n })\n return testSequence$;\n\n }\n\n testDecryptionWithKeys(): Observable<string> {\n const testSequence: BehaviorSubject<string> = new BehaviorSubject<string>(\"\");\n const testSequence$: Observable<string> = testSequence.asObservable();\n testSequence.next(\"Test Generating Keys\");\n\n const privateKey = `-----BEGIN PRIVATE KEY-----\n MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDKVBkCWNb9eHVF\n twAA5mdAyvXFix3WavdrsoYRkvtCl8ogDBQf8f6N0bRkDF1zcVHRrNAEyozXDtuD\n kFgSiivBFREI7fiS3sOvduq6FaGXzX0IY6oaVMu8oOPgDvC0yvoohR+0Qxq2d6lP\n SPyHeKQaxP4KxzCJJzB1XAcbd2eFzUUDv25mNlwdVkmW8FI/sAxnJLgPTW78dzfX\n Ddfk+nxdIqxVKSLATnL0kMN7aGJx24UozioAIpzvvvF5/+7HTd1gi6NeCqrAYr3g\n iP364AE26CFwFvHnafO9uNQhlQ+uiNnOoInXByfFGVP+RidSpfLzaxDjs6RDwpol\n h098btONAgMBAAECggEAAVhHM2OD5IkUtuowwcKNaCTKGmrClRE3gMuzJeBsSJEy\n uAReUFILZylcnhegDytSti2vDA9T7xqtO6CU0p3V8LpU89JMOPRb/deirI4UXSpx\n xbNyjirOO6bnrNlOWfKexdQQsikYPzF2iM1Scpr1u9ZDCHZOl1ZYSrkve5My4coP\n 3Gx6tTBqL0jQBfcpf4ES8BH3JSawR/MgqzDS74+bI2VH+kvuPAC1L4fBgaV3VUv0\n nFzim5A3s5VaXPgJbEIghP9BkYGFkeT9ma3nliEZWc96AzsmowFn1ayCvrNVPo9R\n ECD2NnttBiCJZt3H93sR9+OTeA8Bls+aZGlKd5mLAQKBgQDpf8nIYUm/Zmls7/lQ\n QBUSGHEYrbjNsEejQsPgNDtg2EVSxdUkvTn7Wb+HExTk09Z5bNvhaO2532/FH9y8\n ahSXafiMXpfR2olwXdOB9yXXl4F5C0LGnmzGim4OSeWzAX0JCL470KaS0QN3EmoG\n 9F0YCfMnZXNTweSSx4xvlO6ggQKBgQDd01uIolm7z1DIWCwNERAXP2GDwcvxyzYK\n YqJfKDeHt2t6yIzZMMotnPDy+OlcdGspIIHkB5a+SZN5Nt7DUKg/MnyOZ3KbVq41\n k7dR4Ka3LRnGkesy7lSr7ef1rfquyR75OXJQcPWvkFcLu0TMiQhvptatZ8VN+F4n\n fDQELRotDQKBgQCgN+AUT7VT0QjcCBnRV/ddUEoiPenFsYSmYMSYzh5ESIHg1wB2\n 0iS79Iw4Of6nOTg8X1bM57vfQ5Kk90T2P+/bKYqzfqC8DTErWiYsUpKzyTC9Bt4N\n /Vz0Kr5zrX8ggg/yp/4oevYhXav8AzWfigNq4EDpMnKc8TlPAf+5/L50gQKBgQC2\n mLPhPhr1gUszD3l7bA89w7uGlLFHoQoj9FtKTzWervp3QLzIT+QtNeIVb5XQuDg5\n y3uAdEq+6pvNjMBEMJG+K9Xh9v+dJPYUPjsJ2A4D/MkZ7qWX8B2cxSJK1uLim8W2\n S3ZxBvsGgJ9WldmlMCvUlJZkeWYtr4P5psC+q02/xQKBgQCDII/jcV2+lRM2iNTe\n vBijZSaNMEWOK/Y+/HFK8GYKXnB+xNWhrm8rKgWGzpDJAUPMh9Tt+leW9LKEBuzF\n Y1bGblmGm1zsPWpIx05Fdtv9eOJmFnXbGzIsYyhadZnPcQOWhqxtpVxSuul0Jc7Q\n XNq4qPaPXhbQAshgtyBt75DMkw==\n -----END PRIVATE KEY-----`\n \n const pubKey = `-----BEGIN PUBLIC KEY-----\n MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylQZAljW/Xh1RbcAAOZn\n QMr1xYsd1mr3a7KGEZL7QpfKIAwUH/H+jdG0ZAxdc3FR0azQBMqM1w7bg5BYEoor\n wRURCO34kt7Dr3bquhWhl819CGOqGlTLvKDj4A7wtMr6KIUftEMatnepT0j8h3ik\n GsT+CscwiScwdVwHG3dnhc1FA79uZjZcHVZJlvBSP7AMZyS4D01u/Hc31w3X5Pp8\n XSKsVSkiwE5y9JDDe2hicduFKM4qACKc777xef/ux03dYIujXgqqwGK94Ij9+uAB\n NughcBbx52nzvbjUIZUProjZzqCJ1wcnxRlT/kYnUqXy82sQ47OkQ8KaJYdPfG7T\n jQIDAQAB\n -----END PUBLIC KEY-----`\n\n const algorithm: RsaHashedKeyGenParams = {\n name: \"RSA-OAEP\",\n modulusLength: 2048,\n publicExponent: new Uint8Array([1, 0, 1]),\n hash: \"SHA-256\"\n };\n\n // ENCRYPT\n this.pemToCryptoKey(\n pubKey,\n algorithm,\n true,\n [\"encrypt\"],\n \"spki\"\n ).subscribe((keyPublic) => {\n\n // console.log(\"PUBLIC KEY: \", keyPublic)\n\n this.encryptData(keyPublic, \"Sample Data here - Mike Bonifacio\")\n .subscribe((str) => {\n console.log(\"ENCRYPTED STRING: \", str);\n testSequence.next('encrypted string success');\n })\n\n })\n\n const enc = \"r7UOuEGBZ6jbVTOIBuv9jFOEtRiedmS27hfW40k7XKCTsQ5VhWup0qu2BA2ANZaGKii/uehJ/RSPiyfGbJ6leJrat0mA1hPqH/XodaBzLMDigvdYM1NSXFZMDa40OpLUIXbPlAvybjcGu7Bal+LMA8htHrFu/OmM/fHI66xOzzpuXSYx0OkWjtY81rUQ1FFkvrkx2jGFPZ0p+Nw/v3Q4cJnet6V63vCueFlD749VMcVXo7pvz4AIPpB+IOy3kbxaYTPakLVioJERU6GFMXWkECuRvohhS9CETcORZtRVRkvhcHk3lxgIhfqojUKYgD6K5dDELDPsWIS+iTG1XIQIlg==\";\n\n // DECRYPTION\n this.pemToCryptoKey(\n privateKey,\n algorithm,\n false,\n [\"decrypt\"],\n \"pkcs8\"\n ).subscribe((key) => {\n\n // console.log(\"DECRYPT ===\", key)\n\n this.decryptData(key, enc)\n .pipe(\n catchError(err => {\n console.log(\"ERROR: \", err);\n return EMPTY\n })\n ).subscribe((str) => {\n console.log(\"DECRYPTED STRING: \", str);\n testSequence.next('decrypted string success');\n })\n\n })\n\n return testSequence$;\n };\n}\n","import { OperatorFunction } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { HttpEventType } from '@angular/common/http';\n\nexport function requestStreaming(): OperatorFunction<any, any> {\n\n return input$ => input$.pipe(\n filter((event: any) =>\n event.type === HttpEventType.DownloadProgress || event.type === HttpEventType.Response\n ),\n\n map((event: any) => {\n\n if (event.type === HttpEventType.DownloadProgress) {\n return event.partialText || ''\n } else if (event.type === HttpEventType.Response) {\n return event.body\n }\n\n }),\n\n map((data: any) => {\n if (typeof data === 'string') {\n const matches = data.match(/{[^}]+}/g) || []\n return (matches.length > 0) ? matches.map(match => JSON.parse(match)) : data\n }\n return data\n })\n )\n\n}\n\n","import { 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';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RequestService {\n\n private http = inject(HttpClient)\n\n private pathQueryService = inject(PathQueryService)\n private headersService = inject(HeadersService)\n\n isPending = new BehaviorSubject<boolean>(false)\n isPending$ = this.isPending.asObservable().pipe(delay(1))\n\n progress = new BehaviorSubject<number>(0)\n progress$ = this.progress.asObservable()\n\n getRecordRequest<T>(options: ApiRequest): Observable<T> {\n\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildCombinedHeaders(options);\n\n this.isPending.next(true);\n\n return (options.stream)\n ? this.http.get<any>(urlPath, headers).pipe(\n requestStreaming(),\n this.handleFinalize()\n )\n : this.http.get<T>(urlPath, headers).pipe(\n this.request(options),\n )\n }\n\n createRecordRequest<T>(options: ApiRequest, data: any): Observable<T> {\n\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildCombinedHeaders(options);\n\n this.isPending.next(true);\n\n return (options.stream)\n ? this.http.post<any>(urlPath, data, headers).pipe(\n requestStreaming(),\n this.handleFinalize()\n )\n : this.http.post<T>(urlPath, data, headers).pipe(\n this.request(options),\n )\n }\n\n updateRecordRequest<T>(options: ApiRequest, data: any): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildHeaders(options);\n\n this.isPending.next(true);\n\n return this.http.put<any>(urlPath, data, headers).pipe(\n this.request(options),\n )\n }\n\n deleteRecordRequest<T>(options: ApiRequest): Observable<T> {\n\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildHeaders(options);\n\n this.isPending.next(true);\n\n return this.http.delete<any>(urlPath, headers).pipe(\n this.request(options),\n )\n }\n\n // Helper functions\n private buildUrlPath(options: ApiRequest): string {\n return this.pathQueryService.buildAPIPath(options.server, options.path);\n }\n\n private buildHeaders(options: ApiRequest): any {\n return this.headersService.generateHeaders(options.headers);\n }\n\n private buildCombinedHeaders(options: ApiRequest): any {\n const headers = this.headersService.generateHeaders(options.headers)\n return this.combineHeaders(headers, options.stream || false)\n }\n\n private request<T>(options: ApiRequest): (source: Observable<any>) => Observable<T> {\n return (source$: Observable<any>): Observable<T> => {\n return source$.pipe(\n map(data => {\n if (options?.adapter) {\n return Array.isArray(data)\n ? data.map((item: any) => options.adapter(item))\n : options.adapter(data)\n }\n return data\n })\n )\n }\n }\n\n downloadFileRequest(options: ApiRequest): Observable<any> {\n\n this.isPending.next(true);\n\n const urlPath = this.buildUrlPath(options);\n\n return this.http.get(urlPath, { responseType: 'blob', observe: 'events', reportProgress: true })\n .pipe(\n map((event: HttpEvent<any>) => {\n\n this.isPending.next(true)\n\n if (event instanceof HttpHeaderResponse) {\n if(event.status !== 200) {\n this.isPending.next(false)\n throw new Error('Download failed');\n }\n }\n\n // 0\tSent\tRequest has been sent.\n // 1\tUploadProgress\tUpload is in progress.\n // 2\tResponseHeader\tResponse headers received.\n // 3\tDownloadProgress\tDownload is in progress.\n // 4\tResponse\tResponse is fully received.\n // 5\tUser\tCustom user event.\n\n switch (event.type) {\n\n case HttpEventType.DownloadProgress:\n\n const status = (event.total) ? Math.round(event.loaded / (event.total || 1) * 100) : 100\n this.progress.next(status)\n return status\n\n case HttpEventType.Response:\n\n try {\n\n const fileNamePath = (options?.saveAs) ? options.saveAs : (options.path) ? options.path[options.path.length - 1] : []\n const header_content = event.headers.get('Content-Disposition') || '';\n // checks if header_content is not empty and splits the header_content to get the file name\n // otherwise, it will use the fileDownload - contains the file name and extension\n const file = (header_content) ? header_content.split('=')[1].substring(0, header_content.split('=')[1].length) : ''\n\n const fileName = (fileNamePath !== '') ? fileNamePath : file\n\n if (fileName === '') {\n this.isPending.next(false);\n throw new Error('Save File: (file name and extension) not found in Headers or Path');\n }\n\n this.downloadFile(fileName, event.body)\n this.isPending.next(false)\n\n return 100\n\n } catch (error) {\n throw new Error('Download failed');\n }\n\n default:\n this.isPending.next(false)\n return 0\n }\n\n }),\n catchError(err => {\n return throwError(() => err)\n })\n )\n }\n\n private handleFinalize(): (source: Observable<any>) => Observable<any> {\n return finalize(() => this.isPending.next(false));\n }\n\n private downloadFile(file:string, fileData: any) {\n\n const navigatorAny = window.navigator as any\n\n const extension = file.split('.')[1].toLowerCase()\n\n var newBlob = new Blob([fileData], { type: this.createFileType(extension) })\n\n if (navigatorAny.msSaveOrOpenBlob) {\n navigatorAny.msSaveOrOpenBlob(newBlob, file)\n } else {\n const link = document.createElement('a')\n const url = window.URL.createObjectURL(newBlob)\n link.href = url\n link.download = file\n link.click()\n window.URL.revokeObjectURL(url)\n }\n\n }\n\n private createFileType(ext: any): string {\n\n let fileType: string = \"\"\n\n if (ext == 'pdf' || ext == 'csv') {\n fileType = `application/${ext}`\n }\n else if (ext == 'jpeg' || ext == 'jpg' || ext == 'png') {\n fileType = `image/${ext}`\n }\n else if (ext == 'txt') {\n fileType = 'text/plain'\n }\n\n else if (ext == 'ppt' || ext == 'pot' || ext == 'pps' || ext == 'ppa') {\n fileType = 'application/vnd.ms-powerpoint'\n }\n else if (ext == 'pptx') {\n fileType = 'application/vnd.openxmlformats-officedocument.presentationml.presentation'\n }\n else if (ext == 'doc' || ext == 'dot') {\n fileType = 'application/msword'\n }\n else if (ext == 'docx') {\n fileType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n }\n else if (ext == 'xls' || ext == 'xlt' || ext == 'xla') {\n fileType = 'application/vnd.ms-excel'\n }\n else if (ext == 'xlsx') {\n fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n }\n\n return fileType\n\n }\n\n private combineHeaders(headers: any, isStreaming: boolean) {\n\n return (isStreaming) ?\n {\n ...headers,\n observe: 'events',\n responseType: 'text',\n reportProgress: true,\n Accept: 'text/event-stream'\n }\n : headers\n\n }\n\n}\n","import { Observable, defer, interval } from 'rxjs';\nimport { takeWhile, map, tap } from 'rxjs/operators';\n\nexport function countdown(duration: number): Observable<number> {\n\n return defer(() => {\n\n const currentCount = { current: duration }\n\n return interval(1000).pipe(\n map(() => --currentCount.current),\n takeWhile(count => count >= 0)\n )\n\n })\n\n}\n","import { Observable, timer } from 'rxjs';\nimport { retry } from 'rxjs/operators';\n\nconst DEFAULT_MAX_RETRIES = 3;\n\nexport function delayedRetry<T>(delayMs: number, maxRetry = DEFAULT_MAX_RETRIES) {\n return (src: Observable<T>) =>\n src.pipe(\n retry({\n count: maxRetry,\n delay: () => timer(delayMs)\n })\n );\n}\n\n\n","import { Observable, interval } from 'rxjs';\nimport { mergeMap, startWith, takeUntil, tap } from 'rxjs/operators';\n\nexport function requestPolling<T>(pollInterval: number, stopCondition$: Observable<any>, isPending$: any) {\n return (source: Observable<T>): Observable<T> => {\n return interval(pollInterval * 1000)\n .pipe(\n startWith(0),\n tap(() => {\n try {\n if (isPending$ && typeof isPending$.next === 'function') {\n isPending$.next(true);\n } else if (isPending$ && typeof isPending$.set === 'function') {\n isPending$.set(true);\n }\n } catch (e) {\n // no-op if setting fails\n }\n }),\n mergeMap(() => source),\n tap(() => {\n try {\n if (isPending$ && typeof isPending$.next === 'function') {\n isPending$.next(false);\n } else if (isPending$ && typeof isPending$.set === 'function') {\n isPending$.set(false);\n }\n } catch (e) {\n // no-op if setting fails\n }\n }),\n takeUntil(stopCondition$),\n );\n };\n}\n","import { DataType } from \"./data-type.enum\"\n\nexport interface DatabaseStorageInterface {\n table: string\n expiresIn: string\n}\n\nexport class DatabaseStorage implements DatabaseStorageInterface {\n \n constructor(\n public table = '',\n public expiresIn: '',\n ) {}\n\n static adapt(item?: any): DatabaseStorage {\n\n return new DatabaseStorage(\n item?.table,\n item?.expiresIn,\n )\n\n }\n\n}\n","export interface RetryOptionsInterface {\n times?: number // total request to be made including initial request\n delay?: number // seconds (<= 3 default 3 seconds)\n}\n\nexport class RetryOptions implements RetryOptionsInterface {\n\n constructor(\n public times = 0,\n public delay = 3,\n ) {}\n\n static adapt(item?: any): RetryOptions {\n\n return new RetryOptions(\n item?.times,\n item?.delay\n )\n\n }\n\n}\n","export enum DataType {\n ANY = 0,\n ARRAY,\n OBJECT\n}\n","import { RetryOptions } from \"./retry-options.model\"\n\nexport interface ConfigHTTPOptionsInterface {\n server: string\n path?: any[]\n headers?: any\n polling?: number // seconds (undefined | 0 = none)\n retry?: RetryOptions\n stream?: boolean\n displayError?: boolean\n}\n\nexport class ConfigHTTPOptions implements ConfigHTTPOptionsInterface {\n\n constructor(\n public server = '',\n public path?: any[],\n public headers?: any,\n public polling?: number,\n public retry?: RetryOptions,\n public stream?: boolean,\n public displayError?: boolean,\n ) {}\n\n static adapt(item?: any): ConfigHTTPOptions {\n\n const server = Array.isArray(item?.server) ? item.server.join('/') : item?.server || '';\n const retryOptions = item?.retry ? RetryOptions.adapt(item.retry) : RetryOptions.adapt();\n\n return new ConfigHTTPOptions(\n server,\n (item?.path) ? item.path : [],\n (item?.headers) ? item.headers : {},\n item?.polling ? Math.floor(item.polling) : 0,\n retryOptions,\n (item?.stream) ? item.stream : false,\n (item?.displayError) ? item.displayError : false,\n )\n\n }\n\n}\n","import { SettingOptions } from \"../services\"\n\nexport interface LocalStorageOptionsInterface {\n storageName?: string\n storageSettingsName?: string\n options?: SettingOptions,\n}\n\nexport class LocalStorageOptions implements LocalStorageOptionsInterface {\n\n constructor(\n public storageName?: string,\n public storageSettingsName?: string,\n public options?: SettingOptions,\n ) {}\n\n static adapt(item?: any): LocalStorageOptions {\n\n return new LocalStorageOptions(\n (item?.storageName) ? item.storageName : 'storage',\n (item?.storageSettingsName) ? item.storageSettingsName : 'global-storage',\n (item?.options) ? SettingOptions.adapt(item.options) : SettingOptions.adapt(),\n )\n\n }\n\n}\n","import { ConfigHTTPOptions } from \"./config-http-options.model\";\nimport { LocalStorageOptions } from \"./config-local-storage-options.model\";\n\nexport interface ConfigOptionsInterface {\n httpRequestOptions?: ConfigHTTPOptions\n LocalStorageOptions?: LocalStorageOptions\n // DatabaseOptions: any\n}\n\nexport class ConfigOptions implements ConfigOptionsInterface {\n\n constructor(\n public httpRequestOptions?: ConfigHTTPOptions,\n public LocalStorageOptions?: LocalStorageOptions,\n // public DatabaseOptions?: any,\n ) {}\n\n static adapt(item?: any): ConfigOptions {\n return new ConfigOptions(\n (item?.httpRequestOptions) ? ConfigHTTPOptions.adapt(item.httpRequestOptions) : undefined,\n (item?.LocalStorageOptions) ? LocalStorageOptions.adapt(item.LocalStorageOptions) : undefined,\n // item?.DatabaseOptions,\n )\n\n }\n\n}\n","import { Inject, inject, Injectable, Injector, Optional } from '@angular/core';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { BehaviorSubject, Observable, Subject, throwError } from 'rxjs';\nimport { tap, map, finalize, catchError } from 'rxjs/operators';\n\nimport { ApiRequest } from '../request-manager-state-service/models/api-request.model';\nimport { RequestService } from './request.service';\nimport { requestPolling, countdown, delayedRetry } from './rxjs-operators';\n\nimport { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display';\n\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigOptions } from '../../models';\nimport { ObjectMergerService } from '../utils/object-merger.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HTTPManagerService<T> extends RequestService {\n\n toastMessage = inject(ToastMessageDisplayService)\n ng_injector = inject(Injector)\n objectMergerService = inject(ObjectMergerService)\n\n private countdown = new BehaviorSubject<number>(0);\n countdown$ = this.countdown.asObservable();\n\n private error = new BehaviorSubject<boolean>(false);\n error$ = this.error.asObservable();\n\n private data = new BehaviorSubject<any>(null)\n data$ = this.data.asObservable()\n\n private polling$ = new Subject<void>();\n\n config = ApiRequest.adapt();\n\n constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {\n super()\n this.config = (configOptions) ? ApiRequest.adapt(configOptions.httpRequestOptions) : this.config\n }\n\n // REQUESTS\n\n getRequest<T>(options?: ApiRequest, params?: any[]) {\n\n this.isPending.next(true);\n this.data.next(null)\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.getRecordRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name)\n .pipe(\n tap(data => this.data.next(data))\n ).pipe(\n finalize(() => this.isPending.next(false)),\n catchError((err) => {\n if(updatedOptions.displayError) this.handleErrorWithSnackBar(err)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n }\n\n postRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {\n\n this.isPending.next(true);\n this.data.next(null)\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.createRecordRequest;\n const requests = this.createRequest(func, updatedOptions, data);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(tap(data => this.data.next(data)))\n .pipe(\n finalize(() => this.isPending.next(false)),\n catchError((err) => {\n if(updatedOptions.displayError) this.handleErrorWithSnackBar(err)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n }\n\n putRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {\n\n this.isPending.next(true);\n this.data.next(null)\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.updateRecordRequest;\n const requests = this.createRequest(func, updatedOptions, data);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(tap(data => this.data.next(data)))\n .pipe(\n finalize(() => this.isPending.next(false)),\n catchError((err) => {\n if(updatedOptions.displayError) this.handleErrorWithSnackBar(err)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n }\n\n deleteRequest<T>(options: ApiRequest, params?: any[]) {\n\n this.isPending.next(true);\n this.data.next(null)\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.deleteRecordRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(tap(data => this.data.next(data)))\n .pipe(\n finalize(() => this.isPending.next(false)),\n catchError((err) => {\n if(updatedOptions.displayError) this.handleErrorWithSnackBar(err)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n }\n\n downloadRequest<T>(options: ApiRequest, params?: any[], saveAs?: string) {\n\n this.isPending.next(true);\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.downloadFileRequest;\n const requests = this.createRequest(func, updatedOptions)\n\n return this.createObservable<T>(updatedOptions, requests, func.name)\n .pipe(\n catchError((err) => {\n this.error.next(true)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n\n }\n\n private createObservable<T>(options: ApiRequest, request$: Observable<T>, funcName: string) {\n\n const polling = options.polling ? (options.polling > 0 ? true : false) : false;\n const isPolling =\n polling &&\n !(funcName === 'deleteRecordRequest' || funcName === 'updateRecordRequest' || funcName === 'createRecordRequest')\n ? true\n : false;\n\n this.polling$.next();\n\n const polling$ =\n (isPolling && options.polling) || 0 >= 3\n ? request$.pipe(\n requestPolling((options.polling || 0) + 1, this.polling$, this.isPending),\n tap(() => this.countdown.next(0)),\n tap(() => {\n if (!options.polling) return;\n const count = options.polling ? options.polling : 0;\n // console.log('COUNT:', count);\n countdown(count)\n .pipe(\n map((x: number) => {\n // console.log('XX:', count, x);\n const pollingInSec = options.polling || 0;\n const percentageCompleted = ((pollingInSec - x) / pollingInSec) * 100;\n return Math.round(percentageCompleted);\n })\n )\n .subscribe((countDownValue: number) => {\n // console.log(this.countdown.value, countDownValue);\n this.countdown.next(countDownValue);\n });\n }),\n )\n : request$.pipe(\n catchError((err: any) => {\n\n if (err instanceof HttpErrorResponse) {\n this.error.next(true);\n return this.handleError(err);\n }\n\n return throwError(() => err);\n }),\n // finalize(() => this.isPending.next(false))\n )\n\n return polling$.pipe(\n catchError((err: any, caught: Observable<T>) => {\n\n if (err instanceof HttpErrorResponse) {\n this.error.next(true);\n if(isPolling) this.stopPolling();\n return this.handleError(err);\n }\n\n return throwError(() => err);\n }),\n (options?.retry && options.retry.times > 0)\n ? delayedRetry((options.retry.delay || 3) * 1000, (options.retry.times || 0) - 1)\n : (source: Observable<T>) => source\n );\n }\n\n private createRequest(func: Function, options: ApiRequest, data?: any | any[]) {\n const dataItem = this.prepareRequestData(options, data, func.name);\n return func.bind(this)(dataItem.options, dataItem.data);\n }\n\n private prepareRequestData(options: ApiRequest, data: any, funcName: string) {\n\n if ((options.mapper && funcName === 'updateRecordRequest') || funcName === 'createRecordRequest') {\n if (options?.mapper) {\n data = options.mapper\n ? Array.isArray(data)\n ? map((item) => options.mapper(item))\n : options.mapper(data)\n : data;\n }\n } else {\n if (options?.adapter) {\n data = Array.isArray(data)\n ? map((item) => options.adapter(item))\n : options.adapter(data)\n }\n }\n\n return { options: options, data: data };\n }\n\n // MISC\n\n private handleError(error: Response | any) {\n this.error.next(error.message || `${error.status} - ${error.statusText}`)\n return throwError(() => error)\n }\n\n private handleErrorWithSnackBar(error: Response | any) {\n\n const displayError = ToastDisplay.adapt({\n message: error.message || `${error.status} - ${error.statusText}`,\n action: 'OK',\n color: ToastColors.ERROR,\n icon: 'error',\n duration: 5 * 1000, //5 seconds\n })\n\n this.toastMessage.toastMessage(displayError)\n\n }\n\n private stopPolling() {\n this.isPending.next(false);\n this.polling$.next();\n }\n\n private defineReqOptions(options: any, params?: any[]) {\n\n const req = ApiRequest.adapt(options)\n if(req?.path) req.path = (params) ? [...req.path, ...params] : req.path\n\n const optionsReq = (req)? req : ApiRequest.adapt()\n const updatedOptions = this.objectMergerService.mergeOptions(optionsReq)\n\n return updatedOptions\n\n }\n}\n","import { HttpClient, HttpEvent, HttpEventType, HttpHeaderResponse } from '@angular/common/http';\nimport { Injectable, inject, signal, computed } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, finalize, map } from 'rxjs/operators';\n\nimport { ApiRequest } from '../request-manager-state-service/models/api-request.model';\nimport { PathQueryService, HeadersService } from '../utils';\nimport { requestStreaming } from './rxjs-operators/request-streaming';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RequestSignalsService {\n\n private http = inject(HttpClient);\n private pathQueryService = inject(PathQueryService);\n private headersService = inject(HeadersService);\n\n isPending = signal(false);\n progress = signal(0);\n\n isIdle = computed(() => !this.isPending());\n\n getRecordRequest<T>(options: ApiRequest): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildCombinedHeaders(options);\n\n this.isPending.set(true);\n\n return (options.stream)\n ? this.http.get<any>(urlPath, headers).pipe(\n requestStreaming(),\n this.handleFinalize()\n )\n : this.http.get<T>(urlPath, headers).pipe(\n this.request(options),\n this.handleFinalize()\n );\n }\n\n createRecordRequest<T>(options: ApiRequest, data: any): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildCombinedHeaders(options);\n\n this.isPending.set(true);\n\n return (options.stream)\n ? this.http.post<any>(urlPath, data, headers).pipe(\n requestStreaming(),\n this.handleFinalize()\n )\n : this.http.post<T>(urlPath, data, headers).pipe(\n this.request(options),\n this.handleFinalize()\n );\n }\n\n updateRecordRequest<T>(options: ApiRequest, data: any): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildHeaders(options);\n\n this.isPending.set(true);\n\n return this.http.put<any>(urlPath, data, headers).pipe(\n this.request(options),\n this.handleFinalize()\n );\n }\n\n deleteRecordRequest<T>(options: ApiRequest): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildHeaders(options);\n\n this.isPending.set(true);\n\n return this.http.delete<any>(urlPath, headers).pipe(\n this.request(options),\n this.handleFinalize()\n );\n }\n\n private buildUrlPath(options: ApiRequest): string {\n return this.pathQueryService.buildAPIPath(options.server, options.path);\n }\n\n private buildHeaders(options: ApiRequest): any {\n return this.headersService.generateHeaders(options.headers);\n }\n\n private buildCombinedHeaders(options: ApiRequest): any {\n const headers = this.headersService.generateHeaders(options.headers);\n return this.combineHeaders(headers, options.stream || false);\n }\n\n private request<T>(options: ApiRequest): (source: Observable<any>) => Observable<T> {\n return (source$: Observable<any>): Observable<T> => {\n return source$.pipe(\n map(data => {\n if (options?.adapter) {\n return Array.isArray(data)\n ? data.map((item: any) => options.adapter(item))\n : options.adapter(data);\n }\n return data;\n })\n );\n };\n }\n\n downloadFileRequest(options: ApiRequest): Observable<any> {\n this.isPending.set(true);\n\n const urlPath = this.buildUrlPath(options);\n\n return this.http.get(urlPath, { responseType: 'blob', observe: 'events', reportProgress: true })\n .pipe(\n map((event: HttpEvent<any>) => {\n this.isPending.set(true);\n\n if (event instanceof HttpHeaderResponse) {\n if (event.status !== 200) {\n this.isPending.set(false);\n throw new Error('Download failed');\n }\n }\n\n switch (event.type) {\n case HttpEventType.DownloadProgress:\n const status = (event.total) ? Math.round(event.loaded / (event.total || 1) * 100) : 100;\n this.progress.set(status);\n return status;\n\n case HttpEventType.Response:\n try {\n const fileNamePath = (options?.saveAs) ? options.saveAs : (options.path) ? options.path[options.path.length - 1] : [];\n const header_content = event.headers.get('Content-Disposition') || '';\n const file = (header_content) ? header_content.split('=')[1].substring(0, header_content.split('=')[1].length) : '';\n\n const fileName = (fileNamePath !== '') ? fileNamePath : file;\n\n if (fileName === '') {\n this.isPending.set(false);\n throw new Error('Save File: (file name and extension) not found in Headers or Path');\n }\n\n this.downloadFile(fileName, event.body);\n this.isPending.set(false);\n\n return 100;\n\n } catch (error) {\n throw new Error('Download failed');\n }\n\n default:\n this.isPending.set(false);\n return 0;\n }\n }),\n catchError(err => {\n return throwError(() => err);\n })\n );\n }\n\n private handleFinalize(): (source: Observable<any>) => Observable<any> {\n return finalize(() => this.isPending.set(false));\n }\n\n private downloadFile(file: string, fileData: any) {\n const navigatorAny = window.navigator as any;\n const extension = file.split('.')[1]?.toLowerCase();\n const newBlob = new Blob([fileData], { type: this.createFileType(extension) });\n\n if (navigatorAny.msSaveOrOpenBlob) {\n navigatorAny.msSaveOrOpenBlob(newBlob, file);\n } else {\n const link = document.createElement('a');\n const url = window.URL.createObjectURL(newBlob);\n link.href = url;\n link.download = file;\n link.click();\n window.URL.revokeObjectURL(url);\n }\n }\n\n private createFileType(ext: string): string {\n let fileType = \"\";\n\n if (ext === 'pdf' || ext === 'csv') fileType = `application/${ext}`;\n else if (ext === 'jpeg' || ext === 'jpg' || ext === 'png') fileType = `image/${ext}`;\n else if (ext === 'txt') fileType = 'text/plain';\n else if (ext === 'ppt' || ext === 'pot' || ext === 'pps' || ext === 'ppa') fileType = 'application/vnd.ms-powerpoint';\n else if (ext === 'pptx') fileType = 'application/vnd.openxmlformats-officedocument.presentationml.presentation';\n else if (ext === 'doc' || ext === 'dot') fileType = 'application/msword';\n else if (ext === 'docx') fileType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n else if (ext === 'xls' || ext === 'xlt' || ext === 'xla') fileType = 'application/vnd.ms-excel';\n else if (ext === 'xlsx') fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n\n return fileType;\n }\n\n private combineHeaders(headers: any, isStreaming: boolean) {\n return (isStreaming)\n ? {\n ...headers,\n observe: 'events',\n responseType: 'text',\n reportProgress: true,\n Accept: 'text/event-stream'\n }\n : headers;\n }\n}\n","import { Inject, inject, Injectable, Injector, Optional, signal } from '@angular/core';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Observable, Subject, throwError } from 'rxjs';\nimport { tap, map, finalize, catchError } from 'rxjs/operators';\n\nimport { ApiRequest } from '../request-manager-state-service/models/api-request.model';\nimport { RequestSignalsService } from './request-signals.service'; // 👈 updated\nimport { requestPolling, countdown, delayedRetry } from './rxjs-operators';\n\nimport { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigOptions } from '../../models';\nimport { ObjectMergerService } from '../utils/object-merger.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HTTPManagerSignalsService<T> extends RequestSignalsService { // 👈 use signals service\n\n toastMessage = inject(ToastMessageDisplayService);\n ng_injector = inject(Injector);\n objectMergerService = inject(ObjectMergerService);\n\n // ✅ Replaced BehaviorSubjects with Angular signals\n countdown = signal<number>(0);\n error = signal<string | boolean>(false);\n data = signal<any>(null);\n\n private polling$ = new Subject<void>();\n\n config = ApiRequest.adapt();\n\n constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {\n super();\n this.config = configOptions\n ? ApiRequest.adapt(configOptions.httpRequestOptions)\n : this.config;\n }\n\n // REQUESTS\n getRequest<T>(options?: ApiRequest, params?: any[]) {\n this.isPending.set(true);\n this.data.set(null);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.getRecordRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n tap(data => this.data.set(data)),\n finalize(() => this.isPending.set(false)),\n catchError((err) => {\n if (updatedOptions.displayError) this.handleErrorWithSnackBar(err);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n postRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {\n this.isPending.set(true);\n this.data.set(null);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.createRecordRequest;\n const requests = this.createRequest(func, updatedOptions, data);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n tap(data => this.data.set(data)),\n finalize(() => this.isPending.set(false)),\n catchError((err) => {\n if (updatedOptions.displayError) this.handleErrorWithSnackBar(err);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n putRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {\n this.isPending.set(true);\n this.data.set(null);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.updateRecordRequest;\n const requests = this.createRequest(func, updatedOptions, data);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n tap(data => this.data.set(data)),\n finalize(() => this.isPending.set(false)),\n catchError((err) => {\n if (updatedOptions.displayError) this.handleErrorWithSnackBar(err);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n deleteRequest<T>(options: ApiRequest, params?: any[]) {\n this.isPending.set(true);\n this.data.set(null);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.deleteRecordRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n tap(data => this.data.set(data)),\n finalize(() => this.isPending.set(false)),\n catchError((err) => {\n if (updatedOptions.displayError) this.handleErrorWithSnackBar(err);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n downloadRequest<T>(options: ApiRequest, params?: any[], saveAs?: string) {\n this.isPending.set(true);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.downloadFileRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n catchError((err) => {\n this.error.set(true);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n // --- private helpers ---\n private createObservable<T>(options: ApiRequest, request$: Observable<T>, funcName: string) {\n const polling =\n options.polling ? (options.polling > 0 ? true : false) : false;\n\n const isPolling =\n polling &&\n !(funcName === 'deleteRecordRequest' ||\n funcName === 'updateRecordRequest' ||\n funcName === 'createRecordRequest');\n\n this.polling$.next();\n\n const polling$ =\n (isPolling && options.polling) || 0 >= 3\n ? request$.pipe(\n requestPolling((options.polling || 0) + 1, this.polling$, this.isPending),\n tap(() => this.countdown.set(0)),\n tap(() => {\n if (!options.polling) return;\n const count = options.polling ? options.polling : 0;\n countdown(count)\n .pipe(\n map((x: number) => {\n const pollingInSec = options.polling || 0;\n const percentageCompleted = ((pollingInSec - x) / pollingInSec) * 100;\n return Math.round(percentageCompleted);\n })\n )\n .subscribe((countDownValue: number) => {\n this.countdown.set(countDownValue);\n });\n }),\n )\n : request$.pipe(\n catchError((err: any) => {\n if (err instanceof HttpErrorResponse) {\n this.error.set(true);\n return this.handleError(err);\n }\n return throwError(() => err);\n })\n );\n\n return polling$.pipe(\n catchError((err: any, caught: Observable<T>) => {\n if (err instanceof HttpErrorResponse) {\n this.error.set(true);\n if (isPolling) this.stopPolling();\n return this.handleError(err);\n }\n return throwError(() => err);\n }),\n options?.retry && options.retry.times > 0\n ? delayedRetry((options.retry.delay || 3) * 1000, (options.retry.times || 0) - 1)\n : (source: Observable<T>) => source\n );\n }\n\n private createRequest(func: Function, options: ApiRequest, data?: any | any[]) {\n const dataItem = this.prepareRequestData(options, data, func.name);\n return func.bind(this)(dataItem.options, dataItem.data);\n }\n\n private prepareRequestData(options: ApiRequest, data: any, funcName: string) {\n if ((options.mapper && funcName === 'updateRecordRequest') || funcName === 'createRecordRequest') {\n if (options?.mapper) {\n data = options.mapper\n ? Array.isArray(data)\n ? map((item) => options.mapper(item))\n : options.mapper(data)\n : data;\n }\n } else {\n if (options?.adapter) {\n data = Array.isArray(data)\n ? map((item) => options.adapter(item))\n : options.adapter(data);\n }\n }\n return { options: options, data: data };\n }\n\n private handleError(error: Response | any) {\n this.error.set(error.message || `${error.status} - ${error.statusText}`);\n return throwError(() => error);\n }\n\n private handleErrorWithSnackBar(error: Response | any) {\n const displayError = ToastDisplay.adapt({\n message: error.message || `${error.status} - ${error.statusText}`,\n action: 'OK',\n color: ToastColors.ERROR,\n icon: 'error',\n duration: 5 * 1000,\n });\n this.toastMessage.toastMessage(displayError);\n }\n\n private stopPolling() {\n this.isPending.set(false);\n this.polling$.next();\n }\n\n private defineReqOptions(options: any, params?: any[]) {\n const req = ApiRequest.adapt(options);\n if (req?.path) req.path = params ? [...req.path, ...params] : req.path;\n\n const optionsReq = req ? req : ApiRequest.adapt();\n const updatedOptions = this.objectMergerService.mergeOptions(optionsReq);\n\n return updatedOptions;\n }\n}\n","import { RetryOptions } from \"../../request-manager-services\"\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}\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 ) {}\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 )\n\n }\n\n}\n","export interface RequestOptionsInterface {\n path: any[],\n headers: any,\n}\n\nexport class RequestOptions implements RequestOptionsInterface {\n\n constructor(\n public path: any[] = [],\n public headers = {},\n ) {}\n\n static adapt(item?: any): RequestOptions {\n\n return new RequestOptions(\n item?.path,\n item?.headers,\n )\n\n }\n\n}\n","import { Inject, Injectable, Optional, inject } from '@angular/core';\n\nimport { ApiRequest } from '../request-manager-state-service/models';\nimport { SettingOptions } from '../local-storage-manager-service';\nimport { UtilsService } from '../utils/utils.service';\n\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigHTTPOptions, ConfigOptions, LocalStorageOptions } from '../request-manager-services';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ObjectMergerService {\n\n utils = inject(UtilsService);\n\n constructor(@Inject(CONFIG_SETTINGS_TOKEN) @Optional() private configOptions?: ConfigOptions) {\n if (!this.configOptions) this.configOptions = ConfigOptions.adapt()\n }\n\n mergeOptions(options = ApiRequest.adapt()) {\n\n const configForRoot = (this.configOptions?.httpRequestOptions) ? this.configOptions.httpRequestOptions : ConfigHTTPOptions.adapt()\n const mergedOptions = ApiRequest.adapt(options)\n\n mergedOptions.server = (options && options.server === '') ? configForRoot?.server || '' : options.server\n\n mergedOptions.path = [ ...options.path || [], ...configForRoot?.path || [] ]\n\n mergedOptions.headers = { ...options.headers || {}, ...configForRoot?.headers || {} }\n\n mergedOptions.retry = (options && (options?.retry?.times !== 0 || options?.retry?.delay !== 3)) ? options.retry : configForRoot?.retry || { times: 0, delay: 3 };\n\n mergedOptions.polling = (options && options?.polling !== 0) ? options.polling : configForRoot?.polling || 0;\n\n mergedOptions.displayError = (options && options?.displayError) ? options.displayError : configForRoot?.displayError || false;\n\n mergedOptions.stream = (options && options?.stream) ? options.stream : configForRoot?.stream || false;\n\n return mergedOptions;\n\n }\n\n mergeStorageOptions(options = SettingOptions.adapt()) {\n\n const configForRoot = (this.configOptions?.LocalStorageOptions) ? this.configOptions.LocalStorageOptions : LocalStorageOptions.adapt()\n const configForRootOptions = configForRoot.options || LocalStorageOptions.adapt().options\n\n const mergedOptions = SettingOptions.adapt(options)\n\n // storage type\n mergedOptions.storage = (options && (typeof options.storage !== 'undefined')) ? options.storage : (configForRootOptions?.storage ?? 0)\n\n // expires: prefer explicit numeric expires; if not provided, compute from expiresIn string; otherwise use config default\n // if an explicit, non-zero numeric expires is provided, use it\n if (options && (typeof options.expires !== 'undefined') && options.expires !== null && Number(options.expires) > 0) {\n mergedOptions.expires = Number(options.expires);\n } else if (options && options.expiresIn) {\n // compute numeric epoch from expiresIn string using UtilsService if available\n try {\n mergedOptions.expires = this.utils ? this.utils.expires(options.expiresIn) : 0;\n } catch {\n mergedOptions.expires = 0;\n }\n } else {\n mergedOptions.expires = configForRootOptions?.expires ?? 0;\n }\n\n // keep expiresIn string if explicitly provided, otherwise use config default\n mergedOptions.expiresIn = (options && (typeof options.expiresIn !== 'undefined')) ? options.expiresIn : (configForRootOptions?.expiresIn || '')\n\n mergedOptions.encrypted = (options && (typeof options.encrypted !== 'undefined')) ? options.encrypted : (configForRootOptions?.encrypted || false)\n\n return mergedOptions;\n\n }\n\n}\n","import { Inject, Injectable, OnDestroy, Optional, inject } from '@angular/core';\nimport { ComponentStore } from '@ngrx/component-store';\nimport { withLatestFrom, map, tap } from 'rxjs/operators';\n\nimport { UtilsService } from '../utils/utils.service';\nimport { SymmetricalEncryptionService } from '../utils/encryption/symmetrical-encryption.service';\n\nimport { StorageOption, StorageType } from './models';\nimport { SettingOptions } from './models/setting-options.model';\nimport { StorageData } from './models/storage-data.model';\nimport { EncryptionTestService } from '../utils/encryption/encryption-test.service';\nimport { interval } from 'rxjs';\nimport { AppService } from '../utils/app.service';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigOptions } from '../request-manager-services';\nimport { ObjectMergerService } from '../utils/object-merger.service';\n\nexport interface State {\n localStores: StorageData[]\n sessionStores: StorageData[]\n settings: StorageOption[]\n}\n\nconst storage: State = {\n localStores: [],\n sessionStores: [],\n settings: [],\n};\n\n@Injectable({ providedIn: 'root' })\nexport class LocalStorageManagerService extends ComponentStore<State> implements OnDestroy {\n\n storageName = 'storage'\n storageSettingsName = 'global-storage'\n defaultOptions = SettingOptions.adapt()\n\n stateRetrieved = false\n encrypted = false\n\n app = inject(AppService)\n utils = inject(UtilsService)\n objectMergerService = inject(ObjectMergerService)\n encryption = inject(SymmetricalEncryptionService)\n encryptionTest = inject(EncryptionTestService)\n\n // SELECTORS\n\n private readonly data$ = this.select((state) => state)\n\n readonly stores$ = this.select((state) => state.settings)\n\n readonly storeExists$ = (store: string) => this.select(\n this.data$,\n (data) => data.settings.find(item => item.name === store) ? true : false\n )\n\n readonly store$ = (store: string) => this.select(\n this.data$,\n (data) => {\n\n const foundStore = data.settings.find(item => item.name === store)\n\n if(foundStore) {\n\n const options = SettingOptions.adapt(foundStore.options)\n\n const found = foundStore.options?.storage === StorageType.GLOBAL\n ? data.localStores.find(item => item.id === foundStore.id) as StorageData\n : data.sessionStores.find(item => item.id === foundStore.id) as StorageData\n\n if(!found) {\n this.deleteStore({ name: store })\n return\n }\n\n if(!this.app?.appID) {\n console.warn('No App ID found - AppId not Provided')\n return\n }\n\n const storageData = (options.encrypted) ? this.encryption.decrypt(found.data, this.app.appID) : found.data\n return (this.isString(storageData)) ? JSON.parse(storageData): storageData\n\n } else {\n return null\n }\n\n }\n )\n\n readonly settings$ = this.select(state => (state) ? state.settings : storage.settings)\n\n readonly setting$ = (store: string) => this.select(\n this.data$,\n (state) => {\n const foundSetting = state.settings.find(item => item.name === store)\n return (foundSetting) ? foundSetting : null\n }\n )\n\n persistence$ = this.data$\n .subscribe(data => {\n if(this.stateRetrieved) this.persistState(data)\n })\n\n startTimer() {\n const timer$ = interval(1000 * 3).pipe(\n withLatestFrom(this.data$),\n map(([_, state]) => state),\n tap((state) => {\n\n const expired: StorageOption[] = this.expired(state) ? this.expired(state) : []\n\n if (expired.length > 0) {\n\n const ids = expired.map((item) => item.id)\n\n const updatedState: State = {\n ...state,\n localStores: state.localStores.filter((item) => !ids.includes(item.id)),\n sessionStores: state.sessionStores.filter((item) => !ids.includes(item.id)),\n settings: state.settings.filter((item) => !ids.includes(item.id)),\n };\n\n this.persistState(updatedState)\n this.updateState(updatedState)\n\n }\n })\n );\n\n timer$.subscribe()\n }\n\n private updateState = this.updater((state, updatedState: State) => ({\n ...updatedState,\n }))\n\n\n constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {\n\n super(storage)\n\n this.storageName = configOptions?.LocalStorageOptions?.storageName || this.storageName\n this.storageSettingsName = configOptions?.LocalStorageOptions?.storageSettingsName || this.storageSettingsName\n this.defaultOptions = configOptions?.LocalStorageOptions?.options || this.defaultOptions\n\n this.retrieveState()\n this.startTimer()\n }\n\n readonly setStore = this.updater((state: State, store: { id: string, name: string, data: any, options: SettingOptions }): any => {\n\n const settings = StorageOption.adapt(store)\n settings.options = this.objectMergerService.mergeStorageOptions(settings.options)\n\n const type = store.options.storage\n const hasStore = this.hasGlobalStorage(type, store.id)\n\n store.name = this.validStoreName(store.name)\n\n if(!hasStore) {\n console.warn(`No such Store: ${store.name}`)\n return state\n } else {\n\n const str = this.encryptionTest.isEncrypted(store.data) ? store.data : JSON.stringify(store.data)\n const dataStr = (this.isObjectOrArray(str)) ? (store.options.encrypted) ? this.encryption.encrypt(str, this.app.appID) : store.data : store.data\n\n const localData = (dataStr && settings.options?.storage === StorageType.GLOBAL) ? [{ data: dataStr, id: settings.id }] : []\n const sessionData = (dataStr && settings.options?.storage === StorageType.SESSION) ? [{ data: dataStr, id: settings.id }] : []\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n settings: [...state.settings, ...[settings]],\n }\n\n }\n\n })\n\n readonly createStore = this.updater((state: State, store: { id?: string, name: string, data: any, options: SettingOptions }): any => {\n\n const settings = StorageOption.adapt(store)\n settings.options = this.objectMergerService.mergeStorageOptions(settings.options)\n const foundStore = state?.settings.some(item => item.name === store.name)\n\n const expires = (settings.options?.expiresIn) ? this.utils.expires(settings.options?.expiresIn) : 0\n if(settings.options) settings.options.expires = expires\n\n store.name = this.validStoreName(store.name)\n\n if(foundStore) {\n return state\n } else {\n if(!this.isObjectOrArray(store.data)) {\n console.warn('Data must ba an Object or Array')\n return\n }\n\n store.data = (this.isString(store.data)) ? JSON.parse(store.data) : store.data\n const dataStr = (store.options.encrypted) ? this.encryption.encrypt(store.data, this.app.appID) : store.data\n\n const localData = (settings.options?.storage === StorageType.GLOBAL) ? [{ data: dataStr, id: settings.id }] : []\n const sessionData = (settings.options?.storage === StorageType.SESSION) ? [{ data: dataStr, id: settings.id }] : []\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n settings: [...state.settings, ...[settings]],\n }\n\n }\n\n })\n\n readonly updateStore = this.updater((state: State, store: { name: string, data: any }): any => {\n\n store.name = this.validStoreName(store.name)\n\n const settings = state.settings.find(item => item.name === store.name)\n\n if(settings) {\n\n const type = settings.options?.storage\n const hasStore = this.hasGlobalStorage(type, settings.id || '')\n\n if(!hasStore) {\n console.warn(`No such Store: ${store.name}`)\n } else {\n\n const dataStr = (settings.options?.encrypted) ? this.encryption.encrypt(store.data, this.app.appID) : store.data\n\n const localData = (dataStr && settings.options?.storage === StorageType.GLOBAL) ? [{ data: dataStr, id: settings.id }] : []\n const sessionData = (dataStr && settings.options?.storage === StorageType.SESSION) ? [{ data: dataStr, id: settings.id }] : []\n\n state.localStores = state.localStores.filter(item => item.id !== settings.id)\n state.sessionStores = state.sessionStores.filter(item => item.id !== settings.id)\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n }\n\n }\n }\n\n return state\n\n })\n\n readonly deleteStore = this.updater((state: State, store: { name: string }): any => {\n\n store.name = this.validStoreName(store.name)\n\n const id = state.settings.find(item => item.name === store.name)?.id\n\n if(id) {\n\n const settings = state.settings.filter(item => item.id !== id)\n const localData = state.localStores.filter(item => item.id !== id)\n const sessionData = state.sessionStores.filter(item => item.id !== id)\n\n return {\n ...state,\n localStores: [...localData],\n sessionStores: [...sessionData],\n settings: [...settings],\n }\n\n } else {\n console.warn(`No such Store: ${store.name}`)\n return state\n }\n\n })\n\n resetStore() {\n\n const newState = {\n localStores: [],\n sessionStores: [],\n settings: [],\n }\n\n this.updateState(newState)\n this.persistState(newState)\n\n }\n\n private persistState(state: State|null) {\n\n if(!state) return\n\n const strLocal = JSON.stringify(state.localStores)\n localStorage.setItem(this.storageName, strLocal)\n\n const strSession = JSON.stringify(state.sessionStores)\n sessionStorage.setItem(this.storageName, strSession)\n\n const settingsStr = this.encryption.encrypt(state.settings, this.app.appID)\n localStorage.setItem(this.storageSettingsName, settingsStr || '')\n\n }\n\n private expired(state: State|null) {\n\n if(!state) return []\n return state.settings?.filter(item => (item.options?.expires || 0) > 0 && this.utils.hasExpired(item.options?.expires || 0))\n\n }\n\n retrieveState() {\n\n const str = localStorage.getItem(this.storageSettingsName)\n\n const localStr = localStorage.getItem(this.storageName)\n const sessionStr = sessionStorage.getItem(this.storageName)\n\n const localData: StorageData[] = (localStr) ? JSON.parse(localStr) : null\n const sessionData: StorageData[] = (sessionStr) ? JSON.parse(sessionStr) : null\n\n const decryptedStr = str ? this.encryption.decrypt(str, this.app.appID) : null\n const settings: StorageOption[] = (decryptedStr && decryptedStr !== null) ? JSON.parse(decryptedStr) : []\n\n settings.forEach(store => {\n\n const expired = (store.options?.expires || 0) > 0 && this.utils.hasExpired(store.options?.expires || 0)\n\n if(!expired) {\n\n const hasStorage = this.hasGlobalStorage(store.options?.storage, store.id || '')\n\n if(!hasStorage) {\n this.createStore({ id: store.id, name: store.name, data: [], options: SettingOptions.adapt(store.options)})\n } else {\n const storeData = (store.options?.storage === StorageType.GLOBAL) ? localData.find(item => item.id === store.id) : sessionData.find(item => item.id === store.id)\n this.setStore({ id: store.id || '', name: store.name, data: storeData?.data, options: SettingOptions.adapt(store.options) })\n }\n\n }\n\n })\n\n this.stateRetrieved = true\n\n }\n\n private isObjectOrArray = (obj: any) => {\n\n let parsed;\n\n try {\n parsed = (typeof obj === 'object') ? obj : JSON.parse(obj)\n } catch (e) {\n return false;\n }\n\n if (Array.isArray(parsed)) {\n const allStringsOrObjectsOrNumbers = parsed.every(item =>\n typeof item === 'string' ||\n typeof item === 'object' && item !== null ||\n typeof item === 'number'\n );\n return allStringsOrObjectsOrNumbers;\n }\n\n return typeof parsed === 'object' && parsed !== null;\n\n }\n\n private isString (obj: any) {\n return (Object.prototype.toString.call(obj) === '[object String]')\n }\n\n private fixAndParseJSON(jsonString: string): any {\n const fixedString = jsonString\n .replace(/'/g, '\"')\n .replace(/([{,]\\s*)(\\w+)\\s*:/g, '$1\"$2\":')\n .replace(/,\\s*(\\}|\\])/g, '$1');\n\n try {\n return JSON.parse(fixedString);\n } catch (error: any) {\n throw new Error('Failed to parse JSON: ' + error.message);\n }\n }\n\n private validStoreName(str: string) {\n return str\n .toLowerCase() // Convert to lowercase\n .replace(/\\s+/g, '_') // Replace spaces with underscores\n .replace(/[^ -~]/g, ''); // Remove non-ASCII characters\n }\n\n private hasGlobalStorage(type: StorageType = StorageType.GLOBAL, id: string) {\n\n const strData: StorageOption[] = []\n\n if(type === StorageType.GLOBAL) {\n const str = localStorage.getItem(this.storageName)\n strData.push(...(str ? JSON.parse(str) : []))\n } else {\n const str = sessionStorage.getItem(this.storageName)\n strData.push(...(str ? JSON.parse(str) : []))\n }\n\n const found = strData.find(store => store.id === id)\n return (found) ? true : false\n\n }\n\n override ngOnDestroy() {\n this.persistence$.unsubscribe()\n }\n\n}\n","import { Inject, Injectable, Optional, WritableSignal, signal, computed, effect, inject } from '@angular/core';\n\nimport { UtilsService } from '../utils/utils.service';\nimport { SymmetricalEncryptionService } from '../utils/encryption/symmetrical-encryption.service';\n\nimport { StorageOption, StorageType } from './models';\nimport { SettingOptions } from './models/setting-options.model';\nimport { StorageData } from './models/storage-data.model';\nimport { EncryptionTestService } from '../utils/encryption/encryption-test.service';\nimport { AppService } from '../utils/app.service';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigOptions } from '../request-manager-services';\nimport { ObjectMergerService } from '../utils/object-merger.service';\n\nexport interface State {\n localStores: StorageData[];\n sessionStores: StorageData[];\n settings: StorageOption[];\n}\n\nconst initialState: State = {\n localStores: [],\n sessionStores: [],\n settings: [],\n};\n\n@Injectable({ providedIn: 'root' })\nexport class LocalStorageSignalsManagerService {\n\n private state: WritableSignal<State> = signal(initialState);\n\n storageName = 'storage';\n storageSettingsName = 'global-storage';\n defaultOptions = SettingOptions.adapt();\n\n stateRetrieved = false;\n encrypted = false;\n\n app = inject(AppService);\n utils = inject(UtilsService);\n objectMergerService = inject(ObjectMergerService);\n encryption = inject(SymmetricalEncryptionService);\n encryptionTest = inject(EncryptionTestService);\n\n // --- SELECTORS ---\n\n readonly stores = computed(() => this.state().settings);\n\n readonly storeExists = (store: string) =>\n computed(() => !!this.state().settings.find(item => item.name === store));\n\n readonly store = (store: string) =>\n computed(() => {\n const data = this.state();\n const foundStore = data.settings.find(item => item.name === store);\n if (!foundStore) return null;\n\n const options = SettingOptions.adapt(foundStore.options);\n const found =\n options.storage === StorageType.GLOBAL\n ? data.localStores.find(item => item.id === foundStore.id)\n : data.sessionStores.find(item => item.id === foundStore.id);\n\n if (!found) {\n this.deleteStore({ name: store });\n return null;\n }\n\n if (!this.app?.appID) {\n console.warn('No App ID found - AppId not Provided');\n return null;\n }\n\n const storageData = options.encrypted\n ? this.encryption.decrypt(found.data, this.app.appID)\n : found.data;\n\n return this.isString(storageData) ? JSON.parse(storageData) : storageData;\n });\n\n readonly settings = computed(() => this.state().settings);\n\n readonly setting = (store: string) =>\n computed(() => this.state().settings.find(item => item.name === store) ?? null);\n\n constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {\n this.storageName = configOptions?.LocalStorageOptions?.storageName || this.storageName;\n this.storageSettingsName = configOptions?.LocalStorageOptions?.storageSettingsName || this.storageSettingsName;\n this.defaultOptions = configOptions?.LocalStorageOptions?.options || this.defaultOptions;\n\n this.retrieveState();\n // Auto-persist when state changes\n effect(() => {\n if (this.stateRetrieved) {\n this.persistState(this.state());\n }\n });\n\n // Expiration timer every 3s\n setInterval(() => {\n const state = this.state();\n const expired = this.expired(state);\n if (expired.length > 0) {\n const ids = expired.map(i => i.id);\n const updated: State = {\n ...state,\n localStores: state.localStores.filter(i => !ids.includes(i.id)),\n sessionStores: state.sessionStores.filter(i => !ids.includes(i.id)),\n settings: state.settings.filter(i => !ids.includes(i.id)),\n };\n this.state.set(updated);\n this.persistState(updated);\n }\n }, 3000);\n }\n\n // --- STATE MUTATORS ---\n\n setStore(store: { id: string; name: string; data: any; options: SettingOptions }) {\n this.state.update(state => {\n const settings = StorageOption.adapt(store);\n settings.options = this.objectMergerService.mergeStorageOptions(settings.options);\n store.name = this.validStoreName(store.name);\n\n const str = this.encryptionTest.isEncrypted(store.data) ? store.data : JSON.stringify(store.data);\n const dataStr =\n this.isObjectOrArray(str) && store.options.encrypted\n ? this.encryption.encrypt(str, this.app.appID)\n : store.data;\n\n const localData =\n dataStr && settings.options?.storage === StorageType.GLOBAL\n ? [{ data: dataStr, id: settings.id }]\n : [];\n const sessionData =\n dataStr && settings.options?.storage === StorageType.SESSION\n ? [{ data: dataStr, id: settings.id }]\n : [];\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n settings: [...state.settings, settings],\n };\n });\n }\n\n createStore(store: { id?: string; name: string; data: any; options: SettingOptions }) {\n this.state.update(state => {\n const settings = StorageOption.adapt(store);\n settings.options = this.objectMergerService.mergeStorageOptions(settings.options);\n\n if (state.settings.some(item => item.name === store.name)) {\n return state;\n }\n\n if (!this.isObjectOrArray(store.data)) {\n console.warn('Data must be an Object or Array');\n return state;\n }\n\n const dataStr =\n store.options.encrypted ? this.encryption.encrypt(store.data, this.app.appID) : store.data;\n\n const localData =\n settings.options?.storage === StorageType.GLOBAL ? [{ data: dataStr, id: settings.id }] : [];\n const sessionData =\n settings.options?.storage === StorageType.SESSION ? [{ data: dataStr, id: settings.id }] : [];\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n settings: [...state.settings, settings],\n };\n });\n }\n\n updateStore(store: { name: string; data: any }) {\n this.state.update(state => {\n const settings = state.settings.find(item => item.name === store.name);\n if (!settings) return state;\n\n const dataStr =\n settings.options?.encrypted\n ? this.encryption.encrypt(store.data, this.app.appID)\n : store.data;\n\n const localData =\n settings.options?.storage === StorageType.GLOBAL ? [{ data: dataStr, id: settings.id }] : [];\n const sessionData =\n settings.options?.storage === StorageType.SESSION ? [{ data: dataStr, id: settings.id }] : [];\n\n return {\n ...state,\n localStores: [...state.localStores.filter(i => i.id !== settings.id), ...localData],\n sessionStores: [...state.sessionStores.filter(i => i.id !== settings.id), ...sessionData],\n };\n });\n }\n\n deleteStore(store: { name: string }) {\n this.state.update(state => {\n const id = state.settings.find(item => item.name === store.name)?.id;\n if (!id) return state;\n return {\n ...state,\n localStores: state.localStores.filter(i => i.id !== id),\n sessionStores: state.sessionStores.filter(i => i.id !== id),\n settings: state.settings.filter(i => i.id !== id),\n };\n });\n }\n\n resetStore() {\n const cleared: State = { localStores: [], sessionStores: [], settings: [] };\n this.state.set(cleared);\n this.persistState(cleared);\n }\n\n // --- HELPERS ---\n\n private persistState(state: State) {\n localStorage.setItem(this.storageName, JSON.stringify(state.localStores));\n sessionStorage.setItem(this.storageName, JSON.stringify(state.sessionStores));\n const settingsStr = this.encryption.encrypt(state.settings, this.app.appID);\n localStorage.setItem(this.storageSettingsName, settingsStr || '');\n }\n\n private expired(state: State) {\n return state.settings.filter(\n s => (s.options?.expires || 0) > 0 && this.utils.hasExpired(s.options?.expires!)\n );\n }\n\n retrieveState() {\n\n const str = localStorage.getItem(this.storageSettingsName);\n\n const localStr = localStorage.getItem(this.storageName);\n const sessionStr = sessionStorage.getItem(this.storageName);\n\n const localData: StorageData[] = localStr ? JSON.parse(localStr) : [];\n const sessionData: StorageData[] = sessionStr ? JSON.parse(sessionStr) : [];\n\n const decryptedStr = str ? this.encryption.decrypt(str, this.app.appID) : null;\n const settings: StorageOption[] = decryptedStr ? JSON.parse(decryptedStr) : [];\n\n settings.forEach(store => {\n\n\n // normalize options so we compare numbers and compute expires correctly\n const options = SettingOptions.adapt(store.options);\n\n // if persisted data included expiresIn but not numeric expires, compute it now\n if ((!options.expires || options.expires === 0) && options.expiresIn) {\n try {\n const computed = this.utils.expires(options.expiresIn as string);\n options.expires = computed || 0;\n } catch {\n options.expires = 0;\n }\n }\n\n const expired = (options.expires || 0) > 0 && this.utils.hasExpired(options.expires || 0);\n\n if (!expired) {\n\n const hasStorage = this.hasGlobalStorage(options.storage, store.id || '');\n\n if (!hasStorage) {\n this.createStore({ id: store.id, name: store.name, data: [], options });\n } else {\n const storeData = (options.storage === StorageType.GLOBAL)\n ? localData.find(item => item.id === store.id)\n : sessionData.find(item => item.id === store.id);\n this.setStore({ id: store.id || '', name: store.name, data: storeData?.data, options });\n }\n\n }\n\n });\n\n this.stateRetrieved = true;\n\n // Ensure all stored settings have numeric expires computed and persisted\n try {\n const current = this.state();\n let changed = false;\n const normalizedSettings = current.settings.map(s => {\n const opts = SettingOptions.adapt(s.options);\n if ((!opts.expires || opts.expires === 0) && opts.expiresIn) {\n const computed = this.utils.expires(opts.expiresIn as string) || 0;\n if (computed && computed !== opts.expires) {\n opts.expires = computed;\n changed = true;\n }\n }\n return { ...s, options: opts } as StorageOption;\n });\n\n if (changed) {\n const updated: State = { ...current, settings: normalizedSettings };\n this.state.set(updated);\n this.persistState(updated);\n }\n } catch (e) {\n // swallow normalization errors to avoid breaking init\n }\n\n }\n\n private hasGlobalStorage(type: StorageType = StorageType.GLOBAL, id: string) {\n const strData: StorageData[] = [];\n\n if (type === StorageType.GLOBAL) {\n const str = localStorage.getItem(this.storageName);\n strData.push(...(str ? JSON.parse(str) : []));\n } else {\n const str = sessionStorage.getItem(this.storageName);\n strData.push(...(str ? JSON.parse(str) : []));\n }\n\n const found = strData.find(store => store.id === id);\n return !!found;\n }\n\n private isObjectOrArray(obj: any) {\n try {\n const parsed = typeof obj === 'object' ? obj : JSON.parse(obj);\n return typeof parsed === 'object' && parsed !== null;\n } catch {\n return false;\n }\n }\n\n private isString(obj: any) {\n return Object.prototype.toString.call(obj) === '[object String]';\n }\n\n private validStoreName(str: string) {\n return str.toLowerCase().replace(/\\s+/g, '_').replace(/[^ -~]/g, '');\n }\n}\n","import { inject, Inject, Injectable, InjectionToken } from '@angular/core';\nimport { ComponentStore } from '@ngrx/component-store';\n\nimport { BehaviorSubject, of } from 'rxjs';\nimport { tap, switchMap, concatMap, scan, delay } from 'rxjs/operators';\nimport { DatabaseStorage } from '../../models/database-storage.model';\nimport { HTTPManagerService, DataType } from '../request-manager-services';\nimport { ApiRequest, RequestOptions } from './models';\n\n\nconst API_OPTS = new InjectionToken<ApiRequest>('API_OPTS');\n\nexport interface APIStateManagerData<T> {\n data: T[]\n dataObject: T | null\n}\n\nconst defaultState: APIStateManagerData<any> = {\n data: [],\n dataObject: null,\n};\n\n@Injectable()\nexport class HTTPManagerStateService<T extends { id: number }> extends ComponentStore<APIStateManagerData<T>> {\n\n httpManagerService = inject(HTTPManagerService)\n\n error$ = this.httpManagerService.error$\n isPending$ = this.httpManagerService.isPending$.pipe(delay(1))\n\n // PAGINATION\n private page = new BehaviorSubject<number>(0)\n page$ = this.page.asObservable()\n\n private totalPages = new BehaviorSubject<number>(0)\n totalPages$ = this.totalPages.asObservable()\n\n private percentage = new BehaviorSubject<number>(0)\n percentage$ = this.percentage.asObservable()\n // ----------\n\n private hasDatabase = false\n\n streamedResponse = []\n\n constructor(\n @Inject(API_OPTS) private apiOptions = ApiRequest.adapt(),\n @Inject(\"dataType\") private dataType: DataType | undefined,\n @Inject(\"database\") private database?: DatabaseStorage | undefined\n ) {\n super(defaultState);\n this.setApiRequestOptions(apiOptions, dataType, database)\n }\n\n setApiRequestOptions(apiOptions?: ApiRequest, dataType?: DataType, database?: DatabaseStorage) {\n\n this.apiOptions = ApiRequest.adapt(apiOptions)\n this.dataType = (dataType) ? dataType : DataType.ARRAY\n\n this.hasDatabase = this.database?.table === \"\" ? false : true\n this.database = (this.hasDatabase) ? DatabaseStorage.adapt(database) : undefined\n\n }\n\n get ApiRequestOptions() {\n return this.apiOptions\n }\n\n initStorage() {\n // if(this.otherOptions.database) {\n // console.log('Has Database Option:', this.otherOptions.database.table)\n // const schema = (this.otherOptions.adapters?.incoming) ? Object.keys(this.otherOptions.adapters.incoming({})).join() : '++id'\n // this.apiService.initDB(this.otherOptions.database.expiresIn, this.otherOptions.database.table, schema)\n // }\n }\n\n initializeState(data: any) {\n this.setData$(data)\n }\n\n // --------------------------------------------------------------------------------------------------\n // SELECTORS\n\n readonly data$ = this.select(({ data, dataObject }) => {\n const isArray =( this.dataType === DataType.ARRAY) ? true : false\n return (isArray) ? data : dataObject\n })\n\n readonly selectRecord$ = (id: number) => this.select(\n this.data$,\n (data) => {\n if (this.dataType === DataType.ARRAY && Array.isArray(data)) {\n return data.find(item => item.id === id) as T | null\n } else {\n return (data as T).id === id ? data : null\n }\n }\n );\n\n // --------------------------------------------------------------------------------------------------\n\n // UPDATERS\n\n private readonly setData$ = this.updater((state: APIStateManagerData<T>, data: T | T[] | any) => {\n\n if (!data) return state;\n\n if (this.dataType === DataType.ARRAY) {\n\n const dataArray = Array.isArray(data) ? data : [data]\n\n const stateDataSample = (state.data.length > 0) ? Object.keys(state.data[0]) : []\n const newDataSample = (dataArray.length > 0) ? Object.keys(dataArray[0]) : []\n\n const isSame = (state.data.length === 0) ? false : stateDataSample.every((value, index) => value === newDataSample[index])\n const updatedData = (!isSame && dataArray.length !== 0) ? this.updateArrayState([], dataArray) : this.updateArrayState(state.data, dataArray)\n\n return { ...state, data: updatedData, dataObject: null } as APIStateManagerData<T>;\n\n } else {\n const dataObject = this.isEmpty(data) ? null : data;\n return { ...state, data: [], dataObject: dataObject } as APIStateManagerData<T>;\n }\n\n });\n\n private updateArrayState(currentData: any[], newData: any[]): any[] {\n\n const filterCurrentData = () => {\n const ids = this.streamedResponse.map((obj: any) => obj.id)\n return currentData.filter(obj => (obj.id) ? ids.includes(obj.id) : obj)\n }\n\n const filteredCurrentData = (this.httpManagerService.isPending.value) ? currentData : filterCurrentData()\n\n const updatedData = filteredCurrentData.map(item => {\n const newItem = newData.find(newItem => {\n const hasId = (newItem?.id && item?.id) ? true : false\n return (hasId) ? newItem.id === item.id : JSON.stringify(newItem) === JSON.stringify(item)\n })\n return (newItem) ? { ...item, ...newItem } : item\n })\n\n const addedData = newData.filter(newItem => {\n return !filteredCurrentData.some(item => {\n const hasId = (newItem?.id && item?.id) ? true : false\n return (hasId) ? item.id === newItem.id : JSON.stringify(newItem) === JSON.stringify(item)\n })\n })\n\n return [...updatedData, ...addedData]\n\n}\n\n private readonly addData$ = this.updater((state: APIStateManagerData<T>, data: T) => {\n\n if (this.dataType === DataType.ARRAY) {\n const newState = [...state.data, data];\n return { ...state, ...{ data: newState } }\n } else {\n return { ...state, ...{ dataObject: data } }\n }\n\n })\n\n private readonly deleteData$ = this.updater((state: APIStateManagerData<T>, data: T & { id: number }) => {\n if (this.dataType === DataType.ARRAY) {\n const newState = state.data.filter(item => item.id !== data.id)\n return { ...state, ...{ data: newState } }\n } else {\n return { ...state, ...{ dataObject: null } }\n }\n })\n\n private readonly updateData$ = this.updater((state: APIStateManagerData<T>, data: T) => {\n\n if (this.dataType === DataType.ARRAY) {\n\n const objIndex = state.data.findIndex(item => item.id === data.id)\n\n if (objIndex > -1) {\n const newState = [...state.data]\n newState[objIndex] = data\n return { ...state, ...{ data: newState } }\n }\n\n return state\n\n } else {\n return { ...state, ...{ dataObject: data } }\n }\n\n })\n\n // --------------------------------------------------------------------------------------------------\n // EFFECTS\n\n readonly clearRecords = this.effect(data =>\n data.pipe(\n tap(() => {\n if (this.dataType === DataType.ARRAY) {\n this.setData$([])\n } else {\n this.setData$({})\n }\n })\n ))\n\n readonly refreshData = this.effect(data =>\n data.pipe(\n tap(() => {\n // this.apiService.flushDatabase(this.otherOptions.database?.table)\n this.fetchRecords()\n })\n ))\n\n // --------------------------------------------------------------------------------------------------\n // CRUD OPERATIONS\n\n // FETCH RECORDS\n readonly fetchRecords = (options?: RequestOptions) =>\n this.effect<any>(() =>\n of(RequestOptions.adapt(options)).pipe(\n switchMap(() => {\n\n this.streamedResponse = []\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.getRequest(requestOptions, options?.path)\n .pipe(\n tap((data: any) => {\n data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data\n this.setData$(data)\n })\n )\n\n })\n )\n )\n\n // 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 }),\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 }),\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 }),\n )\n\n })\n )\n )\n\n // --------------------------------------------------------------------------------------------------\n // FETCH STREAM\n\n readonly createStream = (data: any|null, options?: RequestOptions) =>\n this.effect<any>(() =>\n of(data).pipe(\n tap(() => this.httpManagerService.isPending.next(true)),\n switchMap((data: any) => {\n\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.postRequest(data, requestOptions, options?.path)\n .pipe(\n tap((res: any) => {\n if(res.length > 0) this.setData$(res)\n this.streamedResponse = res\n }),\n scan((acc, res: any) => {\n\n const previous = acc.current\n const current = res\n return { previous, current };\n\n }, { previous: null, current: null }),\n tap(({ previous, current }) => {\n\n if(previous && JSON.stringify(previous) === JSON.stringify(current)) {\n this.httpManagerService.isPending.next(false)\n this.setData$([])\n } else {\n this.httpManagerService.isPending.next(true)\n }\n\n })\n )\n\n })\n )\n\n )\n\n readonly fetchStream = (options?: RequestOptions) =>\n this.effect<any>(() =>\n of(options).pipe(\n tap(() => this.httpManagerService.isPending.next(true)),\n switchMap((options: any) => {\n\n const requestOptions = this.updateRequestOptions(options?.headers)\n requestOptions.stream = true\n\n return this.httpManagerService.getRequest(requestOptions, options?.path)\n .pipe(\n tap((res: any) => {\n\n if(res.length > 0) this.setData$(res)\n this.streamedResponse = res\n }),\n scan((acc, res: any) => {\n\n const previous = acc.current\n const current = res\n return { previous, current }\n\n }, { previous: null, current: null }),\n tap(({ previous, current }) => {\n\n if(previous && JSON.stringify(previous) === JSON.stringify(current)) {\n this.httpManagerService.isPending.next(false)\n this.setData$([])\n } else {\n this.httpManagerService.isPending.next(true)\n }\n\n })\n )\n\n }),\n )\n )\n\n // --------------------------------------------------------------------------------------------------\n // MISC\n\n private isEmpty(obj: any) {\n return Object.keys(obj).length === 0\n }\n\n private updateRequestOptions(headers?: any): ApiRequest {\n\n const options = ApiRequest.adapt({ ...this.apiOptions })\n\n options.headers = (headers)\n ? { ...options.headers, ...headers }\n : { ...options.headers }\n\n return options\n }\n\n}\n","\n// export * from \"./database-manager-services/index\";\nexport * from \"./local-storage-manager-service/index\";\n\nexport * from \"./request-manager-services/index\";\nexport * from \"./request-manager-state-service/index\";\n\nexport * from \"./utils/index\";\n","export interface ErrorDisplaySettingsInterface {\n displayTime: number\n position: string\n}\n\nexport class ErrorDisplaySettings implements ErrorDisplaySettingsInterface {\n\n constructor(\n public displayTime = 3 * 1000,\n public position = 'top'\n ) {}\n\n static adapt(item?: any): ErrorDisplaySettings {\n\n return new ErrorDisplaySettings(\n (item?.displayTime) ? item.displayTime * 1000 : 3 * 1000,\n item?.position,\n )\n\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class WithCredentialsInterceptor implements HttpInterceptor {\n\n intercept(req: HttpRequest<any>, next: HttpHandler):\n Observable<HttpEvent<any>> {\n\n req = req.clone({ withCredentials: true })\n\n return next.handle(req);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';\nimport { Observable, Subscription } from 'rxjs';\nimport { LangChangeEvent, TranslateService } from '@ngx-translate/core';\n\n@Injectable()\nexport class RequestHeadersInterceptor implements HttpInterceptor {\n\n subscriptions = new Subscription()\n language = 'en-CA'\n\n get currentDate() {\n\n const date = new Date()\n\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const day = String(date.getDate()).padStart(2, '0')\n\n return `${year}-${month}-${day}`\n\n }\n\n constructor(\n private translate: TranslateService\n ) {\n this.subscriptions.add(\n this.translate.onLangChange\n .subscribe((params: LangChangeEvent) => {\n this.language = `${params.lang}-CA`\n })\n )\n }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n request = request.clone({\n setHeaders: {\n 'Content-Type': 'application/json',\n 'Accept-Language': this.language || 'en-CA',\n 'Current-Date': this.currentDate\n }\n })\n\n return next.handle(request)\n\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe()\n }\n}\n\n","import { inject, Injectable } from '@angular/core'\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpErrorResponse } from '@angular/common/http'\nimport { Observable, catchError, throwError } from 'rxjs'\n\nimport { ToastMessageDisplayService, ToastDisplay, ToastColors } from 'toast-message-display'\n\n@Injectable()\nexport class RequestErrorInterceptor implements HttpInterceptor {\n\n toastMessage = inject(ToastMessageDisplayService)\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n return next.handle(req).pipe(\n\n catchError((error: HttpErrorResponse) => {\n\n const displayError = ToastDisplay.adapt({\n message: 'This is a toast message. This is an Error!!',\n action: 'OK',\n color: ToastColors.SUCCESS,\n icon: 'info',\n duration: 5 * 1000, //5 seconds\n })\n\n if (error.status >= 400 && error.status < 500) {\n\n displayError.color = ToastColors.WARN\n displayError.message = error.error || `${error.status}: ${error.statusText}`\n\n console.error('Client Error:', {\n status: error.status,\n message: error.message,\n error: error.error,\n text: error.statusText,\n })\n\n this.toastMessage.toastMessage(displayError)\n\n } else if (error.status >= 500) {\n\n displayError.color = ToastColors.ERROR\n displayError.message = error.error || `${error.status}: ${error.statusText}`\n\n console.error('Server Error:', {\n status: error.status,\n message: error.message,\n error: error.error,\n text: error.statusText,\n })\n\n this.toastMessage.toastMessage(displayError)\n\n }\n\n return throwError(() => error)\n\n })\n\n )\n }\n\n}\n\n\n","export interface ClientInfoInterface {\n domain: string\n service: string\n id: number\n name: string\n}\n\nexport class ClientInfo implements ClientInfoInterface {\n\n constructor(\n public domain = '',\n public service = '',\n public id = 0,\n public name = '',\n ) {}\n\n static adapt(item?: any): ClientInfo {\n\n return new ClientInfo(\n item?.domain,\n item?.service,\n item?.id,\n (item?.first_name || item?.last_name) ? `${item?.first_name} ${item?.last_name}` : '',\n )\n\n }\n\n}\n\n\n","export interface ClientInfoMapperInterface {\n id: number\n first_name: string\n last_name: string\n email: string\n}\n\nexport class ClientInfoMapper implements ClientInfoMapperInterface {\n\n constructor(\n public id = 0,\n public first_name = '',\n public last_name = '',\n public email = '',\n ) {}\n\n static adapt(item?: any): ClientInfoMapper {\n\n const first_name = (item?.name) ? item.name.split(' ')[0] : ''\n const last_name = (item?.name) ? item.name.split(' ')[1] : ''\n\n return new ClientInfoMapper(\n item?.id,\n first_name,\n last_name,\n item?.email,\n )\n\n }\n\n}\n\n\n","export interface AIPromptInterface {\n response: string\n}\n\nexport class AIPrompt implements AIPromptInterface {\n\n constructor(\n public response = '',\n ) {}\n\n static adapt(item?: any): AIPrompt {\n\n return new AIPrompt(\n item?.response,\n )\n\n }\n\n}\n","export interface DownloadLabelsInterface {\n error: string;\n action: string;\n icon: string;\n}\n\nexport class DownloadLabels implements DownloadLabelsInterface {\n constructor(\n public error = '',\n public action = '',\n public icon = 'error',\n ) {}\n\n static adapt(item?: any): DownloadLabelsInterface {\n return new DownloadLabels(\n item?.error,\n item?.action,\n item?.icon,\n )\n\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { ProgressSpinnerMode } from '@angular/material/progress-spinner';\nimport { Subscription, timer } from 'rxjs';\n\n@Component({\n selector: 'app-download-file',\n templateUrl: './download-file.component.html',\n styleUrls: ['./download-file.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class DownloadFileComponent implements OnInit {\n\n private subscriptions = new Subscription();\n\n @Input() event?: Function;\n @Input() displayError = 3; // seconds\n @Input() diameter = 32;\n @Input() mode: ProgressSpinnerMode = 'determinate';\n @Input() isPending = false;\n\n @Input() active = false;\n @Input() disabled = false;\n\n @Output() error = new EventEmitter<void>();\n\n private _progress = 0;\n @Input() set progress(value: any) {\n this._progress = value ?? 0;\n }\n\n get progress() {\n return this._progress;\n }\n\n private _hasError = false;\n private errorTimerActive = false;\n\n @Input() set hasError(value: boolean | any) {\n\n this._hasError = !!value;\n\n if (this._hasError && !this.errorTimerActive) {\n this.errorTimerActive = true;\n this.active = false;\n this.error.emit()\n this.subscriptions.add(\n timer(this.displayError * 1000)\n .subscribe((err) => {\n this._hasError = false;\n this.errorTimerActive = false;\n })\n );\n }\n\n }\n\n get hasError() {\n return this._hasError;\n }\n\n ngOnInit() {}\n\n onAction() {\n this.isPending = false\n if (this.event) this.event()\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe()\n }\n}\n","<ng-container *ngIf=\"!isPending; else DOWNLOADING\">\n <ng-container *ngIf=\"hasError; else NORMAL\">\n <div class=\"width center-txt\" style=\"margin-bottom: 4px;\">\n <mat-icon color=\"warn\" class=\"warn-icon\">warning</mat-icon>\n </div>\n </ng-container>\n <ng-template #NORMAL>\n <ng-container *ngIf=\"active; else ACTION\">\n\n <div class=\"container-obj\">\n <div class=\"centered-obj-div\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"44\"\n ></mat-progress-spinner>\n </div>\n </div>\n\n </ng-container>\n <ng-template #ACTION>\n <button data-tracking=\"export-btn\" mat-icon-button (click)=\"onAction()\" class=\"icon-button\" [disabled]=\"disabled\">\n <mat-icon class=\"custom-icon\">file_download</mat-icon>\n </button>\n </ng-template>\n </ng-template>\n</ng-container>\n\n<ng-template #DOWNLOADING>\n <div\n class=\"spinner-container\"\n *ngIf=\"(progress > 0 && progress < 100); else INDETERMINATE\"\n >\n <div class=\"spinner-background\">\n {{progress}}%\n </div>\n <mat-progress-spinner\n color=\"primary\"\n [mode]=\"mode\"\n [value]=\"progress\"\n [diameter]=\"44\"\n ></mat-progress-spinner>\n </div>\n <ng-template #INDETERMINATE>\n <div class=\"container-obj\">\n <div class=\"centered-obj-div\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"44\"\n ></mat-progress-spinner>\n </div>\n </div>\n </ng-template>\n\n</ng-template>\n\n\n\n","import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { catchError, distinctUntilChanged, finalize } from 'rxjs/operators';\n\nimport { ToastColors, ToastDisplay } from 'toast-message-display';\n\nimport { DownloadLabels } from './models/download-labels-model';\nimport { HTTPManagerService } from '../../../services/request-manager-services';\nimport { ApiRequest } from '../../../services';\nimport { Subscription, throwError } from 'rxjs';\n\n@Component({\n selector: 'app-file-downloader',\n templateUrl: './file-downloader.component.html',\n styleUrls: ['./file-downloader.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class FileDownloaderComponent extends HTTPManagerService<any> implements OnInit {\n\n @Input() delayError = 3\n @Input() apiRequest: ApiRequest = ApiRequest.adapt()\n @Input() displayErrorMessage = false\n\n @Input() saveFileAs?: string\n\n _labels = DownloadLabels.adapt()\n @Input() set labels(value: DownloadLabels) {\n this._labels = (value) ? DownloadLabels.adapt(value) : DownloadLabels.adapt()\n }\n\n active = false\n\n subscription = new Subscription()\n\n get labels() {\n return this._labels\n }\n\n @Output() completed = new EventEmitter<void>()\n @Output() failed = new EventEmitter<string>()\n\n @Input() disabled = false\n\n constructor() {\n super()\n }\n\n ngOnInit() {\n\n }\n\n onDownloadStreaming() {\n\n if (this.active) return;\n this.active = true;\n\n return this.downloadRequest(this.apiRequest, [])\n .pipe(\n distinctUntilChanged(),\n catchError((err) => {\n\n this.onError(err.message)\n this.active = false\n this.failed.emit(err)\n\n return throwError(() => err)\n\n }),\n finalize(() => {\n if (!this.active) return\n this.active = false\n this.completed.emit()\n })\n )\n .subscribe()\n }\n\n\n onError(message: string) {\n\n if(!message || !this.displayErrorMessage) return\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.ERROR,\n icon: 'error',\n });\n\n this.active = false\n\n this.toastMessage.toastMessage(display);\n\n }\n\n OnDestroy() {\n this.subscription.unsubscribe()\n }\n\n}\n","<app-download-file\n [disabled]=\"disabled\"\n [displayError]=\"3\"\n [event]=\"onDownloadStreaming.bind(this)\"\n [isPending]=\"(isPending$ | async) || false\"\n [progress]=\"(progress$ | async)\"\n [hasError]=\"(error$ | async)\"\n (error)=\"onError(labels.error)\"\n [active]=\"active\"\n></app-download-file>\n","import { Component, OnInit, ViewChild, inject } from '@angular/core'\n\nimport { BehaviorSubject, EMPTY, Observable, throwError } from 'rxjs'\nimport { FormArray, FormBuilder, Validators } from '@angular/forms'\n\nimport { ClientInfo } from './models/sample-client-info'\nimport { ClientInfoMapper } from './models/sample-mapper-client-info'\nimport { AIPrompt } from './models/sample-ai-prompt'\nimport { ApiRequest, HTTPManagerService } from '../..'\nimport { catchError, map, tap } from 'rxjs/operators'\n\nimport { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display'\n\n@Component({\n selector: 'app-request-manager-demo',\n templateUrl: './request-manager-demo.component.html',\n styleUrls: ['./request-manager-demo.component.scss'],\n})\nexport class RequestManagerDemoComponent implements OnInit {\n\n displayedColumns = ['id','name', 'lastName', 'age']\n\n private fb = inject(FormBuilder)\n private toastMessage = inject(ToastMessageDisplayService)\n\n httpManagerService = inject(HTTPManagerService)\n\n isPending$ = this.httpManagerService.isPending$\n countdown$ = this.httpManagerService.countdown$\n\n GET_error$ = new BehaviorSubject<string>('')\n POST_error$ = new BehaviorSubject<string>('')\n PUT_error$ = new BehaviorSubject<string>('')\n DELETE_error$ = new BehaviorSubject<string>('')\n\n STREAM_error$ = new BehaviorSubject<string>('')\n STREAM_AI_error$ = new BehaviorSubject<string>('')\n\n GET$?: Observable<any>\n POST$?: Observable<any>\n PUT$?: Observable<any>\n DELETE$?: Observable<any>\n\n STREAM_AI$?: Observable<any>\n STREAM$?: Observable<any>\n\n requestParams = {\n GET: ApiRequest.adapt(),\n POST: ApiRequest.adapt(),\n PUT: ApiRequest.adapt(),\n DELETE: ApiRequest.adapt(),\n STREAM: ApiRequest.adapt(),\n }\n\n @ViewChild(\"failedState\", { static: true }) failedState: any\n @ViewChild(\"pollingState\", { static: true }) pollingState: any\n\n questionControl = this.fb.control(\"\", [Validators.required])\n\n downloadRequest = ApiRequest.adapt({\n server: 'assets/images',\n path: ['me.jpg'],\n // saveAs: 'john.jpg' // Optional\n })\n\n // downloadRequest = ApiRequest.adapt({\n // server: 'oidc/ai/file'\n // })\n\n sampleClientData = {\n id: 0,\n name: \"Old School Dates\",\n domain: \"osd.com\",\n service: \"osd\",\n spiffe: \"osd.com/osd\",\n secret: \"SMOPECXP-OS4P-USOG-X2II-3XMD1FQDR3IJX\",\n created: 1693003138,\n modified: 1693003138,\n icon: \"\",\n imageFile: \"\",\n email: \"wavecoders@gmail.com\"\n }\n\n requestForm = this.fb.group({\n path: this.fb.control<string>(\"ai/\"),\n headers: this.fb.array([]),\n adapter: [null],\n mapper: [null],\n retry: this.fb.group({\n times: [3],\n delay: [3],\n }),\n polling: [3],\n })\n\n AIType = 0\n\n sampleAdaptors = [\n { label: \"ClientInfo Basic\", value: ClientInfo.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n sampleMappers = [\n { label: \"Mapper Basic\", value: ClientInfoMapper.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n get retry() {\n return this.requestForm.get('retry')?.value\n }\n\n get headers(): FormArray {\n return this.requestForm.get('headers') as FormArray\n }\n\n get isValid() {\n this.requestForm.markAllAsTouched()\n return this.requestForm.valid\n }\n\n hasId = (arr: any[]) => {\n if (arr.length === 0) return false\n return !isNaN(arr[arr.length - 1])\n }\n\n props = (adapter: any) => {\n return (adapter) ? adapter() : null\n }\n\n // server = `http://sample-endpoint/as/authorization.oauth2`\n\n arrayObjectsToObjects = (arr: any[]) => {\n return Array.isArray(arr) ? arr.reduce((obj, item) => Object.assign(obj, { [item.key]: item.value }), {}) : {}\n }\n\n constructor() { }\n\n ngOnInit() {\n\n // const reqGet2 = ApiRequest.adapt({\n // server,\n // path: ['clients'],\n // headers: { authentication: \"Bearer <KEY>\" },\n // adapter: ClientInfo,\n // dataType: DataType.OBJECT,\n // // concurrent: false,\n // // polling: 3, //seconds\n // })\n\n // const req2 = [1024,1025,1026].map(item => {\n // return this.httpManagerService.getRequest<ClientInfo[]>(reqGet2, [item])\n // .pipe(\n // catchError(error => {\n // return throwError(() => new Error(error.error.message))\n // })\n // )\n // })\n\n // forkJoin(req2)\n // .subscribe(res => console.log(res))\n\n }\n\n addHeader() {\n const header = this.fb.group({\n key: ['', Validators.required],\n value: ['']\n })\n this.headers.push(header)\n }\n\n removeHeader(index: number) {\n this.headers.removeAt(index)\n }\n\n compileRequest() {\n\n const requestParams = this.requestForm.value\n\n requestParams.headers = this.arrayObjectsToObjects(\n requestParams.headers || []\n )\n\n const pathReq = (requestParams.path === \"\") ? [] : (requestParams.path || \"\").split(\"/\")\n\n if (!this.pollingState.checked) requestParams.polling = 0\n\n if (!this.failedState.checked) {\n requestParams.retry = { times: 0,delay: 0 }\n }\n\n const apiOptions = ApiRequest.adapt(requestParams)\n apiOptions.path = []\n\n return { apiOptions: apiOptions, path: pathReq }\n\n }\n\n onGetRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n this.requestParams.GET = reqParams.apiOptions\n\n this.GET$ = EMPTY //Cancels Previous\n this.GET_error$.next('')\n\n this.GET$ = this.httpManagerService.getRequest<ClientInfo[]>(reqParams.apiOptions, reqParams.path)\n .pipe(\n // tap((data) => console.log(\"API GET response\", data)),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'GET'))\n })\n )\n\n }\n\n onCreateRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n this.requestParams.POST = reqParams.apiOptions\n\n this.POST$ = EMPTY //Cancels Previous\n this.POST_error$.next('')\n\n console.log(\"POST\", this.sampleClientData)\n console.log(\"POST\", reqParams.apiOptions)\n console.log(\"POST\", reqParams.path)\n\n this.POST$ = this.httpManagerService.postRequest<ClientInfo>(this.sampleClientData, reqParams.apiOptions, reqParams.path)\n .pipe(\n // tap((data) => console.log(\"API POST response\", data)),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'POST'))\n })\n )\n\n }\n\n onUpdateRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n if(!this.hasId(reqParams.path)) {\n console.log(\"Missing ID\")\n return\n }\n\n this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length-1])\n this.requestParams.PUT = reqParams.apiOptions\n\n this.PUT$ = EMPTY //Cancels Previous\n this.PUT_error$.next('')\n\n this.PUT$ = this.httpManagerService.putRequest<any>(this.sampleClientData, reqParams.apiOptions, reqParams.path)\n .pipe(\n // tap((data) => console.log(\"API PUT response\", data)),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'PUT'))\n })\n )\n\n }\n\n onDeleteRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n this.requestParams.DELETE = reqParams.apiOptions\n\n if(!this.hasId(reqParams.path)) {\n console.log(\"Missing ID\")\n return\n }\n\n this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length-1])\n this.requestParams.DELETE = reqParams.apiOptions\n\n this.DELETE$ = EMPTY //Cancels Previous\n this.DELETE_error$.next('')\n\n this.DELETE$ = this.httpManagerService.deleteRequest<ClientInfo>(reqParams.apiOptions, reqParams.path)\n .pipe(\n // tap((data) => console.log(\"API DELETE response\", data)),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'DELETE'))\n })\n )\n\n }\n\n onStreamPostRequest() {\n\n if (!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n let payload = {}\n let apiPath: string[] = reqParams.path\n let apiOptions = reqParams.apiOptions\n let responseMapper: (items: any) => any = (items) => items.response\n\n if (this.AIType === 0) {\n\n // API request\n payload = { prompt: this.questionControl.value }\n\n } else {\n\n // Local Ollama request\n apiOptions.server = \"api\"\n apiPath = [\"generate\"]\n apiOptions.stream = true\n payload = {\n model: \"phi3:latest\",\n prompt: this.questionControl.value,\n stream: true,\n }\n\n responseMapper = (items) => items.map((word: any) => word.response).flat().join('')\n\n }\n\n this.requestParams.STREAM = apiOptions\n this.STREAM_AI$ = EMPTY\n this.STREAM_AI_error$.next('')\n\n this.STREAM_AI$ = this.httpManagerService.postRequest<any>(payload, apiOptions, apiPath).pipe(\n map(responseMapper),\n tap(() => this.questionControl.reset()),\n catchError(error => throwError(() => this.errorHandling(error, 'STREAM')))\n )\n\n }\n\n\n onStreamRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n reqParams.apiOptions.stream = true\n\n this.requestParams.GET = reqParams.apiOptions\n this.STREAM$ = this.httpManagerService.getRequest<ClientInfo[]>(reqParams.apiOptions, reqParams.path)\n .pipe(\n // tap((data) => console.log(\"API STREAM response\", data)),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'STREAM'))\n })\n )\n\n }\n\n onDownloadCompleted() {\n\n const message = \"Download Completed\"\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.SUCCESS,\n icon: 'sentiment_satisfied_alt',\n })\n\n this.toastMessage.toastMessage(display)\n }\n\n onDownloadFailed(err: string) {\n\n const message = \"Download Failed\"\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.ERROR,\n icon: 'warning',\n })\n\n this.toastMessage.toastMessage(display)\n }\n\n errorHandling(err: any, type: string) {\n if(type === 'GET') this.GET_error$.next(err.message)\n if(type === 'POST') this.POST_error$.next(err.message)\n if(type === 'PUT') this.PUT_error$.next(err.message)\n if(type === 'DELETE') this.DELETE_error$.next(err.message)\n if(type === 'STREAM') this.STREAM_error$.next(err.message)\n }\n\n onSelectAIType(type: number) {\n this.AIType = type\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <h2>\n HTTP Request Manager\n </h2>\n\n <div [formGroup]=\"requestForm\" style=\"margin-top: 2rem;\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Adapter (Model)</mat-label>\n <mat-select formControlName=\"adapter\" #adapterSelect>\n <mat-option>None</mat-option>\n <mat-option *ngFor=\"let adapter of sampleAdaptors\" [value]=\"adapter.value\">\n {{adapter.label}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mapper (Model)</mat-label>\n <mat-select formControlName=\"mapper\" #mapperSelect>\n <mat-option>None</mat-option>\n <mat-option *ngFor=\"let mapper of sampleMappers\" [value]=\"mapper.value\">\n {{mapper.label}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"display: flex; margin-bottom: 2rem;\" *ngIf=\"adapterSelect.value || mapperSelect.value\">\n <div style=\"flex:1\" class=\"box\">\n <h3>Adapter (Incoming)</h3>\n <div *ngIf=\"adapterSelect.value; else NO_ADAPTER\">\n {{ props(adapterSelect.value) | json }}\n </div>\n <ng-template #NO_ADAPTER>No Transformation</ng-template>\n </div>\n <div style=\"flex:1\" class=\"box\">\n <h3>Mapper (Outgoing)</h3>\n <div *ngIf=\"mapperSelect.value; else NO_MAPPER\">\n {{ props(mapperSelect.value) | json }}\n </div>\n <ng-template #NO_MAPPER>No Transformation</ng-template>\n </div>\n </div>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>RestPath (/ delimited)</mat-label>\n <input matInput placeholder=\"clients/list\" formControlName=\"path\">\n </mat-form-field>\n </div>\n <div>\n <div formArrayName=\"headers\">\n <div *ngFor=\"let task of headers.controls; let i = index\" [formGroupName]=\"i\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Key</mat-label>\n <input matInput placeholder=\"authentication\" formControlName=\"key\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Value</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"value\">\n </mat-form-field>\n <div style=\"margin-top: .5rem;\">\n <button mat-icon-button (click)=\"removeHeader(i)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n <button mat-stroked-button (click)=\"addHeader()\" class=\"btn\">Add Header</button>\n </div>\n <div style=\"margin-top: 2rem; display: flex; flex-direction:column; gap: 1rem;\">\n <div>\n <mat-slide-toggle #failedState>Retry on Failed</mat-slide-toggle>\n <div *ngIf=\"failedState.checked\" style=\"display: flex; gap: .5rem; margin-top: 1rem;\" formGroupName=\"retry\">\n <mat-form-field appearance=\"outline\">\n <mat-label>#of Times</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"times\" value=\"3\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Delay Until Next</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"delay\" value=\"3\">\n </mat-form-field>\n </div>\n </div>\n <div>\n <mat-slide-toggle #pollingState>Polling</mat-slide-toggle>\n <div *ngIf=\"pollingState.checked\">\n <mat-form-field appearance=\"outline\" style=\"margin-top: 1rem\">\n <mat-label>#of Seconds</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"polling\" value=\"3\">\n </mat-form-field>\n </div>\n </div>\n </div>\n </div>\n\n <div style=\"margin-bottom: 1rem; margin-top: 2rem;\">\n <mat-progress-bar mode=\"indeterminate\"\n *ngIf=\"(isPending$ | async)\"\n ></mat-progress-bar>\n <mat-progress-bar mode=\"determinate\"\n *ngIf=\"pollingState.checked && !(isPending$ | async)\"\n [value]=\"(this.countdown$ | async)\"\n ></mat-progress-bar>\n </div>\n\n <div style=\"margin-top: 1rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onGetRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"(GET_error$ | async) as get_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ get_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"(GET$ | async) as dataRecord\">\n <!-- <div [innerHTML]=\"(GET$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">POST Request</h2>\n <div>\n <button mat-raised-button (click)=\"onCreateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"(POST_error$ | async) as post_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ post_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"(POST$ | async) as dataRecord\">\n <!-- <div [innerHTML]=\"(POST$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">PUT Request</h2>\n <div>\n <button mat-raised-button (click)=\"onUpdateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"(PUT_error$ | async) as put_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ put_error }}</mat-error>\n </div>\n\n <h3>Include Record ID in the RestPath</h3>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"(PUT$ | async) as dataRecord\">\n <!-- <div [innerHTML]=\"(PUT$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">DELETE Request</h2>\n <div>\n <button mat-raised-button (click)=\"onDeleteRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <h3>Include Record ID in the RestPath</h3>\n\n <div *ngIf=\"(DELETE_error$ | async) as delete_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ delete_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"(DELETE$ | async) as dataRecord\">\n <!-- <div [innerHTML]=\"(DELETE$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">Streaming GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onStreamRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <!-- <div *ngIf=\"(STREAM_error$ | async) as stream_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ stream_error }}</mat-error>\n </div> -->\n\n <div style=\"margin-top: 1rem;\">\n <div *ngIf=\"(STREAM$ | async) as data\" class=\"container\">\n <table mat-table [dataSource]=\"data\">\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> First Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"lastName\">\n <th mat-header-cell *matHeaderCellDef> Last Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.lastName}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"age\">\n <th mat-header-cell *matHeaderCellDef> Age </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.age}} </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n </div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1; padding-top: .5rem;\">AI -<span *ngIf=\"AIType === 1\">STREAMING</span> POST Request</h2>\n <div style=\"display: flex; gap: 1rem;\">\n <button mat-raised-button [matMenuTriggerFor]=\"menu\" style=\"min-width: 120px;\">\n <mat-icon>lan</mat-icon>\n <span *ngIf=\"AIType === 0; else LOCAL\">Server</span>\n <ng-template #LOCAL>\n Local\n </ng-template>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"onSelectAIType(0)\">Server</button>\n <button mat-menu-item (click)=\"onSelectAIType(1)\">Local</button>\n </mat-menu>\n <div>\n <button mat-raised-button (click)=\"onStreamPostRequest()\" class=\"btn\">Ask Me</button>\n </div>\n </div>\n </div>\n\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Ask me a Question</mat-label>\n <textarea matInput placeholder=\"Why is the sky blue?\" [formControl]=\"questionControl\"></textarea>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"(STREAM_AI_error$ | async) as stream_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ stream_error }}</mat-error>\n </div>\n\n <div *ngIf=\"AIType === 1; else ALTERNATIVE\" style=\"color: red;\">\n You must have Ollama active and the 'phi3:latest' model to use this feature.\n </div>\n <ng-template #ALTERNATIVE>\n <span style=\"color: gray;\">\n Define the RestPath to the API endpoint that will handle the AI request.\n Use: 'ai/chat' for server\n </span>\n </ng-template>\n\n <div>\n <div *ngIf=\"(STREAM_AI$ | async) as data\" style=\"margin-top: 1rem; font-size: 1.2rem; border-radius: 1rem; border: black 1px solid; padding: 2rem;\">\n <p style=\"margin-bottom: .5rem; white-space:pre-wrap; line-height: 1.6rem;\">{{data}}</p>\n </div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 1.5rem; margin-bottom: 1rem; line-height: 1.5rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div>\n <div style=\"display: flex;\">\n <h2 style=\"flex:1; margin-bottom: 0; padding-top: .5rem; display: flex;\">\n <div>\n Download File\n </div>\n <div style=\"flex:1; margin-left: 1rem;\">\n <mat-slide-toggle #disable>\n <span *ngIf=\"disable.checked; else DISABLE\">\n Enable\n </span>\n <ng-template #DISABLE>Disable</ng-template>\n </mat-slide-toggle>\n </div>\n </h2>\n <div>\n <app-file-downloader\n [disabled]=\"disable.checked\"\n [delayError]=\"3\"\n [apiRequest]=\"downloadRequest\"\n (completed)=\"onDownloadCompleted()\"\n (failed)=\"onDownloadFailed($event)\"\n ></app-file-downloader>\n </div>\n </div>\n </div>\n\n</div>\n","import { Injectable } from '@angular/core';\n\nimport { DataType, DatabaseStorage } from '../../../models';\nimport { HTTPManagerStateService, ApiRequest, RequestOptions } from '../../../services';\n\nimport { ClientInfo } from '../../request-manager-demo/models/sample-client-info';\nimport { ClientInfoMapper } from '../../request-manager-demo/models/sample-mapper-client-info';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StateManagerDemoService extends HTTPManagerStateService<any> {\n\n constructor() {\n super(\n ApiRequest.adapt({\n server: \"\",\n path: [],\n headers: {},\n adapter: ClientInfo.adapt,\n mapper: ClientInfoMapper.adapt,\n stream: false,\n }),\n DataType.ARRAY,\n DatabaseStorage.adapt()\n )\n }\n\n setAPIOptions(apiOptions: ApiRequest, dataType: DataType, database?: DatabaseStorage) {\n this.setApiRequestOptions(apiOptions, dataType, database)\n }\n\n getClients() {\n\n // const headers = {\n // auth: \"sample-auth-token\"\n // }\n // const sampleOptions = RequestOptions.adapt({ path: [\"id\", 12], headers, sample: true })\n this.fetchRecords()\n\n }\n\n createClient(data: any) {\n\n // const headers = {\n // auth: \"sample-auth-token\"\n // }\n\n // const sampleOptions = RequestOptions.adapt({ path: [\"id\", 12], headers, sample: true })\n this.createRecord(data)\n\n }\n\n updateClient(data: ClientInfo) {\n\n // const headers = {\n // auth: \"sample-auth-token\"\n // }\n data.id = 1031\n const sampleOptions = RequestOptions.adapt({ path: [data.id] })\n this.updateRecord(data, sampleOptions)\n\n }\n\n deleteClient(data: ClientInfo) {\n\n // const headers = {\n // auth: \"sample-auth-token\"\n // }\n\n data.id = 1031\n const sampleOptions = RequestOptions.adapt({ path: [data.id] })\n this.deleteRecord(sampleOptions)\n\n }\n\n streamRequest() {\n\n const headers = {\n auth: \"sample-auth-token\"\n }\n\n // const sampleOptions = RequestOptions.adapt({ path: [1], headers })\n this.fetchStream()\n\n }\n\n}\n","import { Component, OnInit, ViewChild, inject } from '@angular/core';\n\nimport { StateManagerDemoService } from './services/state-manager-demo.service';\nimport { FormBuilder, Validators, FormArray } from '@angular/forms';\n\nimport { Observable, BehaviorSubject, EMPTY, map, tap, catchError, throwError } from 'rxjs';\n\nimport { ClientInfo } from '../request-manager-demo/models/sample-client-info';\nimport { ClientInfoMapper } from '../request-manager-demo/models/sample-mapper-client-info';\nimport { AIPrompt } from '../request-manager-demo/models/sample-ai-prompt';\n\nimport { DataType } from '../../models';\nimport { DatabaseStorage } from '../../models/database-storage.model';\nimport { HTTPManagerService, ApiRequest } from '../../services';\n\n\n@Component({\n selector: 'app-request-manager-state-demo',\n templateUrl: './request-manager-state-demo.component.html',\n styleUrls: ['./request-manager-state-demo.component.scss'],\n})\nexport class RequestManagerStateDemoComponent implements OnInit {\n\n stateManagerDemoService = inject(StateManagerDemoService)\n\n displayedColumns = ['id','name', 'lastName', 'age']\n\n selectedRecord$?: Observable<ClientInfo|null>\n\n fb = inject(FormBuilder)\n\n httpManagerService = inject(HTTPManagerService)\n\n isPending$ = this.stateManagerDemoService.isPending$\n error$ = this.stateManagerDemoService.error$\n\n countdown$ = this.httpManagerService.countdown$\n\n GET_error$ = new BehaviorSubject<string>('')\n POST_error$ = new BehaviorSubject<string>('')\n PUT_error$ = new BehaviorSubject<string>('')\n DELETE_error$ = new BehaviorSubject<string>('')\n\n STREAM_error$ = new BehaviorSubject<string>('')\n STREAM_AI_error$ = new BehaviorSubject<string>('')\n\n GET$ = new BehaviorSubject<any>(null)\n POST$ = new BehaviorSubject(null)\n PUT$ = new BehaviorSubject(null)\n DELETE$ = new BehaviorSubject(null)\n\n STREAM = new BehaviorSubject(null)\n STREAM$ = this.STREAM.asObservable()\n\n STREAM_AI = new BehaviorSubject<{response: string}[]>([])\n STREAM_AI$ = this.STREAM_AI.asObservable()\n .pipe(\n map((items: any) => (items) ? items.map((item: any) => item.response) : []),\n map((items: any) => items.join('\\n').trim()),\n )\n\n @ViewChild(\"failedState\", { static: true }) failedState: any\n @ViewChild(\"pollingState\", { static: true }) pollingState: any\n\n questionControl = this.fb.control(\"\", [Validators.required])\n\n requestType = ''\n\n prompts: string[] = []\n\n AIType = 0\n\n get dataObservable$() {\n\n switch (this.requestType) {\n case 'GET':\n return this.GET$\n\n case 'PUT':\n return this.PUT$\n\n case 'POST':\n return this.POST$\n\n case 'DELETE':\n return this.DELETE$\n\n case 'STREAM':\n return this.STREAM\n\n case 'STREAM_AI':\n return this.STREAM_AI\n\n default:\n return this.GET$\n break;\n }\n\n }\n\n sampleClientData = {\n id: 0,\n name: \"Old School Dates\",\n domain: \"osd.com\",\n service: \"osd\",\n spiffe: \"osd.com/osd\",\n secret: \"SMOPECXP-OS4P-USOG-X2II-3XMD1FQDR3IJX\",\n created: 1693003138,\n modified: 1693003138,\n icon: \"\",\n imageFile: \"\",\n }\n\n selectedRecord = this.fb.control(null)\n\n requestForm = this.fb.group({\n datatype: this.fb.control('ARRAY'),\n path: this.fb.control<string>(\"ai/\"),\n headers: this.fb.array([]),\n adapter: [null],\n mapper: [null],\n retry: this.fb.group({\n times: [3],\n delay: [3],\n }),\n polling: [3],\n database: this.fb.group({\n table: [''],\n expiresIn: ['1m'],\n })\n })\n\n get hasChanged() {\n return this.requestForm.dirty || this.requestForm.untouched\n }\n\n get dataType() {\n return this.requestForm.get(\"datatype\")?.value\n }\n\n get database() {\n return this.requestForm.get(\"database\")?.value\n }\n\n get retry() {\n return this.requestForm.get(\"retry\")?.value\n }\n\n sampleAdaptors = [\n { label: \"ClientInfo Basic\", value: ClientInfo.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n sampleMappers = [\n { label: \"Mapper Basic\", value: ClientInfoMapper.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n get headers(): FormArray {\n return this.requestForm.get('headers') as FormArray\n }\n\n get isValid() {\n this.requestForm.markAllAsTouched()\n return this.requestForm.valid\n }\n\n // server = `http://sample-endpoint/as/authorization.oauth2`\n\n arrayObjectsToObjects = (arr: any[]) => {\n return Array.isArray(arr) ? arr.reduce((obj, item) => Object.assign(obj, { [item.key]: item.value }), {}) : {}\n }\n\n props = (adapter: any) => {\n return (adapter) ? adapter() : null\n }\n\n constructor() { }\n\n ngOnInit() {\n\n this.stateManagerDemoService.data$.pipe(\n tap((data) => console.log(\"API STREAM_AI response\", data)),\n )\n\n this.error$.pipe(\n tap((data) => {\n debugger\n console.log(\"API STREAM response\", data)\n }),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'STREAM'))\n })\n )\n\n this.selectedRecord.valueChanges\n .subscribe((data: ClientInfo|null) => {\n this.selectedRecord$ = (data) ? this.stateManagerDemoService.selectRecord$(data.id) : EMPTY\n })\n\n this.stateManagerDemoService.data$\n .pipe(\n tap((data) => {\n\n switch (this.requestType) {\n case 'GET':\n this.GET$.next(data)\n break;\n\n case 'PUT':\n this.PUT$.next(data)\n break;\n\n case 'POST':\n this.POST$.next(data)\n break;\n\n case 'DELETE':\n this.DELETE$.next(data)\n break;\n\n case 'STREAM':\n this.STREAM.next(data)\n break;\n\n case 'STREAM_AI':\n this.STREAM_AI.next(data)\n break;\n\n default:\n break;\n }\n\n })\n ).subscribe()\n\n }\n\n addHeader() {\n const header = this.fb.group({\n key: ['', Validators.required],\n value: ['']\n });\n this.headers.push(header)\n }\n\n removeHeader(index: number) {\n this.headers.removeAt(index)\n }\n\n compileRequest() {\n\n const requestParams = this.requestForm.value\n\n requestParams.headers = this.arrayObjectsToObjects(\n requestParams.headers || []\n )\n\n const pathReq = (requestParams.path === \"\") ? [] : (requestParams.path || \"\").split(\"/\")\n\n if (!this.pollingState.checked) requestParams.polling = 0\n\n if (!this.failedState.checked) {\n requestParams.retry = { times: 0,delay: 0 }\n }\n\n const currentOptions = ApiRequest.adapt(requestParams)\n currentOptions.path = []\n const apiOptions = ApiRequest.adapt({ ...currentOptions, path: pathReq })\n\n return { apiOptions: apiOptions, path: pathReq }\n\n }\n\n onSetStateOptions() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n const db = DatabaseStorage.adapt(this.database)\n const type = this.dataType === \"ARRAY\" ? DataType.ARRAY : DataType.OBJECT\n this.stateManagerDemoService.setAPIOptions(reqParams.apiOptions, type, db)\n\n this.requestForm.markAsPristine()\n }\n\n onClearRecords() {\n this.stateManagerDemoService.clearRecords()\n }\n\n onRefreshRecords() {\n this.stateManagerDemoService.refreshData()\n }\n\n onGetRequest() {\n this.requestType = 'GET'\n this.stateManagerDemoService.getClients()\n }\n\n onCreateRequest() {\n this.requestType = 'POST'\n this.stateManagerDemoService.createClient(this.sampleClientData)\n }\n\n onUpdateRequest() {\n this.requestType = 'PUT'\n this.stateManagerDemoService.updateClient(this.sampleClientData)\n }\n\n onDeleteRequest() {\n this.requestType = 'DELETE'\n this.stateManagerDemoService.deleteClient(this.sampleClientData)\n }\n\n onStreamRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n reqParams.apiOptions.stream = true\n\n this.requestType = 'STREAM'\n\n this.stateManagerDemoService.streamRequest()\n\n }\n\n errorHandling(err: any, type: string) { console.log(err, type)\n if(type === 'GET') this.GET_error$.next(err.message)\n if(type === 'POST') this.POST_error$.next(err.message)\n if(type === 'PUT') this.PUT_error$.next(err.message)\n if(type === 'DELETE') this.DELETE_error$.next(err.message)\n if(type === 'STREAM') this.STREAM_error$.next(err.message)\n if(type === 'STREAM_AI') this.STREAM_AI_error$.next(err.message)\n }\n\n onSelectAIType(type: number) {\n this.AIType = type\n }\n\n onClearHistory() {\n this.prompts = []\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <h2>\n HTTP Request State Manager\n </h2>\n\n <div [formGroup]=\"requestForm\" style=\"margin-top: 2rem;\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>State Data Type</mat-label>\n <mat-select formControlName=\"datatype\">\n <mat-option value=\"ARRAY\">Array</mat-option>\n <mat-option value=\"OBJECT\">Object</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Adapter (Model)</mat-label>\n <mat-select formControlName=\"adapter\" #adapterSelect>\n <mat-option>None</mat-option>\n <mat-option *ngFor=\"let adapter of sampleAdaptors\" [value]=\"adapter.value\">\n {{adapter.label}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mapper (Model)</mat-label>\n <mat-select formControlName=\"mapper\" #mapperSelect>\n <mat-option>None</mat-option>\n <mat-option *ngFor=\"let mapper of sampleMappers\" [value]=\"mapper.value\">\n {{mapper.label}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div style=\"display: flex; margin-bottom: 2rem;\" *ngIf=\"adapterSelect.value || mapperSelect.value\">\n <div style=\"flex:1\" class=\"box\">\n <h3>Adapter (Incoming)</h3>\n <div *ngIf=\"adapterSelect.value; else NO_ADAPTER\">\n {{ props(adapterSelect.value) | json }}\n </div>\n <ng-template #NO_ADAPTER>No Transformation</ng-template>\n </div>\n <div style=\"flex:1\" class=\"box\">\n <h3>Mapper (Outgoing)</h3>\n <div *ngIf=\"mapperSelect.value; else NO_MAPPER\">\n {{ props(mapperSelect.value) | json }}\n </div>\n <ng-template #NO_MAPPER>No Transformation</ng-template>\n </div>\n </div>\n\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>RestPath (/ delimited)</mat-label>\n <input matInput placeholder=\"clients/list\" formControlName=\"path\">\n </mat-form-field>\n </div>\n <div>\n <div formArrayName=\"headers\">\n <div *ngFor=\"let task of headers.controls; let i = index\" [formGroupName]=\"i\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Key</mat-label>\n <input matInput placeholder=\"authentication\" formControlName=\"key\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Value</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"value\">\n </mat-form-field>\n <div style=\"margin-top: .5rem;\">\n <button mat-icon-button (click)=\"removeHeader(i)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n <button mat-stroked-button (click)=\"addHeader()\">Add Header</button>\n </div>\n <div style=\"margin-top: 2rem; display: flex; flex-direction:column; gap: 1rem;\">\n <div>\n <mat-slide-toggle #failedState>Retry on Failed</mat-slide-toggle>\n <div *ngIf=\"failedState.checked\" style=\"display: flex; gap: .5rem; margin-top: 1rem;\" formGroupName=\"retry\">\n <mat-form-field appearance=\"outline\">\n <mat-label>#of Times</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"times\" value=\"3\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Delay Until Next</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"delay\" value=\"3\">\n </mat-form-field>\n </div>\n </div>\n <div>\n <mat-slide-toggle #pollingState>Polling</mat-slide-toggle>\n <div *ngIf=\"pollingState.checked\">\n <mat-form-field appearance=\"outline\" style=\"margin-top: 1rem\">\n <mat-label>#of Seconds</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"polling\" value=\"3\">\n </mat-form-field>\n </div>\n </div>\n <div>\n <mat-slide-toggle #DBState>Database Storage</mat-slide-toggle>\n <div *ngIf=\"DBState.checked\" style=\"display: flex; gap: .5rem; margin-top: 1rem\" formGroupName=\"database\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Table Name</mat-label>\n <input matInput placeholder=\"table\" formControlName=\"table\" value=\"\">\n </mat-form-field>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Expires In</mat-label>\n <mat-select formControlName=\"expiresIn\">\n <mat-option value=\"1m\">One Minute</mat-option>\n <mat-option value=\"1h\">One Hour</mat-option>\n <mat-option value=\"1d\">One Day</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n <div style=\"margin-top: 1rem; display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onSetStateOptions()\" [disabled]=\"!hasChanged\">\n Set API Request Options\n </button>\n </div>\n <div>\n <mat-error *ngIf=\"(error$ | async) as error\">\n {{ error }}\n </mat-error>\n </div>\n </div>\n </div>\n\n <div style=\"margin-bottom: 1rem; margin-top: 2rem;\">\n <mat-progress-bar mode=\"indeterminate\"\n *ngIf=\"(isPending$ | async)\"\n ></mat-progress-bar>\n <div *ngIf=\"pollingState.checked\">\n <mat-progress-bar mode=\"determinate\"\n *ngIf=\"!(isPending$ | async) && (this.countdown$ | async) || -1 > 0\"\n [value]=\"(this.countdown$ | async)\"\n ></mat-progress-bar>\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\" *ngIf=\"(GET$ | async) as data\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1;\">CURRENT STATE ({{ dataType }})</h2>\n </div>\n <div *ngIf=\"data.length > 1\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Records</mat-label>\n <mat-select [formControl]=\"selectedRecord\" [disabled]=\"data === null && data?.length === 0\">\n <mat-option [value]=\"\">None</mat-option>\n <mat-option *ngFor=\"let item of data\" [value]=\"item\">\n {{item.name || (item.first_name) | titlecase}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div *ngIf=\"(dataObservable$ | async) as dataRecord\">\n <div *ngIf=\"(selectedRecord$ | async) as record; else NO_RECORD\">\n {{ record | json }}\n </div>\n <ng-template #NO_RECORD>No Record Selected from State</ng-template>\n\n </div>\n <div style=\"margin-top: 1rem;\">\n <span *ngIf=\"data !== null && data?.length > 0; else NO_DATA\">\n State contains a Total of {{ data.length }} Records\n </span>\n <ng-template #NO_DATA>No Records</ng-template>\n <div style=\"display: flex; gap: .5rem; text-align: end; justify-content: flex-end;\">\n <button class=\"btn\" mat-stroked-button (click)=\"onClearRecords()\">Clear</button>\n <button class=\"btn\" mat-stroked-button (click)=\"onRefreshRecords()\" [disabled]=\"hasChanged\">Refresh</button>\n </div>\n </div>\n </div>\n\n\n\n\n <div style=\"margin-top: 1rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">GET Request ({{ dataType }})</h2>\n <div>\n <button mat-raised-button (click)=\"onGetRequest()\" [disabled]=\"hasChanged\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"(GET_error$ | async) as get_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ get_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(GET$ | async) | jsonv\"></div> -->\n <div *ngIf=\"(GET$ | async) as getData\">{{ getData | json }}</div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">POST Request</h2>\n <div>\n <button mat-raised-button (click)=\"onCreateRequest()\" [disabled]=\"hasChanged\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"(POST_error$ | async) as post_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ post_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(POST$ | async) | jsonv\"></div> -->\n <div *ngIf=\"(POST$ | async) as postData\">{{ postData | json }}</div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">PUT Request</h2>\n <div>\n <button mat-raised-button (click)=\"onUpdateRequest()\" [disabled]=\"hasChanged\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"(PUT_error$ | async) as put_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ put_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(PUT$ | async) | jsonv\"></div> -->\n <div *ngIf=\"(PUT$ | async) as putData\">{{ putData | json }}</div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">DELETE Request</h2>\n <div>\n <button mat-raised-button (click)=\"onDeleteRequest()\" [disabled]=\"hasChanged\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"(DELETE_error$ | async) as delete_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ delete_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(DELETE$ | async) | jsonv\"></div> -->\n <div *ngIf=\"(DELETE$ | async) as deleteData\">{{ deleteData | json }}</div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">Streaming GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onStreamRequest()\" class=\"btn\" [disabled]=\"hasChanged\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"(STREAM_error$ | async) as stream_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ stream_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <div *ngIf=\"(STREAM$ | async) as data\" class=\"container\">\n <table mat-table [dataSource]=\"data\">\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> First Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"lastName\">\n <th mat-header-cell *matHeaderCellDef> Last Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.lastName}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"age\">\n <th mat-header-cell *matHeaderCellDef> Age </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.age}} </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n </div>\n </div>\n\n </div>\n\n</div>\n","import { Component, Inject, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { LocalStorageManagerService, SettingOptions, StorageOption, StorageType } from '../../services/local-storage-manager-service';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { BehaviorSubject, EMPTY, Observable, of } from 'rxjs';\nimport { ConfigOptions, LocalStorageOptions, UtilsService } from '../../services';\nimport { switchMap, tap, map } from 'rxjs/operators';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\n\n@Component({\n selector: 'app-local-storage-demo',\n templateUrl: './local-storage-demo.component.html',\n styleUrls: ['./local-storage-demo.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class LocalStorageDemoComponent implements OnInit {\n\n fb = inject(FormBuilder)\n utils = inject(UtilsService)\n\n type$ = new BehaviorSubject(StorageType.GLOBAL)\n get type() {\n return (this.typeControl.value) ? +this.typeControl.value : 0\n }\n\n typeControl = this.fb.control(StorageType.GLOBAL.toString())\n\n localStorageManagerService = inject(LocalStorageManagerService)\n\n settings$: Observable<any> = this.localStorageManagerService.settings$\n\n setting$ = (store: string) => this.localStorageManagerService.setting$(store)\n\n storageForm = this.fb.group({\n store: this.fb.control<string|null>(null),\n type: 'local',\n settingType: 'local',\n encrypted: false,\n data: this.fb.control<string>('', Validators.required),\n })\n\n newStoreForm = this.fb.group({\n name: this.fb.control<string|null>(null, Validators.required),\n storage: 'local',\n encrypted: false,\n data: this.fb.control<string>('', Validators.required),\n expiresIn: this.fb.control('0')\n })\n\n store$?: Observable<any>\n\n storeData$ = this.storageForm.get('store')?.valueChanges\n .pipe(\n switchMap((data: any) => {\n return data\n ? this.localStorageManagerService.store$(data.name)\n : of('')\n }),\n tap(data => {\n this.storageForm.get('data')?.patchValue(data, { emitEvent: false })\n })\n )\n\n expiresIn = (epoch: number) => this.utils.expiresIn(epoch)\n\n get isValid() {\n return this.newStoreForm.valid\n }\n\n get isValidData() {\n return this.storageForm.valid\n }\n\n isValidJSON = (str: string) => {\n try {\n JSON.parse(str)\n return true\n } catch (e) {\n return false\n }\n }\n\n displayedColumns: string[] = ['name', 'id', 'encrypted', 'expires', \"option\"];\n\n filterData = (values: SettingOptions[]) => {\n if(!values) return []\n return values.filter((item: any) => item.options.storage === +this.type)\n }\n\n data$?: Observable<any>\n\n store: any\n\n create = false\n\n storeProps?: LocalStorageOptions\n options?: SettingOptions\n\n constructor(@Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) { }\n\n ngOnInit() {\n\n this.storeProps = this.configOptions?.LocalStorageOptions\n this.options = this.storeProps?.options\n\n if(this.options?.storage) {\n this.typeControl.patchValue(this.options.storage.toString())\n this.typeControl.disable()\n } else {\n this.typeControl.enable()\n }\n\n if(this.options?.expiresIn) {\n this.newStoreForm.get('expiresIn')?.patchValue(this.options.expiresIn)\n this.newStoreForm.get('expiresIn')?.disable()\n } else {\n this.newStoreForm.get('expiresIn')?.enable()\n }\n\n if(this.options?.encrypted) {\n this.newStoreForm.get('encrypted')?.patchValue(this.options.encrypted)\n this.newStoreForm.get('encrypted')?.disable()\n } else {\n this.newStoreForm.get('encrypted')?.enable()\n }\n\n }\n\n onCreateStore() {\n\n if(!this.isValid) return\n\n const store = this.newStoreForm.value\n if(!store.name || store.name === '') return\n\n const options = { storage: this.type, encrypted: store.encrypted, expiresIn: store.expiresIn }\n\n this.localStorageManagerService.createStore({\n name: store.name,\n data: store.data,\n options: SettingOptions.adapt(options)\n })\n\n this.newStoreForm.reset()\n this.create = false\n }\n\n onUpdateStore(store: any) {\n\n if(!this.storageForm.valid) return\n\n const storeData = this.storageForm.value\n\n const data = JSON.parse(storeData.data || '')\n\n const type = (storeData.type === 'local') ? StorageType.GLOBAL : StorageType.SESSION\n\n this.localStorageManagerService.updateStore({\n name: store.name,\n data\n })\n\n }\n\n onSelectedRow(store: any) {\n this.store = store\n this.data$ = this.localStorageManagerService.store$(store.name).pipe(map(item => JSON.stringify(item)))\n this.create = false\n }\n\n onCreate() {\n this.onCancel()\n this.create = true\n }\n\n onDelete(store: StorageOption) {\n\n this.localStorageManagerService.deleteStore({\n name: store.name,\n })\n\n this.onCancel()\n }\n\n onCancel() {\n this.data$ = EMPTY\n this.store = null\n this.create = false\n }\n\n onUpdate(store: StorageOption, data: any) {\n\n this.localStorageManagerService.updateStore({\n name: store.name,\n data: JSON.parse(data)\n })\n\n this.onCancel()\n\n }\n\n onReset() {\n this.localStorageManagerService.resetStore()\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <div style=\"display: flex; gap: 1rem\">\n <h2 style=\"padding-top: .5rem; display: flex;\">\n <div style=\"padding-top: .5rem;\">Local Storage Manager</div>\n <div>\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon>info</mat-icon>\n </button>\n </div>\n </h2>\n <span style=\"flex:1\"></span>\n <div style=\"padding-top: .25rem;\">\n <mat-button-toggle-group name=\"storage\" [formControl]=\"typeControl\" (change)=\"onCancel()\">\n <mat-button-toggle value=\"0\">Local Storage</mat-button-toggle>\n <mat-button-toggle value=\"1\">Session Storage</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n <div style=\"margin-top: .25rem;\">\n <button mat-icon-button (click)=\"onCreate()\">\n <mat-icon>add</mat-icon>\n </button>\n </div>\n </div>\n\n <ng-container *ngIf=\"storeProps?.storageName || storeProps?.storageSettingsName\">\n <div style=\"display: flex; gap: .5rem; flex-direction: column; border: gray solid thin; background-color: whitesmoke; padding: 1rem;\"\n >\n <div style=\"display: flex;\">\n <div *ngIf=\"storeProps?.storageSettingsName\" style=\"flex:1\">\n Database: <b>{{ storeProps?.storageSettingsName }}</b>\n </div>\n <div *ngIf=\"storeProps?.storageName\" style=\"flex:1\">\n Data: <b>{{ storeProps?.storageName }}</b>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div style=\"margin-top: 2rem;\" [formGroup]=\"newStoreForm\" *ngIf=\"create; else LIST\">\n\n <h2>Create Store</h2>\n\n <div style=\"display: flex; gap: 1rem;\">\n <div style=\"flex:1\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Store Name</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"name\">\n </mat-form-field>\n </div>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Expires In...</mat-label>\n <mat-select formControlName=\"expiresIn\">\n <mat-option value=\"0\">None</mat-option>\n <mat-option value=\"30s\">30 Seconds</mat-option>\n <mat-option value=\"1mn\">1 Minute</mat-option>\n <mat-option value=\"1hr\">1 Hour</mat-option>\n <mat-option value=\"1d\">1 Day</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"margin-top: 1rem;\">\n <mat-slide-toggle formControlName=\"encrypted\">Encrypted</mat-slide-toggle>\n </div>\n </div>\n\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex: 1;\">\n <mat-label>Data (Must be an Object or Array of any)</mat-label>\n <textarea matInput placeholder=\"[]\" formControlName=\"data\" #json></textarea>\n </mat-form-field>\n </div>\n <mat-error *ngIf=\"!isValidJSON(json.value)\">Not Valid Data</mat-error>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onCreateStore()\" [disabled]=\"!(isValid && isValidJSON(json.value))\">\n Save Store\n </button>\n </div>\n\n </div>\n\n <ng-template #LIST>\n\n <div style=\"margin-top: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n{{ settings$ | async | json }}\n <div *ngIf=\"filterData(settings$ | async) as data\">\n <ng-container *ngIf=\"data.length > 0; else NO_DATA\">\n <table mat-table [dataSource]=\"data\">\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> Store </th>\n <td mat-cell *matCellDef=\"let element\" style=\"font-weight: bold; text-transform: uppercase;\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"encrypted\">\n <th mat-header-cell *matHeaderCellDef style=\"text-align: center;\"> Encrypted </th>\n <td mat-cell *matCellDef=\"let element\" style=\"text-align: center;\">\n <ng-container *ngIf=\"element.options.encrypted; else NO\">YES</ng-container>\n <ng-template #NO><span style=\"color:gray\">NO</span></ng-template>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"expires\">\n <th mat-header-cell *matHeaderCellDef style=\"text-align: center;\"> Expires </th>\n <td mat-cell *matCellDef=\"let element\" style=\"text-align: center;\">\n <ng-container *ngIf=\"element.options.expires !== 0; else NO_DATA\">\n {{expiresIn(element.options.expires)}}\n </ng-container>\n <ng-template #NO_DATA>\n ∞\n </ng-template>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"option\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell *matCellDef=\"let element\" style=\"padding-right: 0;\">\n <div style=\"display: flex;justify-content: flex-end;\">\n <button mat-icon-button color=\"warn\" (click)=\"onDelete(element); $event.stopPropagation()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" (click)=\"onSelectedRow(row)\"></tr>\n </table>\n </ng-container>\n\n <ng-template #NO_DATA>\n <h3 style=\"margin-top: 1rem;\">No Data</h3>\n </ng-template>\n\n <div *ngIf=\"(data$ | async) as data\" style=\"margin-top: 2rem;\">\n <div style=\"margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <h3>STORE: <span style=\"font-weight: bold;\">{{ store.name | uppercase }}</span></h3>\n <h3>SETTINGS: {{ setting$(store.name) | async | json }}</h3>\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex: 1;\">\n <mat-label>Data (Must be an Object or Array of any)</mat-label>\n <textarea matInput placeholder=\"[]\" #json [value]=\"data\"></textarea>\n </mat-form-field>\n </div>\n <mat-error *ngIf=\"!isValidJSON(json.value)\">Not Valid Data</mat-error>\n\n <div style=\"display: flex; gap: .5rem;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onCancel()\">Cancel</button>\n <button mat-stroked-button (click)=\"onUpdate(store, json.value)\" [disabled]=\"!(isValidJSON(json.value))\">Update</button>\n </div>\n </div>\n </div>\n\n </ng-template>\n\n <div style=\"margin-top: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <button mat-stroked-button (click)=\"onReset()\">Delete All Stores</button>\n </div>\n\n</div>\n\n\n<mat-menu #menu=\"matMenu\">\n <div style=\"padding: 1rem;\">\n <p>Please note that the LocalStorage (encryption) and management of data is dependant on initializing the APP_ID</p>\n <p>Must provide a value for <b>APP_ID</b> in AppModule->Providers</p>\n <mat-divider></mat-divider>\n <div style=\"font-size: smaller; margin-top: .5rem;\">\n <p>Example: UUID (self.crypto.randomUUID() to generate)</p>\n <div style=\"background-color: whitesmoke; padding: 1rem;\">\n {<br>\n provide: APP_ID,<br>\n useValue: \"056991ac-3537-43ab-b5b9-83edf6554eff\",<br>\n }\n </div>\n </div>\n </div>\n</mat-menu>\n","import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\nimport { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\nexport const PROXY_CONFIG = new InjectionToken<Record<string, any>>('PROXY_CONFIG');\n\n@Injectable()\nexport class ProxyDebuggerInterceptor implements HttpInterceptor {\n\n constructor(@Optional() @Inject(PROXY_CONFIG) private proxyConfig: Record<string, any>) {}\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n if (!this.proxyConfig) {\n return next.handle(req);\n }\n\n const headers = req.headers.keys().reduce((acc, key) => {\n acc[key] = req.headers.get(key) || '';\n return acc;\n }, {} as Record<string, string>);\n\n for (const proxyPath in this.proxyConfig) {\n if (this.proxyConfig.hasOwnProperty(proxyPath)) {\n const proxyDetails = this.proxyConfig[proxyPath];\n const regex = new RegExp('^' + proxyPath.replace('/', '').replace('*', '(.*)'));\n\n if (regex.test(req.url)) {\n const target = proxyDetails.target;\n const endpoint = req.url.replace(regex, '$1');\n const actualPath = target + '/' + endpoint;\n\n console.log('Request Proxied:', {\n requestUrl: req.url,\n requestPayload: req.body,\n headers: headers,\n proxyPath: proxyPath,\n actualPath: actualPath,\n });\n }\n }\n }\n\n return next.handle(req);\n }\n}\n","export interface ClientInfoInterface {\n domain: string\n service: string\n id: number\n name: string\n}\n\nexport class ClientInfo implements ClientInfoInterface {\n\n constructor(\n public domain = '',\n public service = '',\n public id = 0,\n public name = '',\n ) {}\n\n static adapt(item?: any): ClientInfo {\n\n return new ClientInfo(\n item?.domain,\n item?.service,\n item?.id,\n (item?.first_name || item?.last_name) ? `${item?.first_name} ${item?.last_name}` : '',\n )\n\n }\n\n}\n\n\n","export interface ClientInfoMapperInterface {\n id: number\n first_name: string\n last_name: string\n email: string\n}\n\nexport class ClientInfoMapper implements ClientInfoMapperInterface {\n\n constructor(\n public id = 0,\n public first_name = '',\n public last_name = '',\n public email = '',\n ) {}\n\n static adapt(item?: any): ClientInfoMapper {\n\n const first_name = (item?.name) ? item.name.split(' ')[0] : ''\n const last_name = (item?.name) ? item.name.split(' ')[1] : ''\n\n return new ClientInfoMapper(\n item?.id,\n first_name,\n last_name,\n item?.email,\n )\n\n }\n\n}\n\n\n","export interface AIPromptInterface {\n response: string\n}\n\nexport class AIPrompt implements AIPromptInterface {\n\n constructor(\n public response = '',\n ) {}\n\n static adapt(item?: any): AIPrompt {\n\n return new AIPrompt(\n item?.response,\n )\n\n }\n\n}\n","import { Component, OnInit, ViewChild, inject } from '@angular/core'\n\nimport { FormArray, FormBuilder, Validators } from '@angular/forms'\n\nimport { ClientInfo } from './models/sample-client-info'\nimport { ClientInfoMapper } from './models/sample-mapper-client-info'\nimport { AIPrompt } from './models/sample-ai-prompt'\nimport { ApiRequest, HTTPManagerSignalsService } from '../..'\n\nimport { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display'\n\n@Component({\n selector: 'app-request-signals-manager-demo',\n templateUrl: './request-signals-manager-demo.component.html',\n styleUrls: ['./request-signals-manager-demo.component.scss'],\n})\nexport class RequestSignalsManagerDemoComponent implements OnInit {\n\n displayedColumns = ['id','name', 'lastName', 'age']\n\n private fb = inject(FormBuilder)\n private toastMessage = inject(ToastMessageDisplayService)\n\n httpManagerSignalsService = inject(HTTPManagerSignalsService)\n\n // Using signals service: signals are callable in templates (e.g. isPending())\n isPending = this.httpManagerSignalsService.isPending\n countdown = this.httpManagerSignalsService.countdown\n\n // per-operation plain results and error messages (no rxjs in component)\n GET_result: any = null\n POST_result: any = null\n PUT_result: any = null\n DELETE_result: any = null\n\n STREAM_result: any = null\n STREAM_AI_result: any = null\n\n GET_error: string = ''\n POST_error: string = ''\n PUT_error: string = ''\n DELETE_error: string = ''\n STREAM_error: string = ''\n STREAM_AI_error: string = ''\n\n requestParams = {\n GET: ApiRequest.adapt(),\n POST: ApiRequest.adapt(),\n PUT: ApiRequest.adapt(),\n DELETE: ApiRequest.adapt(),\n STREAM: ApiRequest.adapt(),\n }\n\n @ViewChild(\"failedState\", { static: true }) failedState: any\n @ViewChild(\"pollingState\", { static: true }) pollingState: any\n\n questionControl = this.fb.control(\"\", [Validators.required])\n\n downloadRequest = ApiRequest.adapt({\n server: 'assets/images',\n path: ['me.jpg'],\n // saveAs: 'john.jpg' // Optional\n })\n\n // downloadRequest = ApiRequest.adapt({\n // server: 'oidc/ai/file'\n // })\n\n sampleClientData = {\n id: 0,\n name: \"Old School Dates\",\n domain: \"osd.com\",\n service: \"osd\",\n spiffe: \"osd.com/osd\",\n secret: \"SMOPECXP-OS4P-USOG-X2II-3XMD1FQDR3IJX\",\n created: 1693003138,\n modified: 1693003138,\n icon: \"\",\n imageFile: \"\",\n email: \"wavecoders@gmail.com\"\n }\n\n requestForm = this.fb.group({\n path: this.fb.control<string>(\"ai/\"),\n headers: this.fb.array([]),\n adapter: [null],\n mapper: [null],\n retry: this.fb.group({\n times: [3],\n delay: [3],\n }),\n polling: [3],\n })\n\n AIType = 0\n\n sampleAdaptors = [\n { label: \"ClientInfo Basic\", value: ClientInfo.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n sampleMappers = [\n { label: \"Mapper Basic\", value: ClientInfoMapper.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n get retry() {\n return this.requestForm.get('retry')?.value\n }\n\n get headers(): FormArray {\n return this.requestForm.get('headers') as FormArray\n }\n\n get isValid() {\n this.requestForm.markAllAsTouched()\n return this.requestForm.valid\n }\n\n hasId = (arr: any[]) => {\n if (arr.length === 0) return false\n return !isNaN(arr[arr.length - 1])\n }\n\n props = (adapter: any) => {\n return (adapter) ? adapter() : null\n }\n\n // server = `http://sample-endpoint/as/authorization.oauth2`\n\n arrayObjectsToObjects = (arr: any[]) => {\n return Array.isArray(arr) ? arr.reduce((obj, item) => Object.assign(obj, { [item.key]: item.value }), {}) : {}\n }\n\n constructor() { }\n\n ngOnInit() {\n\n // const reqGet2 = ApiRequest.adapt({\n // server,\n // path: ['clients'],\n // headers: { authentication: \"Bearer <KEY>\" },\n // adapter: ClientInfo,\n // dataType: DataType.OBJECT,\n // // concurrent: false,\n // // polling: 3, //seconds\n // })\n\n // const req2 = [1024,1025,1026].map(item => {\n // return this.httpManagerService.getRequest<ClientInfo[]>(reqGet2, [item])\n // .pipe(\n // catchError(error => {\n // return throwError(() => new Error(error.error.message))\n // })\n // )\n // })\n\n // forkJoin(req2)\n // .subscribe(res => console.log(res))\n\n }\n\n addHeader() {\n const header = this.fb.group({\n key: ['', Validators.required],\n value: ['']\n })\n this.headers.push(header)\n }\n\n removeHeader(index: number) {\n this.headers.removeAt(index)\n }\n\n compileRequest() {\n\n const requestParams = this.requestForm.value\n\n requestParams.headers = this.arrayObjectsToObjects(\n requestParams.headers || []\n )\n\n const pathReq = (requestParams.path === \"\") ? [] : (requestParams.path || \"\").split(\"/\")\n\n if (!this.pollingState.checked) requestParams.polling = 0\n\n if (!this.failedState.checked) {\n requestParams.retry = { times: 0,delay: 0 }\n }\n\n const apiOptions = ApiRequest.adapt(requestParams)\n apiOptions.path = []\n\n return { apiOptions: apiOptions, path: pathReq }\n\n }\n\n onGetRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n this.requestParams.GET = reqParams.apiOptions\n\n // reset local state\n this.GET_result = null\n this.GET_error = ''\n\n this.httpManagerSignalsService.getRequest<ClientInfo[]>(reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.GET_result = res,\n error: (err) => this.errorHandling(err, 'GET')\n })\n\n }\n\n onCreateRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n this.requestParams.POST = reqParams.apiOptions\n\n // reset local state\n this.POST_result = null\n this.POST_error = ''\n\n this.httpManagerSignalsService.postRequest<ClientInfo>(this.sampleClientData, reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.POST_result = res,\n error: (err) => this.errorHandling(err, 'POST')\n })\n\n }\n\n onUpdateRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n if(!this.hasId(reqParams.path)) {\n console.log(\"Missing ID\")\n return\n }\n\n this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length-1])\n this.requestParams.PUT = reqParams.apiOptions\n\n // reset local state\n this.PUT_result = null\n this.PUT_error = ''\n\n this.httpManagerSignalsService.putRequest<any>(this.sampleClientData, reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.PUT_result = res,\n error: (err) => this.errorHandling(err, 'PUT')\n })\n\n }\n\n onDeleteRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n this.requestParams.DELETE = reqParams.apiOptions\n\n if(!this.hasId(reqParams.path)) {\n console.log(\"Missing ID\")\n return\n }\n\n this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length-1])\n this.requestParams.DELETE = reqParams.apiOptions\n\n // reset local state\n this.DELETE_result = null\n this.DELETE_error = ''\n\n this.httpManagerSignalsService.deleteRequest<ClientInfo>(reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.DELETE_result = res,\n error: (err) => this.errorHandling(err, 'DELETE')\n })\n\n }\n\n onStreamPostRequest() {\n\n if (!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n let payload = {}\n let apiPath: string[] = reqParams.path\n let apiOptions = reqParams.apiOptions\n let responseMapper: (items: any) => any = (items) => items.response\n\n if (this.AIType === 0) {\n\n // API request\n payload = { prompt: this.questionControl.value }\n\n } else {\n\n // Local Ollama request\n apiOptions.server = \"api\"\n apiPath = [\"generate\"]\n apiOptions.stream = true\n payload = {\n model: \"phi3:latest\",\n prompt: this.questionControl.value,\n stream: true,\n }\n\n responseMapper = (items) => items.map((word: any) => word.response).flat().join('')\n\n }\n\n this.requestParams.STREAM = apiOptions\n this.STREAM_AI_result = null\n this.STREAM_AI_error = ''\n\n this.httpManagerSignalsService.postRequest<any>(payload, apiOptions, apiPath)\n .subscribe({\n next: (res) => {\n try {\n this.STREAM_AI_result = responseMapper(res)\n } catch (e) {\n this.STREAM_AI_result = res\n }\n this.questionControl.reset()\n },\n error: (err) => this.errorHandling(err, 'STREAM')\n })\n\n }\n\n\n onStreamRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n reqParams.apiOptions.stream = true\n\n this.requestParams.GET = reqParams.apiOptions\n this.STREAM_result = null\n this.STREAM_error = ''\n\n this.httpManagerSignalsService.getRequest<ClientInfo[]>(reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.STREAM_result = res,\n error: (err) => this.errorHandling(err, 'STREAM')\n })\n\n }\n\n onDownloadCompleted() {\n\n const message = \"Download Completed\"\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.SUCCESS,\n icon: 'sentiment_satisfied_alt',\n })\n\n this.toastMessage.toastMessage(display)\n }\n\n onDownloadFailed(err: string) {\n\n const message = \"Download Failed\"\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.ERROR,\n icon: 'warning',\n })\n\n this.toastMessage.toastMessage(display)\n }\n\n errorHandling(err: any, type: string) {\n const message = err?.message || String(err)\n // set local error state\n if (type === 'GET') this.GET_error = message\n if (type === 'POST') this.POST_error = message\n if (type === 'PUT') this.PUT_error = message\n if (type === 'DELETE') this.DELETE_error = message\n if (type === 'STREAM') this.STREAM_error = message\n\n // also set the shared service error signal\n this.httpManagerSignalsService.error.set(message)\n\n return err\n }\n\n onSelectAIType(type: number) {\n this.AIType = type\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <h2>\n <span>HTTP Request Signals Manager</span>\n <span style=\"margin-left: .5rem;\">\n <mat-icon color=\"accent\">fiber_new</mat-icon>\n </span>\n </h2>\n\n <div [formGroup]=\"requestForm\" style=\"margin-top: 2rem;\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Adapter (Model)</mat-label>\n <mat-select formControlName=\"adapter\" #adapterSelect>\n <mat-option>None</mat-option>\n <mat-option *ngFor=\"let adapter of sampleAdaptors\" [value]=\"adapter.value\">\n {{adapter.label}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mapper (Model)</mat-label>\n <mat-select formControlName=\"mapper\" #mapperSelect>\n <mat-option>None</mat-option>\n <mat-option *ngFor=\"let mapper of sampleMappers\" [value]=\"mapper.value\">\n {{mapper.label}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"display: flex; margin-bottom: 2rem;\" *ngIf=\"adapterSelect.value || mapperSelect.value\">\n <div style=\"flex:1\" class=\"box\">\n <h3>Adapter (Incoming)</h3>\n <div *ngIf=\"adapterSelect.value; else NO_ADAPTER\">\n {{ props(adapterSelect.value) | json }}\n </div>\n <ng-template #NO_ADAPTER>No Transformation</ng-template>\n </div>\n <div style=\"flex:1\" class=\"box\">\n <h3>Mapper (Outgoing)</h3>\n <div *ngIf=\"mapperSelect.value; else NO_MAPPER\">\n {{ props(mapperSelect.value) | json }}\n </div>\n <ng-template #NO_MAPPER>No Transformation</ng-template>\n </div>\n </div>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>RestPath (/ delimited)</mat-label>\n <input matInput placeholder=\"clients/list\" formControlName=\"path\">\n </mat-form-field>\n </div>\n <div>\n <div formArrayName=\"headers\">\n <div *ngFor=\"let task of headers.controls; let i = index\" [formGroupName]=\"i\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Key</mat-label>\n <input matInput placeholder=\"authentication\" formControlName=\"key\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Value</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"value\">\n </mat-form-field>\n <div style=\"margin-top: .5rem;\">\n <button mat-icon-button (click)=\"removeHeader(i)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n <button mat-stroked-button (click)=\"addHeader()\" class=\"btn\">Add Header</button>\n </div>\n <div style=\"margin-top: 2rem; display: flex; flex-direction:column; gap: 1rem;\">\n <div>\n <mat-slide-toggle #failedState>Retry on Failed</mat-slide-toggle>\n <div *ngIf=\"failedState.checked\" style=\"display: flex; gap: .5rem; margin-top: 1rem;\" formGroupName=\"retry\">\n <mat-form-field appearance=\"outline\">\n <mat-label>#of Times</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"times\" value=\"3\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Delay Until Next</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"delay\" value=\"3\">\n </mat-form-field>\n </div>\n </div>\n <div>\n <mat-slide-toggle #pollingState>Polling</mat-slide-toggle>\n <div *ngIf=\"pollingState.checked\">\n <mat-form-field appearance=\"outline\" style=\"margin-top: 1rem\">\n <mat-label>#of Seconds</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"polling\" value=\"3\">\n </mat-form-field>\n </div>\n </div>\n </div>\n </div>\n\n <div style=\"margin-bottom: 1rem; margin-top: 2rem;\">\n <mat-progress-bar mode=\"indeterminate\"\n *ngIf=\"isPending()\"\n ></mat-progress-bar>\n <mat-progress-bar mode=\"determinate\"\n *ngIf=\"pollingState.checked && !isPending()\"\n [value]=\"countdown()\"\n ></mat-progress-bar>\n </div>\n\n <div style=\"margin-top: 1rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onGetRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"GET_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ GET_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"GET_result\">\n {{ GET_result | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">POST Request</h2>\n <div>\n <button mat-raised-button (click)=\"onCreateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"POST_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ POST_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"POST_result\">\n {{ POST_result | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">PUT Request</h2>\n <div>\n <button mat-raised-button (click)=\"onUpdateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"PUT_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ PUT_error }}</mat-error>\n </div>\n\n <h3>Include Record ID in the RestPath</h3>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"PUT_result\">\n {{ PUT_result | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">DELETE Request</h2>\n <div>\n <button mat-raised-button (click)=\"onDeleteRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <h3>Include Record ID in the RestPath</h3>\n\n <div *ngIf=\"DELETE_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ DELETE_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"DELETE_result\">\n {{ DELETE_result | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">Streaming GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onStreamRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <!-- <div *ngIf=\"(STREAM_error$ | async) as stream_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ stream_error }}</mat-error>\n </div> -->\n\n <div style=\"margin-top: 1rem;\">\n <div *ngIf=\"STREAM_result as data\" class=\"container\">\n <table mat-table [dataSource]=\"data\">\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> First Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"lastName\">\n <th mat-header-cell *matHeaderCellDef> Last Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.lastName}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"age\">\n <th mat-header-cell *matHeaderCellDef> Age </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.age}} </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n </div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1; padding-top: .5rem;\">AI -<span *ngIf=\"AIType === 1\">STREAMING</span> POST Request</h2>\n <div style=\"display: flex; gap: 1rem;\">\n <button mat-raised-button [matMenuTriggerFor]=\"menu\" style=\"min-width: 120px;\">\n <mat-icon>lan</mat-icon>\n <span *ngIf=\"AIType === 0; else LOCAL\">Server</span>\n <ng-template #LOCAL>\n Local\n </ng-template>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"onSelectAIType(0)\">Server</button>\n <button mat-menu-item (click)=\"onSelectAIType(1)\">Local</button>\n </mat-menu>\n <div>\n <button mat-raised-button (click)=\"onStreamPostRequest()\" class=\"btn\">Ask Me</button>\n </div>\n </div>\n </div>\n\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Ask me a Question</mat-label>\n <textarea matInput placeholder=\"Why is the sky blue?\" [formControl]=\"questionControl\"></textarea>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"STREAM_AI_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ STREAM_AI_error }}</mat-error>\n </div>\n\n <div *ngIf=\"AIType === 1; else ALTERNATIVE\" style=\"color: red;\">\n You must have Ollama active and the 'phi3:latest' model to use this feature.\n </div>\n <ng-template #ALTERNATIVE>\n <span style=\"color: gray;\">\n Define the RestPath to the API endpoint that will handle the AI request.\n Use: 'ai/chat' for server\n </span>\n </ng-template>\n\n <div>\n <div *ngIf=\"STREAM_AI_result\" style=\"margin-top: 1rem; font-size: 1.2rem; border-radius: 1rem; border: black 1px solid; padding: 2rem;\">\n <p style=\"margin-bottom: .5rem; white-space:pre-wrap; line-height: 1.6rem;\">{{STREAM_AI_result}}</p>\n </div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 1.5rem; margin-bottom: 1rem; line-height: 1.5rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div>\n <div style=\"display: flex;\">\n <h2 style=\"flex:1; margin-bottom: 0; padding-top: .5rem; display: flex;\">\n <div>\n Download File\n </div>\n <div style=\"flex:1; margin-left: 1rem;\">\n <mat-slide-toggle #disable>\n <span *ngIf=\"disable.checked; else DISABLE\">\n Enable\n </span>\n <ng-template #DISABLE>Disable</ng-template>\n </mat-slide-toggle>\n </div>\n </h2>\n <div>\n <app-file-downloader\n [disabled]=\"disable.checked\"\n [delayError]=\"3\"\n [apiRequest]=\"downloadRequest\"\n (completed)=\"onDownloadCompleted()\"\n (failed)=\"onDownloadFailed($event)\"\n ></app-file-downloader>\n </div>\n </div>\n </div>\n\n</div>\n","import { Component, Inject, inject, OnInit, ViewEncapsulation, effect, signal, computed } from '@angular/core';\nimport { LocalStorageSignalsManagerService, SettingOptions, StorageOption, StorageType } from '../../services/local-storage-manager-service';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { ConfigOptions, LocalStorageOptions, UtilsService } from '../../services';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\n\n@Component({\n selector: 'app-local-storage-signals-demo',\n templateUrl: './local-storage-signals-demo.component.html',\n styleUrls: ['./local-storage-signals-demo.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class LocalStorageSignalsDemoComponent implements OnInit {\n\n fb = inject(FormBuilder)\n utils = inject(UtilsService)\n\n // store type is driven by the form control\n get type() {\n return (this.typeControl.value) ? +this.typeControl.value : 0;\n }\n\n typeControl = this.fb.control(StorageType.GLOBAL.toString())\n\n localStorageManagerService = inject(LocalStorageSignalsManagerService)\n\n // Use signals directly and computed values for template binding\n readonly settings = computed(() => this.localStorageManagerService.settings());\n\n // selected store (signal) and its JSON data for template\n storeSelected = signal<StorageOption | null>(null);\n selectedStoreData = computed(() => {\n const s = this.storeSelected();\n if (!s) return '';\n const computed = this.localStorageManagerService.store(s.name);\n return computed ? JSON.stringify(computed()) : '';\n });\n\n // filtered settings by selected type\n selectedType = signal<number>(StorageType.GLOBAL);\n filteredSettings = computed(() => {\n const values = this.settings() || [];\n return values.filter((item: any) => item.options.storage === +this.selectedType());\n });\n\n storageForm = this.fb.group({\n store: this.fb.control<string|null>(null),\n type: 'local',\n settingType: 'local',\n encrypted: false,\n data: this.fb.control<string>('', Validators.required),\n })\n\n newStoreForm = this.fb.group({\n name: this.fb.control<string|null>(null, Validators.required),\n storage: 'local',\n encrypted: false,\n data: this.fb.control<string>('', Validators.required),\n expiresIn: this.fb.control('0')\n })\n\n // no RxJS Observables here; template uses signals/computed directly\n\n expiresIn = (epoch: number) => this.utils.expiresIn(epoch)\n\n get isValid() {\n return this.newStoreForm.valid\n }\n\n get isValidData() {\n return this.storageForm.valid\n }\n\n isValidJSON = (str: string) => {\n try {\n JSON.parse(str)\n return true\n } catch (e) {\n return false\n }\n }\n\n displayedColumns: string[] = ['name', 'id', 'encrypted', 'expires', \"option\"];\n\n filterData = (values: StorageOption[] | null | undefined) => {\n if(!values) return []\n return values.filter((item: any) => item.options && item.options.storage === +this.type)\n }\n\n settingFor(name: string) {\n const c = this.localStorageManagerService.setting(name);\n return c ? c() : null;\n }\n\n // data and selected store\n store: any\n create = false\n\n storeProps?: LocalStorageOptions\n options?: SettingOptions\n\n constructor(@Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) { }\n\n ngOnInit() {\n\n this.storeProps = this.configOptions?.LocalStorageOptions\n this.options = this.storeProps?.options\n\n if(this.options?.storage) {\n this.typeControl.patchValue(this.options.storage.toString())\n this.typeControl.disable()\n } else {\n this.typeControl.enable()\n }\n\n if(this.options?.expiresIn) {\n this.newStoreForm.get('expiresIn')?.patchValue(this.options.expiresIn)\n this.newStoreForm.get('expiresIn')?.disable()\n } else {\n this.newStoreForm.get('expiresIn')?.enable()\n }\n\n if(this.options?.encrypted) {\n this.newStoreForm.get('encrypted')?.patchValue(this.options.encrypted)\n this.newStoreForm.get('encrypted')?.disable()\n } else {\n this.newStoreForm.get('encrypted')?.enable()\n }\n\n // nothing to synchronize - templates read computed signals directly\n\n }\n\n onCreateStore() {\n\n if(!this.isValid) return\n\n const store = this.newStoreForm.value\n if(!store.name || store.name === '') return\n\n const options = { storage: this.type, encrypted: store.encrypted, expiresIn: store.expiresIn }\n\n this.localStorageManagerService.createStore({\n name: store.name,\n data: store.data,\n options: SettingOptions.adapt(options)\n })\n\n this.newStoreForm.reset()\n this.create = false\n }\n\n onUpdateStore(store: any) {\n\n if(!this.storageForm.valid) return\n\n const storeData = this.storageForm.value\n\n const data = JSON.parse(storeData.data || '')\n\n const type = (storeData.type === 'local') ? StorageType.GLOBAL : StorageType.SESSION\n\n this.localStorageManagerService.updateStore({\n name: store.name,\n data\n })\n\n }\n\n onSelectedRow(store: any) {\n this.store = store\n this.storeSelected.set(store)\n this.create = false\n }\n\n onCreate() {\n this.onCancel()\n this.create = true\n }\n\n onDelete(store: StorageOption) {\n\n this.localStorageManagerService.deleteStore({\n name: store.name,\n })\n\n this.onCancel()\n }\n\n onCancel() {\n this.storeSelected.set(null)\n this.store = null\n this.create = false\n }\n\n onUpdate(store: StorageOption, data: any) {\n\n this.localStorageManagerService.updateStore({\n name: store.name,\n data: JSON.parse(data)\n })\n\n this.onCancel()\n\n }\n\n onReset() {\n this.localStorageManagerService.resetStore()\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <div style=\"display: flex; gap: 1rem\">\n <h2 style=\"padding-top: .5rem; display: flex;\">\n <div style=\"padding-top: .5rem;\">\n <span>Local Storage Manager</span>\n <span style=\"margin-left: .5rem;\">\n <mat-icon color=\"accent\">fiber_new</mat-icon>\n </span>\n </div>\n <div>\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon>info</mat-icon>\n </button>\n </div>\n </h2>\n <span style=\"flex:1\"></span>\n <div style=\"padding-top: .25rem;\">\n <mat-button-toggle-group name=\"storage\" [formControl]=\"typeControl\" (change)=\"onCancel()\">\n <mat-button-toggle value=\"0\">Local Storage</mat-button-toggle>\n <mat-button-toggle value=\"1\">Session Storage</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n <div style=\"margin-top: .25rem;\">\n <button mat-icon-button (click)=\"onCreate()\">\n <mat-icon>add</mat-icon>\n </button>\n </div>\n </div>\n\n <ng-container *ngIf=\"storeProps?.storageName || storeProps?.storageSettingsName\">\n <div style=\"display: flex; gap: .5rem; flex-direction: column; border: gray solid thin; background-color: whitesmoke; padding: 1rem;\"\n >\n <div style=\"display: flex;\">\n <div *ngIf=\"storeProps?.storageSettingsName\" style=\"flex:1\">\n Database: <b>{{ storeProps?.storageSettingsName }}</b>\n </div>\n <div *ngIf=\"storeProps?.storageName\" style=\"flex:1\">\n Data: <b>{{ storeProps?.storageName }}</b>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div style=\"margin-top: 2rem;\" [formGroup]=\"newStoreForm\" *ngIf=\"create; else LIST\">\n\n <h2>Create Store</h2>\n\n <div style=\"display: flex; gap: 1rem;\">\n <div style=\"flex:1\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Store Name</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"name\">\n </mat-form-field>\n </div>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Expires In...</mat-label>\n <mat-select formControlName=\"expiresIn\">\n <mat-option value=\"0\">None</mat-option>\n <mat-option value=\"30s\">30 Seconds</mat-option>\n <mat-option value=\"1mn\">1 Minute</mat-option>\n <mat-option value=\"1hr\">1 Hour</mat-option>\n <mat-option value=\"1d\">1 Day</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"margin-top: 1rem;\">\n <mat-slide-toggle formControlName=\"encrypted\">Encrypted</mat-slide-toggle>\n </div>\n </div>\n\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex: 1;\">\n <mat-label>Data (Must be an Object or Array of any)</mat-label>\n <textarea matInput placeholder=\"[]\" formControlName=\"data\" #json></textarea>\n </mat-form-field>\n </div>\n <mat-error *ngIf=\"!isValidJSON(json.value)\">Not Valid Data</mat-error>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onCreateStore()\" [disabled]=\"!(isValid && isValidJSON(json.value))\">\n Save Store\n </button>\n </div>\n\n </div>\n\n <ng-template #LIST>\n\n <div style=\"margin-top: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n{{ settings() | json }}\n <div *ngIf=\"filterData(settings()) as data\">\n <ng-container *ngIf=\"data.length > 0; else NO_DATA\">\n <table mat-table [dataSource]=\"data\">\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> Store </th>\n <td mat-cell *matCellDef=\"let element\" style=\"font-weight: bold; text-transform: uppercase;\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"encrypted\">\n <th mat-header-cell *matHeaderCellDef style=\"text-align: center;\"> Encrypted </th>\n <td mat-cell *matCellDef=\"let element\" style=\"text-align: center;\">\n <ng-container *ngIf=\"element.options.encrypted; else NO\">YES</ng-container>\n <ng-template #NO><span style=\"color:gray\">NO</span></ng-template>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"expires\">\n <th mat-header-cell *matHeaderCellDef style=\"text-align: center;\"> Expires </th>\n <td mat-cell *matCellDef=\"let element\" style=\"text-align: center;\">\n <ng-container *ngIf=\"element.options.expires !== 0; else NO_DATA\">\n {{expiresIn(element.options.expires)}}\n </ng-container>\n <ng-template #NO_DATA>\n ∞\n </ng-template>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"option\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell *matCellDef=\"let element\" style=\"padding-right: 0;\">\n <div style=\"display: flex;justify-content: flex-end;\">\n <button mat-icon-button color=\"warn\" (click)=\"onDelete(element); $event.stopPropagation()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" (click)=\"onSelectedRow(row)\"></tr>\n </table>\n </ng-container>\n\n <ng-template #NO_DATA>\n <h3 style=\"margin-top: 1rem;\">No Data</h3>\n </ng-template>\n\n <div *ngIf=\"storeSelected() as selectedStore\" style=\"margin-top: 2rem;\">\n <div style=\"margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <h3>STORE: <span style=\"font-weight: bold;\">{{ selectedStore.name | uppercase }}</span></h3>\n <h3>SETTINGS: {{ localStorageManagerService.setting(selectedStore.name) ? (localStorageManagerService.setting(selectedStore.name)() | json) : '{}' }}</h3>\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex: 1;\">\n <mat-label>Data (Must be an Object or Array of any)</mat-label>\n <textarea matInput placeholder=\"[]\" #json [value]=\"selectedStoreData()\"></textarea>\n </mat-form-field>\n </div>\n <mat-error *ngIf=\"!isValidJSON(json.value)\">Not Valid Data</mat-error>\n\n <div style=\"display: flex; gap: .5rem;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onCancel()\">Cancel</button>\n <button mat-stroked-button (click)=\"onUpdate(selectedStore, json.value)\" [disabled]=\"!(isValidJSON(json.value))\">Update</button>\n </div>\n </div>\n </div>\n\n </ng-template>\n\n <div style=\"margin-top: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <button mat-stroked-button (click)=\"onReset()\">Delete All Stores</button>\n </div>\n\n</div>\n\n\n<mat-menu #menu=\"matMenu\">\n <div style=\"padding: 1rem;\">\n <p>Please note that the LocalStorage (encryption) and management of data is dependant on initializing the APP_ID</p>\n <p>Must provide a value for <b>APP_ID</b> in AppModule->Providers</p>\n <mat-divider></mat-divider>\n <div style=\"font-size: smaller; margin-top: .5rem;\">\n <p>Example: UUID (self.crypto.randomUUID() to generate)</p>\n <div style=\"background-color: whitesmoke; padding: 1rem;\">\n {<br>\n provide: APP_ID,<br>\n useValue: \"056991ac-3537-43ab-b5b9-83edf6554eff\",<br>\n }\n </div>\n </div>\n </div>\n</mat-menu>\n","import { Component, Inject, OnInit } from '@angular/core';\n\nimport { CONFIG_SETTINGS_TOKEN } from '../models/config-token.model';\nimport { ConfigOptions } from '../models/config-options.model';\n\n@Component({\n selector: 'app-http-request-services-demo',\n templateUrl: './http-request-services-demo.component.html',\n styleUrls: ['./http-request-services-demo.component.scss']\n})\nexport class HttpRequestServicesDemoComponent implements OnInit {\n\n requestTypes = [\n { name: \"Http Service\", value: 'http_service' },\n { name: \"Http Signals Service\", value: 'http_signals_service', new: true },\n { name: \"Http State Service\", value: 'http_state_service' },\n { name: \"Database Service\", value: 'database_service', divider: true, disabled: true },\n { name: \"Local Storage Service\", value: 'local_storage_service' },\n { name: \"Local Signals Storage Service\", value: 'local_storage_signals_service', new: true },\n ]\n\n selectedService = this.requestTypes[0].value\n\n injectionOptions?: ConfigOptions\n\n constructor(@Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) { }\n\n ngOnInit() {\n if(this.configOptions) this.injectionOptions = this.configOptions\n }\n\n onSelected(type: number) {\n this.selectedService = this.requestTypes[type].value\n }\n\n}\n","<mat-toolbar style=\"display:flex\">\n <div>Http Request Manager Services</div>\n <div style=\"flex:1\"></div>\n <button mat-stroked-button [matMenuTriggerFor]=\"menu\">Services</button>\n <mat-menu #menu=\"matMenu\">\n <ng-container *ngFor=\"let type of requestTypes; index as i\">\n <div\n *ngIf=\"type?.divider\"\n style=\"margin-top: .5rem; margin-bottom: .5rem;\"\n >\n <mat-divider></mat-divider>\n </div>\n <button\n mat-menu-item\n (click)=\"onSelected(i)\"\n [disabled]=\"type.disabled\"\n >\n {{ type.name }}\n </button>\n </ng-container>\n\n </mat-menu>\n</mat-toolbar>\n\n<span [ngSwitch]=\"selectedService\">\n <p *ngSwitchCase=\"'http_service'\">\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-manager-demo></app-request-manager-demo>\n </p>\n <p *ngSwitchCase=\"'http_signals_service'\">\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-signals-manager-demo></app-request-signals-manager-demo>\n </p>\n <p *ngSwitchCase=\"'http_state_service'\">\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-manager-state-demo></app-request-manager-state-demo>\n </p>\n <p *ngSwitchCase=\"'database_service'\">\n <!-- <app-database-data-demo></app-database-data-demo> -->\n </p>\n <p *ngSwitchCase=\"'local_storage_service'\">\n <ng-container *ngTemplateOutlet=\"LOCAL_OPTIONS\"></ng-container>\n <app-local-storage-demo></app-local-storage-demo>\n </p>\n <p *ngSwitchCase=\"'local_storage_signals_service'\">\n <ng-container *ngTemplateOutlet=\"LOCAL_OPTIONS\"></ng-container>\n <app-local-storage-signals-demo></app-local-storage-signals-demo>\n </p>\n <p *ngSwitchDefault>\n Other\n </p>\n</span>\n\n<ng-template #HTTP_OPTIONS>\n <ng-container *ngIf=\"injectionOptions?.httpRequestOptions\">\n <div class=\"box\">\n <h3 style=\"font-weight: bold;\">Injection Token Detected - HTTP Options</h3>\n {{ injectionOptions?.httpRequestOptions| json }}\n </div>\n </ng-container>\n</ng-template>\n\n<ng-template #LOCAL_OPTIONS>\n <ng-container class=\"box\" *ngIf=\"injectionOptions?.LocalStorageOptions\">\n <div class=\"box\">\n <h3 style=\"font-weight: bold;\">Injection Token Detected - LocalStorage Options</h3>\n {{ injectionOptions?.LocalStorageOptions| json }}\n </div>\n </ng-container>\n</ng-template>\n\n\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ThemePalette } from '@angular/material/core';\nimport { ProgressSpinnerMode } from '@angular/material/progress-spinner';\n\n@Component({\n selector: 'app-spinner',\n templateUrl: './spinner.component.html',\n styleUrls: ['./spinner.component.scss']\n})\nexport class SpinnerComponent implements OnInit {\n\n @Input() color: ThemePalette;\n\n @Input() diameter?: number;\n @Input() display?: string | number;\n @Input() mode?: ProgressSpinnerMode;\n @Input() strokeWidth?: number;\n @Input() value = 0\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","<div class=\"spinner-background\">{{display}}</div>\n<mat-progress-spinner\n [color]=\"color\"\n [diameter]=\"diameter\"\n [mode]=\"mode || 'indeterminate'\"\n [strokeWidth]=\"strokeWidth\"\n [value]=\"value\">\n</mat-progress-spinner>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { DownloadFileComponent } from './download-file/download-file.component';\nimport { FileDownloaderComponent } from './file-downloader.component';\n\nimport { SpinnerComponent } from './spinner/spinner.component';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatButtonModule } from '@angular/material/button';\n\n@NgModule({\n imports: [\n CommonModule,\n MatIconModule,\n MatProgressSpinnerModule,\n MatButtonModule,\n ],\n declarations: [\n SpinnerComponent,\n DownloadFileComponent,\n FileDownloaderComponent,\n ],\n exports: [\n FileDownloaderComponent\n ]\n})\nexport class FileDownloaderModule { }\n","import { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\n\n\nimport { WithCredentialsInterceptor, RequestHeadersInterceptor } from './interceptors';\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { RequestManagerDemoComponent } from './http-request-services-demo/request-manager-demo/request-manager-demo.component';\nimport { RequestManagerStateDemoComponent } from './http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component';\nimport { LocalStorageDemoComponent } from './http-request-services-demo/local-storage-demo/local-storage-demo.component';\n// import { DatabaseDataDemoComponent } from './global-data-demo/database-data-demo/database-data-demo.component';\n\nimport { CommonModule } from '@angular/common';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { ProxyDebuggerInterceptor } from './interceptors/proxy-debugger.interceptor';\n\nimport { HttpRequestServicesDemoComponent } from './http-request-services-demo/http-request-services-demo.component';\nimport { RequestSignalsManagerDemoComponent } from './http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component';\n\nimport { ConfigOptions } from './models';\nimport { CONFIG_SETTINGS_TOKEN } from './models/config-token.model';\nimport { HTTPManagerService, LocalStorageManagerService } from './services';\n\nimport { FileDownloaderModule } from './http-request-services-demo/request-manager-demo/file-downloader/file-download.module';\nimport { LocalStorageSignalsDemoComponent } from './http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component';\n\nimport { ToastMessageDisplayModule } from 'toast-message-display';\n\n\n@NgModule({\n imports: [\n CommonModule,\n ToastMessageDisplayModule,\n FormsModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatSelectModule,\n MatChipsModule,\n MatMenuModule,\n MatIconModule,\n MatTableModule,\n MatButtonToggleModule,\n MatAutocompleteModule,\n MatProgressBarModule,\n MatSlideToggleModule,\n MatDividerModule,\n MatFormFieldModule,\n MatInputModule,\n MatToolbarModule,\n MatSlideToggleModule,\n TranslateModule.forRoot(),\n MatSidenavModule,\n FileDownloaderModule,\n ],\n declarations: [\n HttpRequestServicesDemoComponent,\n RequestManagerStateDemoComponent,\n RequestManagerDemoComponent,\n RequestSignalsManagerDemoComponent,\n LocalStorageDemoComponent,\n LocalStorageSignalsDemoComponent,\n // DatabaseDataDemoComponent,\n ],\n exports: [\n HttpRequestServicesDemoComponent,\n // Re-export commonly used modules so demo component templates have access to\n // Angular common pipes and Material components when the library is imported.\n CommonModule,\n MatButtonToggleModule,\n MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n MatIconModule,\n MatTableModule,\n MatSlideToggleModule,\n MatProgressBarModule,\n MatDividerModule,\n ],\n providers: [\n { provide: HTTP_INTERCEPTORS, useClass: WithCredentialsInterceptor, multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: RequestHeadersInterceptor, multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: ProxyDebuggerInterceptor, multi: true },\n { provide: CONFIG_SETTINGS_TOKEN, useValue: ConfigOptions.adapt() },\n HTTPManagerService, LocalStorageManagerService\n ],\n})\nexport class HttpRequestManagerModule {\n\n static forRoot(config: ConfigOptions = ConfigOptions.adapt()): ModuleWithProviders<HttpRequestManagerModule> {\n return {\n ngModule: HttpRequestManagerModule,\n providers: [\n { provide: CONFIG_SETTINGS_TOKEN, useValue: ConfigOptions.adapt(config) },\n HTTPManagerService, LocalStorageManagerService //all services that need access to config\n ],\n };\n }\n\n}\n\n\n","export interface TableSchemaDefInterface {\n table: string\n schema: string\n}\n\nexport class TableSchemaDef implements TableSchemaDefInterface {\n constructor(\n public table = 'unknown',\n public schema: string = '',\n ) {}\n\n static adapt(item?: any): TableSchemaDef {\n\n const schemaArray = (item?.schema && Array.isArray(item.schema)) ? item.schema : item.schema.split(',')\n const schema = schemaArray.map((item: string) => this.cleanString(item)).join()\n\n return new TableSchemaDef(\n (item?.table) ? this.cleanString(item.table) : 'unknown',\n schema,\n )\n\n }\n\n static cleanString(str: string): string {\n const camelCaseSplit = str.replace(/([a-z])([A-Z])/g, '$1 $2')\n \n const cleanStr = camelCaseSplit\n .replace(/[^a-zA-Z0-9\\s]/g, '') // Remove non-alphanumeric characters except spaces\n .toLowerCase() // Convert to lowercase\n .trim(); // Trim any leading or trailing spaces\n \n return cleanStr;\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport Dexie, {Table} from 'dexie';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DbService extends Dexie {\n\n storageDB = \"global_storage_db\"\n\n db = new Dexie(this.storageDB)\n\n get vr() {\n return (this.db.verno === 0) ? 1 : this.db.verno + 1\n }\n\n get nextVr() {\n return this.vr + 1\n }\n\n get getTables() {\n return this.db.tables.map(item => item.name)\n }\n\n async hasDatabase() {\n return await Dexie.exists(this.storageDB).then((res) => {\n this.createNewDatabase()\n return res\n })\n }\n\n getTable = (table: string) => {\n return this.db.tables.find(item => item.name === table)\n }\n\n tableExists = (table: string) => {\n return (this.getTables.find(item => item === table)) ? true : false\n }\n\n constructor() {\n\n super(\"global_storage_db\")\n\n this.db = this\n this.open().then(data => {\n\n }).catch(err => {\n this.createNewDatabase()\n })\n\n }\n\n protected async updateTable(table: string, find: { key: string, value: string|number }, data: any) {\n\n const tableSource = this.getTable(table)\n\n if(!tableSource || !find || !(find.key || find.value)) return false\n\n await tableSource?.where(find.key).equals(find.value).first()\n .then(async (rec: any) => {\n const newRec = this.updateObjectKeys(rec, data)\n await tableSource?.update(rec.id, newRec)\n })\n\n return true\n\n }\n\n protected async createNewDatabase() {\n\n const db = new Dexie('global_storage_db');\n\n if (!await Dexie.exists(db.name)) {\n db.version(1).stores({})\n }\n\n await db.open()\n\n }\n\n // async createTable(table: string, schema: string) {\n protected async createTable(table: string, schema: string) {\n\n // console.log('createTable:', table, schema)\n\n this.hasDatabase().then(async(res) => {\n\n const tableDef = this.normalizeString(table)\n const schemaDef = this.normalizeString(schema)\n\n table = tableDef || ''\n schema = schemaDef || ''\n\n if(table === '' || schema === '') return\n\n if(!this.db.isOpen()) {\n await this.db.open()\n .then( async () => {\n this.create(table, schema)\n // console.log('OPENED', table)\n })\n .catch(() => {\n // console.log('FAILED', table)\n })\n\n } else {\n this.create(table, schema)\n }\n\n const hasTable = this.getTable(table)\n\n if(!hasTable) {\n setTimeout(() => {\n this.createTable.bind(this, table, schema)\n this.create(table, schema)\n }, 300)\n }\n\n // console.log('DB HAS', table, hasTable)\n\n })\n\n }\n\n private async create(table: string, schema: string) {\n\n // console.log('OPEN', this.db.name, this.vr, this.db.verno, 'OPEN',this.db.isOpen())\n\n if(!this.tableExists(table)) {\n\n if(this.db.isOpen()) await this.db.close()\n\n const newSchema: any = { [table]: schema }\n await this.db.version(this.nextVr).stores(newSchema)\n\n // console.log('Created New Table: ', table, schema)\n\n if(!this.db.isOpen()) await this.db.open()\n }\n\n }\n\n private updateObjectKeys(obj1: any, obj2: any) {\n\n return Object.keys(obj1).reduce((updatedObj: any, key: any) => {\n updatedObj[key] = obj2.hasOwnProperty(key) ? obj2[key] : obj1[key]\n return updatedObj\n }, {})\n\n }\n\n protected async DBOpened() {\n\n if(!this.db.isOpen()) {\n await this.db.open()\n .then( async () => {\n // console.log('OPENED')\n })\n .catch(async (err) => {\n // console.log('OPENED ERR')\n return false\n })\n } else {\n // console.log('OPENED')\n }\n\n return true\n\n }\n\n private normalizeString(item: string|string[]) {\n\n if(!item) return\n\n return Array.isArray(item) ?\n item.map((item: string) => this.cleanString(item)).join()\n : item.split(',').map((item: string) => this.cleanString(item)).join()\n\n }\n\n private cleanString(str: string): string {\n\n const cleanStr = str\n .replace(/[^a-zA-Z0-9\\s]/g, '')\n .replace(/\\s+/g, '_')\n\n return cleanStr.trim().toLowerCase()\n\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { DbService } from './db.storage.service';\n\nimport { TableSchemaDef } from './models/table-schema';\nimport { EMPTY, from, Observable } from 'rxjs';\nimport { map, mergeMap, switchMap } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DatabaseManagerService extends DbService {\n\n constructor() { \n super()\n this.createNewDatabase()\n }\n\n getDatabaseTables() {\n return from(this.DBOpened()).pipe(\n map(() => this.db.tables.map(item => item.name))\n )\n }\n\n hasDatabaseTable(table: string): Observable<boolean> {\n return from(this.DBOpened()).pipe(\n map(() => {\n return this.tableExists(this.clean(table))\n })\n )\n }\n\n getDatabaseTable(table: string): Observable<any> {\n return from(this.DBOpened()).pipe(\n map((res) => {\n this.hasDatabase().then((res) => {\n\n const tables = this.db.tables\n const found = tables.find(item => item.name === this.clean(table)) || null\n\n if(!found) {\n console.warn('No Such Table:', this.clean(table))\n return\n } else { \n return found\n }\n \n })\n })\n )\n }\n\n getDatabaseTableSchema(table: string): Observable<string[]> {\n\n return from(this.DBOpened()).pipe(\n mergeMap((res) => this.getDatabaseTable(table)),\n map((dbTable: any) => {\n if(!dbTable) return []\n const cols = dbTable.schema.indexes.map((col: any) => col.name)\n const pri = dbTable.schema.primKey.name\n return [pri, ...cols]\n })\n )\n\n }\n\n createDatabaseTable(tableDef: TableSchemaDef) {\n this.createTable(tableDef.table, tableDef.schema)\n return from(this.DBOpened())\n }\n\n updateDatabaseTableSchema(tableDef: TableSchemaDef) {\n\n }\n\n // CRUD\n findTableRecords(table: string, column: string, value: any) {\n \n }\n\n findTableRecord(table: string, column: string, value: any) {\n \n }\n\n getTableRecords(table: string) {\n \n }\n\n getTableRecord(table: string, id: number) {\n \n }\n\n createTableRecord(table: string, record: any) {\n return this.createTableRecords(table, [record])\n .pipe(\n map((item: any) => item ? item[0] : null))\n }\n\n createTableRecords(table: string, records: any[]) {\n\n return this.getDatabaseTable(table).pipe(\n\n switchMap((tableData: any) => {\n \n if(!tableData) return EMPTY\n\n return this.getDatabaseTableSchema(table).pipe(\n\n map((schema: string[]) => {\n\n const insertRecords = records.map((record: any) => {\n\n const objectFromSchema: { [key: string]: any } = {}\n\n schema.forEach((field: string) => {\n const data = (record as any)[field] ?? null\n objectFromSchema[field] = data\n })\n\n return objectFromSchema\n\n })\n\n tableData.bulkPut(insertRecords)\n return insertRecords\n\n })\n\n )\n\n })\n\n )\n\n }\n\n updateTableRecord(table: string, record: any) {\n return this.updateTableRecords(table, [record])\n .pipe(\n map(item => item.length > 0 ? item[0] : null)\n )\n }\n\n updateTableRecords(table: string, records: any[]) {\n \n return this.getDatabaseTable(table).pipe(\n\n switchMap((tableData: any) => {\n\n return this.getDatabaseTableSchema(table).pipe(\n\n map((schema: string[]) => {\n\n const insertRecords = records.map((record: any) => {\n\n const objectFromSchema: { [key: string]: any } = {}\n\n schema.forEach((field: string) => {\n const data = (record as any)[field] ?? null\n objectFromSchema[field] = data\n })\n\n return objectFromSchema\n\n })\n\n tableData.bulkPut(insertRecords).then(() => console.log('Updated DB'))\n return insertRecords\n\n })\n\n )\n\n })\n\n )\n\n }\n\n deleteTableRecord<T>(table: string, id: number) {\n \n }\n\n private clean(str: string): string {\n const cleanStr = str\n .replace(/[^a-zA-Z0-9\\s]/g, '_') // Replace non-alphanumeric characters except spaces with underscores\n .replace(/\\s+/g, '_') // Replace spaces with underscores\n .toLowerCase() // Convert to lowercase\n .trim(); // Trim leading or trailing spaces\n \n return cleanStr;\n }\n\n}\n","import { Component, OnInit, inject } from '@angular/core';\n\nimport { TableSchemaDef } from '../../services/database-manager-services/models/table-schema';\nimport { DatabaseManagerService } from '../../services/database-manager-services';\n\n@Component({\n selector: 'app-database-data-demo',\n templateUrl: './database-data-demo.component.html',\n styleUrls: ['./database-data-demo.component.scss']\n})\nexport class DatabaseDataDemoComponent implements OnInit {\n\n db = inject(DatabaseManagerService)\n\n constructor() { }\n\n ngOnInit() {\n\n const tableDef = TableSchemaDef.adapt({table: 'Sample Table', schema: ['id', 'lastName', 'age']})\n console.log(tableDef)\n\n this.createTable(tableDef).subscribe(() => {\n\n // hasTable\n this.db.hasDatabaseTable('Sample Table').subscribe(data => console.log(data))\n\n // Tables\n this.db.getDatabaseTables().subscribe(data => console.log(data))\n\n // getTable\n this.db.getDatabaseTable('Sample Table').subscribe(data => console.log(data))\n\n // Table Schema\n this.db.getDatabaseTableSchema('Sample Table').subscribe(data => console.log(data))\n\n // Update Table Schema\n // const newTableDef = TableSchemaDef.adapt({table: 'sample', schema: ['id', 'name', 'age', 'amount']})\n // this.db.updateDatabaseTableSchema(newTableDef)\n\n // Insert Table Record\n const record = { id: 12, age: 45, last_name: 'Bonifacio', amount: 1200 }\n\n this.db.createTableRecord('Sample Table', record).subscribe(data => console.log(data))\n\n // Insert Table Records\n const records = [\n { id: 12, age: 12, last_name: 'Bonifacio', amount: 80 },\n { id: 10, age: 15, last_name: 'Johns', amount: 700 },\n { id: 1, age: 22, last_name: 'Kims', amount: 234 },\n { id: 2, age: 45, last_name: 'Harrys', amount: 1200 },\n ]\n\n this.db.createTableRecords('Sample Table', records).subscribe(data => console.log(data))\n\n // Update Table Record\n const recordUpdate = { id: 12, age: 45, last_name: 'Bonifacio', amount: 5000 }\n\n this.db.createTableRecord('Sample Table', record).subscribe(data => console.log(data))\n\n // Update Table Records\n // const recordsUpdate = [\n // { id: 12, age: 12, last_name: 'Bonifacio', amount: 5000 },\n // { id: 10, age: 15, last_name: 'Johns', amount: 5000 },\n // ]\n\n // this.db.updateTableRecords('sample_table', records).subscribe(data => console.log(data))\n\n })\n\n }\n\n createTable(tableDef: TableSchemaDef) {\n return this.db.createDatabaseTable(tableDef)\n }\n\n // CRUD\n findTableRecords(table: string, column: string, value: any) {\n\n }\n\n findTableRecord(table: string, column: string, value: any) {\n\n }\n\n getTableRecords(table: string) {\n\n }\n\n getTableRecord(table: string, id: number) {\n\n }\n\n createTableRecord<T>(table: string, record: T) {\n\n }\n\n updateTableRecord<T>(table: string, record: T) {\n\n }\n\n deleteTableRecord<T>(table: string, id: number) {\n\n }\n\n}\n","<p>\n database-data-demo works!\n</p>\n","/*\n * Public API Surface of http-request-manager\n */\n\nexport * from './lib/index';\nexport * from './lib/http-request-manager.module';\n\nexport * from './lib/http-request-services-demo/http-request-services-demo.component';\n\nexport * from './lib/http-request-services-demo/database-data-demo/database-data-demo.component';\nexport * from './lib/http-request-services-demo/local-storage-demo/local-storage-demo.component';\nexport * from './lib/http-request-services-demo/request-manager-demo/request-manager-demo.component';\nexport * from './lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["catchError","i1","i2","i4","i1.DownloadFileComponent","ClientInfo","AIPrompt","ClientInfoMapper","i3","i14.FileDownloaderComponent","map","tap","i7","i8","i9","i10","i11","i12","i5","i6.RequestManagerStateDemoComponent","i7.RequestManagerDemoComponent","i8.RequestSignalsManagerDemoComponent","i9.LocalStorageDemoComponent","i10.LocalStorageSignalsDemoComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"http-request-manager.mjs","sources":["../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/models/storage-type.enum.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/models/setting-options.model.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/models/storage-option.model.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/models/global-store-options.model.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/models/storage-data.model.ts","../../../projects/http-request-manager/src/lib/services/utils/utils.service.ts","../../../projects/http-request-manager/src/lib/services/utils/encryption/random.ts","../../../projects/http-request-manager/src/lib/services/utils/app.service.ts","../../../projects/http-request-manager/src/lib/services/utils/encryption/symmetrical-encryption.service.ts","../../../projects/http-request-manager/src/lib/services/utils/encryption/encryption-test.service.ts","../../../projects/http-request-manager/src/lib/models/config-token.model.ts","../../../projects/http-request-manager/src/lib/services/utils/headers.service.ts","../../../projects/http-request-manager/src/lib/services/utils/path-query.service.ts","../../../projects/http-request-manager/src/lib/services/utils/encryption/asymmetrical-encryption.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/rxjs-operators/request-streaming.ts","../../../projects/http-request-manager/src/lib/services/ws-manager-service/websocket.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/request.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/rxjs-operators/countdown.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/rxjs-operators/delay-retry.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/rxjs-operators/request-polling.ts","../../../projects/http-request-manager/src/lib/models/database-storage.model.ts","../../../projects/http-request-manager/src/lib/models/retry-options.model.ts","../../../projects/http-request-manager/src/lib/models/data-type.enum.ts","../../../projects/http-request-manager/src/lib/models/config-http-options.model.ts","../../../projects/http-request-manager/src/lib/models/config-local-storage-options.model.ts","../../../projects/http-request-manager/src/lib/models/config-options.model.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/http-manager.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/request-signals.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-services/http-manager-signals.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/models/api-request.model.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/models/request-options.model.ts","../../../projects/http-request-manager/src/lib/services/utils/object-merger.service.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/local-storage-manager.service.ts","../../../projects/http-request-manager/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.ts","../../../projects/http-request-manager/src/lib/services/request-manager-state-service/http-manager-state.store.ts","../../../projects/http-request-manager/src/lib/services/index.ts","../../../projects/http-request-manager/src/lib/interceptors/models/error-settings.model.ts","../../../projects/http-request-manager/src/lib/interceptors/credentials.interceptor.ts","../../../projects/http-request-manager/src/lib/interceptors/request-header.interceptor.ts","../../../projects/http-request-manager/src/lib/interceptors/request-error.interceptor.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.html","../../../projects/http-request-manager/src/lib/interceptors/proxy-debugger.interceptor.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-info.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-mapper-client-info.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-ai-prompt.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/http-request-services-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/http-request-services-demo.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.html","../../../projects/http-request-manager/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.ts","../../../projects/http-request-manager/src/lib/http-request-manager.module.ts","../../../projects/http-request-manager/src/lib/services/database-manager-services/models/table-schema.ts","../../../projects/http-request-manager/src/lib/services/database-manager-services/db.storage.service.ts","../../../projects/http-request-manager/src/lib/services/database-manager-services/database.manager.service.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.ts","../../../projects/http-request-manager/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.html","../../../projects/http-request-manager/src/public-api.ts","../../../projects/http-request-manager/src/http-request-manager.ts"],"sourcesContent":["export enum StorageType {\n GLOBAL,\n SESSION,\n DB\n}\n","import { StorageType } from \"./storage-type.enum\"\n\nexport interface SettingOptionsInterface {\n storage?: StorageType\n expires?: number\n expiresIn?: string\n encrypted?: boolean\n}\n\nexport class SettingOptions implements SettingOptionsInterface {\n\n constructor(\n public storage?: StorageType,\n public expires?: number,\n public expiresIn?: string,\n public encrypted?: boolean,\n ) {}\n\n static adapt(item?: any): SettingOptions {\n\n const storage = (typeof item?.storage !== 'undefined' && item?.storage !== null) ? Number(item.storage) : StorageType.GLOBAL;\n const expires = (typeof item?.expires !== 'undefined' && item?.expires !== null) ? Number(item.expires) : 0;\n const expiresIn = (typeof item?.expiresIn !== 'undefined' && item?.expiresIn !== null) ? item.expiresIn : '';\n const encrypted = (typeof item?.encrypted !== 'undefined' && item?.encrypted !== null) ? Boolean(item.encrypted) : false;\n\n return new SettingOptions(\n storage,\n expires,\n expiresIn,\n encrypted,\n )\n\n }\n\n}\n","import { SettingOptions } from \"./setting-options.model\"\n\nexport interface StorageOptionInterface {\n id?: string\n name: string\n options?: SettingOptions\n}\n\nexport class StorageOption implements StorageOptionInterface {\n\n constructor(\n public id?: string,\n public name = 'untitled',\n public options?: SettingOptions,\n ) {}\n\n static adapt(item?: any): StorageOption {\n\n return new StorageOption(\n (item?.id) ? item.id : crypto.randomUUID(),\n item?.name,\n (item?.options) ? SettingOptions.adapt(item.options) : SettingOptions.adapt(),\n )\n\n }\n\n}\n\n\n","import { StorageOption } from \"./storage-option.model\"\n\nexport interface GlobalStoreOptionsInterface {\n encryption?: boolean\n expiresIn?: string\n expires?: number\n stores: StorageOption[]|null\n}\n\nexport class GlobalStoreOptions implements GlobalStoreOptionsInterface {\n\n constructor(\n public encryption = false,\n public expiresIn?: string,\n public expires?: number,\n public stores: StorageOption[]|null = [],\n ) {}\n\n static adapt(item?: any): GlobalStoreOptions {\n\n return new GlobalStoreOptions(\n (item?.encryption) ? item.encryption : false,\n (item?.expiresIn) ? item.expiresIn : '',\n (item?.expires) ? item.expires : 0,\n (item?.stores) ? item.stores.map((item: any) => StorageOption.adapt(item)) : []\n )\n\n }\n\n}\n","export interface StorageDataInterface {\n id?: string\n data?: any\n}\n\nexport class StorageData implements StorageDataInterface {\n\n constructor(\n public id?: string,\n public data?: any,\n ) {}\n\n static adapt(item?: any): StorageData {\n\n return new StorageData(\n (item?.id) ? item.id : crypto.randomUUID(),\n (item?.data) ? item.data : null\n )\n\n }\n\n}\n\n\n","\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UtilsService {\n\n http = inject(HttpClient)\n\n constructor() { }\n\n isString(x: string | number) {\n return Object.prototype.toString.call(x) === '[object String]'\n }\n\n isObject(obj: any) {\n return Object.prototype.toString.call(obj) === '[object Object]'\n }\n\n JSONToString(value: any) {\n return (this.isObject(value)) ? JSON.stringify(value) : value\n }\n\n stringToJSON(value: string) {\n return (this.isJSON(value)) ? JSON.parse(value) : value\n }\n\n isJSON(str: any) {\n try {\n JSON.parse(str)\n } catch (e) {\n return false\n }\n return true\n }\n\n getValueByProp(obj: any, prop: string) {\n if(typeof obj === 'undefined') return false\n return obj[prop]\n }\n\n objectsEqual(x: any, y: any): boolean {\n\n const ok = Object.keys, tx = typeof x, ty = typeof y\n\n return x && y && tx === 'object' && tx === ty ? (\n ok(x).length === ok(y).length &&\n ok(x).every((key: any) => this.objectsEqual(x[key], y[key]))\n ) : (x === y)\n\n }\n\n getJSON(file: string) {\n return this.http.get(`assets/data/${file}`)\n }\n\n get today() {\n return new Date().getMilliseconds() / 1000\n }\n\n base32ToHex(base32: string): string {\n\n const base32chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\"\n\n const charToValue = (char: string) => base32chars.indexOf(char.toUpperCase())\n\n let bits = ''\n let hex = ''\n\n for (let i = 0; i < base32.length; i++) {\n const val = charToValue(base32.charAt(i))\n bits += val.toString(2).padStart(5, '0')\n }\n\n for (let i = 0; i + 4 <= bits.length; i += 4) {\n const chunk = bits.substr(i, 4)\n hex += parseInt(chunk, 2).toString(16)\n }\n\n return hex.toUpperCase()\n }\n\n binaryToHex(binary: string): string {\n let hex = '';\n for (let i = 0; i < binary.length; i += 8) {\n const byte = binary.substr(i, 8);\n const decimal = parseInt(byte, 2);\n hex += decimal.toString(16).padStart(2, '0');\n }\n return hex.padStart(32, '0').substr(0, 32);\n }\n\n // y = years, m = months, w = weeks, d = days, hr = hours, mn = minutes else seconds\n // returns epoch time corresponding to the expiry type\n expires(str?: string) {\n\n if(!str) return\n\n const match = str.match(/[^0-9]+$/)\n\n const type = (match) ? str.slice(-match[0].length) : 0\n\n const now = Math.floor(new Date().getTime() / 1000)\n\n let value = 0;\n\n switch (type) {\n case\n 'y':\n const years = parseInt(str.slice(0, -1))\n value = now + (years * 31556926)\n break;\n case\n 'm':\n const months = parseInt(str.slice(0, -1))\n value = now + (months * 2629743)\n break;\n case\n 'w':\n const weeks = parseInt(str.slice(0, -1))\n value = now + (weeks * 604800)\n break;\n case\n 'd':\n const days = parseInt(str.slice(0, -1))\n value = now + (days * 86400)\n break;\n case\n 'hr':\n const hrs = parseInt(str.slice(0, -2))\n value = now + (hrs * 3600)\n break;\n case\n 'mn':\n const min = parseInt(str.slice(0, -2))\n value = now + (min * 60)\n break;\n default: //seconds\n const sec = parseInt(str.slice(0, -1))\n value = now + (sec)\n break;\n }\n return value;\n }\n\n hasExpired(expiryDate: number): boolean {\n if (!expiryDate || expiryDate === 0) return false\n const currentTime = Math.floor(new Date().getTime() / 1000)\n return expiryDate < currentTime\n }\n\n hasExpiry(setting: any) {\n return (setting?.expires) ? true : false\n }\n\n expiresIn(expiryDate: number) {\n\n if (!expiryDate) return;\n\n const now = Math.floor(new Date().getTime() / 1000);\n let diff = expiryDate - now;\n\n if (diff <= 0) return \"Expired\";\n\n const units = [\n { label: 'y', seconds: 31536000 },\n { label: 'm', seconds: 2592000 },\n { label: 'w', seconds: 604800 },\n { label: 'd', seconds: 86400 },\n { label: 'h', seconds: 3600 },\n { label: 'min', seconds: 60 },\n { label: '', seconds: 1 },\n ];\n\n let result = [];\n\n for (const unit of units) {\n if (diff >= unit.seconds) {\n const value = Math.floor(diff / unit.seconds);\n diff %= unit.seconds;\n result.push(`${value}${unit.label}${value > 1 ? 's' : ''}`);\n }\n }\n\n return result.join(', ');\n }\n\n lc = (str: string) => str.toLowerCase().replace(/[^\\w\\s]/g, '').replace(/\\s+/g, '_')\n\n}\n","export const Random = () => {\n const typedArray = new Uint8Array(1)\n const randomValue = crypto.getRandomValues(typedArray)[0]\n const randomFloat = randomValue / Math.pow(2, 8)\n return randomFloat\n}\n\nexport const RandomNumber = (min: number, max: number) => {\n return Math.floor(Random() * max) + min\n}\n\nexport const RandomNumbers = (min: number, max: number, length: number) => {\n const numbers: number[] = []\n for (let i = 0; i < length; i++) numbers.push(Math.floor(Random() * max) + min)\n return numbers\n}\n\nexport const RandomNumbersUnique = (min: number, max: number, length: number) => {\n let count = 0;\n\n // Adjust the length if it exceeds the number of unique numbers possible in the range\n if (length > (max - min + 1)) {\n console.error('error encountered');\n length = max - min + 1;\n }\n\n console.log('length', length);\n const numbers: number[] = [];\n const maxAttempts = length * 100 ; // Safeguard to prevent infinite loops\n\n while (numbers.length < length && count < maxAttempts) {\n\n const num = Math.floor(Random() * max) + min;\n\n if (!numbers.includes(num)) {\n numbers.push(num);\n }\n }\n\n if (count >= maxAttempts) {\n throw new Error('Maximum attempts exceeded while generating unique numbers');\n }\n\n return numbers;\n};\n\nexport const RandomStr = () => {\n\n const typedArray = new Uint8Array(8)\n const array = new Uint32Array(1)\n crypto.getRandomValues(array)\n return array[0].toString(36)\n\n}\n\nexport const RandomSignature = () => {\n\n const typedArray = new Uint8Array(8)\n const array = new Uint32Array(1)\n crypto.getRandomValues(array)\n return array[0]\n\n}\n\nexport const UUID = () => {\n return self.crypto.randomUUID()\n}\n\n\n","import { APP_ID, Inject, Injectable } from '@angular/core';\n\n// Must provide a value for APP_ID in AppModule->Providers\n// providers: [\n// {\n// provide: APP_ID,\n// useValue: \"056991ac-3537-43ab-b5b9-83edf6554eff\",\n// },\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AppService {\n\n appID: string\n\n constructor(@Inject(APP_ID) private id: string) {\n this.appID = this.id\n }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport * as CryptoJS from 'crypto-js';\n\nimport { RandomSignature } from './random';\nimport { AppService } from '../app.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SymmetricalEncryptionService {\n\n appID: string; // APP SERVICE TO MANAGER ENCRYPTION KEY\n\n private appService = inject(AppService)\n\n constructor() {\n // TODO: The APP ID is not a string, it is a function\n this.appID = (this.appService.appID) ? this.appService.appID : ''\n if(this.appID === '') console.warn('No App Key has been define')\n }\n\n generateCipherKey() {\n return (RandomSignature().toString() + RandomSignature().toString()).substring(0, 8)\n }\n\n encrypt(str: any, key = this.appID) {\n\n if(!str || key === '') return ''\n\n let _key = CryptoJS.enc.Utf8.parse(key)\n let _iv = CryptoJS.enc.Utf8.parse(key)\n\n try {\n\n const encrypted = CryptoJS.AES.encrypt(\n JSON.stringify(str), _key, {\n keySize: 16,\n iv: _iv,\n mode: CryptoJS.mode.ECB,\n padding: CryptoJS.pad.Pkcs7\n });\n\n return encrypted.toString()\n\n } catch(error: any) {\n console.log(error)\n }\n\n return\n }\n\n decrypt(str: string, key = this.appID) {\n\n if(!str || key === '') return\n\n let _key = CryptoJS.enc.Utf8.parse(key)\n let _iv = CryptoJS.enc.Utf8.parse(key)\n\n try {\n\n return CryptoJS.AES.decrypt(\n str, _key, {\n keySize: 16,\n iv: _iv,\n mode: CryptoJS.mode.ECB,\n padding: CryptoJS.pad.Pkcs7\n }).toString(CryptoJS.enc.Utf8);\n\n } catch(error: any) {\n console.log(error)\n }\n\n return\n }\n\n createSignature(url: string, len = 16) {\n const sig = CryptoJS.SHA256(url).toString(CryptoJS.enc.Hex)\n return sig.substring(0, len).toUpperCase()\n }\n\n normalizeURL(url: string) {\n const normalizedURL = url.replace(/(https?:\\/\\/)?(www\\.)?/, '').replace(/\\/+$/, '');\n return normalizedURL;\n }\n\n generateSignature(url: string) {\n const normalizedURL = this.normalizeURL(url)\n const hash = CryptoJS.SHA256(normalizedURL)\n const signature = hash.toString(CryptoJS.enc.Hex)\n return signature;\n }\n\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EncryptionTestService {\n\n constructor() { }\n\n private isBase64(str: string): boolean {\n const base64Pattern = /^(?:[A-Z0-9+/]{4})*(?:[A-Z0-9+/]{2}==|[A-Z0-9+/]{3}=)?$/i;\n return base64Pattern.test(str);\n }\n\n private isHexadecimal(str: string): boolean {\n const hexPattern = /^[0-9a-fA-F]+$/;\n return hexPattern.test(str) && (str.length % 2 === 0);\n }\n\n private hasHighEntropy(str: string): boolean {\n const uniqueChars = new Set(str).size;\n return uniqueChars > str.length * 0.6;\n }\n\n isEncrypted(str: string): boolean {\n\n if (typeof str !== 'string') {\n return false;\n }\n\n if (this.isBase64(str) || this.isHexadecimal(str)) {\n return true;\n }\n\n return this.hasHighEntropy(str);\n\n }\n\n}\n","import { InjectionToken } from \"@angular/core\";\nimport { ConfigOptions } from \"./config-options.model\";\n\n/**\n * An injection token that provides the configuration settings for the application.\n * This token can be used to inject the `ConfigSettings` instance into components or services\n * that require access to the application configuration.\n */\nexport const CONFIG_SETTINGS_TOKEN = new InjectionToken<ConfigOptions>('http.config');\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HeadersService {\n\n headers = {}\n\n generateHeaders(headers?: Record<string, string>): { headers: HttpHeaders } {\n\n const allHeaders = headers ? { ...this.headers, ...headers } : {}\n return { headers: new HttpHeaders(allHeaders) }\n\n }\n\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PathQueryService {\n\n buildAPIPath(server: string|string[], params?: any[]|any) {\n\n server = (Array.isArray(server)) ? server.join('/') : server\n\n const pathObjects = (params) ? params.filter((path:any) => (!this.isObject(path))) : []\n const queryObjects = (params) ? params.filter((path:any) => (this.isObject(path))) : []\n\n const query = this.removeEmptyParams(queryObjects.reduce((r: any, c: any) => {\n Object.entries(c).forEach(([key, value]) => {\n r[key] = Array.isArray(value) ? value.join(',') : value\n })\n return r\n }, {}))\n\n let path = this.buildRestPath(server, pathObjects)\n\n return(Object.keys(query).length > 0) ? path + '?' + this.buildQueryPath(query) : path\n\n }\n\n private buildRestPath(server: string, params: any[]): string {\n server = (server) ? server : ''\n server = (server.charAt(0) === '/') ? server.substring(1) : server\n return this.cleanUrlPath(server +'/'+ params.join('/'))\n }\n\n private buildQueryPath(params: any): string {\n\n const searchParams = new URLSearchParams()\n\n for (const key in params) {\n\n if (Array.isArray(params[key])) {\n params[key].forEach((value: any) => searchParams.append(key, value));\n } else {\n searchParams.append(key, params[key]);\n }\n\n }\n\n return searchParams.toString()\n\n }\n\n private cleanUrlPath(str: string) {\n return str.replace(/([^:]\\/)\\/+/g, \"$1\").replace(/\\/$/,'')\n }\n\n private isObject(val: any): boolean {\n return (val === null) ? false : ( (typeof val === 'function') || (typeof val === 'object') )\n }\n\n private removeEmptyParams = (obj: any): Record<string, any> =>\n Object.fromEntries(\n Object.entries(obj)\n .map(([key, value]) =>\n [key, value && typeof value === 'object' ? this.removeEmptyParams(value) : value]\n )\n .filter(([_, value]) => value !== undefined && value !== \"\")\n )\n\n}\n","import { Injectable } from '@angular/core';\n\nimport { BehaviorSubject, EMPTY, Observable, from, of } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AsymmetricalEncryptionService {\n\n constructor() {}\n\n generateKeyPair(modulusLength = 2048): Observable<CryptoKeyPair> {\n \n // modulusLength - 1024, 2048, 4096\n // hash - SHA-256\n\n return from(crypto.subtle.generateKey(\n {\n name: \"RSA-OAEP\",\n modulusLength,\n publicExponent: new Uint8Array([1, 0, 1]), // 65537\n hash: { name: \"SHA-256\" }\n },\n true, // Extractable keys\n [\"encrypt\", \"decrypt\"]\n ))\n\n }\n\n encryptData(publicKey: CryptoKey, data: string) {\n\n const encodedData = new TextEncoder().encode(data)\n\n return from(crypto.subtle.encrypt(\n {\n name: \"RSA-OAEP\"\n },\n publicKey,\n encodedData\n )).pipe(\n map(enc => this.arrayBufferToBase64(enc))\n )\n\n }\n\n decryptData(privateKey: CryptoKey, encryptedData: string) {\n\n const encStr = this.base64ToArrayBuffer(encryptedData)\n\n return from(crypto.subtle.decrypt(\n {\n name: \"RSA-OAEP\"\n },\n privateKey,\n encStr\n ).then(decryptedData => {\n return new TextDecoder().decode(decryptedData)\n }))\n\n }\n\n pemToArrayBuffer(pem: string): ArrayBuffer {\n\n const b64 = pem.replace(/(-----BEGIN (RSA )?(PRIVATE|PUBLIC) KEY-----|-----END (RSA )?(PRIVATE|PUBLIC) KEY-----|\\n)/g, '')\n const binaryString = atob(b64)\n const len = binaryString.length\n const buffer = new ArrayBuffer(len)\n const view = new Uint8Array(buffer)\n\n for (let i = 0; i < len; i++) {\n view[i] = binaryString.charCodeAt(i)\n }\n\n return buffer\n\n }\n\n base64ToArrayBuffer(base64: string): ArrayBuffer {\n \n const binaryString = atob(base64);\n const len = binaryString.length;\n const buffer = new ArrayBuffer(len);\n const view = new Uint8Array(buffer);\n\n for (let i = 0; i < len; i++) {\n view[i] = binaryString.charCodeAt(i);\n }\n\n return buffer;\n }\n\n arrayBufferToBase64(buffer: ArrayBuffer): string {\n\n let binary = '';\n const bytes = new Uint8Array(buffer);\n const len = bytes.byteLength;\n\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n\n return window.btoa(binary)\n\n }\n\n base64ToPEM(base64Key: string, publicKey = true) {\n\n const keyType = (publicKey) ? 'PUBLIC' : 'PRIVATE'\n\n const header = `-----BEGIN ${keyType} KEY-----\\n`\n const footer = `\\n-----END ${keyType} KEY-----`\n\n const keyBody = base64Key.match(/.{1,64}/g)?.join(\"\\n\") || \"\"\n\n return header + keyBody + footer\n\n }\n\n pemToCryptoKey(\n pem: string, \n algorithm: RsaHashedKeyGenParams, \n extractable: boolean, \n keyUsages: KeyUsage[],\n format: any = \"pkcs8\" //\"raw\" | \"pkcs8\" | \"spki\"\n ) {\n \n const buffer = this.pemToArrayBuffer(pem);\n\n console.log('buffer found ', buffer);\n \n return from(crypto.subtle.importKey(\n format,\n buffer,\n algorithm,\n extractable,\n keyUsages\n ))\n\n }\n \n // TESTING\n\n testGenerateKeys(): Observable<string> {\n const testSequence: BehaviorSubject<string> = new BehaviorSubject<string>(\"\");\n const testSequence$: Observable<string> = testSequence.asObservable();\n testSequence.next(\"Test Generating Keys\");\n\n // GENERATE KEYS\n this.generateKeyPair().subscribe((data) => {\n\n console.log(\"GEN-GENERATED KEYS: \", data)\n\n crypto.subtle.exportKey('spki', data.publicKey)\n .then(key => {\n const publicKeyBase64 = this.arrayBufferToBase64(key);\n console.log(\"GEN-EXPORT PUBLIC KEY: \", this.base64ToPEM(publicKeyBase64, true));\n })\n\n crypto.subtle.exportKey('pkcs8', data.privateKey)\n .then(key => {\n const privateKeyBase64 = this.arrayBufferToBase64(key);\n console.log(\"GEN-EXPORT PRIVATE KEY: \", this.base64ToPEM(privateKeyBase64, false));\n });\n\n // TEST WITH GENERATED KEYS\n this.encryptData(data.publicKey, \"Sample Data here - Mike Bonifacio\")\n .subscribe((enc) => {\n\n console.log(\"GEN-ENCRYPT==>: \", enc)\n\n this.decryptData(data.privateKey, enc).subscribe((dec) => {\n testSequence.next('Test Passed');\n testSequence.complete();\n })\n\n })\n\n })\n return testSequence$;\n\n }\n\n testDecryptionWithKeys(): Observable<string> {\n const testSequence: BehaviorSubject<string> = new BehaviorSubject<string>(\"\");\n const testSequence$: Observable<string> = testSequence.asObservable();\n testSequence.next(\"Test Generating Keys\");\n\n const privateKey = `-----BEGIN PRIVATE KEY-----\n MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDKVBkCWNb9eHVF\n twAA5mdAyvXFix3WavdrsoYRkvtCl8ogDBQf8f6N0bRkDF1zcVHRrNAEyozXDtuD\n kFgSiivBFREI7fiS3sOvduq6FaGXzX0IY6oaVMu8oOPgDvC0yvoohR+0Qxq2d6lP\n SPyHeKQaxP4KxzCJJzB1XAcbd2eFzUUDv25mNlwdVkmW8FI/sAxnJLgPTW78dzfX\n Ddfk+nxdIqxVKSLATnL0kMN7aGJx24UozioAIpzvvvF5/+7HTd1gi6NeCqrAYr3g\n iP364AE26CFwFvHnafO9uNQhlQ+uiNnOoInXByfFGVP+RidSpfLzaxDjs6RDwpol\n h098btONAgMBAAECggEAAVhHM2OD5IkUtuowwcKNaCTKGmrClRE3gMuzJeBsSJEy\n uAReUFILZylcnhegDytSti2vDA9T7xqtO6CU0p3V8LpU89JMOPRb/deirI4UXSpx\n xbNyjirOO6bnrNlOWfKexdQQsikYPzF2iM1Scpr1u9ZDCHZOl1ZYSrkve5My4coP\n 3Gx6tTBqL0jQBfcpf4ES8BH3JSawR/MgqzDS74+bI2VH+kvuPAC1L4fBgaV3VUv0\n nFzim5A3s5VaXPgJbEIghP9BkYGFkeT9ma3nliEZWc96AzsmowFn1ayCvrNVPo9R\n ECD2NnttBiCJZt3H93sR9+OTeA8Bls+aZGlKd5mLAQKBgQDpf8nIYUm/Zmls7/lQ\n QBUSGHEYrbjNsEejQsPgNDtg2EVSxdUkvTn7Wb+HExTk09Z5bNvhaO2532/FH9y8\n ahSXafiMXpfR2olwXdOB9yXXl4F5C0LGnmzGim4OSeWzAX0JCL470KaS0QN3EmoG\n 9F0YCfMnZXNTweSSx4xvlO6ggQKBgQDd01uIolm7z1DIWCwNERAXP2GDwcvxyzYK\n YqJfKDeHt2t6yIzZMMotnPDy+OlcdGspIIHkB5a+SZN5Nt7DUKg/MnyOZ3KbVq41\n k7dR4Ka3LRnGkesy7lSr7ef1rfquyR75OXJQcPWvkFcLu0TMiQhvptatZ8VN+F4n\n fDQELRotDQKBgQCgN+AUT7VT0QjcCBnRV/ddUEoiPenFsYSmYMSYzh5ESIHg1wB2\n 0iS79Iw4Of6nOTg8X1bM57vfQ5Kk90T2P+/bKYqzfqC8DTErWiYsUpKzyTC9Bt4N\n /Vz0Kr5zrX8ggg/yp/4oevYhXav8AzWfigNq4EDpMnKc8TlPAf+5/L50gQKBgQC2\n mLPhPhr1gUszD3l7bA89w7uGlLFHoQoj9FtKTzWervp3QLzIT+QtNeIVb5XQuDg5\n y3uAdEq+6pvNjMBEMJG+K9Xh9v+dJPYUPjsJ2A4D/MkZ7qWX8B2cxSJK1uLim8W2\n S3ZxBvsGgJ9WldmlMCvUlJZkeWYtr4P5psC+q02/xQKBgQCDII/jcV2+lRM2iNTe\n vBijZSaNMEWOK/Y+/HFK8GYKXnB+xNWhrm8rKgWGzpDJAUPMh9Tt+leW9LKEBuzF\n Y1bGblmGm1zsPWpIx05Fdtv9eOJmFnXbGzIsYyhadZnPcQOWhqxtpVxSuul0Jc7Q\n XNq4qPaPXhbQAshgtyBt75DMkw==\n -----END PRIVATE KEY-----`\n \n const pubKey = `-----BEGIN PUBLIC KEY-----\n MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylQZAljW/Xh1RbcAAOZn\n QMr1xYsd1mr3a7KGEZL7QpfKIAwUH/H+jdG0ZAxdc3FR0azQBMqM1w7bg5BYEoor\n wRURCO34kt7Dr3bquhWhl819CGOqGlTLvKDj4A7wtMr6KIUftEMatnepT0j8h3ik\n GsT+CscwiScwdVwHG3dnhc1FA79uZjZcHVZJlvBSP7AMZyS4D01u/Hc31w3X5Pp8\n XSKsVSkiwE5y9JDDe2hicduFKM4qACKc777xef/ux03dYIujXgqqwGK94Ij9+uAB\n NughcBbx52nzvbjUIZUProjZzqCJ1wcnxRlT/kYnUqXy82sQ47OkQ8KaJYdPfG7T\n jQIDAQAB\n -----END PUBLIC KEY-----`\n\n const algorithm: RsaHashedKeyGenParams = {\n name: \"RSA-OAEP\",\n modulusLength: 2048,\n publicExponent: new Uint8Array([1, 0, 1]),\n hash: \"SHA-256\"\n };\n\n // ENCRYPT\n this.pemToCryptoKey(\n pubKey,\n algorithm,\n true,\n [\"encrypt\"],\n \"spki\"\n ).subscribe((keyPublic) => {\n\n // console.log(\"PUBLIC KEY: \", keyPublic)\n\n this.encryptData(keyPublic, \"Sample Data here - Mike Bonifacio\")\n .subscribe((str) => {\n console.log(\"ENCRYPTED STRING: \", str);\n testSequence.next('encrypted string success');\n })\n\n })\n\n const enc = \"r7UOuEGBZ6jbVTOIBuv9jFOEtRiedmS27hfW40k7XKCTsQ5VhWup0qu2BA2ANZaGKii/uehJ/RSPiyfGbJ6leJrat0mA1hPqH/XodaBzLMDigvdYM1NSXFZMDa40OpLUIXbPlAvybjcGu7Bal+LMA8htHrFu/OmM/fHI66xOzzpuXSYx0OkWjtY81rUQ1FFkvrkx2jGFPZ0p+Nw/v3Q4cJnet6V63vCueFlD749VMcVXo7pvz4AIPpB+IOy3kbxaYTPakLVioJERU6GFMXWkECuRvohhS9CETcORZtRVRkvhcHk3lxgIhfqojUKYgD6K5dDELDPsWIS+iTG1XIQIlg==\";\n\n // DECRYPTION\n this.pemToCryptoKey(\n privateKey,\n algorithm,\n false,\n [\"decrypt\"],\n \"pkcs8\"\n ).subscribe((key) => {\n\n // console.log(\"DECRYPT ===\", key)\n\n this.decryptData(key, enc)\n .pipe(\n catchError(err => {\n console.log(\"ERROR: \", err);\n return EMPTY\n })\n ).subscribe((str) => {\n console.log(\"DECRYPTED STRING: \", str);\n testSequence.next('decrypted string success');\n })\n\n })\n\n return testSequence$;\n };\n}\n","import { OperatorFunction } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { HttpEventType } from '@angular/common/http';\n\nexport function requestStreaming(): OperatorFunction<any, any> {\n\n return input$ => input$.pipe(\n filter((event: any) =>\n event.type === HttpEventType.DownloadProgress || event.type === HttpEventType.Response\n ),\n\n map((event: any) => {\n\n if (event.type === HttpEventType.DownloadProgress) {\n return event.partialText || ''\n } else if (event.type === HttpEventType.Response) {\n return event.body\n }\n\n }),\n\n map((data: any) => {\n if (typeof data === 'string') {\n const matches = data.match(/{[^}]+}/g) || []\n return (matches.length > 0) ? matches.map(match => JSON.parse(match)) : data\n }\n return data\n })\n )\n\n}\n\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WebsocketService {\n\n private socket: WebSocket | null = null;\n\n private messages = new BehaviorSubject<any>(null);\n public messages$: Observable<any> = this.messages.asObservable();\n\n private connectionStatus = new BehaviorSubject<boolean>(false);\n public connectionStatus$: Observable<boolean> = this.connectionStatus.asObservable();\n\n connect(url: string, jwtToken?: string) {\n\n if (this.socket) return;\n\n const URL = (jwtToken) ? `${url}?token=${jwtToken}` : url;\n\n this.socket = new WebSocket(URL);\n\n this.socket.onopen = () => {\n console.log(`📡 Connected to WebSocket`);\n this.connectionStatus.next(true);\n };\n\n this.socket.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n\n if (data.error && data.error === 'JWT_INVALID') {\n console.error('JWT validation failed. Authentication error!');\n this.connectionStatus.next(false);\n this.socket?.close();\n return;\n }\n\n this.messages.next(data);\n\n } catch (error) {\n console.error('Error parsing WebSocket message:', event.data);\n }\n\n };\n\n this.socket.onclose = () => {\n console.log('WebSocket connection closed');\n this.connectionStatus.next(false);\n this.socket = null;\n };\n\n this.socket.onerror = (error) => {\n console.error('WebSocket error:', error);\n this.connectionStatus.next(false);\n };\n }\n\n disconnect() {\n if (this.socket) {\n this.socket.close();\n this.socket = null;\n }\n }\n\n subscribeToChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'subscribe', subscribedChannel: channel }));\n console.log(`💬 Subscribed to channel: ${channel}`);\n } else {\n console.error('WebSocket is not open. Cannot subscribe to channel.');\n }\n }\n\n unsubscribeToChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'unsubscribe', subscribedChannel: channel }));\n console.log(`💬 Unsubscribed to channel: ${channel}`);\n } else {\n console.error('WebSocket is not open. Cannot unsubscribed to channel.');\n }\n }\n\n sendMessage(channel: string, content: any) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'message', subscribedChannel: channel, content }));\n console.log(`💬 Send message: ${content}`);\n } else {\n console.error('WebSocket is not open. Cannot send message.');\n }\n }\n\n sendBroadcast(content: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'broadcast', content }));\n console.log(`📢 Send broadcast: ${content}`);\n } else {\n console.error('WebSocket is not open. Cannot send broadcast.');\n }\n }\n\n getAllChannels() {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'getChannels' }));\n console.log('🗂️ List of all channels');\n } else {\n console.error('WebSocket is not open. Cannot request channels.');\n }\n }\n\n createChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'createChannel', content: channel }));\n console.log('🗂️ Created channel:', channel);\n } else {\n console.error('WebSocket is not open. Cannot request channels.');\n }\n }\n\n deleteChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'deleteChannel', content: channel }));\n console.log('🗂️ Delete channel:', channel);\n } else {\n console.error('WebSocket is not open. Cannot request channels.');\n }\n }\n\n getUsersInChannel(channel: string) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify({ type: 'getUsers', subscribedChannel: channel }));\n console.log(`👥 List all users in channel: ${channel}`);\n } else {\n console.error('WebSocket is not open. Cannot request users.');\n }\n }\n\n}\n","import { HttpClient, HttpEvent, HttpEventType, HttpHeaderResponse } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject, Observable, throwError } from 'rxjs';\nimport { catchError, delay, finalize, map } from 'rxjs/operators';\n\nimport { ApiRequest } from '../request-manager-state-service/models/api-request.model';\nimport { PathQueryService, HeadersService } from '../utils';\nimport { requestStreaming } from './rxjs-operators/request-streaming';\nimport { WebsocketService } from '../ws-manager-service/websocket.service';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RequestService extends WebsocketService {\n\n private http = inject(HttpClient)\n\n private pathQueryService = inject(PathQueryService)\n private headersService = inject(HeadersService)\n\n isPending = new BehaviorSubject<boolean>(false)\n isPending$ = this.isPending.asObservable().pipe(delay(1))\n\n progress = new BehaviorSubject<number>(0)\n progress$ = this.progress.asObservable()\n\n getRecordRequest<T>(options: ApiRequest): Observable<T> {\n\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildCombinedHeaders(options);\n\n this.isPending.next(true);\n\n return (options.stream)\n ? this.http.get<any>(urlPath, headers).pipe(\n requestStreaming(),\n this.handleFinalize()\n )\n : this.http.get<T>(urlPath, headers).pipe(\n this.request(options),\n )\n }\n\n createRecordRequest<T>(options: ApiRequest, data: any): Observable<T> {\n\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildCombinedHeaders(options);\n\n this.isPending.next(true);\n\n return (options.stream)\n ? this.http.post<any>(urlPath, data, headers).pipe(\n requestStreaming(),\n this.handleFinalize()\n )\n : this.http.post<T>(urlPath, data, headers).pipe(\n this.request(options),\n )\n }\n\n updateRecordRequest<T>(options: ApiRequest, data: any): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildHeaders(options);\n\n this.isPending.next(true);\n\n return this.http.put<any>(urlPath, data, headers).pipe(\n this.request(options),\n )\n }\n\n deleteRecordRequest<T>(options: ApiRequest): Observable<T> {\n\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildHeaders(options);\n\n this.isPending.next(true);\n\n return this.http.delete<any>(urlPath, headers).pipe(\n this.request(options),\n )\n }\n\n // Helper functions\n private buildUrlPath(options: ApiRequest): string {\n return this.pathQueryService.buildAPIPath(options.server, options.path);\n }\n\n private buildHeaders(options: ApiRequest): any {\n return this.headersService.generateHeaders(options.headers);\n }\n\n private buildCombinedHeaders(options: ApiRequest): any {\n const headers = this.headersService.generateHeaders(options.headers)\n return this.combineHeaders(headers, options.stream || false)\n }\n\n private request<T>(options: ApiRequest): (source: Observable<any>) => Observable<T> {\n return (source$: Observable<any>): Observable<T> => {\n return source$.pipe(\n map(data => {\n if (options?.adapter) {\n return Array.isArray(data)\n ? data.map((item: any) => options.adapter(item))\n : options.adapter(data)\n }\n return data\n })\n )\n }\n }\n\n downloadFileRequest(options: ApiRequest): Observable<any> {\n\n this.isPending.next(true);\n\n const urlPath = this.buildUrlPath(options);\n\n return this.http.get(urlPath, { responseType: 'blob', observe: 'events', reportProgress: true })\n .pipe(\n map((event: HttpEvent<any>) => {\n\n this.isPending.next(true)\n\n if (event instanceof HttpHeaderResponse) {\n if(event.status !== 200) {\n this.isPending.next(false)\n throw new Error('Download failed');\n }\n }\n\n // 0\tSent\tRequest has been sent.\n // 1\tUploadProgress\tUpload is in progress.\n // 2\tResponseHeader\tResponse headers received.\n // 3\tDownloadProgress\tDownload is in progress.\n // 4\tResponse\tResponse is fully received.\n // 5\tUser\tCustom user event.\n\n switch (event.type) {\n\n case HttpEventType.DownloadProgress:\n\n const status = (event.total) ? Math.round(event.loaded / (event.total || 1) * 100) : 100\n this.progress.next(status)\n return status\n\n case HttpEventType.Response:\n\n try {\n\n const fileNamePath = (options?.saveAs) ? options.saveAs : (options.path) ? options.path[options.path.length - 1] : []\n const header_content = event.headers.get('Content-Disposition') || '';\n // checks if header_content is not empty and splits the header_content to get the file name\n // otherwise, it will use the fileDownload - contains the file name and extension\n const file = (header_content) ? header_content.split('=')[1].substring(0, header_content.split('=')[1].length) : ''\n\n const fileName = (fileNamePath !== '') ? fileNamePath : file\n\n if (fileName === '') {\n this.isPending.next(false);\n throw new Error('Save File: (file name and extension) not found in Headers or Path');\n }\n\n this.downloadFile(fileName, event.body)\n this.isPending.next(false)\n\n return 100\n\n } catch (error) {\n throw new Error('Download failed');\n }\n\n default:\n this.isPending.next(false)\n return 0\n }\n\n }),\n catchError(err => {\n return throwError(() => err)\n })\n )\n }\n\n private handleFinalize(): (source: Observable<any>) => Observable<any> {\n return finalize(() => this.isPending.next(false));\n }\n\n private downloadFile(file:string, fileData: any) {\n\n const navigatorAny = window.navigator as any\n\n const extension = file.split('.')[1].toLowerCase()\n\n var newBlob = new Blob([fileData], { type: this.createFileType(extension) })\n\n if (navigatorAny.msSaveOrOpenBlob) {\n navigatorAny.msSaveOrOpenBlob(newBlob, file)\n } else {\n const link = document.createElement('a')\n const url = window.URL.createObjectURL(newBlob)\n link.href = url\n link.download = file\n link.click()\n window.URL.revokeObjectURL(url)\n }\n\n }\n\n private createFileType(ext: any): string {\n\n let fileType: string = \"\"\n\n if (ext == 'pdf' || ext == 'csv') {\n fileType = `application/${ext}`\n }\n else if (ext == 'jpeg' || ext == 'jpg' || ext == 'png') {\n fileType = `image/${ext}`\n }\n else if (ext == 'txt') {\n fileType = 'text/plain'\n }\n\n else if (ext == 'ppt' || ext == 'pot' || ext == 'pps' || ext == 'ppa') {\n fileType = 'application/vnd.ms-powerpoint'\n }\n else if (ext == 'pptx') {\n fileType = 'application/vnd.openxmlformats-officedocument.presentationml.presentation'\n }\n else if (ext == 'doc' || ext == 'dot') {\n fileType = 'application/msword'\n }\n else if (ext == 'docx') {\n fileType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n }\n else if (ext == 'xls' || ext == 'xlt' || ext == 'xla') {\n fileType = 'application/vnd.ms-excel'\n }\n else if (ext == 'xlsx') {\n fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n }\n\n return fileType\n\n }\n\n private combineHeaders(headers: any, isStreaming: boolean) {\n\n return (isStreaming) ?\n {\n ...headers,\n observe: 'events',\n responseType: 'text',\n reportProgress: true,\n Accept: 'text/event-stream'\n }\n : headers\n\n }\n\n}\n","import { Observable, defer, interval } from 'rxjs';\nimport { takeWhile, map, tap } from 'rxjs/operators';\n\nexport function countdown(duration: number): Observable<number> {\n\n return defer(() => {\n\n const currentCount = { current: duration }\n\n return interval(1000).pipe(\n map(() => --currentCount.current),\n takeWhile(count => count >= 0)\n )\n\n })\n\n}\n","import { Observable, timer } from 'rxjs';\nimport { retry } from 'rxjs/operators';\n\nconst DEFAULT_MAX_RETRIES = 3;\n\nexport function delayedRetry<T>(delayMs: number, maxRetry = DEFAULT_MAX_RETRIES) {\n return (src: Observable<T>) =>\n src.pipe(\n retry({\n count: maxRetry,\n delay: () => timer(delayMs)\n })\n );\n}\n\n\n","import { Observable, interval } from 'rxjs';\nimport { mergeMap, startWith, takeUntil, tap } from 'rxjs/operators';\n\nexport function requestPolling<T>(pollInterval: number, stopCondition$: Observable<any>, isPending$: any) {\n return (source: Observable<T>): Observable<T> => {\n return interval(pollInterval * 1000)\n .pipe(\n startWith(0),\n tap(() => {\n try {\n if (isPending$ && typeof isPending$.next === 'function') {\n isPending$.next(true);\n } else if (isPending$ && typeof isPending$.set === 'function') {\n isPending$.set(true);\n }\n } catch (e) {\n // no-op if setting fails\n }\n }),\n mergeMap(() => source),\n tap(() => {\n try {\n if (isPending$ && typeof isPending$.next === 'function') {\n isPending$.next(false);\n } else if (isPending$ && typeof isPending$.set === 'function') {\n isPending$.set(false);\n }\n } catch (e) {\n // no-op if setting fails\n }\n }),\n takeUntil(stopCondition$),\n );\n };\n}\n","import { DataType } from \"./data-type.enum\"\n\nexport interface DatabaseStorageInterface {\n table: string\n expiresIn: string\n}\n\nexport class DatabaseStorage implements DatabaseStorageInterface {\n \n constructor(\n public table = '',\n public expiresIn: '',\n ) {}\n\n static adapt(item?: any): DatabaseStorage {\n\n return new DatabaseStorage(\n item?.table,\n item?.expiresIn,\n )\n\n }\n\n}\n","export interface RetryOptionsInterface {\n times?: number // total request to be made including initial request\n delay?: number // seconds (<= 3 default 3 seconds)\n}\n\nexport class RetryOptions implements RetryOptionsInterface {\n\n constructor(\n public times = 0,\n public delay = 3,\n ) {}\n\n static adapt(item?: any): RetryOptions {\n\n return new RetryOptions(\n item?.times,\n item?.delay\n )\n\n }\n\n}\n","export enum DataType {\n ANY = 0,\n ARRAY,\n OBJECT\n}\n","import { RetryOptions } from \"./retry-options.model\"\n\nexport interface ConfigHTTPOptionsInterface {\n server: string\n path?: any[]\n headers?: any\n polling?: number // seconds (undefined | 0 = none)\n retry?: RetryOptions\n stream?: boolean\n displayError?: boolean\n}\n\nexport class ConfigHTTPOptions implements ConfigHTTPOptionsInterface {\n\n constructor(\n public server = '',\n public path?: any[],\n public headers?: any,\n public polling?: number,\n public retry?: RetryOptions,\n public stream?: boolean,\n public displayError?: boolean,\n ) {}\n\n static adapt(item?: any): ConfigHTTPOptions {\n\n const server = Array.isArray(item?.server) ? item.server.join('/') : item?.server || '';\n const retryOptions = item?.retry ? RetryOptions.adapt(item.retry) : RetryOptions.adapt();\n\n return new ConfigHTTPOptions(\n server,\n (item?.path) ? item.path : [],\n (item?.headers) ? item.headers : {},\n item?.polling ? Math.floor(item.polling) : 0,\n retryOptions,\n (item?.stream) ? item.stream : false,\n (item?.displayError) ? item.displayError : false,\n )\n\n }\n\n}\n","import { SettingOptions } from \"../services\"\n\nexport interface LocalStorageOptionsInterface {\n storageName?: string\n storageSettingsName?: string\n options?: SettingOptions,\n}\n\nexport class LocalStorageOptions implements LocalStorageOptionsInterface {\n\n constructor(\n public storageName?: string,\n public storageSettingsName?: string,\n public options?: SettingOptions,\n ) {}\n\n static adapt(item?: any): LocalStorageOptions {\n\n return new LocalStorageOptions(\n (item?.storageName) ? item.storageName : 'storage',\n (item?.storageSettingsName) ? item.storageSettingsName : 'global-storage',\n (item?.options) ? SettingOptions.adapt(item.options) : SettingOptions.adapt(),\n )\n\n }\n\n}\n","import { ConfigHTTPOptions } from \"./config-http-options.model\";\nimport { LocalStorageOptions } from \"./config-local-storage-options.model\";\n\nexport interface ConfigOptionsInterface {\n httpRequestOptions?: ConfigHTTPOptions\n LocalStorageOptions?: LocalStorageOptions\n // DatabaseOptions: any\n}\n\nexport class ConfigOptions implements ConfigOptionsInterface {\n\n constructor(\n public httpRequestOptions?: ConfigHTTPOptions,\n public LocalStorageOptions?: LocalStorageOptions,\n // public DatabaseOptions?: any,\n ) {}\n\n static adapt(item?: any): ConfigOptions {\n return new ConfigOptions(\n (item?.httpRequestOptions) ? ConfigHTTPOptions.adapt(item.httpRequestOptions) : undefined,\n (item?.LocalStorageOptions) ? LocalStorageOptions.adapt(item.LocalStorageOptions) : undefined,\n // item?.DatabaseOptions,\n )\n\n }\n\n}\n","import { Inject, inject, Injectable, Injector, Optional } from '@angular/core';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { BehaviorSubject, Observable, Subject, throwError } from 'rxjs';\nimport { tap, map, finalize, catchError } from 'rxjs/operators';\n\nimport { ApiRequest } from '../request-manager-state-service/models/api-request.model';\nimport { RequestService } from './request.service';\nimport { requestPolling, countdown, delayedRetry } from './rxjs-operators';\n\nimport { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display';\n\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigOptions } from '../../models';\nimport { ObjectMergerService } from '../utils/object-merger.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HTTPManagerService<T> extends RequestService {\n\n toastMessage = inject(ToastMessageDisplayService)\n ng_injector = inject(Injector)\n objectMergerService = inject(ObjectMergerService)\n\n private countdown = new BehaviorSubject<number>(0);\n countdown$ = this.countdown.asObservable();\n\n private error = new BehaviorSubject<boolean>(false);\n error$ = this.error.asObservable();\n\n private data = new BehaviorSubject<any>(null)\n data$ = this.data.asObservable()\n\n private polling$ = new Subject<void>();\n\n config = ApiRequest.adapt();\n\n constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {\n super()\n this.config = (configOptions) ? ApiRequest.adapt(configOptions.httpRequestOptions) : this.config\n }\n\n // REQUESTS\n\n getRequest<T>(options?: ApiRequest, params?: any[]) {\n\n this.isPending.next(true);\n this.data.next(null)\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.getRecordRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name)\n .pipe(\n tap(data => this.data.next(data))\n ).pipe(\n finalize(() => this.isPending.next(false)),\n catchError((err) => {\n if(updatedOptions.displayError) this.handleErrorWithSnackBar(err)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n }\n\n postRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {\n\n this.isPending.next(true);\n this.data.next(null)\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.createRecordRequest;\n const requests = this.createRequest(func, updatedOptions, data);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(tap(data => this.data.next(data)))\n .pipe(\n finalize(() => this.isPending.next(false)),\n catchError((err) => {\n if(updatedOptions.displayError) this.handleErrorWithSnackBar(err)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n }\n\n putRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {\n\n this.isPending.next(true);\n this.data.next(null)\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.updateRecordRequest;\n const requests = this.createRequest(func, updatedOptions, data);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(tap(data => this.data.next(data)))\n .pipe(\n finalize(() => this.isPending.next(false)),\n catchError((err) => {\n if(updatedOptions.displayError) this.handleErrorWithSnackBar(err)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n }\n\n deleteRequest<T>(options: ApiRequest, params?: any[]) {\n\n this.isPending.next(true);\n this.data.next(null)\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.deleteRecordRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(tap(data => this.data.next(data)))\n .pipe(\n finalize(() => this.isPending.next(false)),\n catchError((err) => {\n if(updatedOptions.displayError) this.handleErrorWithSnackBar(err)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n }\n\n downloadRequest<T>(options: ApiRequest, params?: any[], saveAs?: string) {\n\n this.isPending.next(true);\n\n const updatedOptions = this.defineReqOptions(options, params)\n const func = this.downloadFileRequest;\n const requests = this.createRequest(func, updatedOptions)\n\n return this.createObservable<T>(updatedOptions, requests, func.name)\n .pipe(\n catchError((err) => {\n this.error.next(true)\n this.isPending.next(false)\n return this.handleError(err);\n })\n )\n\n }\n\n private createObservable<T>(options: ApiRequest, request$: Observable<T>, funcName: string) {\n\n const polling = options.polling ? (options.polling > 0 ? true : false) : false;\n const isPolling =\n polling &&\n !(funcName === 'deleteRecordRequest' || funcName === 'updateRecordRequest' || funcName === 'createRecordRequest')\n ? true\n : false;\n\n this.polling$.next();\n\n const polling$ =\n (isPolling && options.polling) || 0 >= 3\n ? request$.pipe(\n requestPolling((options.polling || 0) + 1, this.polling$, this.isPending),\n tap(() => this.countdown.next(0)),\n tap(() => {\n if (!options.polling) return;\n const count = options.polling ? options.polling : 0;\n // console.log('COUNT:', count);\n countdown(count)\n .pipe(\n map((x: number) => {\n // console.log('XX:', count, x);\n const pollingInSec = options.polling || 0;\n const percentageCompleted = ((pollingInSec - x) / pollingInSec) * 100;\n return Math.round(percentageCompleted);\n })\n )\n .subscribe((countDownValue: number) => {\n // console.log(this.countdown.value, countDownValue);\n this.countdown.next(countDownValue);\n });\n }),\n )\n : request$.pipe(\n catchError((err: any) => {\n\n if (err instanceof HttpErrorResponse) {\n this.error.next(true);\n return this.handleError(err);\n }\n\n return throwError(() => err);\n }),\n // finalize(() => this.isPending.next(false))\n )\n\n return polling$.pipe(\n catchError((err: any, caught: Observable<T>) => {\n\n if (err instanceof HttpErrorResponse) {\n this.error.next(true);\n if(isPolling) this.stopPolling();\n return this.handleError(err);\n }\n\n return throwError(() => err);\n }),\n (options?.retry && options.retry.times > 0)\n ? delayedRetry((options.retry.delay || 3) * 1000, (options.retry.times || 0) - 1)\n : (source: Observable<T>) => source\n );\n }\n\n private createRequest(func: Function, options: ApiRequest, data?: any | any[]) {\n const dataItem = this.prepareRequestData(options, data, func.name);\n return func.bind(this)(dataItem.options, dataItem.data);\n }\n\n private prepareRequestData(options: ApiRequest, data: any, funcName: string) {\n\n if ((options.mapper && funcName === 'updateRecordRequest') || funcName === 'createRecordRequest') {\n if (options?.mapper) {\n data = options.mapper\n ? Array.isArray(data)\n ? map((item) => options.mapper(item))\n : options.mapper(data)\n : data;\n }\n } else {\n if (options?.adapter) {\n data = Array.isArray(data)\n ? map((item) => options.adapter(item))\n : options.adapter(data)\n }\n }\n\n return { options: options, data: data };\n }\n\n // MISC\n\n private handleError(error: Response | any) {\n this.error.next(error.message || `${error.status} - ${error.statusText}`)\n return throwError(() => error)\n }\n\n private handleErrorWithSnackBar(error: Response | any) {\n\n const displayError = ToastDisplay.adapt({\n message: error.message || `${error.status} - ${error.statusText}`,\n action: 'OK',\n color: ToastColors.ERROR,\n icon: 'error',\n duration: 5 * 1000, //5 seconds\n })\n\n this.toastMessage.toastMessage(displayError)\n\n }\n\n private stopPolling() {\n this.isPending.next(false);\n this.polling$.next();\n }\n\n private defineReqOptions(options: any, params?: any[]) {\n\n const req = ApiRequest.adapt(options)\n if(req?.path) req.path = (params) ? [...req.path, ...params] : req.path\n\n const optionsReq = (req)? req : ApiRequest.adapt()\n const updatedOptions = this.objectMergerService.mergeOptions(optionsReq)\n\n return updatedOptions\n\n }\n}\n","import { HttpClient, HttpEvent, HttpEventType, HttpHeaderResponse } from '@angular/common/http';\nimport { Injectable, inject, signal, computed } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, finalize, map } from 'rxjs/operators';\n\nimport { ApiRequest } from '../request-manager-state-service/models/api-request.model';\nimport { PathQueryService, HeadersService } from '../utils';\nimport { requestStreaming } from './rxjs-operators/request-streaming';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RequestSignalsService {\n\n private http = inject(HttpClient);\n private pathQueryService = inject(PathQueryService);\n private headersService = inject(HeadersService);\n\n isPending = signal(false);\n progress = signal(0);\n\n isIdle = computed(() => !this.isPending());\n\n getRecordRequest<T>(options: ApiRequest): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildCombinedHeaders(options);\n\n this.isPending.set(true);\n\n return (options.stream)\n ? this.http.get<any>(urlPath, headers).pipe(\n requestStreaming(),\n this.handleFinalize()\n )\n : this.http.get<T>(urlPath, headers).pipe(\n this.request(options),\n this.handleFinalize()\n );\n }\n\n createRecordRequest<T>(options: ApiRequest, data: any): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildCombinedHeaders(options);\n\n this.isPending.set(true);\n\n return (options.stream)\n ? this.http.post<any>(urlPath, data, headers).pipe(\n requestStreaming(),\n this.handleFinalize()\n )\n : this.http.post<T>(urlPath, data, headers).pipe(\n this.request(options),\n this.handleFinalize()\n );\n }\n\n updateRecordRequest<T>(options: ApiRequest, data: any): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildHeaders(options);\n\n this.isPending.set(true);\n\n return this.http.put<any>(urlPath, data, headers).pipe(\n this.request(options),\n this.handleFinalize()\n );\n }\n\n deleteRecordRequest<T>(options: ApiRequest): Observable<T> {\n const urlPath = this.buildUrlPath(options);\n const headers = this.buildHeaders(options);\n\n this.isPending.set(true);\n\n return this.http.delete<any>(urlPath, headers).pipe(\n this.request(options),\n this.handleFinalize()\n );\n }\n\n private buildUrlPath(options: ApiRequest): string {\n return this.pathQueryService.buildAPIPath(options.server, options.path);\n }\n\n private buildHeaders(options: ApiRequest): any {\n return this.headersService.generateHeaders(options.headers);\n }\n\n private buildCombinedHeaders(options: ApiRequest): any {\n const headers = this.headersService.generateHeaders(options.headers);\n return this.combineHeaders(headers, options.stream || false);\n }\n\n private request<T>(options: ApiRequest): (source: Observable<any>) => Observable<T> {\n return (source$: Observable<any>): Observable<T> => {\n return source$.pipe(\n map(data => {\n if (options?.adapter) {\n return Array.isArray(data)\n ? data.map((item: any) => options.adapter(item))\n : options.adapter(data);\n }\n return data;\n })\n );\n };\n }\n\n downloadFileRequest(options: ApiRequest): Observable<any> {\n this.isPending.set(true);\n\n const urlPath = this.buildUrlPath(options);\n\n return this.http.get(urlPath, { responseType: 'blob', observe: 'events', reportProgress: true })\n .pipe(\n map((event: HttpEvent<any>) => {\n this.isPending.set(true);\n\n if (event instanceof HttpHeaderResponse) {\n if (event.status !== 200) {\n this.isPending.set(false);\n throw new Error('Download failed');\n }\n }\n\n switch (event.type) {\n case HttpEventType.DownloadProgress:\n const status = (event.total) ? Math.round(event.loaded / (event.total || 1) * 100) : 100;\n this.progress.set(status);\n return status;\n\n case HttpEventType.Response:\n try {\n const fileNamePath = (options?.saveAs) ? options.saveAs : (options.path) ? options.path[options.path.length - 1] : [];\n const header_content = event.headers.get('Content-Disposition') || '';\n const file = (header_content) ? header_content.split('=')[1].substring(0, header_content.split('=')[1].length) : '';\n\n const fileName = (fileNamePath !== '') ? fileNamePath : file;\n\n if (fileName === '') {\n this.isPending.set(false);\n throw new Error('Save File: (file name and extension) not found in Headers or Path');\n }\n\n this.downloadFile(fileName, event.body);\n this.isPending.set(false);\n\n return 100;\n\n } catch (error) {\n throw new Error('Download failed');\n }\n\n default:\n this.isPending.set(false);\n return 0;\n }\n }),\n catchError(err => {\n return throwError(() => err);\n })\n );\n }\n\n private handleFinalize(): (source: Observable<any>) => Observable<any> {\n return finalize(() => this.isPending.set(false));\n }\n\n private downloadFile(file: string, fileData: any) {\n const navigatorAny = window.navigator as any;\n const extension = file.split('.')[1]?.toLowerCase();\n const newBlob = new Blob([fileData], { type: this.createFileType(extension) });\n\n if (navigatorAny.msSaveOrOpenBlob) {\n navigatorAny.msSaveOrOpenBlob(newBlob, file);\n } else {\n const link = document.createElement('a');\n const url = window.URL.createObjectURL(newBlob);\n link.href = url;\n link.download = file;\n link.click();\n window.URL.revokeObjectURL(url);\n }\n }\n\n private createFileType(ext: string): string {\n let fileType = \"\";\n\n if (ext === 'pdf' || ext === 'csv') fileType = `application/${ext}`;\n else if (ext === 'jpeg' || ext === 'jpg' || ext === 'png') fileType = `image/${ext}`;\n else if (ext === 'txt') fileType = 'text/plain';\n else if (ext === 'ppt' || ext === 'pot' || ext === 'pps' || ext === 'ppa') fileType = 'application/vnd.ms-powerpoint';\n else if (ext === 'pptx') fileType = 'application/vnd.openxmlformats-officedocument.presentationml.presentation';\n else if (ext === 'doc' || ext === 'dot') fileType = 'application/msword';\n else if (ext === 'docx') fileType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n else if (ext === 'xls' || ext === 'xlt' || ext === 'xla') fileType = 'application/vnd.ms-excel';\n else if (ext === 'xlsx') fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n\n return fileType;\n }\n\n private combineHeaders(headers: any, isStreaming: boolean) {\n return (isStreaming)\n ? {\n ...headers,\n observe: 'events',\n responseType: 'text',\n reportProgress: true,\n Accept: 'text/event-stream'\n }\n : headers;\n }\n}\n","import { Inject, inject, Injectable, Injector, Optional, signal } from '@angular/core';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Observable, Subject, throwError } from 'rxjs';\nimport { tap, map, finalize, catchError } from 'rxjs/operators';\n\nimport { ApiRequest } from '../request-manager-state-service/models/api-request.model';\nimport { RequestSignalsService } from './request-signals.service'; // 👈 updated\nimport { requestPolling, countdown, delayedRetry } from './rxjs-operators';\n\nimport { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigOptions } from '../../models';\nimport { ObjectMergerService } from '../utils/object-merger.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HTTPManagerSignalsService<T> extends RequestSignalsService { // 👈 use signals service\n\n toastMessage = inject(ToastMessageDisplayService);\n ng_injector = inject(Injector);\n objectMergerService = inject(ObjectMergerService);\n\n // ✅ Replaced BehaviorSubjects with Angular signals\n countdown = signal<number>(0);\n error = signal<string | boolean>(false);\n data = signal<any>(null);\n\n private polling$ = new Subject<void>();\n\n config = ApiRequest.adapt();\n\n constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {\n super();\n this.config = configOptions\n ? ApiRequest.adapt(configOptions.httpRequestOptions)\n : this.config;\n }\n\n // REQUESTS\n getRequest<T>(options?: ApiRequest, params?: any[]) {\n this.isPending.set(true);\n this.data.set(null);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.getRecordRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n tap(data => this.data.set(data)),\n finalize(() => this.isPending.set(false)),\n catchError((err) => {\n if (updatedOptions.displayError) this.handleErrorWithSnackBar(err);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n postRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {\n this.isPending.set(true);\n this.data.set(null);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.createRecordRequest;\n const requests = this.createRequest(func, updatedOptions, data);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n tap(data => this.data.set(data)),\n finalize(() => this.isPending.set(false)),\n catchError((err) => {\n if (updatedOptions.displayError) this.handleErrorWithSnackBar(err);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n putRequest<T extends { id?: number|string }>(data: T, options: ApiRequest, params?: any[]) {\n this.isPending.set(true);\n this.data.set(null);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.updateRecordRequest;\n const requests = this.createRequest(func, updatedOptions, data);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n tap(data => this.data.set(data)),\n finalize(() => this.isPending.set(false)),\n catchError((err) => {\n if (updatedOptions.displayError) this.handleErrorWithSnackBar(err);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n deleteRequest<T>(options: ApiRequest, params?: any[]) {\n this.isPending.set(true);\n this.data.set(null);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.deleteRecordRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n tap(data => this.data.set(data)),\n finalize(() => this.isPending.set(false)),\n catchError((err) => {\n if (updatedOptions.displayError) this.handleErrorWithSnackBar(err);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n downloadRequest<T>(options: ApiRequest, params?: any[], saveAs?: string) {\n this.isPending.set(true);\n\n const updatedOptions = this.defineReqOptions(options, params);\n const func = this.downloadFileRequest;\n const requests = this.createRequest(func, updatedOptions);\n\n return this.createObservable<T>(updatedOptions, requests, func.name).pipe(\n catchError((err) => {\n this.error.set(true);\n this.isPending.set(false);\n return this.handleError(err);\n })\n );\n }\n\n // --- private helpers ---\n private createObservable<T>(options: ApiRequest, request$: Observable<T>, funcName: string) {\n const polling =\n options.polling ? (options.polling > 0 ? true : false) : false;\n\n const isPolling =\n polling &&\n !(funcName === 'deleteRecordRequest' ||\n funcName === 'updateRecordRequest' ||\n funcName === 'createRecordRequest');\n\n this.polling$.next();\n\n const polling$ =\n (isPolling && options.polling) || 0 >= 3\n ? request$.pipe(\n requestPolling((options.polling || 0) + 1, this.polling$, this.isPending),\n tap(() => this.countdown.set(0)),\n tap(() => {\n if (!options.polling) return;\n const count = options.polling ? options.polling : 0;\n countdown(count)\n .pipe(\n map((x: number) => {\n const pollingInSec = options.polling || 0;\n const percentageCompleted = ((pollingInSec - x) / pollingInSec) * 100;\n return Math.round(percentageCompleted);\n })\n )\n .subscribe((countDownValue: number) => {\n this.countdown.set(countDownValue);\n });\n }),\n )\n : request$.pipe(\n catchError((err: any) => {\n if (err instanceof HttpErrorResponse) {\n this.error.set(true);\n return this.handleError(err);\n }\n return throwError(() => err);\n })\n );\n\n return polling$.pipe(\n catchError((err: any, caught: Observable<T>) => {\n if (err instanceof HttpErrorResponse) {\n this.error.set(true);\n if (isPolling) this.stopPolling();\n return this.handleError(err);\n }\n return throwError(() => err);\n }),\n options?.retry && options.retry.times > 0\n ? delayedRetry((options.retry.delay || 3) * 1000, (options.retry.times || 0) - 1)\n : (source: Observable<T>) => source\n );\n }\n\n private createRequest(func: Function, options: ApiRequest, data?: any | any[]) {\n const dataItem = this.prepareRequestData(options, data, func.name);\n return func.bind(this)(dataItem.options, dataItem.data);\n }\n\n private prepareRequestData(options: ApiRequest, data: any, funcName: string) {\n if ((options.mapper && funcName === 'updateRecordRequest') || funcName === 'createRecordRequest') {\n if (options?.mapper) {\n data = options.mapper\n ? Array.isArray(data)\n ? map((item) => options.mapper(item))\n : options.mapper(data)\n : data;\n }\n } else {\n if (options?.adapter) {\n data = Array.isArray(data)\n ? map((item) => options.adapter(item))\n : options.adapter(data);\n }\n }\n return { options: options, data: data };\n }\n\n private handleError(error: Response | any) {\n this.error.set(error.message || `${error.status} - ${error.statusText}`);\n return throwError(() => error);\n }\n\n private handleErrorWithSnackBar(error: Response | any) {\n const displayError = ToastDisplay.adapt({\n message: error.message || `${error.status} - ${error.statusText}`,\n action: 'OK',\n color: ToastColors.ERROR,\n icon: 'error',\n duration: 5 * 1000,\n });\n this.toastMessage.toastMessage(displayError);\n }\n\n private stopPolling() {\n this.isPending.set(false);\n this.polling$.next();\n }\n\n private defineReqOptions(options: any, params?: any[]) {\n const req = ApiRequest.adapt(options);\n if (req?.path) req.path = params ? [...req.path, ...params] : req.path;\n\n const optionsReq = req ? req : ApiRequest.adapt();\n const updatedOptions = this.objectMergerService.mergeOptions(optionsReq);\n\n return updatedOptions;\n }\n}\n","import { RetryOptions } from \"../../request-manager-services\"\nimport { WSOptions } from \"./ws-options.model\"\n\nexport interface ApiRequestInterface {\n server: string\n path?: any[]\n headers?: any\n adapter?: any\n mapper?: any\n polling?: number // seconds (undefined | 0 = none)\n retry?: RetryOptions\n stream?: boolean\n displayError?: boolean\n saveAs?: string\n ws?: WSOptions // Websocket Options\n}\n\nexport class ApiRequest implements ApiRequestInterface {\n\n constructor(\n public server = '',\n public path?: any[],\n public headers?: any,\n public adapter?: any,\n public mapper?: any,\n public polling?: number,\n public retry?: RetryOptions,\n public stream?: boolean,\n public displayError?: boolean,\n public saveAs?: string,\n public ws?: WSOptions,\n ) {}\n\n static adapt(item?: any): ApiRequest {\n\n const server = Array.isArray(item?.server) ? item.server.join('/') : item?.server || '';\n\n return new ApiRequest(\n server,\n (item?.path) ? item.path : [],\n (item?.headers) ? item.headers : {},\n item?.adapter,\n item?.mapper,\n item?.polling ? Math.floor(item.polling) : 0,\n item?.retry ? RetryOptions.adapt(item.retry) : RetryOptions.adapt(),\n (item?.stream) ? item.stream : false,\n (item?.displayError) ? item.displayError : false,\n item?.saveAs,\n item?.ws,\n )\n\n }\n\n}\n","export interface RequestOptionsInterface {\n path: any[],\n headers: any,\n}\n\nexport class RequestOptions implements RequestOptionsInterface {\n\n constructor(\n public path: any[] = [],\n public headers = {},\n ) {}\n\n static adapt(item?: any): RequestOptions {\n\n return new RequestOptions(\n item?.path,\n item?.headers,\n )\n\n }\n\n}\n","import { Inject, Injectable, Optional, inject } from '@angular/core';\n\nimport { ApiRequest } from '../request-manager-state-service/models';\nimport { SettingOptions } from '../local-storage-manager-service';\nimport { UtilsService } from '../utils/utils.service';\n\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigHTTPOptions, ConfigOptions, LocalStorageOptions } from '../request-manager-services';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ObjectMergerService {\n\n utils = inject(UtilsService);\n\n constructor(@Inject(CONFIG_SETTINGS_TOKEN) @Optional() private configOptions?: ConfigOptions) {\n if (!this.configOptions) this.configOptions = ConfigOptions.adapt()\n }\n\n mergeOptions(options = ApiRequest.adapt()) {\n\n const configForRoot = (this.configOptions?.httpRequestOptions) ? this.configOptions.httpRequestOptions : ConfigHTTPOptions.adapt()\n const mergedOptions = ApiRequest.adapt(options)\n\n mergedOptions.server = (options && options.server === '') ? configForRoot?.server || '' : options.server\n\n mergedOptions.path = [ ...options.path || [], ...configForRoot?.path || [] ]\n\n mergedOptions.headers = { ...options.headers || {}, ...configForRoot?.headers || {} }\n\n mergedOptions.retry = (options && (options?.retry?.times !== 0 || options?.retry?.delay !== 3)) ? options.retry : configForRoot?.retry || { times: 0, delay: 3 };\n\n mergedOptions.polling = (options && options?.polling !== 0) ? options.polling : configForRoot?.polling || 0;\n\n mergedOptions.displayError = (options && options?.displayError) ? options.displayError : configForRoot?.displayError || false;\n\n mergedOptions.stream = (options && options?.stream) ? options.stream : configForRoot?.stream || false;\n\n return mergedOptions;\n\n }\n\n mergeStorageOptions(options = SettingOptions.adapt()) {\n\n const configForRoot = (this.configOptions?.LocalStorageOptions) ? this.configOptions.LocalStorageOptions : LocalStorageOptions.adapt()\n const configForRootOptions = configForRoot.options || LocalStorageOptions.adapt().options\n\n const mergedOptions = SettingOptions.adapt(options)\n\n // storage type\n mergedOptions.storage = (options && (typeof options.storage !== 'undefined')) ? options.storage : (configForRootOptions?.storage ?? 0)\n\n // expires: prefer explicit numeric expires; if not provided, compute from expiresIn string; otherwise use config default\n // if an explicit, non-zero numeric expires is provided, use it\n if (options && (typeof options.expires !== 'undefined') && options.expires !== null && Number(options.expires) > 0) {\n mergedOptions.expires = Number(options.expires);\n } else if (options && options.expiresIn) {\n // compute numeric epoch from expiresIn string using UtilsService if available\n try {\n mergedOptions.expires = this.utils ? this.utils.expires(options.expiresIn) : 0;\n } catch {\n mergedOptions.expires = 0;\n }\n } else {\n mergedOptions.expires = configForRootOptions?.expires ?? 0;\n }\n\n // keep expiresIn string if explicitly provided, otherwise use config default\n mergedOptions.expiresIn = (options && (typeof options.expiresIn !== 'undefined')) ? options.expiresIn : (configForRootOptions?.expiresIn || '')\n\n mergedOptions.encrypted = (options && (typeof options.encrypted !== 'undefined')) ? options.encrypted : (configForRootOptions?.encrypted || false)\n\n return mergedOptions;\n\n }\n\n}\n","import { Inject, Injectable, OnDestroy, Optional, inject } from '@angular/core';\nimport { ComponentStore } from '@ngrx/component-store';\nimport { withLatestFrom, map, tap } from 'rxjs/operators';\n\nimport { UtilsService } from '../utils/utils.service';\nimport { SymmetricalEncryptionService } from '../utils/encryption/symmetrical-encryption.service';\n\nimport { StorageOption, StorageType } from './models';\nimport { SettingOptions } from './models/setting-options.model';\nimport { StorageData } from './models/storage-data.model';\nimport { EncryptionTestService } from '../utils/encryption/encryption-test.service';\nimport { interval } from 'rxjs';\nimport { AppService } from '../utils/app.service';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigOptions } from '../request-manager-services';\nimport { ObjectMergerService } from '../utils/object-merger.service';\n\nexport interface State {\n localStores: StorageData[]\n sessionStores: StorageData[]\n settings: StorageOption[]\n}\n\nconst storage: State = {\n localStores: [],\n sessionStores: [],\n settings: [],\n};\n\n@Injectable({ providedIn: 'root' })\nexport class LocalStorageManagerService extends ComponentStore<State> implements OnDestroy {\n\n storageName = 'storage'\n storageSettingsName = 'global-storage'\n defaultOptions = SettingOptions.adapt()\n\n stateRetrieved = false\n encrypted = false\n\n app = inject(AppService)\n utils = inject(UtilsService)\n objectMergerService = inject(ObjectMergerService)\n encryption = inject(SymmetricalEncryptionService)\n encryptionTest = inject(EncryptionTestService)\n\n // SELECTORS\n\n private readonly data$ = this.select((state) => state)\n\n readonly stores$ = this.select((state) => state.settings)\n\n readonly storeExists$ = (store: string) => this.select(\n this.data$,\n (data) => data.settings.find(item => item.name === store) ? true : false\n )\n\n readonly store$ = (store: string) => this.select(\n this.data$,\n (data) => {\n\n const foundStore = data.settings.find(item => item.name === store)\n\n if(foundStore) {\n\n const options = SettingOptions.adapt(foundStore.options)\n\n const found = foundStore.options?.storage === StorageType.GLOBAL\n ? data.localStores.find(item => item.id === foundStore.id) as StorageData\n : data.sessionStores.find(item => item.id === foundStore.id) as StorageData\n\n if(!found) {\n this.deleteStore({ name: store })\n return\n }\n\n if(!this.app?.appID) {\n console.warn('No App ID found - AppId not Provided')\n return\n }\n\n const storageData = (options.encrypted) ? this.encryption.decrypt(found.data, this.app.appID) : found.data\n return (this.isString(storageData)) ? JSON.parse(storageData): storageData\n\n } else {\n return null\n }\n\n }\n )\n\n readonly settings$ = this.select(state => (state) ? state.settings : storage.settings)\n\n readonly setting$ = (store: string) => this.select(\n this.data$,\n (state) => {\n const foundSetting = state.settings.find(item => item.name === store)\n return (foundSetting) ? foundSetting : null\n }\n )\n\n persistence$ = this.data$\n .subscribe(data => {\n if(this.stateRetrieved) this.persistState(data)\n })\n\n startTimer() {\n const timer$ = interval(1000 * 3).pipe(\n withLatestFrom(this.data$),\n map(([_, state]) => state),\n tap((state) => {\n\n const expired: StorageOption[] = this.expired(state) ? this.expired(state) : []\n\n if (expired.length > 0) {\n\n const ids = expired.map((item) => item.id)\n\n const updatedState: State = {\n ...state,\n localStores: state.localStores.filter((item) => !ids.includes(item.id)),\n sessionStores: state.sessionStores.filter((item) => !ids.includes(item.id)),\n settings: state.settings.filter((item) => !ids.includes(item.id)),\n };\n\n this.persistState(updatedState)\n this.updateState(updatedState)\n\n }\n })\n );\n\n timer$.subscribe()\n }\n\n private updateState = this.updater((state, updatedState: State) => ({\n ...updatedState,\n }))\n\n\n constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {\n\n super(storage)\n\n this.storageName = configOptions?.LocalStorageOptions?.storageName || this.storageName\n this.storageSettingsName = configOptions?.LocalStorageOptions?.storageSettingsName || this.storageSettingsName\n this.defaultOptions = configOptions?.LocalStorageOptions?.options || this.defaultOptions\n\n this.retrieveState()\n this.startTimer()\n }\n\n readonly setStore = this.updater((state: State, store: { id: string, name: string, data: any, options: SettingOptions }): any => {\n\n const settings = StorageOption.adapt(store)\n settings.options = this.objectMergerService.mergeStorageOptions(settings.options)\n\n const type = store.options.storage\n const hasStore = this.hasGlobalStorage(type, store.id)\n\n store.name = this.validStoreName(store.name)\n\n if(!hasStore) {\n console.warn(`No such Store: ${store.name}`)\n return state\n } else {\n\n const str = this.encryptionTest.isEncrypted(store.data) ? store.data : JSON.stringify(store.data)\n const dataStr = (this.isObjectOrArray(str)) ? (store.options.encrypted) ? this.encryption.encrypt(str, this.app.appID) : store.data : store.data\n\n const localData = (dataStr && settings.options?.storage === StorageType.GLOBAL) ? [{ data: dataStr, id: settings.id }] : []\n const sessionData = (dataStr && settings.options?.storage === StorageType.SESSION) ? [{ data: dataStr, id: settings.id }] : []\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n settings: [...state.settings, ...[settings]],\n }\n\n }\n\n })\n\n readonly createStore = this.updater((state: State, store: { id?: string, name: string, data: any, options: SettingOptions }): any => {\n\n const settings = StorageOption.adapt(store)\n settings.options = this.objectMergerService.mergeStorageOptions(settings.options)\n const foundStore = state?.settings.some(item => item.name === store.name)\n\n const expires = (settings.options?.expiresIn) ? this.utils.expires(settings.options?.expiresIn) : 0\n if(settings.options) settings.options.expires = expires\n\n store.name = this.validStoreName(store.name)\n\n if(foundStore) {\n return state\n } else {\n if(!this.isObjectOrArray(store.data)) {\n console.warn('Data must ba an Object or Array')\n return\n }\n\n store.data = (this.isString(store.data)) ? JSON.parse(store.data) : store.data\n const dataStr = (store.options.encrypted) ? this.encryption.encrypt(store.data, this.app.appID) : store.data\n\n const localData = (settings.options?.storage === StorageType.GLOBAL) ? [{ data: dataStr, id: settings.id }] : []\n const sessionData = (settings.options?.storage === StorageType.SESSION) ? [{ data: dataStr, id: settings.id }] : []\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n settings: [...state.settings, ...[settings]],\n }\n\n }\n\n })\n\n readonly updateStore = this.updater((state: State, store: { name: string, data: any }): any => {\n\n store.name = this.validStoreName(store.name)\n\n const settings = state.settings.find(item => item.name === store.name)\n\n if(settings) {\n\n const type = settings.options?.storage\n const hasStore = this.hasGlobalStorage(type, settings.id || '')\n\n if(!hasStore) {\n console.warn(`No such Store: ${store.name}`)\n } else {\n\n const dataStr = (settings.options?.encrypted) ? this.encryption.encrypt(store.data, this.app.appID) : store.data\n\n const localData = (dataStr && settings.options?.storage === StorageType.GLOBAL) ? [{ data: dataStr, id: settings.id }] : []\n const sessionData = (dataStr && settings.options?.storage === StorageType.SESSION) ? [{ data: dataStr, id: settings.id }] : []\n\n state.localStores = state.localStores.filter(item => item.id !== settings.id)\n state.sessionStores = state.sessionStores.filter(item => item.id !== settings.id)\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n }\n\n }\n }\n\n return state\n\n })\n\n readonly deleteStore = this.updater((state: State, store: { name: string }): any => {\n\n store.name = this.validStoreName(store.name)\n\n const id = state.settings.find(item => item.name === store.name)?.id\n\n if(id) {\n\n const settings = state.settings.filter(item => item.id !== id)\n const localData = state.localStores.filter(item => item.id !== id)\n const sessionData = state.sessionStores.filter(item => item.id !== id)\n\n return {\n ...state,\n localStores: [...localData],\n sessionStores: [...sessionData],\n settings: [...settings],\n }\n\n } else {\n console.warn(`No such Store: ${store.name}`)\n return state\n }\n\n })\n\n resetStore() {\n\n const newState = {\n localStores: [],\n sessionStores: [],\n settings: [],\n }\n\n this.updateState(newState)\n this.persistState(newState)\n\n }\n\n private persistState(state: State|null) {\n\n if(!state) return\n\n const strLocal = JSON.stringify(state.localStores)\n localStorage.setItem(this.storageName, strLocal)\n\n const strSession = JSON.stringify(state.sessionStores)\n sessionStorage.setItem(this.storageName, strSession)\n\n const settingsStr = this.encryption.encrypt(state.settings, this.app.appID)\n localStorage.setItem(this.storageSettingsName, settingsStr || '')\n\n }\n\n private expired(state: State|null) {\n\n if(!state) return []\n return state.settings?.filter(item => (item.options?.expires || 0) > 0 && this.utils.hasExpired(item.options?.expires || 0))\n\n }\n\n retrieveState() {\n\n const str = localStorage.getItem(this.storageSettingsName)\n\n const localStr = localStorage.getItem(this.storageName)\n const sessionStr = sessionStorage.getItem(this.storageName)\n\n const localData: StorageData[] = (localStr) ? JSON.parse(localStr) : null\n const sessionData: StorageData[] = (sessionStr) ? JSON.parse(sessionStr) : null\n\n const decryptedStr = str ? this.encryption.decrypt(str, this.app.appID) : null\n const settings: StorageOption[] = (decryptedStr && decryptedStr !== null) ? JSON.parse(decryptedStr) : []\n\n settings.forEach(store => {\n\n const expired = (store.options?.expires || 0) > 0 && this.utils.hasExpired(store.options?.expires || 0)\n\n if(!expired) {\n\n const hasStorage = this.hasGlobalStorage(store.options?.storage, store.id || '')\n\n if(!hasStorage) {\n this.createStore({ id: store.id, name: store.name, data: [], options: SettingOptions.adapt(store.options)})\n } else {\n const storeData = (store.options?.storage === StorageType.GLOBAL) ? localData.find(item => item.id === store.id) : sessionData.find(item => item.id === store.id)\n this.setStore({ id: store.id || '', name: store.name, data: storeData?.data, options: SettingOptions.adapt(store.options) })\n }\n\n }\n\n })\n\n this.stateRetrieved = true\n\n }\n\n private isObjectOrArray = (obj: any) => {\n\n let parsed;\n\n try {\n parsed = (typeof obj === 'object') ? obj : JSON.parse(obj)\n } catch (e) {\n return false;\n }\n\n if (Array.isArray(parsed)) {\n const allStringsOrObjectsOrNumbers = parsed.every(item =>\n typeof item === 'string' ||\n typeof item === 'object' && item !== null ||\n typeof item === 'number'\n );\n return allStringsOrObjectsOrNumbers;\n }\n\n return typeof parsed === 'object' && parsed !== null;\n\n }\n\n private isString (obj: any) {\n return (Object.prototype.toString.call(obj) === '[object String]')\n }\n\n private fixAndParseJSON(jsonString: string): any {\n const fixedString = jsonString\n .replace(/'/g, '\"')\n .replace(/([{,]\\s*)(\\w+)\\s*:/g, '$1\"$2\":')\n .replace(/,\\s*(\\}|\\])/g, '$1');\n\n try {\n return JSON.parse(fixedString);\n } catch (error: any) {\n throw new Error('Failed to parse JSON: ' + error.message);\n }\n }\n\n private validStoreName(str: string) {\n return str\n .toLowerCase() // Convert to lowercase\n .replace(/\\s+/g, '_') // Replace spaces with underscores\n .replace(/[^ -~]/g, ''); // Remove non-ASCII characters\n }\n\n private hasGlobalStorage(type: StorageType = StorageType.GLOBAL, id: string) {\n\n const strData: StorageOption[] = []\n\n if(type === StorageType.GLOBAL) {\n const str = localStorage.getItem(this.storageName)\n strData.push(...(str ? JSON.parse(str) : []))\n } else {\n const str = sessionStorage.getItem(this.storageName)\n strData.push(...(str ? JSON.parse(str) : []))\n }\n\n const found = strData.find(store => store.id === id)\n return (found) ? true : false\n\n }\n\n override ngOnDestroy() {\n this.persistence$.unsubscribe()\n }\n\n}\n","import { Inject, Injectable, Optional, WritableSignal, signal, computed, effect, inject } from '@angular/core';\n\nimport { UtilsService } from '../utils/utils.service';\nimport { SymmetricalEncryptionService } from '../utils/encryption/symmetrical-encryption.service';\n\nimport { StorageOption, StorageType } from './models';\nimport { SettingOptions } from './models/setting-options.model';\nimport { StorageData } from './models/storage-data.model';\nimport { EncryptionTestService } from '../utils/encryption/encryption-test.service';\nimport { AppService } from '../utils/app.service';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\nimport { ConfigOptions } from '../request-manager-services';\nimport { ObjectMergerService } from '../utils/object-merger.service';\n\nexport interface State {\n localStores: StorageData[];\n sessionStores: StorageData[];\n settings: StorageOption[];\n}\n\nconst initialState: State = {\n localStores: [],\n sessionStores: [],\n settings: [],\n};\n\n@Injectable({ providedIn: 'root' })\nexport class LocalStorageSignalsManagerService {\n\n private state: WritableSignal<State> = signal(initialState);\n\n storageName = 'storage';\n storageSettingsName = 'global-storage';\n defaultOptions = SettingOptions.adapt();\n\n stateRetrieved = false;\n encrypted = false;\n\n app = inject(AppService);\n utils = inject(UtilsService);\n objectMergerService = inject(ObjectMergerService);\n encryption = inject(SymmetricalEncryptionService);\n encryptionTest = inject(EncryptionTestService);\n\n // --- SELECTORS ---\n\n readonly stores = computed(() => this.state().settings);\n\n readonly storeExists = (store: string) =>\n computed(() => !!this.state().settings.find(item => item.name === store));\n\n readonly store = (store: string) =>\n computed(() => {\n const data = this.state();\n const foundStore = data.settings.find(item => item.name === store);\n if (!foundStore) return null;\n\n const options = SettingOptions.adapt(foundStore.options);\n const found =\n options.storage === StorageType.GLOBAL\n ? data.localStores.find(item => item.id === foundStore.id)\n : data.sessionStores.find(item => item.id === foundStore.id);\n\n if (!found) {\n this.deleteStore({ name: store });\n return null;\n }\n\n if (!this.app?.appID) {\n console.warn('No App ID found - AppId not Provided');\n return null;\n }\n\n const storageData = options.encrypted\n ? this.encryption.decrypt(found.data, this.app.appID)\n : found.data;\n\n return this.isString(storageData) ? JSON.parse(storageData) : storageData;\n });\n\n readonly settings = computed(() => this.state().settings);\n\n readonly setting = (store: string) =>\n computed(() => this.state().settings.find(item => item.name === store) ?? null);\n\n constructor(@Optional() @Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) {\n this.storageName = configOptions?.LocalStorageOptions?.storageName || this.storageName;\n this.storageSettingsName = configOptions?.LocalStorageOptions?.storageSettingsName || this.storageSettingsName;\n this.defaultOptions = configOptions?.LocalStorageOptions?.options || this.defaultOptions;\n\n this.retrieveState();\n // Auto-persist when state changes\n effect(() => {\n if (this.stateRetrieved) {\n this.persistState(this.state());\n }\n });\n\n // Expiration timer every 3s\n setInterval(() => {\n const state = this.state();\n const expired = this.expired(state);\n if (expired.length > 0) {\n const ids = expired.map(i => i.id);\n const updated: State = {\n ...state,\n localStores: state.localStores.filter(i => !ids.includes(i.id)),\n sessionStores: state.sessionStores.filter(i => !ids.includes(i.id)),\n settings: state.settings.filter(i => !ids.includes(i.id)),\n };\n this.state.set(updated);\n this.persistState(updated);\n }\n }, 3000);\n }\n\n // --- STATE MUTATORS ---\n\n setStore(store: { id: string; name: string; data: any; options: SettingOptions }) {\n this.state.update(state => {\n const settings = StorageOption.adapt(store);\n settings.options = this.objectMergerService.mergeStorageOptions(settings.options);\n store.name = this.validStoreName(store.name);\n\n const str = this.encryptionTest.isEncrypted(store.data) ? store.data : JSON.stringify(store.data);\n const dataStr =\n this.isObjectOrArray(str) && store.options.encrypted\n ? this.encryption.encrypt(str, this.app.appID)\n : store.data;\n\n const localData =\n dataStr && settings.options?.storage === StorageType.GLOBAL\n ? [{ data: dataStr, id: settings.id }]\n : [];\n const sessionData =\n dataStr && settings.options?.storage === StorageType.SESSION\n ? [{ data: dataStr, id: settings.id }]\n : [];\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n settings: [...state.settings, settings],\n };\n });\n }\n\n createStore(store: { id?: string; name: string; data: any; options: SettingOptions }) {\n this.state.update(state => {\n const settings = StorageOption.adapt(store);\n settings.options = this.objectMergerService.mergeStorageOptions(settings.options);\n\n if (state.settings.some(item => item.name === store.name)) {\n return state;\n }\n\n if (!this.isObjectOrArray(store.data)) {\n console.warn('Data must be an Object or Array');\n return state;\n }\n\n const dataStr =\n store.options.encrypted ? this.encryption.encrypt(store.data, this.app.appID) : store.data;\n\n const localData =\n settings.options?.storage === StorageType.GLOBAL ? [{ data: dataStr, id: settings.id }] : [];\n const sessionData =\n settings.options?.storage === StorageType.SESSION ? [{ data: dataStr, id: settings.id }] : [];\n\n return {\n ...state,\n localStores: [...state.localStores, ...localData],\n sessionStores: [...state.sessionStores, ...sessionData],\n settings: [...state.settings, settings],\n };\n });\n }\n\n updateStore(store: { name: string; data: any }) {\n this.state.update(state => {\n const settings = state.settings.find(item => item.name === store.name);\n if (!settings) return state;\n\n const dataStr =\n settings.options?.encrypted\n ? this.encryption.encrypt(store.data, this.app.appID)\n : store.data;\n\n const localData =\n settings.options?.storage === StorageType.GLOBAL ? [{ data: dataStr, id: settings.id }] : [];\n const sessionData =\n settings.options?.storage === StorageType.SESSION ? [{ data: dataStr, id: settings.id }] : [];\n\n return {\n ...state,\n localStores: [...state.localStores.filter(i => i.id !== settings.id), ...localData],\n sessionStores: [...state.sessionStores.filter(i => i.id !== settings.id), ...sessionData],\n };\n });\n }\n\n deleteStore(store: { name: string }) {\n this.state.update(state => {\n const id = state.settings.find(item => item.name === store.name)?.id;\n if (!id) return state;\n return {\n ...state,\n localStores: state.localStores.filter(i => i.id !== id),\n sessionStores: state.sessionStores.filter(i => i.id !== id),\n settings: state.settings.filter(i => i.id !== id),\n };\n });\n }\n\n resetStore() {\n const cleared: State = { localStores: [], sessionStores: [], settings: [] };\n this.state.set(cleared);\n this.persistState(cleared);\n }\n\n // --- HELPERS ---\n\n private persistState(state: State) {\n localStorage.setItem(this.storageName, JSON.stringify(state.localStores));\n sessionStorage.setItem(this.storageName, JSON.stringify(state.sessionStores));\n const settingsStr = this.encryption.encrypt(state.settings, this.app.appID);\n localStorage.setItem(this.storageSettingsName, settingsStr || '');\n }\n\n private expired(state: State) {\n return state.settings.filter(\n s => (s.options?.expires || 0) > 0 && this.utils.hasExpired(s.options?.expires!)\n );\n }\n\n retrieveState() {\n\n const str = localStorage.getItem(this.storageSettingsName);\n\n const localStr = localStorage.getItem(this.storageName);\n const sessionStr = sessionStorage.getItem(this.storageName);\n\n const localData: StorageData[] = localStr ? JSON.parse(localStr) : [];\n const sessionData: StorageData[] = sessionStr ? JSON.parse(sessionStr) : [];\n\n const decryptedStr = str ? this.encryption.decrypt(str, this.app.appID) : null;\n const settings: StorageOption[] = decryptedStr ? JSON.parse(decryptedStr) : [];\n\n settings.forEach(store => {\n\n\n // normalize options so we compare numbers and compute expires correctly\n const options = SettingOptions.adapt(store.options);\n\n // if persisted data included expiresIn but not numeric expires, compute it now\n if ((!options.expires || options.expires === 0) && options.expiresIn) {\n try {\n const computed = this.utils.expires(options.expiresIn as string);\n options.expires = computed || 0;\n } catch {\n options.expires = 0;\n }\n }\n\n const expired = (options.expires || 0) > 0 && this.utils.hasExpired(options.expires || 0);\n\n if (!expired) {\n\n const hasStorage = this.hasGlobalStorage(options.storage, store.id || '');\n\n if (!hasStorage) {\n this.createStore({ id: store.id, name: store.name, data: [], options });\n } else {\n const storeData = (options.storage === StorageType.GLOBAL)\n ? localData.find(item => item.id === store.id)\n : sessionData.find(item => item.id === store.id);\n this.setStore({ id: store.id || '', name: store.name, data: storeData?.data, options });\n }\n\n }\n\n });\n\n this.stateRetrieved = true;\n\n // Ensure all stored settings have numeric expires computed and persisted\n try {\n const current = this.state();\n let changed = false;\n const normalizedSettings = current.settings.map(s => {\n const opts = SettingOptions.adapt(s.options);\n if ((!opts.expires || opts.expires === 0) && opts.expiresIn) {\n const computed = this.utils.expires(opts.expiresIn as string) || 0;\n if (computed && computed !== opts.expires) {\n opts.expires = computed;\n changed = true;\n }\n }\n return { ...s, options: opts } as StorageOption;\n });\n\n if (changed) {\n const updated: State = { ...current, settings: normalizedSettings };\n this.state.set(updated);\n this.persistState(updated);\n }\n } catch (e) {\n // swallow normalization errors to avoid breaking init\n }\n\n }\n\n private hasGlobalStorage(type: StorageType = StorageType.GLOBAL, id: string) {\n const strData: StorageData[] = [];\n\n if (type === StorageType.GLOBAL) {\n const str = localStorage.getItem(this.storageName);\n strData.push(...(str ? JSON.parse(str) : []));\n } else {\n const str = sessionStorage.getItem(this.storageName);\n strData.push(...(str ? JSON.parse(str) : []));\n }\n\n const found = strData.find(store => store.id === id);\n return !!found;\n }\n\n private isObjectOrArray(obj: any) {\n try {\n const parsed = typeof obj === 'object' ? obj : JSON.parse(obj);\n return typeof parsed === 'object' && parsed !== null;\n } catch {\n return false;\n }\n }\n\n private isString(obj: any) {\n return Object.prototype.toString.call(obj) === '[object String]';\n }\n\n private validStoreName(str: string) {\n return str.toLowerCase().replace(/\\s+/g, '_').replace(/[^ -~]/g, '');\n }\n}\n","import { inject, Inject, Injectable, InjectionToken } from '@angular/core';\nimport { ComponentStore } from '@ngrx/component-store';\n\nimport { BehaviorSubject, of, Subscription } from 'rxjs';\nimport { tap, switchMap, concatMap, scan, delay } from 'rxjs/operators';\nimport { DatabaseStorage } from '../../models/database-storage.model';\nimport { HTTPManagerService, DataType } from '../request-manager-services';\nimport { ApiRequest, RequestOptions } from './models';\nimport { ChannelInfo } from '../ws-manager-service/models/assortment-data.model';\n\n\nconst API_OPTS = new InjectionToken<ApiRequest>('API_OPTS');\n\nexport interface APIStateManagerData<T> {\n data: T[]\n dataObject: T | null\n}\n\nconst defaultState: APIStateManagerData<any> = {\n data: [],\n dataObject: null,\n};\n\n@Injectable()\nexport class HTTPManagerStateService<T extends { id: number }> extends ComponentStore<APIStateManagerData<T>> {\n\n httpManagerService = inject(HTTPManagerService)\n\n error$ = this.httpManagerService.error$\n isPending$ = this.httpManagerService.isPending$.pipe(delay(1))\n\n // PAGINATION\n private page = new BehaviorSubject<number>(0)\n page$ = this.page.asObservable()\n\n private totalPages = new BehaviorSubject<number>(0)\n totalPages$ = this.totalPages.asObservable()\n\n private percentage = new BehaviorSubject<number>(0)\n percentage$ = this.percentage.asObservable()\n // ----------\n\n private hasDatabase = false\n\n streamedResponse = []\n\n // WS\n status$ = this.httpManagerService.connectionStatus$;\n\n messages$: Subscription | null = null;\n connectionStatus$: Subscription | null = null;\n\n userList: string[] = []\n channels: ChannelInfo[] = []\n channelList: string[] = []\n messages: any[] = []\n wsConnection = false\n\n constructor(\n @Inject(API_OPTS) private apiOptions = ApiRequest.adapt(),\n @Inject(\"dataType\") private dataType: DataType | undefined,\n @Inject(\"database\") private database?: DatabaseStorage | undefined\n ) {\n super(defaultState);\n this.setApiRequestOptions(apiOptions, dataType, database)\n }\n\n setApiRequestOptions(apiOptions?: ApiRequest, dataType?: DataType, database?: DatabaseStorage) {\n\n this.apiOptions = ApiRequest.adapt(apiOptions)\n this.dataType = (dataType) ? dataType : DataType.ARRAY\n\n this.hasDatabase = this.database?.table === \"\" ? false : true\n this.database = (this.hasDatabase) ? DatabaseStorage.adapt(database) : undefined\n\n console.log('WS API Options:', this.apiOptions.ws)\n this.initWS(this.apiOptions.ws)\n }\n\n initWS(wsOptions: any) {\n\n if(wsOptions?.wsServer) this.httpManagerService.connect(wsOptions.wsServer, wsOptions.jwtToken)\n\n // connection status\n this.connectionStatus$ = this.httpManagerService.connectionStatus$\n .subscribe(\n (isConnected: any) => {\n\n this.wsConnection = isConnected\n\n if (isConnected) {\n console.log('🟢 WebSocket connection is open.')\n this.httpManagerService.getAllChannels()\n } else {\n console.log('🔴 WebSocket connection is closed.')\n }\n\n }\n )\n\n // Subscribe to incoming messages\n this.messages$ = this.httpManagerService.messages$\n .subscribe((message: any) => {\n\n if(!message) return\n\n console.log('Received message:', message)\n\n switch (message.type) {\n case 'channelsList':\n\n console.log('💬 Channels:', message.channels)\n\n this.channelList = message.channels\n\n if(this.channelList.includes(wsOptions.id)) {\n this.httpManagerService.subscribeToChannel(wsOptions.id)\n } else {\n this.httpManagerService.createChannel(wsOptions.id)\n }\n\n break;\n\n case 'channelMessage':\n\n console.log('💬 Message:', message.content)\n this.fetchRecord(RequestOptions.adapt({ path: message.content.path }), message.content.method)\n\n break;\n\n case 'usersInChannel':\n\n this.userList = message.users\n console.log('👥 Users:', message.users)\n\n break;\n\n default:\n\n if (message) this.messages.push(message)\n break\n }\n\n })\n\n }\n\n get ApiRequestOptions() {\n return this.apiOptions\n }\n\n initStorage() {\n // if(this.otherOptions.database) {\n // console.log('Has Database Option:', this.otherOptions.database.table)\n // const schema = (this.otherOptions.adapters?.incoming) ? Object.keys(this.otherOptions.adapters.incoming({})).join() : '++id'\n // this.apiService.initDB(this.otherOptions.database.expiresIn, this.otherOptions.database.table, schema)\n // }\n }\n\n initializeState(data: any) {\n this.setData$(data)\n }\n\n // --------------------------------------------------------------------------------------------------\n // SELECTORS\n\n readonly data$ = this.select(({ data, dataObject }) => {\n const isArray =( this.dataType === DataType.ARRAY) ? true : false\n return (isArray) ? data : dataObject\n })\n\n readonly selectRecord$ = (id: number) => this.select(\n this.data$,\n (data) => {\n if (this.dataType === DataType.ARRAY && Array.isArray(data)) {\n return data.find(item => item.id === id) as T | null\n } else {\n return (data as T).id === id ? data : null\n }\n }\n );\n\n // --------------------------------------------------------------------------------------------------\n\n // UPDATERS\n\n private readonly setData$ = this.updater((state: APIStateManagerData<T>, data: T | T[] | any) => {\n\n if (!data) return state;\n\n if (this.dataType === DataType.ARRAY) {\n\n const dataArray = Array.isArray(data) ? data : [data]\n\n const stateDataSample = (state.data.length > 0) ? Object.keys(state.data[0]) : []\n const newDataSample = (dataArray.length > 0) ? Object.keys(dataArray[0]) : []\n\n const isSame = (state.data.length === 0) ? false : stateDataSample.every((value, index) => value === newDataSample[index])\n const updatedData = (!isSame && dataArray.length !== 0) ? this.updateArrayState([], dataArray) : this.updateArrayState(state.data, dataArray)\n\n return { ...state, data: updatedData, dataObject: null } as APIStateManagerData<T>;\n\n } else {\n const dataObject = this.isEmpty(data) ? null : data;\n return { ...state, data: [], dataObject: dataObject } as APIStateManagerData<T>;\n }\n\n });\n\n private updateArrayState(currentData: any[], newData: any[]): any[] {\n\n const filterCurrentData = () => {\n const ids = this.streamedResponse.map((obj: any) => obj.id)\n return currentData.filter(obj => (obj.id) ? ids.includes(obj.id) : obj)\n }\n\n const filteredCurrentData = (this.httpManagerService.isPending.value) ? currentData : filterCurrentData()\n\n const updatedData = filteredCurrentData.map(item => {\n const newItem = newData.find(newItem => {\n const hasId = (newItem?.id && item?.id) ? true : false\n return (hasId) ? newItem.id === item.id : JSON.stringify(newItem) === JSON.stringify(item)\n })\n return (newItem) ? { ...item, ...newItem } : item\n })\n\n const addedData = newData.filter(newItem => {\n return !filteredCurrentData.some(item => {\n const hasId = (newItem?.id && item?.id) ? true : false\n return (hasId) ? item.id === newItem.id : JSON.stringify(newItem) === JSON.stringify(item)\n })\n })\n\n return [...updatedData, ...addedData]\n\n}\n\n private readonly addData$ = this.updater((state: APIStateManagerData<T>, data: T) => {\n\n if (this.dataType === DataType.ARRAY) {\n const exists = state.data.some(item => item.id === data.id);\n\n if (exists) {\n const updatedData = state.data.map(item =>\n item.id === data.id ? data : item\n );\n\n return { ...state, data: updatedData };\n } else {\n const newState = [...state.data, data];\n return { ...state, data: newState };\n }\n } else {\n return { ...state, dataObject: data };\n }\n\n })\n\n private readonly deleteData$ = this.updater((state: APIStateManagerData<T>, data: T & { id: number }) => {\n if (this.dataType === DataType.ARRAY) {\n const newState = state.data.filter(item => item.id !== data.id)\n return { ...state, ...{ data: newState } }\n } else {\n return { ...state, ...{ dataObject: null } }\n }\n })\n\n private readonly updateData$ = this.updater((state: APIStateManagerData<T>, data: T) => {\n\n if (this.dataType === DataType.ARRAY) {\n\n const objIndex = state.data.findIndex(item => item.id === data.id)\n\n if (objIndex > -1) {\n const newState = [...state.data]\n newState[objIndex] = data\n return { ...state, ...{ data: newState } }\n }\n\n return state\n\n } else {\n return { ...state, ...{ dataObject: data } }\n }\n\n })\n\n // --------------------------------------------------------------------------------------------------\n // EFFECTS\n\n readonly clearRecords = this.effect(data =>\n data.pipe(\n tap(() => {\n if (this.dataType === DataType.ARRAY) {\n this.setData$([])\n } else {\n this.setData$({})\n }\n })\n ))\n\n readonly refreshData = this.effect(data =>\n data.pipe(\n tap(() => {\n // this.apiService.flushDatabase(this.otherOptions.database?.table)\n this.fetchRecords()\n })\n ))\n\n // --------------------------------------------------------------------------------------------------\n // CRUD OPERATIONS\n\n // FETCH RECORDS\n readonly fetchRecords = (options?: RequestOptions) =>\n this.effect<any>(() =>\n of(RequestOptions.adapt(options)).pipe(\n switchMap(() => {\n\n this.streamedResponse = []\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.getRequest(requestOptions, options?.path)\n .pipe(\n tap((data: any) => {\n data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data\n this.setData$(data)\n })\n )\n\n })\n )\n )\n\n // FETCH RECORD\n readonly fetchRecord = (options: RequestOptions, method: string) =>\n this.effect<any>(() =>\n of(RequestOptions.adapt(options)).pipe(\n switchMap((options) => {\n\n this.streamedResponse = []\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.getRequest(requestOptions, options?.path)\n .pipe(\n tap((data: any) => {\n\n data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data\n\n const id = (options as any).path?.length ? options.path[options.path.length -1] : 0\n\n if(method === 'DELETE') this.deleteData$({ id } as T & { id: number })\n if(method === 'UPDATE') this.updateData$(data)\n if(method === 'CREATE') this.addData$(data)\n\n })\n )\n\n })\n )\n )\n\n // CREATE RECORD\n readonly createRecord = (data: any|null, options?: RequestOptions) =>\n this.effect<any>(() =>\n of(data).pipe(\n switchMap((data: any) => {\n\n this.streamedResponse = []\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.postRequest(data, requestOptions, options?.path)\n .pipe(\n tap((data: any) => {\n\n data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data\n this.addData$(data)\n\n if(this.wsConnection) this.wsCommunication('CREATE', [...options?.path || [], data.id])\n\n }),\n )\n\n })\n )\n )\n\n // UPDATE RECORD\n readonly updateRecord = (data: any|null, options?: RequestOptions) =>\n this.effect<any>(() =>\n of(data).pipe(\n concatMap((data: any) => {\n\n this.streamedResponse = []\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.putRequest(data, requestOptions, options?.path)\n .pipe(\n tap((data: any) => {\n\n data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data\n this.updateData$(data)\n\n if(this.wsConnection) this.wsCommunication('UPDATE', [...options?.path || []])\n\n }),\n )\n\n })\n )\n )\n\n // DELETE RECORD\n readonly deleteRecord = (options?: RequestOptions) =>\n this.effect<any>(() =>\n of(options).pipe(\n concatMap((data: any) => {\n\n this.streamedResponse = []\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.deleteRequest(requestOptions, options?.path)\n .pipe(\n tap((data: any) => {\n\n data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data\n this.deleteData$(data)\n\n if(this.wsConnection) this.wsCommunication('DELETE', [...options?.path || []])\n\n }),\n )\n\n })\n )\n )\n\n // --------------------------------------------------------------------------------------------------\n // FETCH STREAM\n\n readonly createStream = (data: any|null, options?: RequestOptions) =>\n this.effect<any>(() =>\n of(data).pipe(\n tap(() => this.httpManagerService.isPending.next(true)),\n switchMap((data: any) => {\n\n const requestOptions = this.updateRequestOptions(options?.headers)\n\n return this.httpManagerService.postRequest(data, requestOptions, options?.path)\n .pipe(\n tap((res: any) => {\n if(res.length > 0) this.setData$(res)\n this.streamedResponse = res\n }),\n scan((acc, res: any) => {\n\n const previous = acc.current\n const current = res\n return { previous, current };\n\n }, { previous: null, current: null }),\n tap(({ previous, current }) => {\n\n if(previous && JSON.stringify(previous) === JSON.stringify(current)) {\n this.httpManagerService.isPending.next(false)\n this.setData$([])\n } else {\n this.httpManagerService.isPending.next(true)\n }\n\n })\n )\n\n })\n )\n\n )\n\n readonly fetchStream = (options?: RequestOptions) =>\n this.effect<any>(() =>\n of(options).pipe(\n tap(() => this.httpManagerService.isPending.next(true)),\n switchMap((options: any) => {\n\n const requestOptions = this.updateRequestOptions(options?.headers)\n requestOptions.stream = true\n\n return this.httpManagerService.getRequest(requestOptions, options?.path)\n .pipe(\n tap((res: any) => {\n\n if(res.length > 0) this.setData$(res)\n this.streamedResponse = res\n }),\n scan((acc, res: any) => {\n\n const previous = acc.current\n const current = res\n return { previous, current }\n\n }, { previous: null, current: null }),\n tap(({ previous, current }) => {\n\n if(previous && JSON.stringify(previous) === JSON.stringify(current)) {\n this.httpManagerService.isPending.next(false)\n this.setData$([])\n } else {\n this.httpManagerService.isPending.next(true)\n }\n\n })\n )\n\n }),\n )\n )\n\n private wsCommunication(method: string, path?: string|number[]) {\n\n if(this.wsConnection && this.apiOptions.ws) {\n const wsServer = this.apiOptions.ws.id\n this.httpManagerService.sendMessage(wsServer, { method, path })\n }\n\n }\n\n // --------------------------------------------------------------------------------------------------\n // MISC\n\n private isEmpty(obj: any) {\n return Object.keys(obj).length === 0\n }\n\n private updateRequestOptions(headers?: any): ApiRequest {\n\n const options = ApiRequest.adapt({ ...this.apiOptions })\n\n options.headers = (headers)\n ? { ...options.headers, ...headers }\n : { ...options.headers }\n\n return options\n }\n\n}\n","\n// export * from \"./database-manager-services/index\";\nexport * from \"./local-storage-manager-service/index\";\n\nexport * from \"./request-manager-services/index\";\nexport * from \"./request-manager-state-service/index\";\n\nexport * from \"./utils/index\";\n","export interface ErrorDisplaySettingsInterface {\n displayTime: number\n position: string\n}\n\nexport class ErrorDisplaySettings implements ErrorDisplaySettingsInterface {\n\n constructor(\n public displayTime = 3 * 1000,\n public position = 'top'\n ) {}\n\n static adapt(item?: any): ErrorDisplaySettings {\n\n return new ErrorDisplaySettings(\n (item?.displayTime) ? item.displayTime * 1000 : 3 * 1000,\n item?.position,\n )\n\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class WithCredentialsInterceptor implements HttpInterceptor {\n\n intercept(req: HttpRequest<any>, next: HttpHandler):\n Observable<HttpEvent<any>> {\n\n req = req.clone({ withCredentials: true })\n\n return next.handle(req);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';\nimport { Observable, Subscription } from 'rxjs';\nimport { LangChangeEvent, TranslateService } from '@ngx-translate/core';\n\n@Injectable()\nexport class RequestHeadersInterceptor implements HttpInterceptor {\n\n subscriptions = new Subscription()\n language = 'en-CA'\n\n get currentDate() {\n\n const date = new Date()\n\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const day = String(date.getDate()).padStart(2, '0')\n\n return `${year}-${month}-${day}`\n\n }\n\n constructor(\n private translate: TranslateService\n ) {\n this.subscriptions.add(\n this.translate.onLangChange\n .subscribe((params: LangChangeEvent) => {\n this.language = `${params.lang}-CA`\n })\n )\n }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n request = request.clone({\n setHeaders: {\n 'Content-Type': 'application/json',\n 'Accept-Language': this.language || 'en-CA',\n 'Current-Date': this.currentDate\n }\n })\n\n return next.handle(request)\n\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe()\n }\n}\n\n","import { inject, Injectable } from '@angular/core'\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpErrorResponse } from '@angular/common/http'\nimport { Observable, catchError, throwError } from 'rxjs'\n\nimport { ToastMessageDisplayService, ToastDisplay, ToastColors } from 'toast-message-display'\n\n@Injectable()\nexport class RequestErrorInterceptor implements HttpInterceptor {\n\n toastMessage = inject(ToastMessageDisplayService)\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n return next.handle(req).pipe(\n\n catchError((error: HttpErrorResponse) => {\n\n const displayError = ToastDisplay.adapt({\n message: 'This is a toast message. This is an Error!!',\n action: 'OK',\n color: ToastColors.SUCCESS,\n icon: 'info',\n duration: 5 * 1000, //5 seconds\n })\n\n if (error.status >= 400 && error.status < 500) {\n\n displayError.color = ToastColors.WARN\n displayError.message = error.error || `${error.status}: ${error.statusText}`\n\n console.error('Client Error:', {\n status: error.status,\n message: error.message,\n error: error.error,\n text: error.statusText,\n })\n\n this.toastMessage.toastMessage(displayError)\n\n } else if (error.status >= 500) {\n\n displayError.color = ToastColors.ERROR\n displayError.message = error.error || `${error.status}: ${error.statusText}`\n\n console.error('Server Error:', {\n status: error.status,\n message: error.message,\n error: error.error,\n text: error.statusText,\n })\n\n this.toastMessage.toastMessage(displayError)\n\n }\n\n return throwError(() => error)\n\n })\n\n )\n }\n\n}\n\n\n","export interface ClientInfoInterface {\n domain: string\n service: string\n id: number\n name: string\n}\n\nexport class ClientInfo implements ClientInfoInterface {\n\n constructor(\n public domain = '',\n public service = '',\n public id = 0,\n public name = '',\n ) {}\n\n static adapt(item?: any): ClientInfo {\n\n return new ClientInfo(\n item?.domain,\n item?.service,\n item?.id,\n (item?.first_name || item?.last_name) ? `${item?.first_name} ${item?.last_name}` : '',\n )\n\n }\n\n}\n\n\n","export interface ClientInfoMapperInterface {\n id: number\n first_name: string\n last_name: string\n email: string\n}\n\nexport class ClientInfoMapper implements ClientInfoMapperInterface {\n\n constructor(\n public id = 0,\n public first_name = '',\n public last_name = '',\n public email = '',\n ) {}\n\n static adapt(item?: any): ClientInfoMapper {\n\n const first_name = (item?.name) ? item.name.split(' ')[0] : ''\n const last_name = (item?.name) ? item.name.split(' ')[1] : ''\n\n return new ClientInfoMapper(\n item?.id,\n first_name,\n last_name,\n item?.email,\n )\n\n }\n\n}\n\n\n","export interface AIPromptInterface {\n response: string\n}\n\nexport class AIPrompt implements AIPromptInterface {\n\n constructor(\n public response = '',\n ) {}\n\n static adapt(item?: any): AIPrompt {\n\n return new AIPrompt(\n item?.response,\n )\n\n }\n\n}\n","export interface DownloadLabelsInterface {\n error: string;\n action: string;\n icon: string;\n}\n\nexport class DownloadLabels implements DownloadLabelsInterface {\n constructor(\n public error = '',\n public action = '',\n public icon = 'error',\n ) {}\n\n static adapt(item?: any): DownloadLabelsInterface {\n return new DownloadLabels(\n item?.error,\n item?.action,\n item?.icon,\n )\n\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { ProgressSpinnerMode } from '@angular/material/progress-spinner';\nimport { Subscription, timer } from 'rxjs';\n\n@Component({\n selector: 'app-download-file',\n templateUrl: './download-file.component.html',\n styleUrls: ['./download-file.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class DownloadFileComponent implements OnInit {\n\n private subscriptions = new Subscription();\n\n @Input() event?: Function;\n @Input() displayError = 3; // seconds\n @Input() diameter = 32;\n @Input() mode: ProgressSpinnerMode = 'determinate';\n @Input() isPending = false;\n\n @Input() active = false;\n @Input() disabled = false;\n\n @Output() error = new EventEmitter<void>();\n\n private _progress = 0;\n @Input() set progress(value: any) {\n this._progress = value ?? 0;\n }\n\n get progress() {\n return this._progress;\n }\n\n private _hasError = false;\n private errorTimerActive = false;\n\n @Input() set hasError(value: boolean | any) {\n\n this._hasError = !!value;\n\n if (this._hasError && !this.errorTimerActive) {\n this.errorTimerActive = true;\n this.active = false;\n this.error.emit()\n this.subscriptions.add(\n timer(this.displayError * 1000)\n .subscribe((err) => {\n this._hasError = false;\n this.errorTimerActive = false;\n })\n );\n }\n\n }\n\n get hasError() {\n return this._hasError;\n }\n\n ngOnInit() {}\n\n onAction() {\n this.isPending = false\n if (this.event) this.event()\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe()\n }\n}\n","<ng-container *ngIf=\"!isPending; else DOWNLOADING\">\n <ng-container *ngIf=\"hasError; else NORMAL\">\n <div class=\"width center-txt\" style=\"margin-bottom: 4px;\">\n <mat-icon color=\"warn\" class=\"warn-icon\">warning</mat-icon>\n </div>\n </ng-container>\n <ng-template #NORMAL>\n <ng-container *ngIf=\"active; else ACTION\">\n\n <div class=\"container-obj\">\n <div class=\"centered-obj-div\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"44\"\n ></mat-progress-spinner>\n </div>\n </div>\n\n </ng-container>\n <ng-template #ACTION>\n <button data-tracking=\"export-btn\" mat-icon-button (click)=\"onAction()\" class=\"icon-button\" [disabled]=\"disabled\">\n <mat-icon class=\"custom-icon\">file_download</mat-icon>\n </button>\n </ng-template>\n </ng-template>\n</ng-container>\n\n<ng-template #DOWNLOADING>\n <div\n class=\"spinner-container\"\n *ngIf=\"(progress > 0 && progress < 100); else INDETERMINATE\"\n >\n <div class=\"spinner-background\">\n {{progress}}%\n </div>\n <mat-progress-spinner\n color=\"primary\"\n [mode]=\"mode\"\n [value]=\"progress\"\n [diameter]=\"44\"\n ></mat-progress-spinner>\n </div>\n <ng-template #INDETERMINATE>\n <div class=\"container-obj\">\n <div class=\"centered-obj-div\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"44\"\n ></mat-progress-spinner>\n </div>\n </div>\n </ng-template>\n\n</ng-template>\n\n\n\n","import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { catchError, distinctUntilChanged, finalize } from 'rxjs/operators';\n\nimport { ToastColors, ToastDisplay } from 'toast-message-display';\n\nimport { DownloadLabels } from './models/download-labels-model';\nimport { HTTPManagerService } from '../../../services/request-manager-services';\nimport { ApiRequest } from '../../../services';\nimport { Subscription, throwError } from 'rxjs';\n\n@Component({\n selector: 'app-file-downloader',\n templateUrl: './file-downloader.component.html',\n styleUrls: ['./file-downloader.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class FileDownloaderComponent extends HTTPManagerService<any> implements OnInit {\n\n @Input() delayError = 3\n @Input() apiRequest: ApiRequest = ApiRequest.adapt()\n @Input() displayErrorMessage = false\n\n @Input() saveFileAs?: string\n\n _labels = DownloadLabels.adapt()\n @Input() set labels(value: DownloadLabels) {\n this._labels = (value) ? DownloadLabels.adapt(value) : DownloadLabels.adapt()\n }\n\n active = false\n\n subscription = new Subscription()\n\n get labels() {\n return this._labels\n }\n\n @Output() completed = new EventEmitter<void>()\n @Output() failed = new EventEmitter<string>()\n\n @Input() disabled = false\n\n constructor() {\n super()\n }\n\n ngOnInit() {\n\n }\n\n onDownloadStreaming() {\n\n if (this.active) return;\n this.active = true;\n\n return this.downloadRequest(this.apiRequest, [])\n .pipe(\n distinctUntilChanged(),\n catchError((err) => {\n\n this.onError(err.message)\n this.active = false\n this.failed.emit(err)\n\n return throwError(() => err)\n\n }),\n finalize(() => {\n if (!this.active) return\n this.active = false\n this.completed.emit()\n })\n )\n .subscribe()\n }\n\n\n onError(message: string) {\n\n if(!message || !this.displayErrorMessage) return\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.ERROR,\n icon: 'error',\n });\n\n this.active = false\n\n this.toastMessage.toastMessage(display);\n\n }\n\n OnDestroy() {\n this.subscription.unsubscribe()\n }\n\n}\n","<app-download-file\n [disabled]=\"disabled\"\n [displayError]=\"3\"\n [event]=\"onDownloadStreaming.bind(this)\"\n [isPending]=\"(isPending$ | async) || false\"\n [progress]=\"(progress$ | async)\"\n [hasError]=\"(error$ | async)\"\n (error)=\"onError(labels.error)\"\n [active]=\"active\"\n></app-download-file>\n","import { Component, OnInit, ViewChild, inject } from '@angular/core'\n\nimport { BehaviorSubject, EMPTY, Observable, throwError } from 'rxjs'\nimport { FormArray, FormBuilder, Validators } from '@angular/forms'\n\nimport { ClientInfo } from './models/sample-client-info'\nimport { ClientInfoMapper } from './models/sample-mapper-client-info'\nimport { AIPrompt } from './models/sample-ai-prompt'\nimport { ApiRequest, HTTPManagerService } from '../..'\nimport { catchError, map, tap } from 'rxjs/operators'\n\nimport { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display'\n\n@Component({\n selector: 'app-request-manager-demo',\n templateUrl: './request-manager-demo.component.html',\n styleUrls: ['./request-manager-demo.component.scss'],\n})\nexport class RequestManagerDemoComponent implements OnInit {\n\n displayedColumns = ['id','name', 'lastName', 'age']\n\n private fb = inject(FormBuilder)\n private toastMessage = inject(ToastMessageDisplayService)\n\n httpManagerService = inject(HTTPManagerService)\n\n isPending$ = this.httpManagerService.isPending$\n countdown$ = this.httpManagerService.countdown$\n\n GET_error$ = new BehaviorSubject<string>('')\n POST_error$ = new BehaviorSubject<string>('')\n PUT_error$ = new BehaviorSubject<string>('')\n DELETE_error$ = new BehaviorSubject<string>('')\n\n STREAM_error$ = new BehaviorSubject<string>('')\n STREAM_AI_error$ = new BehaviorSubject<string>('')\n\n GET$?: Observable<any>\n POST$?: Observable<any>\n PUT$?: Observable<any>\n DELETE$?: Observable<any>\n\n STREAM_AI$?: Observable<any>\n STREAM$?: Observable<any>\n\n requestParams = {\n GET: ApiRequest.adapt(),\n POST: ApiRequest.adapt(),\n PUT: ApiRequest.adapt(),\n DELETE: ApiRequest.adapt(),\n STREAM: ApiRequest.adapt(),\n }\n\n @ViewChild(\"failedState\", { static: true }) failedState: any\n @ViewChild(\"pollingState\", { static: true }) pollingState: any\n\n questionControl = this.fb.control(\"\", [Validators.required])\n\n downloadRequest = ApiRequest.adapt({\n server: 'assets/images',\n path: ['me.jpg'],\n // saveAs: 'john.jpg' // Optional\n })\n\n // downloadRequest = ApiRequest.adapt({\n // server: 'oidc/ai/file'\n // })\n\n sampleClientData = {\n id: 0,\n name: \"Old School Dates\",\n domain: \"osd.com\",\n service: \"osd\",\n spiffe: \"osd.com/osd\",\n secret: \"SMOPECXP-OS4P-USOG-X2II-3XMD1FQDR3IJX\",\n created: 1693003138,\n modified: 1693003138,\n icon: \"\",\n imageFile: \"\",\n email: \"wavecoders@gmail.com\"\n }\n\n requestForm = this.fb.group({\n path: this.fb.control<string>(\"ai/\"),\n headers: this.fb.array([]),\n adapter: [null],\n mapper: [null],\n retry: this.fb.group({\n times: [3],\n delay: [3],\n }),\n polling: [3],\n })\n\n AIType = 0\n\n sampleAdaptors = [\n { label: \"ClientInfo Basic\", value: ClientInfo.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n sampleMappers = [\n { label: \"Mapper Basic\", value: ClientInfoMapper.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n get retry() {\n return this.requestForm.get('retry')?.value\n }\n\n get headers(): FormArray {\n return this.requestForm.get('headers') as FormArray\n }\n\n get isValid() {\n this.requestForm.markAllAsTouched()\n return this.requestForm.valid\n }\n\n hasId = (arr: any[]) => {\n if (arr.length === 0) return false\n return !isNaN(arr[arr.length - 1])\n }\n\n props = (adapter: any) => {\n return (adapter) ? adapter() : null\n }\n\n // server = `http://sample-endpoint/as/authorization.oauth2`\n\n arrayObjectsToObjects = (arr: any[]) => {\n return Array.isArray(arr) ? arr.reduce((obj, item) => Object.assign(obj, { [item.key]: item.value }), {}) : {}\n }\n\n constructor() { }\n\n ngOnInit() {\n\n // const reqGet2 = ApiRequest.adapt({\n // server,\n // path: ['clients'],\n // headers: { authentication: \"Bearer <KEY>\" },\n // adapter: ClientInfo,\n // dataType: DataType.OBJECT,\n // // concurrent: false,\n // // polling: 3, //seconds\n // })\n\n // const req2 = [1024,1025,1026].map(item => {\n // return this.httpManagerService.getRequest<ClientInfo[]>(reqGet2, [item])\n // .pipe(\n // catchError(error => {\n // return throwError(() => new Error(error.error.message))\n // })\n // )\n // })\n\n // forkJoin(req2)\n // .subscribe(res => console.log(res))\n\n }\n\n addHeader() {\n const header = this.fb.group({\n key: ['', Validators.required],\n value: ['']\n })\n this.headers.push(header)\n }\n\n removeHeader(index: number) {\n this.headers.removeAt(index)\n }\n\n compileRequest() {\n\n const requestParams = this.requestForm.value\n\n requestParams.headers = this.arrayObjectsToObjects(\n requestParams.headers || []\n )\n\n const pathReq = (requestParams.path === \"\") ? [] : (requestParams.path || \"\").split(\"/\")\n\n if (!this.pollingState.checked) requestParams.polling = 0\n\n if (!this.failedState.checked) {\n requestParams.retry = { times: 0,delay: 0 }\n }\n\n const apiOptions = ApiRequest.adapt(requestParams)\n apiOptions.path = []\n\n return { apiOptions: apiOptions, path: pathReq }\n\n }\n\n onGetRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n this.requestParams.GET = reqParams.apiOptions\n\n this.GET$ = EMPTY //Cancels Previous\n this.GET_error$.next('')\n\n this.GET$ = this.httpManagerService.getRequest<ClientInfo[]>(reqParams.apiOptions, reqParams.path)\n .pipe(\n // tap((data) => console.log(\"API GET response\", data)),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'GET'))\n })\n )\n\n }\n\n onCreateRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n this.requestParams.POST = reqParams.apiOptions\n\n this.POST$ = EMPTY //Cancels Previous\n this.POST_error$.next('')\n\n console.log(\"POST\", this.sampleClientData)\n console.log(\"POST\", reqParams.apiOptions)\n console.log(\"POST\", reqParams.path)\n\n this.POST$ = this.httpManagerService.postRequest<ClientInfo>(this.sampleClientData, reqParams.apiOptions, reqParams.path)\n .pipe(\n // tap((data) => console.log(\"API POST response\", data)),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'POST'))\n })\n )\n\n }\n\n onUpdateRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n if(!this.hasId(reqParams.path)) {\n console.log(\"Missing ID\")\n return\n }\n\n this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length-1])\n this.requestParams.PUT = reqParams.apiOptions\n\n this.PUT$ = EMPTY //Cancels Previous\n this.PUT_error$.next('')\n\n this.PUT$ = this.httpManagerService.putRequest<any>(this.sampleClientData, reqParams.apiOptions, reqParams.path)\n .pipe(\n // tap((data) => console.log(\"API PUT response\", data)),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'PUT'))\n })\n )\n\n }\n\n onDeleteRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n this.requestParams.DELETE = reqParams.apiOptions\n\n if(!this.hasId(reqParams.path)) {\n console.log(\"Missing ID\")\n return\n }\n\n this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length-1])\n this.requestParams.DELETE = reqParams.apiOptions\n\n this.DELETE$ = EMPTY //Cancels Previous\n this.DELETE_error$.next('')\n\n this.DELETE$ = this.httpManagerService.deleteRequest<ClientInfo>(reqParams.apiOptions, reqParams.path)\n .pipe(\n // tap((data) => console.log(\"API DELETE response\", data)),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'DELETE'))\n })\n )\n\n }\n\n onStreamPostRequest() {\n\n if (!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n let payload = {}\n let apiPath: string[] = reqParams.path\n let apiOptions = reqParams.apiOptions\n let responseMapper: (items: any) => any = (items) => items.response\n\n if (this.AIType === 0) {\n\n // API request\n payload = { prompt: this.questionControl.value }\n\n } else {\n\n // Local Ollama request\n apiOptions.server = \"api\"\n apiPath = [\"generate\"]\n apiOptions.stream = true\n payload = {\n model: \"phi3:latest\",\n prompt: this.questionControl.value,\n stream: true,\n }\n\n responseMapper = (items) => items.map((word: any) => word.response).flat().join('')\n\n }\n\n this.requestParams.STREAM = apiOptions\n this.STREAM_AI$ = EMPTY\n this.STREAM_AI_error$.next('')\n\n this.STREAM_AI$ = this.httpManagerService.postRequest<any>(payload, apiOptions, apiPath).pipe(\n map(responseMapper),\n tap(() => this.questionControl.reset()),\n catchError(error => throwError(() => this.errorHandling(error, 'STREAM')))\n )\n\n }\n\n\n onStreamRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n reqParams.apiOptions.stream = true\n\n this.requestParams.GET = reqParams.apiOptions\n this.STREAM$ = this.httpManagerService.getRequest<ClientInfo[]>(reqParams.apiOptions, reqParams.path)\n .pipe(\n // tap((data) => console.log(\"API STREAM response\", data)),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'STREAM'))\n })\n )\n\n }\n\n onDownloadCompleted() {\n\n const message = \"Download Completed\"\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.SUCCESS,\n icon: 'sentiment_satisfied_alt',\n })\n\n this.toastMessage.toastMessage(display)\n }\n\n onDownloadFailed(err: string) {\n\n const message = \"Download Failed\"\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.ERROR,\n icon: 'warning',\n })\n\n this.toastMessage.toastMessage(display)\n }\n\n errorHandling(err: any, type: string) {\n if(type === 'GET') this.GET_error$.next(err.message)\n if(type === 'POST') this.POST_error$.next(err.message)\n if(type === 'PUT') this.PUT_error$.next(err.message)\n if(type === 'DELETE') this.DELETE_error$.next(err.message)\n if(type === 'STREAM') this.STREAM_error$.next(err.message)\n }\n\n onSelectAIType(type: number) {\n this.AIType = type\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <h2>\n HTTP Request Manager\n </h2>\n\n <div [formGroup]=\"requestForm\" style=\"margin-top: 2rem;\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Adapter (Model)</mat-label>\n <mat-select formControlName=\"adapter\" #adapterSelect>\n <mat-option>None</mat-option>\n <mat-option *ngFor=\"let adapter of sampleAdaptors\" [value]=\"adapter.value\">\n {{adapter.label}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mapper (Model)</mat-label>\n <mat-select formControlName=\"mapper\" #mapperSelect>\n <mat-option>None</mat-option>\n <mat-option *ngFor=\"let mapper of sampleMappers\" [value]=\"mapper.value\">\n {{mapper.label}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"display: flex; margin-bottom: 2rem;\" *ngIf=\"adapterSelect.value || mapperSelect.value\">\n <div style=\"flex:1\" class=\"box\">\n <h3>Adapter (Incoming)</h3>\n <div *ngIf=\"adapterSelect.value; else NO_ADAPTER\">\n {{ props(adapterSelect.value) | json }}\n </div>\n <ng-template #NO_ADAPTER>No Transformation</ng-template>\n </div>\n <div style=\"flex:1\" class=\"box\">\n <h3>Mapper (Outgoing)</h3>\n <div *ngIf=\"mapperSelect.value; else NO_MAPPER\">\n {{ props(mapperSelect.value) | json }}\n </div>\n <ng-template #NO_MAPPER>No Transformation</ng-template>\n </div>\n </div>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>RestPath (/ delimited)</mat-label>\n <input matInput placeholder=\"clients/list\" formControlName=\"path\">\n </mat-form-field>\n </div>\n <div>\n <div formArrayName=\"headers\">\n <div *ngFor=\"let task of headers.controls; let i = index\" [formGroupName]=\"i\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Key</mat-label>\n <input matInput placeholder=\"authentication\" formControlName=\"key\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Value</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"value\">\n </mat-form-field>\n <div style=\"margin-top: .5rem;\">\n <button mat-icon-button (click)=\"removeHeader(i)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n <button mat-stroked-button (click)=\"addHeader()\" class=\"btn\">Add Header</button>\n </div>\n <div style=\"margin-top: 2rem; display: flex; flex-direction:column; gap: 1rem;\">\n <div>\n <mat-slide-toggle #failedState>Retry on Failed</mat-slide-toggle>\n <div *ngIf=\"failedState.checked\" style=\"display: flex; gap: .5rem; margin-top: 1rem;\" formGroupName=\"retry\">\n <mat-form-field appearance=\"outline\">\n <mat-label>#of Times</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"times\" value=\"3\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Delay Until Next</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"delay\" value=\"3\">\n </mat-form-field>\n </div>\n </div>\n <div>\n <mat-slide-toggle #pollingState>Polling</mat-slide-toggle>\n <div *ngIf=\"pollingState.checked\">\n <mat-form-field appearance=\"outline\" style=\"margin-top: 1rem\">\n <mat-label>#of Seconds</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"polling\" value=\"3\">\n </mat-form-field>\n </div>\n </div>\n </div>\n </div>\n\n <div style=\"margin-bottom: 1rem; margin-top: 2rem;\">\n <mat-progress-bar mode=\"indeterminate\"\n *ngIf=\"(isPending$ | async)\"\n ></mat-progress-bar>\n <mat-progress-bar mode=\"determinate\"\n *ngIf=\"pollingState.checked && !(isPending$ | async)\"\n [value]=\"(this.countdown$ | async)\"\n ></mat-progress-bar>\n </div>\n\n <div style=\"margin-top: 1rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onGetRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"(GET_error$ | async) as get_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ get_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"(GET$ | async) as dataRecord\">\n <!-- <div [innerHTML]=\"(GET$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">POST Request</h2>\n <div>\n <button mat-raised-button (click)=\"onCreateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"(POST_error$ | async) as post_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ post_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"(POST$ | async) as dataRecord\">\n <!-- <div [innerHTML]=\"(POST$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">PUT Request</h2>\n <div>\n <button mat-raised-button (click)=\"onUpdateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"(PUT_error$ | async) as put_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ put_error }}</mat-error>\n </div>\n\n <h3>Include Record ID in the RestPath</h3>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"(PUT$ | async) as dataRecord\">\n <!-- <div [innerHTML]=\"(PUT$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">DELETE Request</h2>\n <div>\n <button mat-raised-button (click)=\"onDeleteRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <h3>Include Record ID in the RestPath</h3>\n\n <div *ngIf=\"(DELETE_error$ | async) as delete_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ delete_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"(DELETE$ | async) as dataRecord\">\n <!-- <div [innerHTML]=\"(DELETE$ | async) | jsonv\"></div> -->\n {{ dataRecord | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">Streaming GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onStreamRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <!-- <div *ngIf=\"(STREAM_error$ | async) as stream_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ stream_error }}</mat-error>\n </div> -->\n\n <div style=\"margin-top: 1rem;\">\n <div *ngIf=\"(STREAM$ | async) as data\" class=\"container\">\n <table mat-table [dataSource]=\"data\">\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> First Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"lastName\">\n <th mat-header-cell *matHeaderCellDef> Last Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.lastName}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"age\">\n <th mat-header-cell *matHeaderCellDef> Age </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.age}} </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n </div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1; padding-top: .5rem;\">AI -<span *ngIf=\"AIType === 1\">STREAMING</span> POST Request</h2>\n <div style=\"display: flex; gap: 1rem;\">\n <button mat-raised-button [matMenuTriggerFor]=\"menu\" style=\"min-width: 120px;\">\n <mat-icon>lan</mat-icon>\n <span *ngIf=\"AIType === 0; else LOCAL\">Server</span>\n <ng-template #LOCAL>\n Local\n </ng-template>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"onSelectAIType(0)\">Server</button>\n <button mat-menu-item (click)=\"onSelectAIType(1)\">Local</button>\n </mat-menu>\n <div>\n <button mat-raised-button (click)=\"onStreamPostRequest()\" class=\"btn\">Ask Me</button>\n </div>\n </div>\n </div>\n\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Ask me a Question</mat-label>\n <textarea matInput placeholder=\"Why is the sky blue?\" [formControl]=\"questionControl\"></textarea>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"(STREAM_AI_error$ | async) as stream_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ stream_error }}</mat-error>\n </div>\n\n <div *ngIf=\"AIType === 1; else ALTERNATIVE\" style=\"color: red;\">\n You must have Ollama active and the 'phi3:latest' model to use this feature.\n </div>\n <ng-template #ALTERNATIVE>\n <span style=\"color: gray;\">\n Define the RestPath to the API endpoint that will handle the AI request.\n Use: 'ai/chat' for server\n </span>\n </ng-template>\n\n <div>\n <div *ngIf=\"(STREAM_AI$ | async) as data\" style=\"margin-top: 1rem; font-size: 1.2rem; border-radius: 1rem; border: black 1px solid; padding: 2rem;\">\n <p style=\"margin-bottom: .5rem; white-space:pre-wrap; line-height: 1.6rem;\">{{data}}</p>\n </div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 1.5rem; margin-bottom: 1rem; line-height: 1.5rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div>\n <div style=\"display: flex;\">\n <h2 style=\"flex:1; margin-bottom: 0; padding-top: .5rem; display: flex;\">\n <div>\n Download File\n </div>\n <div style=\"flex:1; margin-left: 1rem;\">\n <mat-slide-toggle #disable>\n <span *ngIf=\"disable.checked; else DISABLE\">\n Enable\n </span>\n <ng-template #DISABLE>Disable</ng-template>\n </mat-slide-toggle>\n </div>\n </h2>\n <div>\n <app-file-downloader\n [disabled]=\"disable.checked\"\n [delayError]=\"3\"\n [apiRequest]=\"downloadRequest\"\n (completed)=\"onDownloadCompleted()\"\n (failed)=\"onDownloadFailed($event)\"\n ></app-file-downloader>\n </div>\n </div>\n </div>\n\n</div>\n","import { Injectable } from '@angular/core';\n\nimport { DataType, DatabaseStorage } from '../../../models';\nimport { HTTPManagerStateService, ApiRequest, RequestOptions } from '../../../services';\n\nimport { ClientInfo } from '../../request-manager-demo/models/sample-client-info';\nimport { ClientInfoMapper } from '../../request-manager-demo/models/sample-mapper-client-info';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StateManagerDemoService extends HTTPManagerStateService<any> {\n\n constructor() {\n super(\n ApiRequest.adapt({\n server: \"\",\n path: [],\n headers: {},\n adapter: ClientInfo.adapt,\n mapper: ClientInfoMapper.adapt,\n stream: false,\n }),\n DataType.ARRAY,\n DatabaseStorage.adapt()\n )\n }\n\n setAPIOptions(apiOptions: ApiRequest, dataType: DataType, database?: DatabaseStorage) {\n this.setApiRequestOptions(apiOptions, dataType, database)\n }\n\n getClients() {\n\n // const headers = {\n // auth: \"sample-auth-token\"\n // }\n // const sampleOptions = RequestOptions.adapt({ path: [\"id\", 12], headers, sample: true })\n this.fetchRecords()\n\n }\n\n createClient(data: any) {\n\n // const headers = {\n // auth: \"sample-auth-token\"\n // }\n\n // const sampleOptions = RequestOptions.adapt({ path: [\"id\", 12], headers, sample: true })\n this.createRecord(data)\n\n }\n\n updateClient(data: ClientInfo) {\n\n // const headers = {\n // auth: \"sample-auth-token\"\n // }\n data.id = 1031\n const sampleOptions = RequestOptions.adapt({ path: [data.id] })\n this.updateRecord(data, sampleOptions)\n\n }\n\n deleteClient(data: ClientInfo) {\n\n // const headers = {\n // auth: \"sample-auth-token\"\n // }\n\n data.id = 1031\n const sampleOptions = RequestOptions.adapt({ path: [data.id] })\n this.deleteRecord(sampleOptions)\n\n }\n\n streamRequest() {\n\n const headers = {\n auth: \"sample-auth-token\"\n }\n\n // const sampleOptions = RequestOptions.adapt({ path: [1], headers })\n this.fetchStream()\n\n }\n\n}\n","import { Component, OnInit, ViewChild, inject } from '@angular/core';\n\nimport { StateManagerDemoService } from './services/state-manager-demo.service';\nimport { FormBuilder, Validators, FormArray } from '@angular/forms';\n\nimport { Observable, BehaviorSubject, EMPTY, map, tap, catchError, throwError } from 'rxjs';\n\nimport { ClientInfo } from '../request-manager-demo/models/sample-client-info';\nimport { ClientInfoMapper } from '../request-manager-demo/models/sample-mapper-client-info';\nimport { AIPrompt } from '../request-manager-demo/models/sample-ai-prompt';\n\nimport { DataType } from '../../models';\nimport { DatabaseStorage } from '../../models/database-storage.model';\nimport { HTTPManagerService, ApiRequest } from '../../services';\n\n\n@Component({\n selector: 'app-request-manager-state-demo',\n templateUrl: './request-manager-state-demo.component.html',\n styleUrls: ['./request-manager-state-demo.component.scss'],\n})\nexport class RequestManagerStateDemoComponent implements OnInit {\n\n stateManagerDemoService = inject(StateManagerDemoService)\n\n displayedColumns = ['id','name', 'lastName', 'age']\n\n selectedRecord$?: Observable<ClientInfo|null>\n\n fb = inject(FormBuilder)\n\n httpManagerService = inject(HTTPManagerService)\n\n isPending$ = this.stateManagerDemoService.isPending$\n error$ = this.stateManagerDemoService.error$\n\n countdown$ = this.httpManagerService.countdown$\n\n GET_error$ = new BehaviorSubject<string>('')\n POST_error$ = new BehaviorSubject<string>('')\n PUT_error$ = new BehaviorSubject<string>('')\n DELETE_error$ = new BehaviorSubject<string>('')\n\n STREAM_error$ = new BehaviorSubject<string>('')\n STREAM_AI_error$ = new BehaviorSubject<string>('')\n\n GET$ = new BehaviorSubject<any>(null)\n POST$ = new BehaviorSubject(null)\n PUT$ = new BehaviorSubject(null)\n DELETE$ = new BehaviorSubject(null)\n\n STREAM = new BehaviorSubject(null)\n STREAM$ = this.STREAM.asObservable()\n\n STREAM_AI = new BehaviorSubject<{response: string}[]>([])\n STREAM_AI$ = this.STREAM_AI.asObservable()\n .pipe(\n map((items: any) => (items) ? items.map((item: any) => item.response) : []),\n map((items: any) => items.join('\\n').trim()),\n )\n\n @ViewChild(\"failedState\", { static: true }) failedState: any\n @ViewChild(\"pollingState\", { static: true }) pollingState: any\n\n questionControl = this.fb.control(\"\", [Validators.required])\n\n requestType = ''\n\n prompts: string[] = []\n\n AIType = 0\n\n get dataObservable$() {\n\n switch (this.requestType) {\n case 'GET':\n return this.GET$\n\n case 'PUT':\n return this.PUT$\n\n case 'POST':\n return this.POST$\n\n case 'DELETE':\n return this.DELETE$\n\n case 'STREAM':\n return this.STREAM\n\n case 'STREAM_AI':\n return this.STREAM_AI\n\n default:\n return this.GET$\n break;\n }\n\n }\n\n sampleClientData = {\n id: 0,\n name: \"Old School Dates\",\n domain: \"osd.com\",\n service: \"osd\",\n spiffe: \"osd.com/osd\",\n secret: \"SMOPECXP-OS4P-USOG-X2II-3XMD1FQDR3IJX\",\n created: 1693003138,\n modified: 1693003138,\n icon: \"\",\n imageFile: \"\",\n }\n\n selectedRecord = this.fb.control(null)\n\n requestForm = this.fb.group({\n datatype: this.fb.control('ARRAY'),\n path: this.fb.control<string>(\"ai/\"),\n headers: this.fb.array([]),\n adapter: [null],\n mapper: [null],\n retry: this.fb.group({\n times: [3],\n delay: [3],\n }),\n polling: [3],\n database: this.fb.group({\n table: [''],\n expiresIn: ['1m'],\n })\n })\n\n get hasChanged() {\n return this.requestForm.dirty || this.requestForm.untouched\n }\n\n get dataType() {\n return this.requestForm.get(\"datatype\")?.value\n }\n\n get database() {\n return this.requestForm.get(\"database\")?.value\n }\n\n get retry() {\n return this.requestForm.get(\"retry\")?.value\n }\n\n sampleAdaptors = [\n { label: \"ClientInfo Basic\", value: ClientInfo.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n sampleMappers = [\n { label: \"Mapper Basic\", value: ClientInfoMapper.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n get headers(): FormArray {\n return this.requestForm.get('headers') as FormArray\n }\n\n get isValid() {\n this.requestForm.markAllAsTouched()\n return this.requestForm.valid\n }\n\n // server = `http://sample-endpoint/as/authorization.oauth2`\n\n arrayObjectsToObjects = (arr: any[]) => {\n return Array.isArray(arr) ? arr.reduce((obj, item) => Object.assign(obj, { [item.key]: item.value }), {}) : {}\n }\n\n props = (adapter: any) => {\n return (adapter) ? adapter() : null\n }\n\n constructor() { }\n\n ngOnInit() {\n\n this.stateManagerDemoService.data$.pipe(\n tap((data) => console.log(\"API STREAM_AI response\", data)),\n )\n\n this.error$.pipe(\n tap((data) => {\n debugger\n console.log(\"API STREAM response\", data)\n }),\n catchError(error => {\n return throwError(() => this.errorHandling(error, 'STREAM'))\n })\n )\n\n this.selectedRecord.valueChanges\n .subscribe((data: ClientInfo|null) => {\n this.selectedRecord$ = (data) ? this.stateManagerDemoService.selectRecord$(data.id) : EMPTY\n })\n\n this.stateManagerDemoService.data$\n .pipe(\n tap((data: any) => {\n\n switch (this.requestType) {\n case 'GET':\n this.GET$.next(data)\n break;\n\n case 'PUT':\n this.PUT$.next(data)\n break;\n\n case 'POST':\n this.POST$.next(data)\n break;\n\n case 'DELETE':\n this.DELETE$.next(data)\n break;\n\n case 'STREAM':\n this.STREAM.next(data)\n break;\n\n case 'STREAM_AI':\n this.STREAM_AI.next(data)\n break;\n\n default:\n break;\n }\n\n })\n ).subscribe()\n\n }\n\n addHeader() {\n const header = this.fb.group({\n key: ['', Validators.required],\n value: ['']\n });\n this.headers.push(header)\n }\n\n removeHeader(index: number) {\n this.headers.removeAt(index)\n }\n\n compileRequest() {\n\n const requestParams = this.requestForm.value\n\n requestParams.headers = this.arrayObjectsToObjects(\n requestParams.headers || []\n )\n\n const pathReq = (requestParams.path === \"\") ? [] : (requestParams.path || \"\").split(\"/\")\n\n if (!this.pollingState.checked) requestParams.polling = 0\n\n if (!this.failedState.checked) {\n requestParams.retry = { times: 0,delay: 0 }\n }\n\n const currentOptions = ApiRequest.adapt(requestParams)\n currentOptions.path = []\n const apiOptions = ApiRequest.adapt({ ...currentOptions, path: pathReq })\n\n return { apiOptions: apiOptions, path: pathReq }\n\n }\n\n onSetStateOptions() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n const db = DatabaseStorage.adapt(this.database)\n const type = this.dataType === \"ARRAY\" ? DataType.ARRAY : DataType.OBJECT\n this.stateManagerDemoService.setAPIOptions(reqParams.apiOptions, type, db)\n\n this.requestForm.markAsPristine()\n }\n\n onClearRecords() {\n this.stateManagerDemoService.clearRecords()\n }\n\n onRefreshRecords() {\n this.stateManagerDemoService.refreshData()\n }\n\n onGetRequest() {\n this.requestType = 'GET'\n this.stateManagerDemoService.getClients()\n }\n\n onCreateRequest() {\n this.requestType = 'POST'\n this.stateManagerDemoService.createClient(this.sampleClientData)\n }\n\n onUpdateRequest() {\n this.requestType = 'PUT'\n this.stateManagerDemoService.updateClient(this.sampleClientData)\n }\n\n onDeleteRequest() {\n this.requestType = 'DELETE'\n this.stateManagerDemoService.deleteClient(this.sampleClientData)\n }\n\n onStreamRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n reqParams.apiOptions.stream = true\n\n this.requestType = 'STREAM'\n\n this.stateManagerDemoService.streamRequest()\n\n }\n\n errorHandling(err: any, type: string) { console.log(err, type)\n if(type === 'GET') this.GET_error$.next(err.message)\n if(type === 'POST') this.POST_error$.next(err.message)\n if(type === 'PUT') this.PUT_error$.next(err.message)\n if(type === 'DELETE') this.DELETE_error$.next(err.message)\n if(type === 'STREAM') this.STREAM_error$.next(err.message)\n if(type === 'STREAM_AI') this.STREAM_AI_error$.next(err.message)\n }\n\n onSelectAIType(type: number) {\n this.AIType = type\n }\n\n onClearHistory() {\n this.prompts = []\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <h2>\n HTTP Request State Manager\n </h2>\n\n <div [formGroup]=\"requestForm\" style=\"margin-top: 2rem;\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>State Data Type</mat-label>\n <mat-select formControlName=\"datatype\">\n <mat-option value=\"ARRAY\">Array</mat-option>\n <mat-option value=\"OBJECT\">Object</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Adapter (Model)</mat-label>\n <mat-select formControlName=\"adapter\" #adapterSelect>\n <mat-option>None</mat-option>\n <mat-option *ngFor=\"let adapter of sampleAdaptors\" [value]=\"adapter.value\">\n {{adapter.label}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mapper (Model)</mat-label>\n <mat-select formControlName=\"mapper\" #mapperSelect>\n <mat-option>None</mat-option>\n <mat-option *ngFor=\"let mapper of sampleMappers\" [value]=\"mapper.value\">\n {{mapper.label}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div style=\"display: flex; margin-bottom: 2rem;\" *ngIf=\"adapterSelect.value || mapperSelect.value\">\n <div style=\"flex:1\" class=\"box\">\n <h3>Adapter (Incoming)</h3>\n <div *ngIf=\"adapterSelect.value; else NO_ADAPTER\">\n {{ props(adapterSelect.value) | json }}\n </div>\n <ng-template #NO_ADAPTER>No Transformation</ng-template>\n </div>\n <div style=\"flex:1\" class=\"box\">\n <h3>Mapper (Outgoing)</h3>\n <div *ngIf=\"mapperSelect.value; else NO_MAPPER\">\n {{ props(mapperSelect.value) | json }}\n </div>\n <ng-template #NO_MAPPER>No Transformation</ng-template>\n </div>\n </div>\n\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>RestPath (/ delimited)</mat-label>\n <input matInput placeholder=\"clients/list\" formControlName=\"path\">\n </mat-form-field>\n </div>\n <div>\n <div formArrayName=\"headers\">\n <div *ngFor=\"let task of headers.controls; let i = index\" [formGroupName]=\"i\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Key</mat-label>\n <input matInput placeholder=\"authentication\" formControlName=\"key\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Value</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"value\">\n </mat-form-field>\n <div style=\"margin-top: .5rem;\">\n <button mat-icon-button (click)=\"removeHeader(i)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n <button mat-stroked-button (click)=\"addHeader()\">Add Header</button>\n </div>\n <div style=\"margin-top: 2rem; display: flex; flex-direction:column; gap: 1rem;\">\n <div>\n <mat-slide-toggle #failedState>Retry on Failed</mat-slide-toggle>\n <div *ngIf=\"failedState.checked\" style=\"display: flex; gap: .5rem; margin-top: 1rem;\" formGroupName=\"retry\">\n <mat-form-field appearance=\"outline\">\n <mat-label>#of Times</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"times\" value=\"3\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Delay Until Next</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"delay\" value=\"3\">\n </mat-form-field>\n </div>\n </div>\n <div>\n <mat-slide-toggle #pollingState>Polling</mat-slide-toggle>\n <div *ngIf=\"pollingState.checked\">\n <mat-form-field appearance=\"outline\" style=\"margin-top: 1rem\">\n <mat-label>#of Seconds</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"polling\" value=\"3\">\n </mat-form-field>\n </div>\n </div>\n <div>\n <mat-slide-toggle #DBState>Database Storage</mat-slide-toggle>\n <div *ngIf=\"DBState.checked\" style=\"display: flex; gap: .5rem; margin-top: 1rem\" formGroupName=\"database\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Table Name</mat-label>\n <input matInput placeholder=\"table\" formControlName=\"table\" value=\"\">\n </mat-form-field>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Expires In</mat-label>\n <mat-select formControlName=\"expiresIn\">\n <mat-option value=\"1m\">One Minute</mat-option>\n <mat-option value=\"1h\">One Hour</mat-option>\n <mat-option value=\"1d\">One Day</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n <div style=\"margin-top: 1rem; display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onSetStateOptions()\" [disabled]=\"!hasChanged\">\n Set API Request Options\n </button>\n </div>\n <div>\n <mat-error *ngIf=\"(error$ | async) as error\">\n {{ error }}\n </mat-error>\n </div>\n </div>\n </div>\n\n <div style=\"margin-bottom: 1rem; margin-top: 2rem;\">\n <mat-progress-bar mode=\"indeterminate\"\n *ngIf=\"(isPending$ | async)\"\n ></mat-progress-bar>\n <div *ngIf=\"pollingState.checked\">\n <mat-progress-bar mode=\"determinate\"\n *ngIf=\"!(isPending$ | async) && (this.countdown$ | async) || -1 > 0\"\n [value]=\"(this.countdown$ | async)\"\n ></mat-progress-bar>\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\" *ngIf=\"(GET$ | async) as data\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1;\">CURRENT STATE ({{ dataType }})</h2>\n </div>\n <div *ngIf=\"data.length > 1\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Records</mat-label>\n <mat-select [formControl]=\"selectedRecord\" [disabled]=\"data === null && data?.length === 0\">\n <mat-option [value]=\"\">None</mat-option>\n <mat-option *ngFor=\"let item of data\" [value]=\"item\">\n {{item.name || (item.first_name) | titlecase}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div *ngIf=\"(dataObservable$ | async) as dataRecord\">\n <div *ngIf=\"(selectedRecord$ | async) as record; else NO_RECORD\">\n {{ record | json }}\n </div>\n <ng-template #NO_RECORD>No Record Selected from State</ng-template>\n\n </div>\n <div style=\"margin-top: 1rem;\">\n <span *ngIf=\"data !== null && data?.length > 0; else NO_DATA\">\n State contains a Total of {{ data.length }} Records\n </span>\n <ng-template #NO_DATA>No Records</ng-template>\n <div style=\"display: flex; gap: .5rem; text-align: end; justify-content: flex-end;\">\n <button class=\"btn\" mat-stroked-button (click)=\"onClearRecords()\">Clear</button>\n <button class=\"btn\" mat-stroked-button (click)=\"onRefreshRecords()\" [disabled]=\"hasChanged\">Refresh</button>\n </div>\n </div>\n </div>\n\n\n\n\n <div style=\"margin-top: 1rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">GET Request ({{ dataType }})</h2>\n <div>\n <button mat-raised-button (click)=\"onGetRequest()\" [disabled]=\"hasChanged\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"(GET_error$ | async) as get_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ get_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(GET$ | async) | jsonv\"></div> -->\n <div *ngIf=\"(GET$ | async) as getData\">{{ getData | json }}</div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">POST Request</h2>\n <div>\n <button mat-raised-button (click)=\"onCreateRequest()\" [disabled]=\"hasChanged\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"(POST_error$ | async) as post_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ post_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(POST$ | async) | jsonv\"></div> -->\n <div *ngIf=\"(POST$ | async) as postData\">{{ postData | json }}</div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">PUT Request</h2>\n <div>\n <button mat-raised-button (click)=\"onUpdateRequest()\" [disabled]=\"hasChanged\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"(PUT_error$ | async) as put_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ put_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(PUT$ | async) | jsonv\"></div> -->\n <div *ngIf=\"(PUT$ | async) as putData\">{{ putData | json }}</div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">DELETE Request</h2>\n <div>\n <button mat-raised-button (click)=\"onDeleteRequest()\" [disabled]=\"hasChanged\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"(DELETE_error$ | async) as delete_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ delete_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <!-- <div [innerHTML]=\"(DELETE$ | async) | jsonv\"></div> -->\n <div *ngIf=\"(DELETE$ | async) as deleteData\">{{ deleteData | json }}</div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">Streaming GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onStreamRequest()\" class=\"btn\" [disabled]=\"hasChanged\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"(STREAM_error$ | async) as stream_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ stream_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <div *ngIf=\"(STREAM$ | async) as data\" class=\"container\">\n <table mat-table [dataSource]=\"data\">\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> First Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"lastName\">\n <th mat-header-cell *matHeaderCellDef> Last Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.lastName}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"age\">\n <th mat-header-cell *matHeaderCellDef> Age </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.age}} </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n </div>\n </div>\n\n </div>\n\n</div>\n","import { Component, Inject, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { LocalStorageManagerService, SettingOptions, StorageOption, StorageType } from '../../services/local-storage-manager-service';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { BehaviorSubject, EMPTY, Observable, of } from 'rxjs';\nimport { ConfigOptions, LocalStorageOptions, UtilsService } from '../../services';\nimport { switchMap, tap, map } from 'rxjs/operators';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\n\n@Component({\n selector: 'app-local-storage-demo',\n templateUrl: './local-storage-demo.component.html',\n styleUrls: ['./local-storage-demo.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class LocalStorageDemoComponent implements OnInit {\n\n fb = inject(FormBuilder)\n utils = inject(UtilsService)\n\n type$ = new BehaviorSubject(StorageType.GLOBAL)\n get type() {\n return (this.typeControl.value) ? +this.typeControl.value : 0\n }\n\n typeControl = this.fb.control(StorageType.GLOBAL.toString())\n\n localStorageManagerService = inject(LocalStorageManagerService)\n\n settings$: Observable<any> = this.localStorageManagerService.settings$\n\n setting$ = (store: string) => this.localStorageManagerService.setting$(store)\n\n storageForm = this.fb.group({\n store: this.fb.control<string|null>(null),\n type: 'local',\n settingType: 'local',\n encrypted: false,\n data: this.fb.control<string>('', Validators.required),\n })\n\n newStoreForm = this.fb.group({\n name: this.fb.control<string|null>(null, Validators.required),\n storage: 'local',\n encrypted: false,\n data: this.fb.control<string>('', Validators.required),\n expiresIn: this.fb.control('0')\n })\n\n store$?: Observable<any>\n\n storeData$ = this.storageForm.get('store')?.valueChanges\n .pipe(\n switchMap((data: any) => {\n return data\n ? this.localStorageManagerService.store$(data.name)\n : of('')\n }),\n tap(data => {\n this.storageForm.get('data')?.patchValue(data, { emitEvent: false })\n })\n )\n\n expiresIn = (epoch: number) => this.utils.expiresIn(epoch)\n\n get isValid() {\n return this.newStoreForm.valid\n }\n\n get isValidData() {\n return this.storageForm.valid\n }\n\n isValidJSON = (str: string) => {\n try {\n JSON.parse(str)\n return true\n } catch (e) {\n return false\n }\n }\n\n displayedColumns: string[] = ['name', 'id', 'encrypted', 'expires', \"option\"];\n\n filterData = (values: SettingOptions[]) => {\n if(!values) return []\n return values.filter((item: any) => item.options.storage === +this.type)\n }\n\n data$?: Observable<any>\n\n store: any\n\n create = false\n\n storeProps?: LocalStorageOptions\n options?: SettingOptions\n\n constructor(@Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) { }\n\n ngOnInit() {\n\n this.storeProps = this.configOptions?.LocalStorageOptions\n this.options = this.storeProps?.options\n\n if(this.options?.storage) {\n this.typeControl.patchValue(this.options.storage.toString())\n this.typeControl.disable()\n } else {\n this.typeControl.enable()\n }\n\n if(this.options?.expiresIn) {\n this.newStoreForm.get('expiresIn')?.patchValue(this.options.expiresIn)\n this.newStoreForm.get('expiresIn')?.disable()\n } else {\n this.newStoreForm.get('expiresIn')?.enable()\n }\n\n if(this.options?.encrypted) {\n this.newStoreForm.get('encrypted')?.patchValue(this.options.encrypted)\n this.newStoreForm.get('encrypted')?.disable()\n } else {\n this.newStoreForm.get('encrypted')?.enable()\n }\n\n }\n\n onCreateStore() {\n\n if(!this.isValid) return\n\n const store = this.newStoreForm.value\n if(!store.name || store.name === '') return\n\n const options = { storage: this.type, encrypted: store.encrypted, expiresIn: store.expiresIn }\n\n this.localStorageManagerService.createStore({\n name: store.name,\n data: store.data,\n options: SettingOptions.adapt(options)\n })\n\n this.newStoreForm.reset()\n this.create = false\n }\n\n onUpdateStore(store: any) {\n\n if(!this.storageForm.valid) return\n\n const storeData = this.storageForm.value\n\n const data = JSON.parse(storeData.data || '')\n\n const type = (storeData.type === 'local') ? StorageType.GLOBAL : StorageType.SESSION\n\n this.localStorageManagerService.updateStore({\n name: store.name,\n data\n })\n\n }\n\n onSelectedRow(store: any) {\n this.store = store\n this.data$ = this.localStorageManagerService.store$(store.name).pipe(map(item => JSON.stringify(item)))\n this.create = false\n }\n\n onCreate() {\n this.onCancel()\n this.create = true\n }\n\n onDelete(store: StorageOption) {\n\n this.localStorageManagerService.deleteStore({\n name: store.name,\n })\n\n this.onCancel()\n }\n\n onCancel() {\n this.data$ = EMPTY\n this.store = null\n this.create = false\n }\n\n onUpdate(store: StorageOption, data: any) {\n\n this.localStorageManagerService.updateStore({\n name: store.name,\n data: JSON.parse(data)\n })\n\n this.onCancel()\n\n }\n\n onReset() {\n this.localStorageManagerService.resetStore()\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <div style=\"display: flex; gap: 1rem\">\n <h2 style=\"padding-top: .5rem; display: flex;\">\n <div style=\"padding-top: .5rem;\">Local Storage Manager</div>\n <div>\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon>info</mat-icon>\n </button>\n </div>\n </h2>\n <span style=\"flex:1\"></span>\n <div style=\"padding-top: .25rem;\">\n <mat-button-toggle-group name=\"storage\" [formControl]=\"typeControl\" (change)=\"onCancel()\">\n <mat-button-toggle value=\"0\">Local Storage</mat-button-toggle>\n <mat-button-toggle value=\"1\">Session Storage</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n <div style=\"margin-top: .25rem;\">\n <button mat-icon-button (click)=\"onCreate()\">\n <mat-icon>add</mat-icon>\n </button>\n </div>\n </div>\n\n <ng-container *ngIf=\"storeProps?.storageName || storeProps?.storageSettingsName\">\n <div style=\"display: flex; gap: .5rem; flex-direction: column; border: gray solid thin; background-color: whitesmoke; padding: 1rem;\"\n >\n <div style=\"display: flex;\">\n <div *ngIf=\"storeProps?.storageSettingsName\" style=\"flex:1\">\n Database: <b>{{ storeProps?.storageSettingsName }}</b>\n </div>\n <div *ngIf=\"storeProps?.storageName\" style=\"flex:1\">\n Data: <b>{{ storeProps?.storageName }}</b>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div style=\"margin-top: 2rem;\" [formGroup]=\"newStoreForm\" *ngIf=\"create; else LIST\">\n\n <h2>Create Store</h2>\n\n <div style=\"display: flex; gap: 1rem;\">\n <div style=\"flex:1\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Store Name</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"name\">\n </mat-form-field>\n </div>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Expires In...</mat-label>\n <mat-select formControlName=\"expiresIn\">\n <mat-option value=\"0\">None</mat-option>\n <mat-option value=\"30s\">30 Seconds</mat-option>\n <mat-option value=\"1mn\">1 Minute</mat-option>\n <mat-option value=\"1hr\">1 Hour</mat-option>\n <mat-option value=\"1d\">1 Day</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"margin-top: 1rem;\">\n <mat-slide-toggle formControlName=\"encrypted\">Encrypted</mat-slide-toggle>\n </div>\n </div>\n\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex: 1;\">\n <mat-label>Data (Must be an Object or Array of any)</mat-label>\n <textarea matInput placeholder=\"[]\" formControlName=\"data\" #json></textarea>\n </mat-form-field>\n </div>\n <mat-error *ngIf=\"!isValidJSON(json.value)\">Not Valid Data</mat-error>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onCreateStore()\" [disabled]=\"!(isValid && isValidJSON(json.value))\">\n Save Store\n </button>\n </div>\n\n </div>\n\n <ng-template #LIST>\n\n <div style=\"margin-top: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n{{ settings$ | async | json }}\n <div *ngIf=\"filterData(settings$ | async) as data\">\n <ng-container *ngIf=\"data.length > 0; else NO_DATA\">\n <table mat-table [dataSource]=\"data\">\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> Store </th>\n <td mat-cell *matCellDef=\"let element\" style=\"font-weight: bold; text-transform: uppercase;\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"encrypted\">\n <th mat-header-cell *matHeaderCellDef style=\"text-align: center;\"> Encrypted </th>\n <td mat-cell *matCellDef=\"let element\" style=\"text-align: center;\">\n <ng-container *ngIf=\"element.options.encrypted; else NO\">YES</ng-container>\n <ng-template #NO><span style=\"color:gray\">NO</span></ng-template>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"expires\">\n <th mat-header-cell *matHeaderCellDef style=\"text-align: center;\"> Expires </th>\n <td mat-cell *matCellDef=\"let element\" style=\"text-align: center;\">\n <ng-container *ngIf=\"element.options.expires !== 0; else NO_DATA\">\n {{expiresIn(element.options.expires)}}\n </ng-container>\n <ng-template #NO_DATA>\n ∞\n </ng-template>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"option\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell *matCellDef=\"let element\" style=\"padding-right: 0;\">\n <div style=\"display: flex;justify-content: flex-end;\">\n <button mat-icon-button color=\"warn\" (click)=\"onDelete(element); $event.stopPropagation()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" (click)=\"onSelectedRow(row)\"></tr>\n </table>\n </ng-container>\n\n <ng-template #NO_DATA>\n <h3 style=\"margin-top: 1rem;\">No Data</h3>\n </ng-template>\n\n <div *ngIf=\"(data$ | async) as data\" style=\"margin-top: 2rem;\">\n <div style=\"margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <h3>STORE: <span style=\"font-weight: bold;\">{{ store.name | uppercase }}</span></h3>\n <h3>SETTINGS: {{ setting$(store.name) | async | json }}</h3>\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex: 1;\">\n <mat-label>Data (Must be an Object or Array of any)</mat-label>\n <textarea matInput placeholder=\"[]\" #json [value]=\"data\"></textarea>\n </mat-form-field>\n </div>\n <mat-error *ngIf=\"!isValidJSON(json.value)\">Not Valid Data</mat-error>\n\n <div style=\"display: flex; gap: .5rem;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onCancel()\">Cancel</button>\n <button mat-stroked-button (click)=\"onUpdate(store, json.value)\" [disabled]=\"!(isValidJSON(json.value))\">Update</button>\n </div>\n </div>\n </div>\n\n </ng-template>\n\n <div style=\"margin-top: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <button mat-stroked-button (click)=\"onReset()\">Delete All Stores</button>\n </div>\n\n</div>\n\n\n<mat-menu #menu=\"matMenu\">\n <div style=\"padding: 1rem;\">\n <p>Please note that the LocalStorage (encryption) and management of data is dependant on initializing the APP_ID</p>\n <p>Must provide a value for <b>APP_ID</b> in AppModule->Providers</p>\n <mat-divider></mat-divider>\n <div style=\"font-size: smaller; margin-top: .5rem;\">\n <p>Example: UUID (self.crypto.randomUUID() to generate)</p>\n <div style=\"background-color: whitesmoke; padding: 1rem;\">\n {<br>\n provide: APP_ID,<br>\n useValue: \"056991ac-3537-43ab-b5b9-83edf6554eff\",<br>\n }\n </div>\n </div>\n </div>\n</mat-menu>\n","import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\nimport { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\nexport const PROXY_CONFIG = new InjectionToken<Record<string, any>>('PROXY_CONFIG');\n\n@Injectable()\nexport class ProxyDebuggerInterceptor implements HttpInterceptor {\n\n constructor(@Optional() @Inject(PROXY_CONFIG) private proxyConfig: Record<string, any>) {}\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n if (!this.proxyConfig) {\n return next.handle(req);\n }\n\n const headers = req.headers.keys().reduce((acc, key) => {\n acc[key] = req.headers.get(key) || '';\n return acc;\n }, {} as Record<string, string>);\n\n for (const proxyPath in this.proxyConfig) {\n if (this.proxyConfig.hasOwnProperty(proxyPath)) {\n const proxyDetails = this.proxyConfig[proxyPath];\n const regex = new RegExp('^' + proxyPath.replace('/', '').replace('*', '(.*)'));\n\n if (regex.test(req.url)) {\n const target = proxyDetails.target;\n const endpoint = req.url.replace(regex, '$1');\n const actualPath = target + '/' + endpoint;\n\n console.log('Request Proxied:', {\n requestUrl: req.url,\n requestPayload: req.body,\n headers: headers,\n proxyPath: proxyPath,\n actualPath: actualPath,\n });\n }\n }\n }\n\n return next.handle(req);\n }\n}\n","export interface ClientInfoInterface {\n domain: string\n service: string\n id: number\n name: string\n}\n\nexport class ClientInfo implements ClientInfoInterface {\n\n constructor(\n public domain = '',\n public service = '',\n public id = 0,\n public name = '',\n ) {}\n\n static adapt(item?: any): ClientInfo {\n\n return new ClientInfo(\n item?.domain,\n item?.service,\n item?.id,\n (item?.first_name || item?.last_name) ? `${item?.first_name} ${item?.last_name}` : '',\n )\n\n }\n\n}\n\n\n","export interface ClientInfoMapperInterface {\n id: number\n first_name: string\n last_name: string\n email: string\n}\n\nexport class ClientInfoMapper implements ClientInfoMapperInterface {\n\n constructor(\n public id = 0,\n public first_name = '',\n public last_name = '',\n public email = '',\n ) {}\n\n static adapt(item?: any): ClientInfoMapper {\n\n const first_name = (item?.name) ? item.name.split(' ')[0] : ''\n const last_name = (item?.name) ? item.name.split(' ')[1] : ''\n\n return new ClientInfoMapper(\n item?.id,\n first_name,\n last_name,\n item?.email,\n )\n\n }\n\n}\n\n\n","export interface AIPromptInterface {\n response: string\n}\n\nexport class AIPrompt implements AIPromptInterface {\n\n constructor(\n public response = '',\n ) {}\n\n static adapt(item?: any): AIPrompt {\n\n return new AIPrompt(\n item?.response,\n )\n\n }\n\n}\n","import { Component, OnInit, ViewChild, inject } from '@angular/core'\n\nimport { FormArray, FormBuilder, Validators } from '@angular/forms'\n\nimport { ClientInfo } from './models/sample-client-info'\nimport { ClientInfoMapper } from './models/sample-mapper-client-info'\nimport { AIPrompt } from './models/sample-ai-prompt'\nimport { ApiRequest, HTTPManagerSignalsService } from '../..'\n\nimport { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display'\n\n@Component({\n selector: 'app-request-signals-manager-demo',\n templateUrl: './request-signals-manager-demo.component.html',\n styleUrls: ['./request-signals-manager-demo.component.scss'],\n})\nexport class RequestSignalsManagerDemoComponent implements OnInit {\n\n displayedColumns = ['id','name', 'lastName', 'age']\n\n private fb = inject(FormBuilder)\n private toastMessage = inject(ToastMessageDisplayService)\n\n httpManagerSignalsService = inject(HTTPManagerSignalsService)\n\n // Using signals service: signals are callable in templates (e.g. isPending())\n isPending = this.httpManagerSignalsService.isPending\n countdown = this.httpManagerSignalsService.countdown\n\n // per-operation plain results and error messages (no rxjs in component)\n GET_result: any = null\n POST_result: any = null\n PUT_result: any = null\n DELETE_result: any = null\n\n STREAM_result: any = null\n STREAM_AI_result: any = null\n\n GET_error: string = ''\n POST_error: string = ''\n PUT_error: string = ''\n DELETE_error: string = ''\n STREAM_error: string = ''\n STREAM_AI_error: string = ''\n\n requestParams = {\n GET: ApiRequest.adapt(),\n POST: ApiRequest.adapt(),\n PUT: ApiRequest.adapt(),\n DELETE: ApiRequest.adapt(),\n STREAM: ApiRequest.adapt(),\n }\n\n @ViewChild(\"failedState\", { static: true }) failedState: any\n @ViewChild(\"pollingState\", { static: true }) pollingState: any\n\n questionControl = this.fb.control(\"\", [Validators.required])\n\n downloadRequest = ApiRequest.adapt({\n server: 'assets/images',\n path: ['me.jpg'],\n // saveAs: 'john.jpg' // Optional\n })\n\n // downloadRequest = ApiRequest.adapt({\n // server: 'oidc/ai/file'\n // })\n\n sampleClientData = {\n id: 0,\n name: \"Old School Dates\",\n domain: \"osd.com\",\n service: \"osd\",\n spiffe: \"osd.com/osd\",\n secret: \"SMOPECXP-OS4P-USOG-X2II-3XMD1FQDR3IJX\",\n created: 1693003138,\n modified: 1693003138,\n icon: \"\",\n imageFile: \"\",\n email: \"wavecoders@gmail.com\"\n }\n\n requestForm = this.fb.group({\n path: this.fb.control<string>(\"ai/\"),\n headers: this.fb.array([]),\n adapter: [null],\n mapper: [null],\n retry: this.fb.group({\n times: [3],\n delay: [3],\n }),\n polling: [3],\n })\n\n AIType = 0\n\n sampleAdaptors = [\n { label: \"ClientInfo Basic\", value: ClientInfo.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n sampleMappers = [\n { label: \"Mapper Basic\", value: ClientInfoMapper.adapt },\n { label: \"AI Prompt\", value: AIPrompt.adapt },\n ]\n\n get retry() {\n return this.requestForm.get('retry')?.value\n }\n\n get headers(): FormArray {\n return this.requestForm.get('headers') as FormArray\n }\n\n get isValid() {\n this.requestForm.markAllAsTouched()\n return this.requestForm.valid\n }\n\n hasId = (arr: any[]) => {\n if (arr.length === 0) return false\n return !isNaN(arr[arr.length - 1])\n }\n\n props = (adapter: any) => {\n return (adapter) ? adapter() : null\n }\n\n // server = `http://sample-endpoint/as/authorization.oauth2`\n\n arrayObjectsToObjects = (arr: any[]) => {\n return Array.isArray(arr) ? arr.reduce((obj, item) => Object.assign(obj, { [item.key]: item.value }), {}) : {}\n }\n\n constructor() { }\n\n ngOnInit() {\n\n // const reqGet2 = ApiRequest.adapt({\n // server,\n // path: ['clients'],\n // headers: { authentication: \"Bearer <KEY>\" },\n // adapter: ClientInfo,\n // dataType: DataType.OBJECT,\n // // concurrent: false,\n // // polling: 3, //seconds\n // })\n\n // const req2 = [1024,1025,1026].map(item => {\n // return this.httpManagerService.getRequest<ClientInfo[]>(reqGet2, [item])\n // .pipe(\n // catchError(error => {\n // return throwError(() => new Error(error.error.message))\n // })\n // )\n // })\n\n // forkJoin(req2)\n // .subscribe(res => console.log(res))\n\n }\n\n addHeader() {\n const header = this.fb.group({\n key: ['', Validators.required],\n value: ['']\n })\n this.headers.push(header)\n }\n\n removeHeader(index: number) {\n this.headers.removeAt(index)\n }\n\n compileRequest() {\n\n const requestParams = this.requestForm.value\n\n requestParams.headers = this.arrayObjectsToObjects(\n requestParams.headers || []\n )\n\n const pathReq = (requestParams.path === \"\") ? [] : (requestParams.path || \"\").split(\"/\")\n\n if (!this.pollingState.checked) requestParams.polling = 0\n\n if (!this.failedState.checked) {\n requestParams.retry = { times: 0,delay: 0 }\n }\n\n const apiOptions = ApiRequest.adapt(requestParams)\n apiOptions.path = []\n\n return { apiOptions: apiOptions, path: pathReq }\n\n }\n\n onGetRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n this.requestParams.GET = reqParams.apiOptions\n\n // reset local state\n this.GET_result = null\n this.GET_error = ''\n\n this.httpManagerSignalsService.getRequest<ClientInfo[]>(reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.GET_result = res,\n error: (err) => this.errorHandling(err, 'GET')\n })\n\n }\n\n onCreateRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n this.requestParams.POST = reqParams.apiOptions\n\n // reset local state\n this.POST_result = null\n this.POST_error = ''\n\n this.httpManagerSignalsService.postRequest<ClientInfo>(this.sampleClientData, reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.POST_result = res,\n error: (err) => this.errorHandling(err, 'POST')\n })\n\n }\n\n onUpdateRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n if(!this.hasId(reqParams.path)) {\n console.log(\"Missing ID\")\n return\n }\n\n this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length-1])\n this.requestParams.PUT = reqParams.apiOptions\n\n // reset local state\n this.PUT_result = null\n this.PUT_error = ''\n\n this.httpManagerSignalsService.putRequest<any>(this.sampleClientData, reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.PUT_result = res,\n error: (err) => this.errorHandling(err, 'PUT')\n })\n\n }\n\n onDeleteRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n this.requestParams.DELETE = reqParams.apiOptions\n\n if(!this.hasId(reqParams.path)) {\n console.log(\"Missing ID\")\n return\n }\n\n this.sampleClientData.id = parseInt(reqParams.path[reqParams.path.length-1])\n this.requestParams.DELETE = reqParams.apiOptions\n\n // reset local state\n this.DELETE_result = null\n this.DELETE_error = ''\n\n this.httpManagerSignalsService.deleteRequest<ClientInfo>(reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.DELETE_result = res,\n error: (err) => this.errorHandling(err, 'DELETE')\n })\n\n }\n\n onStreamPostRequest() {\n\n if (!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n let payload = {}\n let apiPath: string[] = reqParams.path\n let apiOptions = reqParams.apiOptions\n let responseMapper: (items: any) => any = (items) => items.response\n\n if (this.AIType === 0) {\n\n // API request\n payload = { prompt: this.questionControl.value }\n\n } else {\n\n // Local Ollama request\n apiOptions.server = \"api\"\n apiPath = [\"generate\"]\n apiOptions.stream = true\n payload = {\n model: \"phi3:latest\",\n prompt: this.questionControl.value,\n stream: true,\n }\n\n responseMapper = (items) => items.map((word: any) => word.response).flat().join('')\n\n }\n\n this.requestParams.STREAM = apiOptions\n this.STREAM_AI_result = null\n this.STREAM_AI_error = ''\n\n this.httpManagerSignalsService.postRequest<any>(payload, apiOptions, apiPath)\n .subscribe({\n next: (res) => {\n try {\n this.STREAM_AI_result = responseMapper(res)\n } catch (e) {\n this.STREAM_AI_result = res\n }\n this.questionControl.reset()\n },\n error: (err) => this.errorHandling(err, 'STREAM')\n })\n\n }\n\n\n onStreamRequest() {\n\n if(!this.isValid) return\n\n const reqParams = this.compileRequest()\n\n reqParams.apiOptions.stream = true\n\n this.requestParams.GET = reqParams.apiOptions\n this.STREAM_result = null\n this.STREAM_error = ''\n\n this.httpManagerSignalsService.getRequest<ClientInfo[]>(reqParams.apiOptions, reqParams.path)\n .subscribe({\n next: (res) => this.STREAM_result = res,\n error: (err) => this.errorHandling(err, 'STREAM')\n })\n\n }\n\n onDownloadCompleted() {\n\n const message = \"Download Completed\"\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.SUCCESS,\n icon: 'sentiment_satisfied_alt',\n })\n\n this.toastMessage.toastMessage(display)\n }\n\n onDownloadFailed(err: string) {\n\n const message = \"Download Failed\"\n\n const display = ToastDisplay.adapt({\n message,\n action: 'Ok',\n color: ToastColors.ERROR,\n icon: 'warning',\n })\n\n this.toastMessage.toastMessage(display)\n }\n\n errorHandling(err: any, type: string) {\n const message = err?.message || String(err)\n // set local error state\n if (type === 'GET') this.GET_error = message\n if (type === 'POST') this.POST_error = message\n if (type === 'PUT') this.PUT_error = message\n if (type === 'DELETE') this.DELETE_error = message\n if (type === 'STREAM') this.STREAM_error = message\n\n // also set the shared service error signal\n this.httpManagerSignalsService.error.set(message)\n\n return err\n }\n\n onSelectAIType(type: number) {\n this.AIType = type\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <h2>\n <span>HTTP Request Signals Manager</span>\n <span style=\"margin-left: .5rem;\">\n <mat-icon color=\"accent\">fiber_new</mat-icon>\n </span>\n </h2>\n\n <div [formGroup]=\"requestForm\" style=\"margin-top: 2rem;\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Adapter (Model)</mat-label>\n <mat-select formControlName=\"adapter\" #adapterSelect>\n <mat-option>None</mat-option>\n <mat-option *ngFor=\"let adapter of sampleAdaptors\" [value]=\"adapter.value\">\n {{adapter.label}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mapper (Model)</mat-label>\n <mat-select formControlName=\"mapper\" #mapperSelect>\n <mat-option>None</mat-option>\n <mat-option *ngFor=\"let mapper of sampleMappers\" [value]=\"mapper.value\">\n {{mapper.label}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"display: flex; margin-bottom: 2rem;\" *ngIf=\"adapterSelect.value || mapperSelect.value\">\n <div style=\"flex:1\" class=\"box\">\n <h3>Adapter (Incoming)</h3>\n <div *ngIf=\"adapterSelect.value; else NO_ADAPTER\">\n {{ props(adapterSelect.value) | json }}\n </div>\n <ng-template #NO_ADAPTER>No Transformation</ng-template>\n </div>\n <div style=\"flex:1\" class=\"box\">\n <h3>Mapper (Outgoing)</h3>\n <div *ngIf=\"mapperSelect.value; else NO_MAPPER\">\n {{ props(mapperSelect.value) | json }}\n </div>\n <ng-template #NO_MAPPER>No Transformation</ng-template>\n </div>\n </div>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>RestPath (/ delimited)</mat-label>\n <input matInput placeholder=\"clients/list\" formControlName=\"path\">\n </mat-form-field>\n </div>\n <div>\n <div formArrayName=\"headers\">\n <div *ngFor=\"let task of headers.controls; let i = index\" [formGroupName]=\"i\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Key</mat-label>\n <input matInput placeholder=\"authentication\" formControlName=\"key\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Value</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"value\">\n </mat-form-field>\n <div style=\"margin-top: .5rem;\">\n <button mat-icon-button (click)=\"removeHeader(i)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n <button mat-stroked-button (click)=\"addHeader()\" class=\"btn\">Add Header</button>\n </div>\n <div style=\"margin-top: 2rem; display: flex; flex-direction:column; gap: 1rem;\">\n <div>\n <mat-slide-toggle #failedState>Retry on Failed</mat-slide-toggle>\n <div *ngIf=\"failedState.checked\" style=\"display: flex; gap: .5rem; margin-top: 1rem;\" formGroupName=\"retry\">\n <mat-form-field appearance=\"outline\">\n <mat-label>#of Times</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"times\" value=\"3\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Delay Until Next</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"delay\" value=\"3\">\n </mat-form-field>\n </div>\n </div>\n <div>\n <mat-slide-toggle #pollingState>Polling</mat-slide-toggle>\n <div *ngIf=\"pollingState.checked\">\n <mat-form-field appearance=\"outline\" style=\"margin-top: 1rem\">\n <mat-label>#of Seconds</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"polling\" value=\"3\">\n </mat-form-field>\n </div>\n </div>\n </div>\n </div>\n\n <div style=\"margin-bottom: 1rem; margin-top: 2rem;\">\n <mat-progress-bar mode=\"indeterminate\"\n *ngIf=\"isPending()\"\n ></mat-progress-bar>\n <mat-progress-bar mode=\"determinate\"\n *ngIf=\"pollingState.checked && !isPending()\"\n [value]=\"countdown()\"\n ></mat-progress-bar>\n </div>\n\n <div style=\"margin-top: 1rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onGetRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"GET_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ GET_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"GET_result\">\n {{ GET_result | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">POST Request</h2>\n <div>\n <button mat-raised-button (click)=\"onCreateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"POST_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ POST_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"POST_result\">\n {{ POST_result | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">PUT Request</h2>\n <div>\n <button mat-raised-button (click)=\"onUpdateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"PUT_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ PUT_error }}</mat-error>\n </div>\n\n <h3>Include Record ID in the RestPath</h3>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"PUT_result\">\n {{ PUT_result | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">DELETE Request</h2>\n <div>\n <button mat-raised-button (click)=\"onDeleteRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <h3>Include Record ID in the RestPath</h3>\n\n <div *ngIf=\"DELETE_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ DELETE_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"DELETE_result\">\n {{ DELETE_result | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">Streaming GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onStreamRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <!-- <div *ngIf=\"(STREAM_error$ | async) as stream_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ stream_error }}</mat-error>\n </div> -->\n\n <div style=\"margin-top: 1rem;\">\n <div *ngIf=\"STREAM_result as data\" class=\"container\">\n <table mat-table [dataSource]=\"data\">\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> First Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"lastName\">\n <th mat-header-cell *matHeaderCellDef> Last Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.lastName}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"age\">\n <th mat-header-cell *matHeaderCellDef> Age </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.age}} </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n </div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1; padding-top: .5rem;\">AI -<span *ngIf=\"AIType === 1\">STREAMING</span> POST Request</h2>\n <div style=\"display: flex; gap: 1rem;\">\n <button mat-raised-button [matMenuTriggerFor]=\"menu\" style=\"min-width: 120px;\">\n <mat-icon>lan</mat-icon>\n <span *ngIf=\"AIType === 0; else LOCAL\">Server</span>\n <ng-template #LOCAL>\n Local\n </ng-template>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"onSelectAIType(0)\">Server</button>\n <button mat-menu-item (click)=\"onSelectAIType(1)\">Local</button>\n </mat-menu>\n <div>\n <button mat-raised-button (click)=\"onStreamPostRequest()\" class=\"btn\">Ask Me</button>\n </div>\n </div>\n </div>\n\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Ask me a Question</mat-label>\n <textarea matInput placeholder=\"Why is the sky blue?\" [formControl]=\"questionControl\"></textarea>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"STREAM_AI_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ STREAM_AI_error }}</mat-error>\n </div>\n\n <div *ngIf=\"AIType === 1; else ALTERNATIVE\" style=\"color: red;\">\n You must have Ollama active and the 'phi3:latest' model to use this feature.\n </div>\n <ng-template #ALTERNATIVE>\n <span style=\"color: gray;\">\n Define the RestPath to the API endpoint that will handle the AI request.\n Use: 'ai/chat' for server\n </span>\n </ng-template>\n\n <div>\n <div *ngIf=\"STREAM_AI_result\" style=\"margin-top: 1rem; font-size: 1.2rem; border-radius: 1rem; border: black 1px solid; padding: 2rem;\">\n <p style=\"margin-bottom: .5rem; white-space:pre-wrap; line-height: 1.6rem;\">{{STREAM_AI_result}}</p>\n </div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 1.5rem; margin-bottom: 1rem; line-height: 1.5rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div>\n <div style=\"display: flex;\">\n <h2 style=\"flex:1; margin-bottom: 0; padding-top: .5rem; display: flex;\">\n <div>\n Download File\n </div>\n <div style=\"flex:1; margin-left: 1rem;\">\n <mat-slide-toggle #disable>\n <span *ngIf=\"disable.checked; else DISABLE\">\n Enable\n </span>\n <ng-template #DISABLE>Disable</ng-template>\n </mat-slide-toggle>\n </div>\n </h2>\n <div>\n <app-file-downloader\n [disabled]=\"disable.checked\"\n [delayError]=\"3\"\n [apiRequest]=\"downloadRequest\"\n (completed)=\"onDownloadCompleted()\"\n (failed)=\"onDownloadFailed($event)\"\n ></app-file-downloader>\n </div>\n </div>\n </div>\n\n</div>\n","import { Component, Inject, inject, OnInit, ViewEncapsulation, effect, signal, computed } from '@angular/core';\nimport { LocalStorageSignalsManagerService, SettingOptions, StorageOption, StorageType } from '../../services/local-storage-manager-service';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { ConfigOptions, LocalStorageOptions, UtilsService } from '../../services';\nimport { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';\n\n@Component({\n selector: 'app-local-storage-signals-demo',\n templateUrl: './local-storage-signals-demo.component.html',\n styleUrls: ['./local-storage-signals-demo.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class LocalStorageSignalsDemoComponent implements OnInit {\n\n fb = inject(FormBuilder)\n utils = inject(UtilsService)\n\n // store type is driven by the form control\n get type() {\n return (this.typeControl.value) ? +this.typeControl.value : 0;\n }\n\n typeControl = this.fb.control(StorageType.GLOBAL.toString())\n\n localStorageManagerService = inject(LocalStorageSignalsManagerService)\n\n // Use signals directly and computed values for template binding\n readonly settings = computed(() => this.localStorageManagerService.settings());\n\n // selected store (signal) and its JSON data for template\n storeSelected = signal<StorageOption | null>(null);\n selectedStoreData = computed(() => {\n const s = this.storeSelected();\n if (!s) return '';\n const computed = this.localStorageManagerService.store(s.name);\n return computed ? JSON.stringify(computed()) : '';\n });\n\n // filtered settings by selected type\n selectedType = signal<number>(StorageType.GLOBAL);\n filteredSettings = computed(() => {\n const values = this.settings() || [];\n return values.filter((item: any) => item.options.storage === +this.selectedType());\n });\n\n storageForm = this.fb.group({\n store: this.fb.control<string|null>(null),\n type: 'local',\n settingType: 'local',\n encrypted: false,\n data: this.fb.control<string>('', Validators.required),\n })\n\n newStoreForm = this.fb.group({\n name: this.fb.control<string|null>(null, Validators.required),\n storage: 'local',\n encrypted: false,\n data: this.fb.control<string>('', Validators.required),\n expiresIn: this.fb.control('0')\n })\n\n // no RxJS Observables here; template uses signals/computed directly\n\n expiresIn = (epoch: number) => this.utils.expiresIn(epoch)\n\n get isValid() {\n return this.newStoreForm.valid\n }\n\n get isValidData() {\n return this.storageForm.valid\n }\n\n isValidJSON = (str: string) => {\n try {\n JSON.parse(str)\n return true\n } catch (e) {\n return false\n }\n }\n\n displayedColumns: string[] = ['name', 'id', 'encrypted', 'expires', \"option\"];\n\n filterData = (values: StorageOption[] | null | undefined) => {\n if(!values) return []\n return values.filter((item: any) => item.options && item.options.storage === +this.type)\n }\n\n settingFor(name: string) {\n const c = this.localStorageManagerService.setting(name);\n return c ? c() : null;\n }\n\n // data and selected store\n store: any\n create = false\n\n storeProps?: LocalStorageOptions\n options?: SettingOptions\n\n constructor(@Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) { }\n\n ngOnInit() {\n\n this.storeProps = this.configOptions?.LocalStorageOptions\n this.options = this.storeProps?.options\n\n if(this.options?.storage) {\n this.typeControl.patchValue(this.options.storage.toString())\n this.typeControl.disable()\n } else {\n this.typeControl.enable()\n }\n\n if(this.options?.expiresIn) {\n this.newStoreForm.get('expiresIn')?.patchValue(this.options.expiresIn)\n this.newStoreForm.get('expiresIn')?.disable()\n } else {\n this.newStoreForm.get('expiresIn')?.enable()\n }\n\n if(this.options?.encrypted) {\n this.newStoreForm.get('encrypted')?.patchValue(this.options.encrypted)\n this.newStoreForm.get('encrypted')?.disable()\n } else {\n this.newStoreForm.get('encrypted')?.enable()\n }\n\n // nothing to synchronize - templates read computed signals directly\n\n }\n\n onCreateStore() {\n\n if(!this.isValid) return\n\n const store = this.newStoreForm.value\n if(!store.name || store.name === '') return\n\n const options = { storage: this.type, encrypted: store.encrypted, expiresIn: store.expiresIn }\n\n this.localStorageManagerService.createStore({\n name: store.name,\n data: store.data,\n options: SettingOptions.adapt(options)\n })\n\n this.newStoreForm.reset()\n this.create = false\n }\n\n onUpdateStore(store: any) {\n\n if(!this.storageForm.valid) return\n\n const storeData = this.storageForm.value\n\n const data = JSON.parse(storeData.data || '')\n\n const type = (storeData.type === 'local') ? StorageType.GLOBAL : StorageType.SESSION\n\n this.localStorageManagerService.updateStore({\n name: store.name,\n data\n })\n\n }\n\n onSelectedRow(store: any) {\n this.store = store\n this.storeSelected.set(store)\n this.create = false\n }\n\n onCreate() {\n this.onCancel()\n this.create = true\n }\n\n onDelete(store: StorageOption) {\n\n this.localStorageManagerService.deleteStore({\n name: store.name,\n })\n\n this.onCancel()\n }\n\n onCancel() {\n this.storeSelected.set(null)\n this.store = null\n this.create = false\n }\n\n onUpdate(store: StorageOption, data: any) {\n\n this.localStorageManagerService.updateStore({\n name: store.name,\n data: JSON.parse(data)\n })\n\n this.onCancel()\n\n }\n\n onReset() {\n this.localStorageManagerService.resetStore()\n }\n\n}\n","<div style=\"margin: 2rem;\">\n\n <div style=\"display: flex; gap: 1rem\">\n <h2 style=\"padding-top: .5rem; display: flex;\">\n <div style=\"padding-top: .5rem;\">\n <span>Local Storage Manager</span>\n <span style=\"margin-left: .5rem;\">\n <mat-icon color=\"accent\">fiber_new</mat-icon>\n </span>\n </div>\n <div>\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon>info</mat-icon>\n </button>\n </div>\n </h2>\n <span style=\"flex:1\"></span>\n <div style=\"padding-top: .25rem;\">\n <mat-button-toggle-group name=\"storage\" [formControl]=\"typeControl\" (change)=\"onCancel()\">\n <mat-button-toggle value=\"0\">Local Storage</mat-button-toggle>\n <mat-button-toggle value=\"1\">Session Storage</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n <div style=\"margin-top: .25rem;\">\n <button mat-icon-button (click)=\"onCreate()\">\n <mat-icon>add</mat-icon>\n </button>\n </div>\n </div>\n\n <ng-container *ngIf=\"storeProps?.storageName || storeProps?.storageSettingsName\">\n <div style=\"display: flex; gap: .5rem; flex-direction: column; border: gray solid thin; background-color: whitesmoke; padding: 1rem;\"\n >\n <div style=\"display: flex;\">\n <div *ngIf=\"storeProps?.storageSettingsName\" style=\"flex:1\">\n Database: <b>{{ storeProps?.storageSettingsName }}</b>\n </div>\n <div *ngIf=\"storeProps?.storageName\" style=\"flex:1\">\n Data: <b>{{ storeProps?.storageName }}</b>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div style=\"margin-top: 2rem;\" [formGroup]=\"newStoreForm\" *ngIf=\"create; else LIST\">\n\n <h2>Create Store</h2>\n\n <div style=\"display: flex; gap: 1rem;\">\n <div style=\"flex:1\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Store Name</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"name\">\n </mat-form-field>\n </div>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Expires In...</mat-label>\n <mat-select formControlName=\"expiresIn\">\n <mat-option value=\"0\">None</mat-option>\n <mat-option value=\"30s\">30 Seconds</mat-option>\n <mat-option value=\"1mn\">1 Minute</mat-option>\n <mat-option value=\"1hr\">1 Hour</mat-option>\n <mat-option value=\"1d\">1 Day</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"margin-top: 1rem;\">\n <mat-slide-toggle formControlName=\"encrypted\">Encrypted</mat-slide-toggle>\n </div>\n </div>\n\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex: 1;\">\n <mat-label>Data (Must be an Object or Array of any)</mat-label>\n <textarea matInput placeholder=\"[]\" formControlName=\"data\" #json></textarea>\n </mat-form-field>\n </div>\n <mat-error *ngIf=\"!isValidJSON(json.value)\">Not Valid Data</mat-error>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onCreateStore()\" [disabled]=\"!(isValid && isValidJSON(json.value))\">\n Save Store\n </button>\n </div>\n\n </div>\n\n <ng-template #LIST>\n\n <div style=\"margin-top: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n{{ settings() | json }}\n <div *ngIf=\"filterData(settings()) as data\">\n <ng-container *ngIf=\"data.length > 0; else NO_DATA\">\n <table mat-table [dataSource]=\"data\">\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> Store </th>\n <td mat-cell *matCellDef=\"let element\" style=\"font-weight: bold; text-transform: uppercase;\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"encrypted\">\n <th mat-header-cell *matHeaderCellDef style=\"text-align: center;\"> Encrypted </th>\n <td mat-cell *matCellDef=\"let element\" style=\"text-align: center;\">\n <ng-container *ngIf=\"element.options.encrypted; else NO\">YES</ng-container>\n <ng-template #NO><span style=\"color:gray\">NO</span></ng-template>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"expires\">\n <th mat-header-cell *matHeaderCellDef style=\"text-align: center;\"> Expires </th>\n <td mat-cell *matCellDef=\"let element\" style=\"text-align: center;\">\n <ng-container *ngIf=\"element.options.expires !== 0; else NO_DATA\">\n {{expiresIn(element.options.expires)}}\n </ng-container>\n <ng-template #NO_DATA>\n ∞\n </ng-template>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"option\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell *matCellDef=\"let element\" style=\"padding-right: 0;\">\n <div style=\"display: flex;justify-content: flex-end;\">\n <button mat-icon-button color=\"warn\" (click)=\"onDelete(element); $event.stopPropagation()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" (click)=\"onSelectedRow(row)\"></tr>\n </table>\n </ng-container>\n\n <ng-template #NO_DATA>\n <h3 style=\"margin-top: 1rem;\">No Data</h3>\n </ng-template>\n\n <div *ngIf=\"storeSelected() as selectedStore\" style=\"margin-top: 2rem;\">\n <div style=\"margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <h3>STORE: <span style=\"font-weight: bold;\">{{ selectedStore.name | uppercase }}</span></h3>\n <h3>SETTINGS: {{ localStorageManagerService.setting(selectedStore.name) ? (localStorageManagerService.setting(selectedStore.name)() | json) : '{}' }}</h3>\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex: 1;\">\n <mat-label>Data (Must be an Object or Array of any)</mat-label>\n <textarea matInput placeholder=\"[]\" #json [value]=\"selectedStoreData()\"></textarea>\n </mat-form-field>\n </div>\n <mat-error *ngIf=\"!isValidJSON(json.value)\">Not Valid Data</mat-error>\n\n <div style=\"display: flex; gap: .5rem;\">\n <span style=\"flex:1\"></span>\n <button mat-stroked-button (click)=\"onCancel()\">Cancel</button>\n <button mat-stroked-button (click)=\"onUpdate(selectedStore, json.value)\" [disabled]=\"!(isValidJSON(json.value))\">Update</button>\n </div>\n </div>\n </div>\n\n </ng-template>\n\n <div style=\"margin-top: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 1rem;\">\n <button mat-stroked-button (click)=\"onReset()\">Delete All Stores</button>\n </div>\n\n</div>\n\n\n<mat-menu #menu=\"matMenu\">\n <div style=\"padding: 1rem;\">\n <p>Please note that the LocalStorage (encryption) and management of data is dependant on initializing the APP_ID</p>\n <p>Must provide a value for <b>APP_ID</b> in AppModule->Providers</p>\n <mat-divider></mat-divider>\n <div style=\"font-size: smaller; margin-top: .5rem;\">\n <p>Example: UUID (self.crypto.randomUUID() to generate)</p>\n <div style=\"background-color: whitesmoke; padding: 1rem;\">\n {<br>\n provide: APP_ID,<br>\n useValue: \"056991ac-3537-43ab-b5b9-83edf6554eff\",<br>\n }\n </div>\n </div>\n </div>\n</mat-menu>\n","import { Component, Inject, OnInit } from '@angular/core';\n\nimport { CONFIG_SETTINGS_TOKEN } from '../models/config-token.model';\nimport { ConfigOptions } from '../models/config-options.model';\n\n@Component({\n selector: 'app-http-request-services-demo',\n templateUrl: './http-request-services-demo.component.html',\n styleUrls: ['./http-request-services-demo.component.scss']\n})\nexport class HttpRequestServicesDemoComponent implements OnInit {\n\n requestTypes = [\n { name: \"Http Service\", value: 'http_service' },\n { name: \"Http Signals Service\", value: 'http_signals_service', new: true },\n { name: \"Http State Service\", value: 'http_state_service' },\n { name: \"Database Service\", value: 'database_service', divider: true, disabled: true },\n { name: \"Local Storage Service\", value: 'local_storage_service' },\n { name: \"Local Signals Storage Service\", value: 'local_storage_signals_service', new: true },\n ]\n\n selectedService = this.requestTypes[0].value\n\n injectionOptions?: ConfigOptions\n\n constructor(@Inject(CONFIG_SETTINGS_TOKEN) private configOptions?: ConfigOptions) { }\n\n ngOnInit() {\n if(this.configOptions) this.injectionOptions = this.configOptions\n }\n\n onSelected(type: number) {\n this.selectedService = this.requestTypes[type].value\n }\n\n}\n","<mat-toolbar style=\"display:flex\">\n <div>Http Request Manager Services</div>\n <div style=\"flex:1\"></div>\n <button mat-stroked-button [matMenuTriggerFor]=\"menu\">Services</button>\n <mat-menu #menu=\"matMenu\">\n <ng-container *ngFor=\"let type of requestTypes; index as i\">\n <div\n *ngIf=\"type?.divider\"\n style=\"margin-top: .5rem; margin-bottom: .5rem;\"\n >\n <mat-divider></mat-divider>\n </div>\n <button\n mat-menu-item\n (click)=\"onSelected(i)\"\n [disabled]=\"type.disabled\"\n >\n {{ type.name }}\n </button>\n </ng-container>\n\n </mat-menu>\n</mat-toolbar>\n\n<span [ngSwitch]=\"selectedService\">\n <p *ngSwitchCase=\"'http_service'\">\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-manager-demo></app-request-manager-demo>\n </p>\n <p *ngSwitchCase=\"'http_signals_service'\">\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-signals-manager-demo></app-request-signals-manager-demo>\n </p>\n <p *ngSwitchCase=\"'http_state_service'\">\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-manager-state-demo></app-request-manager-state-demo>\n </p>\n <p *ngSwitchCase=\"'database_service'\">\n <!-- <app-database-data-demo></app-database-data-demo> -->\n </p>\n <p *ngSwitchCase=\"'local_storage_service'\">\n <ng-container *ngTemplateOutlet=\"LOCAL_OPTIONS\"></ng-container>\n <app-local-storage-demo></app-local-storage-demo>\n </p>\n <p *ngSwitchCase=\"'local_storage_signals_service'\">\n <ng-container *ngTemplateOutlet=\"LOCAL_OPTIONS\"></ng-container>\n <app-local-storage-signals-demo></app-local-storage-signals-demo>\n </p>\n <p *ngSwitchDefault>\n Other\n </p>\n</span>\n\n<ng-template #HTTP_OPTIONS>\n <ng-container *ngIf=\"injectionOptions?.httpRequestOptions\">\n <div class=\"box\">\n <h3 style=\"font-weight: bold;\">Injection Token Detected - HTTP Options</h3>\n {{ injectionOptions?.httpRequestOptions| json }}\n </div>\n </ng-container>\n</ng-template>\n\n<ng-template #LOCAL_OPTIONS>\n <ng-container class=\"box\" *ngIf=\"injectionOptions?.LocalStorageOptions\">\n <div class=\"box\">\n <h3 style=\"font-weight: bold;\">Injection Token Detected - LocalStorage Options</h3>\n {{ injectionOptions?.LocalStorageOptions| json }}\n </div>\n </ng-container>\n</ng-template>\n\n\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ThemePalette } from '@angular/material/core';\nimport { ProgressSpinnerMode } from '@angular/material/progress-spinner';\n\n@Component({\n selector: 'app-spinner',\n templateUrl: './spinner.component.html',\n styleUrls: ['./spinner.component.scss']\n})\nexport class SpinnerComponent implements OnInit {\n\n @Input() color: ThemePalette;\n\n @Input() diameter?: number;\n @Input() display?: string | number;\n @Input() mode?: ProgressSpinnerMode;\n @Input() strokeWidth?: number;\n @Input() value = 0\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","<div class=\"spinner-background\">{{display}}</div>\n<mat-progress-spinner\n [color]=\"color\"\n [diameter]=\"diameter\"\n [mode]=\"mode || 'indeterminate'\"\n [strokeWidth]=\"strokeWidth\"\n [value]=\"value\">\n</mat-progress-spinner>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { DownloadFileComponent } from './download-file/download-file.component';\nimport { FileDownloaderComponent } from './file-downloader.component';\n\nimport { SpinnerComponent } from './spinner/spinner.component';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatButtonModule } from '@angular/material/button';\n\n@NgModule({\n imports: [\n CommonModule,\n MatIconModule,\n MatProgressSpinnerModule,\n MatButtonModule,\n ],\n declarations: [\n SpinnerComponent,\n DownloadFileComponent,\n FileDownloaderComponent,\n ],\n exports: [\n FileDownloaderComponent\n ]\n})\nexport class FileDownloaderModule { }\n","import { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\n\n\nimport { WithCredentialsInterceptor, RequestHeadersInterceptor } from './interceptors';\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { RequestManagerDemoComponent } from './http-request-services-demo/request-manager-demo/request-manager-demo.component';\nimport { RequestManagerStateDemoComponent } from './http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component';\nimport { LocalStorageDemoComponent } from './http-request-services-demo/local-storage-demo/local-storage-demo.component';\n// import { DatabaseDataDemoComponent } from './global-data-demo/database-data-demo/database-data-demo.component';\n\nimport { CommonModule } from '@angular/common';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { ProxyDebuggerInterceptor } from './interceptors/proxy-debugger.interceptor';\n\nimport { HttpRequestServicesDemoComponent } from './http-request-services-demo/http-request-services-demo.component';\nimport { RequestSignalsManagerDemoComponent } from './http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component';\n\nimport { ConfigOptions } from './models';\nimport { CONFIG_SETTINGS_TOKEN } from './models/config-token.model';\nimport { HTTPManagerService, LocalStorageManagerService } from './services';\n\nimport { FileDownloaderModule } from './http-request-services-demo/request-manager-demo/file-downloader/file-download.module';\nimport { LocalStorageSignalsDemoComponent } from './http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component';\nimport { ToastMessageDisplayModule } from 'toast-message-display';\n\n\n@NgModule({\n imports: [\n CommonModule,\n ToastMessageDisplayModule,\n FormsModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatSelectModule,\n MatChipsModule,\n MatMenuModule,\n MatIconModule,\n MatTableModule,\n MatButtonToggleModule,\n MatAutocompleteModule,\n MatProgressBarModule,\n MatSlideToggleModule,\n MatDividerModule,\n MatFormFieldModule,\n MatInputModule,\n MatToolbarModule,\n MatSlideToggleModule,\n TranslateModule.forRoot(),\n MatSidenavModule,\n FileDownloaderModule,\n ],\n declarations: [\n HttpRequestServicesDemoComponent,\n RequestManagerStateDemoComponent,\n RequestManagerDemoComponent,\n RequestSignalsManagerDemoComponent,\n LocalStorageDemoComponent,\n LocalStorageSignalsDemoComponent,\n // DatabaseDataDemoComponent,\n ],\n exports: [\n HttpRequestServicesDemoComponent,\n // Re-export commonly used modules so demo component templates have access to\n // Angular common pipes and Material components when the library is imported.\n CommonModule,\n MatButtonToggleModule,\n MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n MatIconModule,\n MatTableModule,\n MatSlideToggleModule,\n MatProgressBarModule,\n MatDividerModule,\n ],\n providers: [\n { provide: HTTP_INTERCEPTORS, useClass: WithCredentialsInterceptor, multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: RequestHeadersInterceptor, multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: ProxyDebuggerInterceptor, multi: true },\n { provide: CONFIG_SETTINGS_TOKEN, useValue: ConfigOptions.adapt() },\n HTTPManagerService, LocalStorageManagerService\n ],\n})\nexport class HttpRequestManagerModule {\n\n static forRoot(config: ConfigOptions = ConfigOptions.adapt()): ModuleWithProviders<HttpRequestManagerModule> {\n return {\n ngModule: HttpRequestManagerModule,\n providers: [\n { provide: CONFIG_SETTINGS_TOKEN, useValue: ConfigOptions.adapt(config) },\n HTTPManagerService, LocalStorageManagerService //all services that need access to config\n ],\n };\n }\n\n}\n\n\n","export interface TableSchemaDefInterface {\n table: string\n schema: string\n}\n\nexport class TableSchemaDef implements TableSchemaDefInterface {\n constructor(\n public table = 'unknown',\n public schema: string = '',\n ) {}\n\n static adapt(item?: any): TableSchemaDef {\n\n const schemaArray = (item?.schema && Array.isArray(item.schema)) ? item.schema : item.schema.split(',')\n const schema = schemaArray.map((item: string) => this.cleanString(item)).join()\n\n return new TableSchemaDef(\n (item?.table) ? this.cleanString(item.table) : 'unknown',\n schema,\n )\n\n }\n\n static cleanString(str: string): string {\n const camelCaseSplit = str.replace(/([a-z])([A-Z])/g, '$1 $2')\n \n const cleanStr = camelCaseSplit\n .replace(/[^a-zA-Z0-9\\s]/g, '') // Remove non-alphanumeric characters except spaces\n .toLowerCase() // Convert to lowercase\n .trim(); // Trim any leading or trailing spaces\n \n return cleanStr;\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport Dexie, {Table} from 'dexie';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DbService extends Dexie {\n\n storageDB = \"global_storage_db\"\n\n db = new Dexie(this.storageDB)\n\n get vr() {\n return (this.db.verno === 0) ? 1 : this.db.verno + 1\n }\n\n get nextVr() {\n return this.vr + 1\n }\n\n get getTables() {\n return this.db.tables.map((item: any) => item.name)\n }\n\n async hasDatabase() {\n return await Dexie.exists(this.storageDB).then((res: any) => {\n this.createNewDatabase()\n return res\n })\n }\n\n getTable = (table: string) => {\n return this.db.tables.find((item: any) => item.name === table)\n }\n\n tableExists = (table: string) => {\n return (this.getTables.find((item: any) => item === table)) ? true : false\n }\n\n constructor() {\n\n super(\"global_storage_db\")\n\n this.db = this\n this.open().then((data: any) => {\n\n }).catch(err => {\n this.createNewDatabase()\n })\n\n }\n\n protected async updateTable(table: string, find: { key: string, value: string|number }, data: any) {\n\n const tableSource = this.getTable(table)\n\n if(!tableSource || !find || !(find.key || find.value)) return false\n\n await tableSource?.where(find.key).equals(find.value).first()\n .then(async (rec: any) => {\n const newRec = this.updateObjectKeys(rec, data)\n await tableSource?.update(rec.id, newRec)\n })\n\n return true\n\n }\n\n protected async createNewDatabase() {\n\n const db = new Dexie('global_storage_db');\n\n if (!await Dexie.exists(db.name)) {\n db.version(1).stores({})\n }\n\n await db.open()\n\n }\n\n // async createTable(table: string, schema: string) {\n protected async createTable(table: string, schema: string) {\n\n // console.log('createTable:', table, schema)\n\n this.hasDatabase().then(async(res) => {\n\n const tableDef = this.normalizeString(table)\n const schemaDef = this.normalizeString(schema)\n\n table = tableDef || ''\n schema = schemaDef || ''\n\n if(table === '' || schema === '') return\n\n if(!this.db.isOpen()) {\n await this.db.open()\n .then( async () => {\n this.create(table, schema)\n // console.log('OPENED', table)\n })\n .catch(() => {\n // console.log('FAILED', table)\n })\n\n } else {\n this.create(table, schema)\n }\n\n const hasTable = this.getTable(table)\n\n if(!hasTable) {\n setTimeout(() => {\n this.createTable.bind(this, table, schema)\n this.create(table, schema)\n }, 300)\n }\n\n // console.log('DB HAS', table, hasTable)\n\n })\n\n }\n\n private async create(table: string, schema: string) {\n\n // console.log('OPEN', this.db.name, this.vr, this.db.verno, 'OPEN',this.db.isOpen())\n\n if(!this.tableExists(table)) {\n\n if(this.db.isOpen()) await this.db.close()\n\n const newSchema: any = { [table]: schema }\n await this.db.version(this.nextVr).stores(newSchema)\n\n // console.log('Created New Table: ', table, schema)\n\n if(!this.db.isOpen()) await this.db.open()\n }\n\n }\n\n private updateObjectKeys(obj1: any, obj2: any) {\n\n return Object.keys(obj1).reduce((updatedObj: any, key: any) => {\n updatedObj[key] = obj2.hasOwnProperty(key) ? obj2[key] : obj1[key]\n return updatedObj\n }, {})\n\n }\n\n protected async DBOpened() {\n\n if(!this.db.isOpen()) {\n await this.db.open()\n .then( async () => {\n // console.log('OPENED')\n })\n .catch(async (err) => {\n // console.log('OPENED ERR')\n return false\n })\n } else {\n // console.log('OPENED')\n }\n\n return true\n\n }\n\n private normalizeString(item: string|string[]) {\n\n if(!item) return\n\n return Array.isArray(item) ?\n item.map((item: string) => this.cleanString(item)).join()\n : item.split(',').map((item: string) => this.cleanString(item)).join()\n\n }\n\n private cleanString(str: string): string {\n\n const cleanStr = str\n .replace(/[^a-zA-Z0-9\\s]/g, '')\n .replace(/\\s+/g, '_')\n\n return cleanStr.trim().toLowerCase()\n\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { DbService } from './db.storage.service';\n\nimport { TableSchemaDef } from './models/table-schema';\nimport { EMPTY, from, Observable } from 'rxjs';\nimport { map, mergeMap, switchMap } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DatabaseManagerService extends DbService {\n\n constructor() {\n super()\n this.createNewDatabase()\n }\n\n getDatabaseTables() {\n return from(this.DBOpened()).pipe(\n map(() => this.db.tables.map((item: any) => item.name))\n )\n }\n\n hasDatabaseTable(table: string): Observable<boolean> {\n return from(this.DBOpened()).pipe(\n map(() => {\n return this.tableExists(this.clean(table))\n })\n )\n }\n\n getDatabaseTable(table: string): Observable<any> {\n return from(this.DBOpened()).pipe(\n map((res) => {\n this.hasDatabase().then((res) => {\n\n const tables = this.db.tables\n const found = tables.find((item: any) => item.name === this.clean(table)) || null\n\n if(!found) {\n console.warn('No Such Table:', this.clean(table))\n return\n } else {\n return found\n }\n\n })\n })\n )\n }\n\n getDatabaseTableSchema(table: string): Observable<string[]> {\n\n return from(this.DBOpened()).pipe(\n mergeMap((res) => this.getDatabaseTable(table)),\n map((dbTable: any) => {\n if(!dbTable) return []\n const cols = dbTable.schema.indexes.map((col: any) => col.name)\n const pri = dbTable.schema.primKey.name\n return [pri, ...cols]\n })\n )\n\n }\n\n createDatabaseTable(tableDef: TableSchemaDef) {\n this.createTable(tableDef.table, tableDef.schema)\n return from(this.DBOpened())\n }\n\n updateDatabaseTableSchema(tableDef: TableSchemaDef) {\n\n }\n\n // CRUD\n findTableRecords(table: string, column: string, value: any) {\n\n }\n\n findTableRecord(table: string, column: string, value: any) {\n\n }\n\n getTableRecords(table: string) {\n\n }\n\n getTableRecord(table: string, id: number) {\n\n }\n\n createTableRecord(table: string, record: any) {\n return this.createTableRecords(table, [record])\n .pipe(\n map((item: any) => item ? item[0] : null))\n }\n\n createTableRecords(table: string, records: any[]) {\n\n return this.getDatabaseTable(table).pipe(\n\n switchMap((tableData: any) => {\n\n if(!tableData) return EMPTY\n\n return this.getDatabaseTableSchema(table).pipe(\n\n map((schema: string[]) => {\n\n const insertRecords = records.map((record: any) => {\n\n const objectFromSchema: { [key: string]: any } = {}\n\n schema.forEach((field: string) => {\n const data = (record as any)[field] ?? null\n objectFromSchema[field] = data\n })\n\n return objectFromSchema\n\n })\n\n tableData.bulkPut(insertRecords)\n return insertRecords\n\n })\n\n )\n\n })\n\n )\n\n }\n\n updateTableRecord(table: string, record: any) {\n return this.updateTableRecords(table, [record])\n .pipe(\n map(item => item.length > 0 ? item[0] : null)\n )\n }\n\n updateTableRecords(table: string, records: any[]) {\n\n return this.getDatabaseTable(table).pipe(\n\n switchMap((tableData: any) => {\n\n return this.getDatabaseTableSchema(table).pipe(\n\n map((schema: string[]) => {\n\n const insertRecords = records.map((record: any) => {\n\n const objectFromSchema: { [key: string]: any } = {}\n\n schema.forEach((field: string) => {\n const data = (record as any)[field] ?? null\n objectFromSchema[field] = data\n })\n\n return objectFromSchema\n\n })\n\n tableData.bulkPut(insertRecords).then(() => console.log('Updated DB'))\n return insertRecords\n\n })\n\n )\n\n })\n\n )\n\n }\n\n deleteTableRecord<T>(table: string, id: number) {\n\n }\n\n private clean(str: string): string {\n const cleanStr = str\n .replace(/[^a-zA-Z0-9\\s]/g, '_') // Replace non-alphanumeric characters except spaces with underscores\n .replace(/\\s+/g, '_') // Replace spaces with underscores\n .toLowerCase() // Convert to lowercase\n .trim(); // Trim leading or trailing spaces\n\n return cleanStr;\n }\n\n}\n","import { Component, OnInit, inject } from '@angular/core';\n\nimport { TableSchemaDef } from '../../services/database-manager-services/models/table-schema';\nimport { DatabaseManagerService } from '../../services/database-manager-services';\n\n@Component({\n selector: 'app-database-data-demo',\n templateUrl: './database-data-demo.component.html',\n styleUrls: ['./database-data-demo.component.scss']\n})\nexport class DatabaseDataDemoComponent implements OnInit {\n\n db = inject(DatabaseManagerService)\n\n constructor() { }\n\n ngOnInit() {\n\n const tableDef = TableSchemaDef.adapt({table: 'Sample Table', schema: ['id', 'lastName', 'age']})\n console.log(tableDef)\n\n this.createTable(tableDef).subscribe(() => {\n\n // hasTable\n this.db.hasDatabaseTable('Sample Table').subscribe(data => console.log(data))\n\n // Tables\n this.db.getDatabaseTables().subscribe(data => console.log(data))\n\n // getTable\n this.db.getDatabaseTable('Sample Table').subscribe(data => console.log(data))\n\n // Table Schema\n this.db.getDatabaseTableSchema('Sample Table').subscribe(data => console.log(data))\n\n // Update Table Schema\n // const newTableDef = TableSchemaDef.adapt({table: 'sample', schema: ['id', 'name', 'age', 'amount']})\n // this.db.updateDatabaseTableSchema(newTableDef)\n\n // Insert Table Record\n const record = { id: 12, age: 45, last_name: 'Bonifacio', amount: 1200 }\n\n this.db.createTableRecord('Sample Table', record).subscribe(data => console.log(data))\n\n // Insert Table Records\n const records = [\n { id: 12, age: 12, last_name: 'Bonifacio', amount: 80 },\n { id: 10, age: 15, last_name: 'Johns', amount: 700 },\n { id: 1, age: 22, last_name: 'Kims', amount: 234 },\n { id: 2, age: 45, last_name: 'Harrys', amount: 1200 },\n ]\n\n this.db.createTableRecords('Sample Table', records).subscribe(data => console.log(data))\n\n // Update Table Record\n const recordUpdate = { id: 12, age: 45, last_name: 'Bonifacio', amount: 5000 }\n\n this.db.createTableRecord('Sample Table', record).subscribe(data => console.log(data))\n\n // Update Table Records\n // const recordsUpdate = [\n // { id: 12, age: 12, last_name: 'Bonifacio', amount: 5000 },\n // { id: 10, age: 15, last_name: 'Johns', amount: 5000 },\n // ]\n\n // this.db.updateTableRecords('sample_table', records).subscribe(data => console.log(data))\n\n })\n\n }\n\n createTable(tableDef: TableSchemaDef) {\n return this.db.createDatabaseTable(tableDef)\n }\n\n // CRUD\n findTableRecords(table: string, column: string, value: any) {\n\n }\n\n findTableRecord(table: string, column: string, value: any) {\n\n }\n\n getTableRecords(table: string) {\n\n }\n\n getTableRecord(table: string, id: number) {\n\n }\n\n createTableRecord<T>(table: string, record: T) {\n\n }\n\n updateTableRecord<T>(table: string, record: T) {\n\n }\n\n deleteTableRecord<T>(table: string, id: number) {\n\n }\n\n}\n","<p>\n database-data-demo works!\n</p>\n","/*\n * Public API Surface of http-request-manager\n */\n\nexport * from './lib/index';\nexport * from './lib/http-request-manager.module';\n\nexport * from './lib/http-request-services-demo/http-request-services-demo.component';\n\nexport * from './lib/http-request-services-demo/database-data-demo/database-data-demo.component';\nexport * from './lib/http-request-services-demo/local-storage-demo/local-storage-demo.component';\nexport * from './lib/http-request-services-demo/request-manager-demo/request-manager-demo.component';\nexport * from './lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["catchError","i1","i2","i4","i1.DownloadFileComponent","ClientInfo","AIPrompt","ClientInfoMapper","i3","i14.FileDownloaderComponent","map","tap","i7","i8","i9","i10","i11","i12","i5","i6.RequestManagerStateDemoComponent","i7.RequestManagerDemoComponent","i8.RequestSignalsManagerDemoComponent","i9.LocalStorageDemoComponent","i10.LocalStorageSignalsDemoComponent"],"mappings":"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"}
|